Ejemplo n.º 1
0
        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) }
            };
        }
Ejemplo n.º 2
0
        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);
                }
            }
        }
Ejemplo n.º 3
0
        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();
        }