/* TextEditor::onKeyDown * Called when a key is pressed *******************************************************************/ void TextEditor::onKeyDown(wxKeyEvent& e) { // Check if keypress matches any keybinds wxArrayString binds = KeyBind::getBinds(KeyBind::asKeyPress(e.GetKeyCode(), e.GetModifiers())); // Go through matching binds bool handled = false; for (unsigned a = 0; a < binds.size(); a++) { string name = binds[a]; // Open/update calltip if (name == "ted_calltip") { updateCalltip(); handled = true; } // Autocomplete else if (name == "ted_autocomplete") { // Get word before cursor string word = GetTextRange(WordStartPosition(GetCurrentPos(), true), GetCurrentPos()); // If a language is loaded, bring up autocompletion list if (language) { autocomp_list = language->getAutocompletionList(word); AutoCompShow(word.size(), autocomp_list); } handled = true; } // Find/replace else if (name == "ted_findreplace") { showFindReplaceDialog(); handled = true; } // Find next else if (name == "ted_findnext") { wxCommandEvent e; onFRDBtnFindNext(e); handled = true; } // Jump to else if (name == "ted_jumpto") { openJumpToDialog(); handled = true; } } #ifdef __WXMSW__ Colourise(GetCurrentPos(), GetLineEndPosition(GetCurrentLine())); #endif #ifdef __APPLE__ if (!handled) { const int keyCode = e.GetKeyCode(); const bool shiftDown = e.ShiftDown(); if (e.ControlDown()) { if (WXK_LEFT == keyCode) { if (shiftDown) { HomeExtend(); } else { Home(); } handled = true; } else if (WXK_RIGHT == keyCode) { if (shiftDown) { LineEndExtend(); } else { LineEnd(); } handled = true; } else if (WXK_UP == keyCode) { if (shiftDown) { DocumentStartExtend(); } else { DocumentStart(); } handled = true; } else if (WXK_DOWN == keyCode) { if (shiftDown) { DocumentEndExtend(); } else { DocumentEnd(); } handled = true; } } else if (e.RawControlDown()) { if (WXK_LEFT == keyCode) { if (shiftDown) { WordLeftExtend(); } else { WordLeft(); } handled = true; } else if (WXK_RIGHT == keyCode) { if (shiftDown) { WordRightExtend(); } else { WordRight(); } handled = true; } } } #endif // __APPLE__ if (!handled) e.Skip(); }
wxString KeyEventToKeyString(const wxKeyEvent & event) { wxString newStr = wxT(""); long key = event.GetKeyCode(); if (event.ControlDown()) newStr += wxT("Ctrl+"); if (event.AltDown()) newStr += wxT("Alt+"); if (event.ShiftDown()) newStr += wxT("Shift+"); #if defined(__WXMAC__) if (event.RawControlDown()) newStr += wxT("XCtrl+"); #endif if (event.RawControlDown() && key >= 1 && key <= 26) newStr += (wxChar)(64 + key); else if (key >= 33 && key <= 126) newStr += (wxChar)key; else { switch(key) { case WXK_BACK: newStr += wxT("Backspace"); break; case WXK_DELETE: newStr += wxT("Delete"); break; case WXK_SPACE: newStr += wxT("Space"); break; case WXK_TAB: newStr += wxT("Tab"); break; case WXK_RETURN: newStr += wxT("Return"); break; case WXK_PAGEUP: newStr += wxT("PageUp"); break; case WXK_PAGEDOWN: newStr += wxT("PageDown"); break; case WXK_END: newStr += wxT("End"); break; case WXK_HOME: newStr += wxT("Home"); break; case WXK_LEFT: newStr += wxT("Left"); break; case WXK_UP: newStr += wxT("Up"); break; case WXK_RIGHT: newStr += wxT("Right"); break; case WXK_DOWN: newStr += wxT("Down"); break; case WXK_ESCAPE: newStr += wxT("Escape"); break; case WXK_INSERT: newStr += wxT("Insert"); break; case WXK_NUMPAD0: newStr += wxT("NUMPAD0"); break; case WXK_NUMPAD1: newStr += wxT("NUMPAD1"); break; case WXK_NUMPAD2: newStr += wxT("NUMPAD2"); break; case WXK_NUMPAD3: newStr += wxT("NUMPAD3"); break; case WXK_NUMPAD4: newStr += wxT("NUMPAD4"); break; case WXK_NUMPAD5: newStr += wxT("NUMPAD5"); break; case WXK_NUMPAD6: newStr += wxT("NUMPAD6"); break; case WXK_NUMPAD7: newStr += wxT("NUMPAD7"); break; case WXK_NUMPAD8: newStr += wxT("NUMPAD8"); break; case WXK_NUMPAD9: newStr += wxT("NUMPAD9"); break; case WXK_MULTIPLY: newStr += wxT("*"); break; case WXK_ADD: newStr += wxT("+"); break; case WXK_SUBTRACT: newStr += wxT("-"); break; case WXK_DECIMAL: newStr += wxT("."); break; case WXK_DIVIDE: newStr += wxT("/"); break; case WXK_F1: newStr += wxT("F1"); break; case WXK_F2: newStr += wxT("F2"); break; case WXK_F3: newStr += wxT("F3"); break; case WXK_F4: newStr += wxT("F4"); break; case WXK_F5: newStr += wxT("F5"); break; case WXK_F6: newStr += wxT("F6"); break; case WXK_F7: newStr += wxT("F7"); break; case WXK_F8: newStr += wxT("F8"); break; case WXK_F9: newStr += wxT("F9"); break; case WXK_F10: newStr += wxT("F10"); break; case WXK_F11: newStr += wxT("F11"); break; case WXK_F12: newStr += wxT("F12"); break; case WXK_F13: newStr += wxT("F13"); break; case WXK_F14: newStr += wxT("F14"); break; case WXK_F15: newStr += wxT("F15"); break; case WXK_F16: newStr += wxT("F16"); break; case WXK_F17: newStr += wxT("F17"); break; case WXK_F18: newStr += wxT("F18"); break; case WXK_F19: newStr += wxT("F19"); break; case WXK_F20: newStr += wxT("F20"); break; case WXK_F21: newStr += wxT("F21"); break; case WXK_F22: newStr += wxT("F22"); break; case WXK_F23: newStr += wxT("F23"); break; case WXK_F24: newStr += wxT("F24"); break; case WXK_NUMPAD_ENTER: newStr += wxT("NUMPAD_ENTER"); break; case WXK_NUMPAD_F1: newStr += wxT("NUMPAD_F1"); break; case WXK_NUMPAD_F2: newStr += wxT("NUMPAD_F2"); break; case WXK_NUMPAD_F3: newStr += wxT("NUMPAD_F3"); break; case WXK_NUMPAD_F4: newStr += wxT("NUMPAD_F4"); break; case WXK_NUMPAD_HOME: newStr += wxT("NUMPAD_HOME"); break; case WXK_NUMPAD_LEFT: newStr += wxT("NUMPAD_LEFT"); break; case WXK_NUMPAD_UP: newStr += wxT("NUMPAD_UP"); break; case WXK_NUMPAD_RIGHT: newStr += wxT("NUMPAD_RIGHT"); break; case WXK_NUMPAD_DOWN: newStr += wxT("NUMPAD_DOWN"); break; case WXK_NUMPAD_PAGEUP: newStr += wxT("NUMPAD_PAGEUP"); break; case WXK_NUMPAD_PAGEDOWN: newStr += wxT("NUMPAD_PAGEDOWN"); break; case WXK_NUMPAD_END: newStr += wxT("NUMPAD_END"); break; case WXK_NUMPAD_BEGIN: newStr += wxT("NUMPAD_HOME"); break; case WXK_NUMPAD_INSERT: newStr += wxT("NUMPAD_INSERT"); break; case WXK_NUMPAD_DELETE: newStr += wxT("NUMPAD_DELETE"); break; case WXK_NUMPAD_EQUAL: newStr += wxT("NUMPAD_EQUAL"); break; case WXK_NUMPAD_MULTIPLY: newStr += wxT("NUMPAD_MULTIPLY"); break; case WXK_NUMPAD_ADD: newStr += wxT("NUMPAD_ADD"); break; case WXK_NUMPAD_SUBTRACT: newStr += wxT("NUMPAD_SUBTRACT"); break; case WXK_NUMPAD_DECIMAL: newStr += wxT("NUMPAD_DECIMAL"); break; case WXK_NUMPAD_DIVIDE: newStr += wxT("NUMPAD_DIVIDE"); break; default: return wxT(""); // Don't do anything if we don't recognize the key } } return KeyStringNormalize(newStr); }
/* TextEditor::onKeyDown * Called when a key is pressed *******************************************************************/ void TextEditor::onKeyDown(wxKeyEvent& e) { // Check if keypress matches any keybinds wxArrayString binds = KeyBind::getBinds(KeyBind::asKeyPress(e.GetKeyCode(), e.GetModifiers())); // Go through matching binds bool handled = false; for (unsigned a = 0; a < binds.size(); a++) { string name = binds[a]; // Open/update calltip if (name == "ted_calltip") { updateCalltip(); handled = true; } // Autocomplete else if (name == "ted_autocomplete") { // Get word before cursor string word = GetTextRange(WordStartPosition(GetCurrentPos(), true), GetCurrentPos()); // If a language is loaded, bring up autocompletion list if (language) { autocomp_list = language->getAutocompletionList(word); AutoCompShow(word.size(), autocomp_list); } handled = true; } // Find/replace else if (name == "ted_findreplace") { showFindReplacePanel(); handled = true; } // Find next else if (name == "ted_findnext") { if (panel_fr && panel_fr->IsShown()) findNext(panel_fr->getFindText(), panel_fr->getFindFlags()); handled = true; } // Find previous else if (name == "ted_findprev") { if (panel_fr && panel_fr->IsShown()) findPrev(panel_fr->getFindText(), panel_fr->getFindFlags()); handled = true; } // Replace next else if (name == "ted_replacenext") { if (panel_fr && panel_fr->IsShown()) replaceCurrent(panel_fr->getFindText(), panel_fr->getReplaceText(), panel_fr->getFindFlags()); handled = true; } // Replace all else if (name == "ted_replaceall") { if (panel_fr && panel_fr->IsShown()) replaceAll(panel_fr->getFindText(), panel_fr->getReplaceText(), panel_fr->getFindFlags()); handled = true; } // Fold all else if (name == "ted_fold_foldall") { foldAll(true); handled = true; } // Unfold all else if (name == "ted_fold_unfoldall") { foldAll(false); handled = true; } // Jump to line else if (name == "ted_jumptoline") { jumpToLine(); handled = true; } } // Check for esc key if (!handled && e.GetKeyCode() == WXK_ESCAPE) { // Hide call tip if showing if (call_tip->IsShown()) call_tip->Show(false); // Hide F+R panel if showing else if (panel_fr && panel_fr->IsShown()) showFindReplacePanel(false); } // Check for up/down keys while calltip with multiple arg sets is open if (call_tip->IsShown() && ct_function && ct_function->nArgSets() > 1 && !ct_dwell) { if (e.GetKeyCode() == WXK_UP) { call_tip->prevArgSet(); handled = true; } else if (e.GetKeyCode() == WXK_DOWN) { call_tip->nextArgSet(); handled = true; } } #ifdef __WXMSW__ Colourise(GetCurrentPos(), GetLineEndPosition(GetCurrentLine())); #endif #ifdef __APPLE__ if (!handled) { const int keyCode = e.GetKeyCode(); const bool shiftDown = e.ShiftDown(); if (e.ControlDown()) { if (WXK_LEFT == keyCode) { if (shiftDown) { HomeExtend(); } else { Home(); } handled = true; } else if (WXK_RIGHT == keyCode) { if (shiftDown) { LineEndExtend(); } else { LineEnd(); } handled = true; } else if (WXK_UP == keyCode) { if (shiftDown) { DocumentStartExtend(); } else { DocumentStart(); } handled = true; } else if (WXK_DOWN == keyCode) { if (shiftDown) { DocumentEndExtend(); } else { DocumentEnd(); } handled = true; } } else if (e.RawControlDown()) { if (WXK_LEFT == keyCode) { if (shiftDown) { WordLeftExtend(); } else { WordLeft(); } handled = true; } else if (WXK_RIGHT == keyCode) { if (shiftDown) { WordRightExtend(); } else { WordRight(); } handled = true; } } } #endif // __APPLE__ if (!handled) e.Skip(); }