private void createAlgorithmList() { var lyrics = BindableLyrics.ToArray(); caretMovingAlgorithmSet = new Dictionary <Mode, ICaretPositionAlgorithm> { { Mode.EditMode, new CuttingCaretPositionAlgorithm(lyrics) }, { Mode.TypingMode, new TypingCaretPositionAlgorithm(lyrics) }, { Mode.RecordMode, new TimeTagCaretPositionAlgorithm(lyrics) { Mode = RecordingMovingCaretMode } }, { Mode.TimeTagEditMode, new TimeTagIndexCaretPositionAlgorithm(lyrics) } }; }
private void initialCaretPositionAlgorithm() { var lyrics = BindableLyrics.ToArray(); algorithm = getAlgorithmByMode(Mode); ICaretPositionAlgorithm getAlgorithmByMode(LyricEditorMode mode) { switch (mode) { case LyricEditorMode.Manage: return(new CuttingCaretPositionAlgorithm(lyrics)); case LyricEditorMode.Typing: return(new TypingCaretPositionAlgorithm(lyrics)); case LyricEditorMode.EditRubyRomaji: return(new NavigateCaretPositionAlgorithm(lyrics)); case LyricEditorMode.CreateTimeTag: return(new TimeTagIndexCaretPositionAlgorithm(lyrics)); case LyricEditorMode.RecordTimeTag: return(new TimeTagCaretPositionAlgorithm(lyrics) { Mode = RecordingMovingCaretMode }); case LyricEditorMode.AdjustTimeTag: case LyricEditorMode.CreateNote: case LyricEditorMode.CreateNotePosition: case LyricEditorMode.AdjustNote: case LyricEditorMode.Layout: case LyricEditorMode.Singer: return(new NavigateCaretPositionAlgorithm(lyrics)); default: return(null); } } }
private void load(EditorBeatmap beatmap) { // load lyric in here var lyrics = OrderUtils.Sorted(beatmap.HitObjects.OfType <Lyric>()); BindableLyrics.AddRange(lyrics); // need to check is there any lyric added or removed. beatmap.HitObjectAdded += e => { if (e is Lyric lyric) { var previousLyric = BindableLyrics.LastOrDefault(x => x.Order < lyric.Order); if (previousLyric != null) { var insertIndex = BindableLyrics.IndexOf(previousLyric) + 1; BindableLyrics.Insert(insertIndex, lyric); } else { // insert to first. BindableLyrics.Insert(0, lyric); } createAlgorithmList(); } }; beatmap.HitObjectRemoved += e => { if (e is Lyric lyric) { BindableLyrics.Remove(lyric); createAlgorithmList(); } }; // create algorithm set createAlgorithmList(); }