Beispiel #1
0
 private void HandleLeftArrow(ObservableCollection <string> document, SubmissionView view)
 {
     if (view.CurrentCharacter > 0)
     {
         view.CurrentCharacter--;
     }
 }
Beispiel #2
0
        private void HandleDelete(ObservableCollection <string> document, SubmissionView view)
        {
            var lineIndex = view.CurrentLine;
            var line      = document[lineIndex];
            var start     = view.CurrentCharacter;

            if (start >= line.Length)
            {
                if (view.CurrentLine == document.Count - 1)
                {
                    return;
                }

                var nextLine = document[view.CurrentLine + 1];
                document[view.CurrentLine] += nextLine;
                document.RemoveAt(view.CurrentLine + 1);

                return;
            }

            var before = line.Substring(0, start);
            var after  = line.Substring(start + 1);

            document[lineIndex] = before + after;
        }
Beispiel #3
0
        private string EditSubmission()
        {
            done = false;
            var document = new ObservableCollection <string>()
            {
                ""
            };
            var view = new SubmissionView(RenderLine, document);

            while (!done)
            {
                var key = Console.ReadKey(true);
                HandleKey(key, document, view);
            }

            view.CurrentLine      = document.Count - 1;
            view.CurrentCharacter = document[view.CurrentLine].Length;

            Console.WriteLine();

            if (document.Count == 1 && document[0].Length == 0)
            {
                return(null);
            }

            return(string.Join(Environment.NewLine, document));
        }
Beispiel #4
0
 private void HandleDownArrow(ObservableCollection <string> document, SubmissionView view)
 {
     if (view.CurrentLine < document.Count - 1)
     {
         view.CurrentLine++;
     }
 }
Beispiel #5
0
 private void HandleUpArrow(ObservableCollection <string> document, SubmissionView view)
 {
     if (view.CurrentLine > 0)
     {
         view.CurrentLine--;
     }
 }
Beispiel #6
0
        private void HandleEnd(ObservableCollection <string> document, SubmissionView view)
        {
            var lineIndex = view.CurrentLine;
            var line      = document[lineIndex];

            view.CurrentCharacter = line.Length;
        }
Beispiel #7
0
        private void HandleBackspace(ObservableCollection <string> document, SubmissionView view)
        {
            var lineIndex = view.CurrentLine;
            var start     = view.CurrentCharacter;

            if (start == 0)
            {
                if (view.CurrentLine == 0)
                {
                    return;
                }

                var currentLine  = document[view.CurrentLine];
                var previousLine = document[view.CurrentLine - 1];
                document.RemoveAt(view.CurrentLine);
                view.CurrentLine--;
                view.CurrentCharacter      = document[view.CurrentLine].Length;
                document[view.CurrentLine] = previousLine + currentLine;

                return;
            }

            var line = document[lineIndex];

            var before = line.Substring(0, start - 1);
            var after  = line.Substring(start);

            document[lineIndex] = before + after;
            view.CurrentCharacter--;
        }
Beispiel #8
0
 private void HandleEscape(ObservableCollection <string> document, SubmissionView view)
 {
     document.Clear();
     document.Add(string.Empty);
     view.CurrentLine      = 0;
     view.CurrentCharacter = 0;
 }
Beispiel #9
0
        private void HandleTyping(ObservableCollection <string> document, SubmissionView view, string text)
        {
            var lineIndex = view.CurrentLine;

            document[lineIndex]    = document[lineIndex].Insert(view.CurrentCharacter, text);
            view.CurrentCharacter += text.Length;
        }
Beispiel #10
0
        private void HandleRightArrow(ObservableCollection <string> document, SubmissionView view)
        {
            var line = document[view.CurrentLine];

            if (view.CurrentCharacter < line.Length)
            {
                view.CurrentCharacter++;
            }
        }
Beispiel #11
0
 private void HandlePageUp(ObservableCollection <string> document, SubmissionView view)
 {
     submissionHistoryIndex--;
     if (submissionHistoryIndex < 0)
     {
         submissionHistoryIndex = submissionHistory.Count - 1;
     }
     UpdateDocumentFromHistory(document, view);
 }
Beispiel #12
0
 private void HandlePageDown(ObservableCollection <string> document, SubmissionView view)
 {
     submissionHistoryIndex++;
     if (submissionHistoryIndex >= submissionHistory.Count)
     {
         submissionHistoryIndex = 0;
     }
     UpdateDocumentFromHistory(document, view);
 }
Beispiel #13
0
        private void HandleTab(ObservableCollection <string> document, SubmissionView view)
        {
            const int TabWidth        = 4;
            var       start           = view.CurrentCharacter;
            var       remainingSpaces = TabWidth - (start % TabWidth);
            var       line            = document[view.CurrentLine];

            document[view.CurrentLine] = line.Insert(start, new string(' ', remainingSpaces));
            view.CurrentCharacter     += remainingSpaces;
        }
Beispiel #14
0
        private void HandlePageDown(ObservableCollection <string> document, SubmissionView view)
        {
            _submissionHistoryIndex++;

            if (_submissionHistoryIndex > _submissionHistory.Count - 1)
            {
                // _submissionHistoryIndex = 0;
                _submissionHistoryIndex = _submissionHistory.Count - 1;
            }
            UpdateDocumentHistory(document, view);
        }
