private void HandleUpArrow(ObservableCollection <string> document, SubmissionView view) { if (view.CurrentLine > 0) { view.CurrentLine--; } }
private void HandleBackspace(ObservableCollection <string> document, SubmissionView view) { 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--; document[view.CurrentLine] = previousLine + currentLine; view.CurrentCharacter = previousLine.Length; } else { var line = document[view.CurrentLine]; var before = line.Substring(0, start - 1); var after = line.Substring(start); document[view.CurrentLine] = before + after; view.CurrentCharacter--; } }
private void HandleLeftArrow(ObservableCollection <string> document, SubmissionView view) { if (view.CurrentCharacter > 0) { view.CurrentCharacter--; } }
private void HandleEscape(ObservableCollection <string> document, SubmissionView view) { document.Clear(); document.Add(string.Empty); view.CurrentLine = 0; view.CurrentCharacter = 0; }
private void HandleTyping(ObservableCollection <string> document, SubmissionView view, string text) { var lineIndex = view.CurrentLine; var start = view.CurrentCharacter; document[lineIndex] = document[lineIndex].Insert(start, text); view.CurrentCharacter += text.Length; }
private void HandlePageDown(ObservableCollection <string> document, SubmissionView view) { submissionHistoryIndex++; if (submissionHistoryIndex > submissionHistory.Count - 1) { submissionHistoryIndex = 0; } UpdateDocumentFromHistory(document, view); }
private void HandlePageUp(ObservableCollection <string> document, SubmissionView view) { submissionHistoryIndex--; if (submissionHistoryIndex < 0) { submissionHistoryIndex = submissionHistory.Count - 1; } UpdateDocumentFromHistory(document, view); }
private void HandleDownArrow(ObservableCollection <string> document, SubmissionView view) { var totalLines = document.Count; if (view.CurrentLine < totalLines - 1) { view.CurrentLine++; } }
private void HandleRightArrow(ObservableCollection <string> document, SubmissionView view) { var lineWidth = document[view.CurrentLine].Length; if (view.CurrentCharacter <= lineWidth - 1) { view.CurrentCharacter++; } }
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; }
private void HandleEnter(ObservableCollection <string> document, SubmissionView view) { var submissionText = string.Join(Environment.NewLine, document); if (submissionText.StartsWith("#")) // || IsCompleteSubmission(submissionText)) { done = true; return; } InsertLine(document, view); }
private 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; }
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(); return(string.Join(Environment.NewLine, document)); }
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[lineIndex + 1]; document[view.CurrentLine] += nextLine; document.RemoveAt(view.CurrentLine + 1); } else { var before = line.Substring(0, start); var after = line.Substring(start + 1); document[lineIndex] = before + after; } }
private void HandleControlEnter(ObservableCollection <string> document, SubmissionView view) { done = true; }
private void UpdateDocumentFromHistory(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.CurrentLine = document.Count - 1; view.CurrentCharacter = document[view.CurrentLine].Length; }
private void HandleHome(ObservableCollection <string> document, SubmissionView view) { view.CurrentCharacter = 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; } } else if (key.Modifiers == ConsoleModifiers.Control) { switch (key.Key) { case ConsoleKey.Enter: HandleControlEnter(document, view); break; } } if (key.Key != ConsoleKey.Backspace && key.KeyChar >= ' ') { HandleTyping(document, view, key.KeyChar.ToString()); } }
private void HandleEnd(ObservableCollection <string> document, SubmissionView view) { view.CurrentCharacter = document[view.CurrentLine].Length; }