public override void onKeyDown(object sender, KeyboardKeyEventArgs e) { //base.onKeyDown (sender, e); Key key = e.Key; switch (key) { case Key.Back: buffer.DeleteChar(); break; case Key.Clear: break; case Key.Delete: if (buffer.SelectionIsEmpty) { MoveRight(); } else if (e.Shift) { CurrentInterface.Clipboard = buffer.SelectedText; } buffer.DeleteChar(); break; case Key.Enter: case Key.KeypadEnter: if (!buffer.SelectionIsEmpty) { buffer.DeleteChar(); } buffer.InsertLineBreak(); break; case Key.Escape: buffer.ResetSelection(); break; case Key.Home: if (e.Shift) { if (buffer.SelectionIsEmpty) { buffer.SetSelStartPos(); } if (e.Control) { buffer.CurrentLine = 0; } buffer.CurrentColumn = 0; buffer.SetSelEndPos(); break; } buffer.ResetSelection(); if (e.Control) { buffer.CurrentLine = 0; } buffer.CurrentColumn = 0; break; case Key.End: if (e.Shift) { if (buffer.SelectionIsEmpty) { buffer.SetSelStartPos(); } if (e.Control) { buffer.CurrentLine = int.MaxValue; } buffer.CurrentColumn = int.MaxValue; buffer.SetSelEndPos(); break; } buffer.ResetSelection(); if (e.Control) { buffer.CurrentLine = int.MaxValue; } buffer.CurrentColumn = int.MaxValue; break; case Key.Insert: if (e.Shift) { buffer.Insert(CurrentInterface.Clipboard); } else if (e.Control && !buffer.SelectionIsEmpty) { CurrentInterface.Clipboard = buffer.SelectedText; } break; case Key.Left: if (e.Shift) { if (buffer.SelectionIsEmpty) { buffer.SetSelStartPos(); } if (e.Control) { buffer.GotoWordStart(); } else { MoveLeft(); } buffer.SetSelEndPos(); break; } buffer.ResetSelection(); if (e.Control) { buffer.GotoWordStart(); } else { MoveLeft(); } break; case Key.Right: if (e.Shift) { if (buffer.SelectionIsEmpty) { buffer.SetSelStartPos(); } if (e.Control) { buffer.GotoWordEnd(); } else { MoveRight(); } buffer.SetSelEndPos(); break; } buffer.ResetSelection(); if (e.Control) { buffer.GotoWordEnd(); } else { MoveRight(); } break; case Key.Up: if (e.Shift) { if (buffer.SelectionIsEmpty) { buffer.SetSelStartPos(); } PrintedCurrentLine--; buffer.SetSelEndPos(); break; } buffer.ResetSelection(); PrintedCurrentLine--; break; case Key.Down: if (e.Shift) { if (buffer.SelectionIsEmpty) { buffer.SetSelStartPos(); } PrintedCurrentLine++; buffer.SetSelEndPos(); break; } buffer.ResetSelection(); PrintedCurrentLine++; break; case Key.Menu: break; case Key.NumLock: break; case Key.PageDown: if (e.Shift) { if (buffer.SelectionIsEmpty) { buffer.SetSelStartPos(); } PrintedCurrentLine += visibleLines; buffer.SetSelEndPos(); break; } buffer.ResetSelection(); PrintedCurrentLine += visibleLines; break; case Key.PageUp: if (e.Shift) { if (buffer.SelectionIsEmpty) { buffer.SetSelStartPos(); } PrintedCurrentLine -= visibleLines; buffer.SetSelEndPos(); break; } buffer.ResetSelection(); PrintedCurrentLine -= visibleLines; break; case Key.RWin: break; case Key.Tab: buffer.Insert("\t"); break; case Key.F8: toogleFolding(buffer.CurrentLine); // if (parser != null) // reparseSource (); break; default: break; } RegisterForGraphicUpdate(); }
public override void onKeyDown(object sender, KeyEventArgs e) { //base.onKeyDown (sender, e); Key key = e.Key; if (IFace.Ctrl) { switch (key) { case Key.S: projFile.Save(); break; case Key.Z: editorMutex.EnterWriteLock(); if (IFace.Shift) { projFile.Redo(null); } else { projFile.Undo(null); } editorMutex.ExitWriteLock(); break; default: Console.WriteLine(""); break; } } switch (key) { case Key.Backspace: buffer.DeleteChar(); break; case Key.Delete: if (buffer.SelectionIsEmpty) { MoveRight(); } else if (IFace.Shift) { IFace.Clipboard = buffer.SelectedText; } buffer.DeleteChar(); break; case Key.Enter: case Key.KeypadEnter: if (!buffer.SelectionIsEmpty) { buffer.DeleteChar(); } buffer.InsertLineBreak(); break; case Key.Escape: buffer.ResetSelection(); break; case Key.Home: if (IFace.Shift) { if (buffer.SelectionIsEmpty) { buffer.SetSelStartPos(); } if (IFace.Ctrl) { buffer.CurrentLine = 0; } buffer.CurrentColumn = 0; buffer.SetSelEndPos(); break; } buffer.ResetSelection(); if (IFace.Ctrl) { buffer.CurrentLine = 0; } buffer.CurrentColumn = 0; break; case Key.End: if (IFace.Shift) { if (buffer.SelectionIsEmpty) { buffer.SetSelStartPos(); } if (IFace.Ctrl) { buffer.CurrentLine = int.MaxValue; } buffer.CurrentColumn = int.MaxValue; buffer.SetSelEndPos(); break; } buffer.ResetSelection(); if (IFace.Ctrl) { buffer.CurrentLine = int.MaxValue; } buffer.CurrentColumn = int.MaxValue; break; case Key.Insert: if (IFace.Shift) { buffer.Insert(IFace.Clipboard); } else if (IFace.Ctrl && !buffer.SelectionIsEmpty) { IFace.Clipboard = buffer.SelectedText; } break; case Key.Left: if (IFace.Shift) { if (buffer.SelectionIsEmpty) { buffer.SetSelStartPos(); } if (IFace.Ctrl) { buffer.GotoWordStart(); } else { MoveLeft(); } buffer.SetSelEndPos(); break; } buffer.ResetSelection(); if (IFace.Ctrl) { buffer.GotoWordStart(); } else { MoveLeft(); } break; case Key.Right: if (IFace.Shift) { if (buffer.SelectionIsEmpty) { buffer.SetSelStartPos(); } if (IFace.Ctrl) { buffer.GotoWordEnd(); } else { MoveRight(); } buffer.SetSelEndPos(); break; } buffer.ResetSelection(); if (IFace.Ctrl) { buffer.GotoWordEnd(); } else { MoveRight(); } break; case Key.Up: if (IFace.Shift) { if (buffer.SelectionIsEmpty) { buffer.SetSelStartPos(); } PrintedCurrentLine--; buffer.SetSelEndPos(); break; } buffer.ResetSelection(); PrintedCurrentLine--; break; case Key.Down: if (IFace.Shift) { if (buffer.SelectionIsEmpty) { buffer.SetSelStartPos(); } PrintedCurrentLine++; buffer.SetSelEndPos(); break; } buffer.ResetSelection(); PrintedCurrentLine++; break; case Key.Menu: break; case Key.PageDown: if (IFace.Shift) { if (buffer.SelectionIsEmpty) { buffer.SetSelStartPos(); } PrintedCurrentLine += visibleLines; buffer.SetSelEndPos(); break; } buffer.ResetSelection(); PrintedCurrentLine += visibleLines; break; case Key.PageUp: if (IFace.Shift) { if (buffer.SelectionIsEmpty) { buffer.SetSelStartPos(); } PrintedCurrentLine -= visibleLines; buffer.SetSelEndPos(); break; } buffer.ResetSelection(); PrintedCurrentLine -= visibleLines; break; case Key.Tab: if (IFace.Shift) { if (buffer.SelectionIsEmpty || (buffer.SelectionStart.Y == buffer.SelectionEnd.Y)) { //TODO break; } for (int i = buffer.SelectionStart.Y; i <= buffer.SelectionEnd.Y; i++) { buffer.RemoveLeadingTab(i); } buffer.SetSelectionOnFullLines(); } else { if (buffer.SelectionIsEmpty || (buffer.SelectionStart.Y == buffer.SelectionEnd.Y)) { buffer.Insert("\t"); break; } for (int i = buffer.SelectionStart.Y; i <= buffer.SelectionEnd.Y; i++) { buffer.UpdateLine(i, "\t" + buffer [i].Content); } } break; case Key.F8: toogleFolding(buffer.CurrentLine); break; default: break; } RegisterForGraphicUpdate(); }