Beispiel #15
0
        private void HandleEnter(ObservableCollection <string> document, SubmissionView view)
        {
            var docText = string.Join(Environment.NewLine, document);

            if (docText.StartsWith("#") || IsCompleteSubmission(docText))
            {
                done = true;
                return;
            }

            InsertLine(document, view);
        }
Beispiel #16
0
        private static void InsertLine(ObservableCollection <string> document, SubmissionView view)
        {
            var remainder = document[view.CurrentLine].Substring(view.CurrentCharacter);

            document[view.CurrentLine] = document[view.CurrentLine].Substring(0, view.CurrentCharacter);

            var lineIndex = view.CurrentLine + 1;

            document.Insert(lineIndex, remainder);
            view.CurrentCharacter = 0;
            view.CurrentLine      = lineIndex;
        }
Beispiel #17
0
        private void HandleEnter(ObservableCollection <string> document, SubmissionView view)
        {
            var submissionText = string.Join(Environment.NewLine, document);

            if (submissionText.StartsWith(this.MetaCommandIdentifier) || this.IsCompleteSubmission(submissionText))
            {
                this.IsDone = true;

                return;
            }

            InsertLine(document, view);
        }
Beispiel #18
0
        private void UpdateDocumentHistory(ObservableCollection <string> document, SubmissionView view)
        {
            if (_submissionHistory.Count == 0)
            {
                return;
            }

            document.Clear();
            var historyItem = _submissionHistory[_submissionHistoryIndex];
            var lines       = historyItem.Split(Environment.NewLine);

            foreach (var line in lines)
            {
                document.Add(line);
            }

            view.CurrentLineIndex      = document.Count - 1;
            view.CurrentCharacterIndex = document[view.CurrentLineIndex].Length;
        }
Beispiel #19
0
        private string EditSubmission()
        {
            _done = false;

            var document = new ObservableCollection <string> {
                ""
            };
            var view = new SubmissionView(Render, document);

            while (!_done)
            {
                var key = Console.ReadKey(true);
                HandleKey(key, document, view);
            }

            view.CurrentLineIndex      = document.Count - 1;
            view.CurrentCharacterIndex = document[view.CurrentLineIndex].Length;
            Console.WriteLine();

            return(string.Join(Environment.NewLine, document));
        }
Beispiel #20
0
 private void HandleEscape(ObservableCollection <string> document, SubmissionView view)
 {
     document[view.CurrentLine] = string.Empty;
     view.CurrentCharacter      = 0;
 }
Beispiel #21
0
        private void UpdateDocumentFromHistory(ObservableCollection <string> document, SubmissionView view)
        {
            if (!this.SubmissionHistory.Any())
            {
                return;
            }

            document.Clear();

            var historyItem = this.SubmissionHistory[this.SubmissionHistoryIndex];

            foreach (var line in historyItem.Split(Environment.NewLine))
            {
                document.Add(line);
            }

            view.CurrentLine      = document.Count - 1;
            view.CurrentCharacter = document[view.CurrentLine].Length;
        }
Beispiel #22
0
 private void HandleHome(ObservableCollection <string> document, SubmissionView view)
 {
     view.CurrentCharacter = 0;
 }
Beispiel #23
0
 private void HandleEnd(ObservableCollection <string> document, SubmissionView view)
 {
     view.CurrentCharacterIndex = document[view.CurrentLineIndex].Length;
 }
Beispiel #24
0
 private void HandleCtrlEnter(ObservableCollection <string> document, SubmissionView view)
 {
     InsertLine(document, view);
     _done = true;
 }
Beispiel #25
0
        private void HandleKey(ConsoleKeyInfo key, ObservableCollection <string> document, SubmissionView view)
        {
            if (key.Modifiers == default(ConsoleModifiers))
            {
                switch (key.Key)
                {
                case ConsoleKey.Escape:
                    HandleEscape(document, view);
                    break;

                case ConsoleKey.Enter:
                    HandleEnter(document, view);
                    break;

                case ConsoleKey.LeftArrow:
                    HandleLeftArrow(document, view);
                    break;

                case ConsoleKey.RightArrow:
                    HandleRightArrow(document, view);
                    break;

                case ConsoleKey.UpArrow:
                    HandleUpArrow(document, view);
                    break;

                case ConsoleKey.DownArrow:
                    HandleDownArrow(document, view);
                    break;

                case ConsoleKey.Backspace:
                    HandleBackspace(document, view);
                    break;

                case ConsoleKey.Delete:
                    HandleDelete(document, view);
                    break;

                case ConsoleKey.Home:
                    HandleHome(document, view);
                    break;

                case ConsoleKey.End:
                    HandleEnd(document, view);
                    break;

                case ConsoleKey.Tab:
                    HandleTab(document, view);
                    break;

                case ConsoleKey.PageUp:
                    HandlePageUp(document, view);
                    break;

                case ConsoleKey.PageDown:
                    HandlePageDown(document, view);
                    break;

                default:

                    break;
                }
            }
            else if (key.Modifiers == ConsoleModifiers.Control)
            {
                switch (key.Key)
                {
                case ConsoleKey.Enter:
                    HandleControlEnter(document, view);
                    break;
                }
            }

            if (key.KeyChar >= ' ')
            {
                HandleTyping(document, view, key.KeyChar.ToString());
            }
        }
Beispiel #26
0
 private void HandleControlEnter(ObservableCollection <string> document, SubmissionView view)
 {
     InsertLine(document, view);
 }