void wxVListBoxComboPopup::OnKey(wxKeyEvent& event) { // Hide popup if certain key or key combination was pressed if ( m_combo->IsKeyPopupToggle(event) ) { StopPartialCompletion(); Dismiss(); } else if ( event.AltDown() ) { // On both wxGTK and wxMSW, pressing Alt down seems to // completely freeze things in popup (ie. arrow keys and // enter won't work). return; } // Select item if ENTER is pressed else if ( event.GetKeyCode() == WXK_RETURN || event.GetKeyCode() == WXK_NUMPAD_ENTER ) { DismissWithEvent(); } else { int comboStyle = m_combo->GetWindowStyle(); int keycode = event.GetKeyCode(); // Process partial completion key codes here, but not the arrow keys as the base class will do that for us if ((comboStyle & wxCB_READONLY) && (keycode >= WXK_SPACE) && (keycode <=255) && (keycode != WXK_DELETE) && wxIsprint(keycode)) { OnComboKeyEvent(event); SetSelection(m_value); // ensure the highlight bar moves } else event.Skip(); } }
wxString wxAcceleratorEntry::ToString() const { wxString text; int flags = GetFlags(); if ( flags & wxACCEL_ALT ) text += _("Alt+"); if ( flags & wxACCEL_CTRL ) text += _("Ctrl+"); if ( flags & wxACCEL_SHIFT ) text += _("Shift+"); #if defined(__WXMAC__) || defined(__WXCOCOA__) if ( flags & wxACCEL_RAW_CTRL ) text += _("RawCtrl+"); #endif const int code = GetKeyCode(); if ( code >= WXK_F1 && code <= WXK_F12 ) text << _("F") << code - WXK_F1 + 1; else if ( code >= WXK_NUMPAD0 && code <= WXK_NUMPAD9 ) text << _("KP_") << code - WXK_NUMPAD0; else if ( code >= WXK_SPECIAL1 && code <= WXK_SPECIAL20 ) text << _("SPECIAL") << code - WXK_SPECIAL1 + 1; else // check the named keys { size_t n; for ( n = 0; n < WXSIZEOF(wxKeyNames); n++ ) { const wxKeyName& kn = wxKeyNames[n]; if ( code == kn.code ) { text << wxGetTranslation(kn.name); break; } } if ( n == WXSIZEOF(wxKeyNames) ) { // must be a simple key if ( #if !wxUSE_UNICODE // we can't call wxIsalnum() for non-ASCII characters in ASCII // build as they're only defined for the ASCII range (or EOF) wxIsascii(code) && #endif // ANSI wxIsprint(code) ) { text << (wxChar)code; } else { wxFAIL_MSG( wxT("unknown keyboard accelerator code") ); } } } return text; }
bool SQLCommandPanel::IsBlobColumn(const wxString &str) { for(size_t i=0; i<str.Len(); i++) { if(!wxIsprint(str.GetChar(i))) { return true; } } return false; }
// DateCtrl void DateCtrl::OnChar(wxKeyEvent& event) { size_t keycode = event.GetKeyCode(); size_t point = GetInsertionPoint(); wxString value = GetValue(); long from, to; GetSelection(&from, &to); if ( from != to ) { value = DATE_PATTERN; } if ( WXK_BACK == keycode ) { size_t prevPoint = point - 1; if ( prevPoint >= 0 && prevPoint != 4 && prevPoint != 7 && value.Length() == 10 ) { value[prevPoint] = 32; SetValue(value); size_t prevPrev = prevPoint - 1; if ( prevPrev == 4 || prevPrev == 7 ) { SetInsertionPoint(prevPrev); } else { SetInsertionPoint(prevPoint); } } } else if ( WXK_DELETE == keycode ) { if ( point != 4 && point != 7 && value.Length() == 10 ) { value[point] = 32; SetValue(value); SetInsertionPoint(point); } } else if ( !wxIsprint((int)keycode) ) { event.Skip(); } else if ( point >= 10 ) { event.Skip(); } else { if ( point == 4 || point == 7 ) { point++; } // compatibility with pattern must be here if ( value.Length() != 10 ) { value = DATE_PATTERN; } if ( wxIsdigit((int)keycode) ) { value[point] = event.GetKeyCode(); SetValue(value); SetInsertionPoint(point+1); } } }
// See http://www.w3.org/TR/REC-xml for reference wxString XMLWriter::XMLEsc(const wxString & s) { wxString result; int len = s.Length(); for(int i=0; i<len; i++) { wxUChar c = s.GetChar(i); switch (c) { case wxT('\''): result += wxT("'"); break; case wxT('"'): result += wxT("""); break; case wxT('&'): result += wxT("&"); break; case wxT('<'): result += wxT("<"); break; case wxT('>'): result += wxT(">"); break; default: if (!wxIsprint(c)) { //ignore several characters such ase eot (0x04) and stx (0x02) because it makes expat parser bail //see xmltok.c in expat checkCharRefNumber() to see how expat bails on these chars. //also see wxWidgets-2.8.12/src/expat/lib/asciitab.h to see which characters are nonxml compatible //post decode (we can still encode '&' and '<' with this table, but it prevents us from encoding eot) //everything is compatible past ascii 0x20, so we don't check higher than this. if(c> 0x1F || charXMLCompatiblity[c]!=0) result += wxString::Format(wxT("&#x%04x;"), c); } else { result += c; } break; } } return result; }
void wxVListBoxComboPopup::OnChar(wxKeyEvent& event) { if ( m_combo->GetWindowStyle() & wxCB_READONLY ) { // Process partial completion key codes here, but not the arrow keys as // the base class will do that for us #if wxUSE_UNICODE const wxChar charcode = event.GetUnicodeKey(); #else const wxChar charcode = (wxChar)event.GetKeyCode(); #endif if ( wxIsprint(charcode) ) { OnComboCharEvent(event); SetSelection(m_value); // ensure the highlight bar moves return; // don't skip the event } } event.Skip(); }
void wxMaskController::SetDateSeperator(wxChar chNewDateSeperator) { // The time seperator must be a valid edit box symbol. if(wxIsprint((int) chNewDateSeperator)) { // Just for the heck of it, if the date symbol changes, // go through and replace the existing symbols with the new symbol. wxFieldMaskData* pobjData=NULL; for(unsigned long pos = 0;pos < m_listData.GetCount();pos++) { pobjData = (wxFieldMaskData *) (m_listData.Item(pos))->GetData(); if(pobjData->m_eType == MaskDataTypeDATESEPARATOR) pobjData->m_chValue = chNewDateSeperator; } m_chIntlDate = chNewDateSeperator; } // Don't update the insertion point if just setting the date symbol. Update(-1); }
bool tmKey::wxkToUni(int wxk, bool shifted, wxChar& uniCode) // static { if (!wxIsprint(wxk)) return false; #ifdef __WXMSW__ // Convert key to scan code const SHORT scancode = ::VkKeyScan(wxk); const unsigned char vk = LOBYTE(scancode); // Low eight bits = virtual-key code // Get the char on the key for this keycode unsigned char key_state[256]; memset (key_state, 0, sizeof (key_state)); const int BUFFER_SIZE = 10; if (shifted) key_state[VK_SHIFT] = 0x80; TCHAR buf[BUFFER_SIZE] = { 0 }; if (::ToUnicode(vk, 0, key_state, buf, BUFFER_SIZE, 0) != 1) return false; uniCode = buf[0]; return true; #elif defined(__WXGTK__) // FIXME not too correct - this is wxKeyCode not wxChar guint keyval = gdk_unicode_to_keyval(wxk); if (keyval & 0x01000000) return false; keyval = shifted ? gdk_keyval_to_upper(keyval) : gdk_keyval_to_lower(keyval); uniCode = gdk_keyval_to_unicode(keyval); #ifdef __WXDEBUG__ wxLogDebug(wxT("wxkToUni(%x- %c,%d) to %x - %c"), wxk, wxk, shifted, uniCode, uniCode); #endif //__WXDEBUG__ return true; #else #error Unknown platform #endif }
void wxMaskController::SetPromptSymbol(wxChar chNewPromptSymbol) { // The prompt symbol must be a valid edit box symbol. if(wxIsprint((int) chNewPromptSymbol)) { // Just for the heck of it, if the prompt symbol changes, // go through and replace the existing prompts with the new prompt. wxFieldMaskData* pobjData = NULL; for(unsigned long pos = 0;pos < m_listData.GetCount();pos++) { pobjData = (wxFieldMaskData *) (m_listData.Item(pos))->GetData(); if(pobjData->IsInputData()) { if(pobjData->m_chValue == m_chPromptSymbol) pobjData->m_chValue = chNewPromptSymbol; } } m_chPromptSymbol = chNewPromptSymbol; } // Don't update the insertion point if just setting the prompt symbol. Update(-1); }
void LogKeyEvent(const wxChar *name, const wxKeyEvent& event) { wxString key; long keycode = event.GetKeyCode(); { switch ( keycode ) { case WXK_BACK: key = wxT("BACK"); break; case WXK_TAB: key = wxT("TAB"); break; case WXK_RETURN: key = wxT("RETURN"); break; case WXK_ESCAPE: key = wxT("ESCAPE"); break; case WXK_SPACE: key = wxT("SPACE"); break; case WXK_DELETE: key = wxT("DELETE"); break; case WXK_START: key = wxT("START"); break; case WXK_LBUTTON: key = wxT("LBUTTON"); break; case WXK_RBUTTON: key = wxT("RBUTTON"); break; case WXK_CANCEL: key = wxT("CANCEL"); break; case WXK_MBUTTON: key = wxT("MBUTTON"); break; case WXK_CLEAR: key = wxT("CLEAR"); break; case WXK_SHIFT: key = wxT("SHIFT"); break; case WXK_ALT: key = wxT("ALT"); break; case WXK_CONTROL: key = wxT("CONTROL"); break; case WXK_MENU: key = wxT("MENU"); break; case WXK_PAUSE: key = wxT("PAUSE"); break; case WXK_CAPITAL: key = wxT("CAPITAL"); break; case WXK_END: key = wxT("END"); break; case WXK_HOME: key = wxT("HOME"); break; case WXK_LEFT: key = wxT("LEFT"); break; case WXK_UP: key = wxT("UP"); break; case WXK_RIGHT: key = wxT("RIGHT"); break; case WXK_DOWN: key = wxT("DOWN"); break; case WXK_SELECT: key = wxT("SELECT"); break; case WXK_PRINT: key = wxT("PRINT"); break; case WXK_EXECUTE: key = wxT("EXECUTE"); break; case WXK_SNAPSHOT: key = wxT("SNAPSHOT"); break; case WXK_INSERT: key = wxT("INSERT"); break; case WXK_HELP: key = wxT("HELP"); break; case WXK_NUMPAD0: key = wxT("NUMPAD0"); break; case WXK_NUMPAD1: key = wxT("NUMPAD1"); break; case WXK_NUMPAD2: key = wxT("NUMPAD2"); break; case WXK_NUMPAD3: key = wxT("NUMPAD3"); break; case WXK_NUMPAD4: key = wxT("NUMPAD4"); break; case WXK_NUMPAD5: key = wxT("NUMPAD5"); break; case WXK_NUMPAD6: key = wxT("NUMPAD6"); break; case WXK_NUMPAD7: key = wxT("NUMPAD7"); break; case WXK_NUMPAD8: key = wxT("NUMPAD8"); break; case WXK_NUMPAD9: key = wxT("NUMPAD9"); break; case WXK_MULTIPLY: key = wxT("MULTIPLY"); break; case WXK_ADD: key = wxT("ADD"); break; case WXK_SEPARATOR: key = wxT("SEPARATOR"); break; case WXK_SUBTRACT: key = wxT("SUBTRACT"); break; case WXK_DECIMAL: key = wxT("DECIMAL"); break; case WXK_DIVIDE: key = wxT("DIVIDE"); break; case WXK_F1: key = wxT("F1"); break; case WXK_F2: key = wxT("F2"); break; case WXK_F3: key = wxT("F3"); break; case WXK_F4: key = wxT("F4"); break; case WXK_F5: key = wxT("F5"); break; case WXK_F6: key = wxT("F6"); break; case WXK_F7: key = wxT("F7"); break; case WXK_F8: key = wxT("F8"); break; case WXK_F9: key = wxT("F9"); break; case WXK_F10: key = wxT("F10"); break; case WXK_F11: key = wxT("F11"); break; case WXK_F12: key = wxT("F12"); break; case WXK_F13: key = wxT("F13"); break; case WXK_F14: key = wxT("F14"); break; case WXK_F15: key = wxT("F15"); break; case WXK_F16: key = wxT("F16"); break; case WXK_F17: key = wxT("F17"); break; case WXK_F18: key = wxT("F18"); break; case WXK_F19: key = wxT("F19"); break; case WXK_F20: key = wxT("F20"); break; case WXK_F21: key = wxT("F21"); break; case WXK_F22: key = wxT("F22"); break; case WXK_F23: key = wxT("F23"); break; case WXK_F24: key = wxT("F24"); break; case WXK_NUMLOCK: key = wxT("NUMLOCK"); break; case WXK_SCROLL: key = wxT("SCROLL"); break; case WXK_PAGEUP: key = wxT("PAGEUP"); break; case WXK_PAGEDOWN: key = wxT("PAGEDOWN"); break; case WXK_NUMPAD_SPACE: key = wxT("NUMPAD_SPACE"); break; case WXK_NUMPAD_TAB: key = wxT("NUMPAD_TAB"); break; case WXK_NUMPAD_ENTER: key = wxT("NUMPAD_ENTER"); break; case WXK_NUMPAD_F1: key = wxT("NUMPAD_F1"); break; case WXK_NUMPAD_F2: key = wxT("NUMPAD_F2"); break; case WXK_NUMPAD_F3: key = wxT("NUMPAD_F3"); break; case WXK_NUMPAD_F4: key = wxT("NUMPAD_F4"); break; case WXK_NUMPAD_HOME: key = wxT("NUMPAD_HOME"); break; case WXK_NUMPAD_LEFT: key = wxT("NUMPAD_LEFT"); break; case WXK_NUMPAD_UP: key = wxT("NUMPAD_UP"); break; case WXK_NUMPAD_RIGHT: key = wxT("NUMPAD_RIGHT"); break; case WXK_NUMPAD_DOWN: key = wxT("NUMPAD_DOWN"); break; case WXK_NUMPAD_PAGEUP: key = wxT("NUMPAD_PAGEUP"); break; case WXK_NUMPAD_PAGEDOWN: key = wxT("NUMPAD_PAGEDOWN"); break; case WXK_NUMPAD_END: key = wxT("NUMPAD_END"); break; case WXK_NUMPAD_BEGIN: key = wxT("NUMPAD_BEGIN"); break; case WXK_NUMPAD_INSERT: key = wxT("NUMPAD_INSERT"); break; case WXK_NUMPAD_DELETE: key = wxT("NUMPAD_DELETE"); break; case WXK_NUMPAD_EQUAL: key = wxT("NUMPAD_EQUAL"); break; case WXK_NUMPAD_MULTIPLY: key = wxT("NUMPAD_MULTIPLY"); break; case WXK_NUMPAD_ADD: key = wxT("NUMPAD_ADD"); break; case WXK_NUMPAD_SEPARATOR: key = wxT("NUMPAD_SEPARATOR"); break; case WXK_NUMPAD_SUBTRACT: key = wxT("NUMPAD_SUBTRACT"); break; case WXK_NUMPAD_DECIMAL: key = wxT("NUMPAD_DECIMAL"); break; default: { if ( keycode < 128 && wxIsprint((int)keycode) ) key.Printf(wxT("'%c'"), (char)keycode); else if ( keycode > 0 && keycode < 27 ) key.Printf(_("Ctrl-%c"), wxT('A') + keycode - 1); else key.Printf(wxT("unknown (%ld)"), keycode); } } } wxLogMessage( wxT("%s event: %s (flags = %c%c%c%c)"), name, key.c_str(), event.ControlDown() ? wxT('C') : wxT('-'), event.AltDown() ? wxT('A') : wxT('-'), event.ShiftDown() ? wxT('S') : wxT('-'), event.MetaDown() ? wxT('M') : wxT('-')); }
wxString KeyBindingTextCtrl::GetStringFromCode(wxUint32 keycode) { wxString key; switch(keycode) { //case WXK_BACK: key = _T("BACK"); break; //case WXK_TAB: key = _T("TAB"); break; //case WXK_RETURN: key = _T("RETURN"); break; //case WXK_ESCAPE: key = _T("ESCAPE"); break; //case WXK_SPACE: key = _T("SPACE"); break; //case WXK_DELETE: key = _T("DELETE"); break; //case WXK_START: key = _T("START"); break; //case WXK_LBUTTON: key = _T("LBUTTON"); break; //case WXK_RBUTTON: key = _T("RBUTTON"); break; //case WXK_CANCEL: key = _T("CANCEL"); break; //case WXK_MBUTTON: key = _T("MBUTTON"); break; //case WXK_CLEAR: key = _T("CLEAR"); break; //case WXK_SHIFT: key = _T("SHIFT"); break; //case WXK_ALT: key = _T("ALT"); break; //case WXK_CONTROL: key = _T("CONTROL"); break; //case WXK_MENU: key = _T("MENU"); break; //case WXK_PAUSE: key = _T("PAUSE"); break; //case WXK_CAPITAL: key = _T("CAPITAL"); break; //case WXK_END: key = _T("END"); break; //case WXK_HOME: key = _T("HOME"); break; //case WXK_LEFT: key = _T("LEFT"); break; //case WXK_UP: key = _T("UP"); break; //case WXK_RIGHT: key = _T("RIGHT"); break; //case WXK_DOWN: key = _T("DOWN"); break; //case WXK_SELECT: key = _T("SELECT"); break; //case WXK_PRINT: key = _T("PRINT"); break; //case WXK_EXECUTE: key = _T("EXECUTE"); break; //case WXK_SNAPSHOT: key = _T("SNAPSHOT"); break; //case WXK_INSERT: key = _T("INSERT"); break; //case WXK_HELP: key = _T("HELP"); break; //case WXK_NUMPAD0: key = _T("NUMPAD0"); break; //case WXK_NUMPAD1: key = _T("NUMPAD1"); break; //case WXK_NUMPAD2: key = _T("NUMPAD2"); break; //case WXK_NUMPAD3: key = _T("NUMPAD3"); break; //case WXK_NUMPAD4: key = _T("NUMPAD4"); break; //case WXK_NUMPAD5: key = _T("NUMPAD5"); break; //case WXK_NUMPAD6: key = _T("NUMPAD6"); break; //case WXK_NUMPAD7: key = _T("NUMPAD7"); break; //case WXK_NUMPAD8: key = _T("NUMPAD8"); break; //case WXK_NUMPAD9: key = _T("NUMPAD9"); break; //case WXK_MULTIPLY: key = _T("MULTIPLY"); break; //case WXK_ADD: key = _T("ADD"); break; //case WXK_SEPARATOR: key = _T("SEPARATOR"); break; //case WXK_SUBTRACT: key = _T("SUBTRACT"); break; //case WXK_DECIMAL: key = _T("DECIMAL"); break; //case WXK_DIVIDE: key = _T("DIVIDE"); break; //case WXK_F1: key = _T("F1"); break; //case WXK_F2: key = _T("F2"); break; //case WXK_F3: key = _T("F3"); break; //case WXK_F4: key = _T("F4"); break; //case WXK_F5: key = _T("F5"); break; //case WXK_F6: key = _T("F6"); break; //case WXK_F7: key = _T("F7"); break; //case WXK_F8: key = _T("F8"); break; //case WXK_F9: key = _T("F9"); break; //case WXK_F10: key = _T("F10"); break; //case WXK_F11: key = _T("F11"); break; //case WXK_F12: key = _T("F12"); break; //case WXK_F13: key = _T("F13"); break; //case WXK_F14: key = _T("F14"); break; //case WXK_F15: key = _T("F15"); break; //case WXK_F16: key = _T("F16"); break; //case WXK_F17: key = _T("F17"); break; //case WXK_F18: key = _T("F18"); break; //case WXK_F19: key = _T("F19"); break; //case WXK_F20: key = _T("F20"); break; //case WXK_F21: key = _T("F21"); break; //case WXK_F22: key = _T("F22"); break; //case WXK_F23: key = _T("F23"); break; //case WXK_F24: key = _T("F24"); break; //case WXK_NUMLOCK: key = _T("NUMLOCK"); break; //case WXK_SCROLL: key = _T("SCROLL"); break; //case WXK_PAGEUP: key = _T("PAGEUP"); break; //case WXK_PAGEDOWN: key = _T("PAGEDOWN"); break; //case WXK_NUMPAD_SPACE: key = _T("NUMPAD_SPACE"); break; //case WXK_NUMPAD_TAB: key = _T("NUMPAD_TAB"); break; //case WXK_NUMPAD_ENTER: key = _T("NUMPAD_ENTER"); break; //case WXK_NUMPAD_F1: key = _T("NUMPAD_F1"); break; //case WXK_NUMPAD_F2: key = _T("NUMPAD_F2"); break; //case WXK_NUMPAD_F3: key = _T("NUMPAD_F3"); break; //case WXK_NUMPAD_F4: key = _T("NUMPAD_F4"); break; //case WXK_NUMPAD_HOME: key = _T("NUMPAD_HOME"); break; //case WXK_NUMPAD_LEFT: key = _T("NUMPAD_LEFT"); break; //case WXK_NUMPAD_UP: key = _T("NUMPAD_UP"); break; //case WXK_NUMPAD_RIGHT: key = _T("NUMPAD_RIGHT"); break; //case WXK_NUMPAD_DOWN: key = _T("NUMPAD_DOWN"); break; //case WXK_NUMPAD_PAGEUP: key = _T("NUMPAD_PAGEUP"); break; //case WXK_NUMPAD_PAGEDOWN: key = _T("NUMPAD_PAGEDOWN"); break; //case WXK_NUMPAD_END: key = _T("NUMPAD_END"); break; //case WXK_NUMPAD_BEGIN: key = _T("NUMPAD_BEGIN"); break; //case WXK_NUMPAD_INSERT: key = _T("NUMPAD_INSERT"); break; //case WXK_NUMPAD_DELETE: key = _T("NUMPAD_DELETE"); break; //case WXK_NUMPAD_EQUAL: key = _T("NUMPAD_EQUAL"); break; //case WXK_NUMPAD_MULTIPLY: key = _T("NUMPAD_MULTIPLY"); break; //case WXK_NUMPAD_ADD: key = _T("NUMPAD_ADD"); break; //case WXK_NUMPAD_SEPARATOR: key = _T("NUMPAD_SEPARATOR"); break; //case WXK_NUMPAD_SUBTRACT: key = _T("NUMPAD_SUBTRACT"); break; //case WXK_NUMPAD_DECIMAL: key = _T("NUMPAD_DECIMAL"); break; case VK_BACK: key = _T("VK_BACK"); break;; break; case VK_TAB: key = _T("VK_TAB"); break; case VK_CLEAR: key = _T("VK_CLEAR"); break; case VK_RETURN: key = _T("VK_RETURN"); break; case VK_SHIFT: key = _T("VK_SHIFT"); break; case VK_CONTROL: key = _T("VK_CONTROL"); break; case VK_MENU: key = _T("VK_MENU"); break; case VK_PAUSE: key = _T("VK_PAUSE"); break; case VK_CAPITAL: key = _T("VK_CAPITAL"); break; case VK_KANA: key = _T("VK_KANA"); break; case VK_JUNJA: key = _T("VK_JUNJA"); break; case VK_FINAL: key = _T("VK_FINAL"); break; case VK_KANJI: key = _T("VK_KANJI"); break; case VK_ESCAPE: key = _T("VK_ESCAPE"); break; case VK_CONVERT: key = _T("VK_CONVERT"); break; case VK_NONCONVERT: key = _T("VK_NONCONVERT"); break; case VK_ACCEPT: key = _T("VK_ACCEPT"); break; case VK_MODECHANGE: key = _T("VK_MODECHANGE"); break; case VK_SPACE: key = _T("VK_SPACE"); break; case VK_PRIOR: key = _T("VK_PRIOR"); break; case VK_NEXT: key = _T("VK_NEXT"); break; case VK_END: key = _T("VK_END"); break; case VK_HOME: key = _T("VK_HOME"); break; case VK_LEFT: key = _T("VK_LEFT"); break; case VK_UP: key = _T("VK_UP"); break; case VK_RIGHT: key = _T("VK_RIGHT"); break; case VK_DOWN: key = _T("VK_DOWN"); break; case VK_SELECT: key = _T("VK_SELECT"); break; case VK_PRINT: key = _T("VK_PRINT"); break; case VK_EXECUTE: key = _T("VK_EXECUTE"); break; case VK_SNAPSHOT: key = _T("VK_SNAPSHOT"); break; case VK_INSERT: key = _T("VK_INSERT"); break; case VK_DELETE: key = _T("VK_DELETE"); break; case VK_HELP: key = _T("VK_HELP"); break; case VK_LWIN: key = _T("VK_LWIN"); break; case VK_RWIN: key = _T("VK_RWIN"); break; case VK_APPS: key = _T("VK_APPS"); break; case VK_SLEEP: key = _T("VK_SLEEP"); break; case VK_NUMPAD0: key = _T("VK_NUMPAD0"); break; case VK_NUMPAD1: key = _T("VK_NUMPAD1"); break; case VK_NUMPAD2: key = _T("VK_NUMPAD2"); break; case VK_NUMPAD3: key = _T("VK_NUMPAD3"); break; case VK_NUMPAD4: key = _T("VK_NUMPAD4"); break; case VK_NUMPAD5: key = _T("VK_NUMPAD5"); break; case VK_NUMPAD6: key = _T("VK_NUMPAD6"); break; case VK_NUMPAD7: key = _T("VK_NUMPAD7"); break; case VK_NUMPAD8: key = _T("VK_NUMPAD8"); break; case VK_NUMPAD9: key = _T("VK_NUMPAD9"); break; case VK_MULTIPLY: key = _T("VK_MULTIPLY"); break; case VK_ADD: key = _T("VK_ADD"); break; case VK_SEPARATOR: key = _T("VK_SEPARATOR"); break; case VK_SUBTRACT: key = _T("VK_SUBTRACT"); break; case VK_DECIMAL: key = _T("VK_DECIMAL"); break; case VK_DIVIDE: key = _T("VK_DIVIDE"); break; case VK_F1: key = _T("VK_F1"); break; case VK_F2: key = _T("VK_F2"); break; case VK_F3: key = _T("VK_F3"); break; case VK_F4: key = _T("VK_F4"); break; case VK_F5: key = _T("VK_F5"); break; case VK_F6: key = _T("VK_F6"); break; case VK_F7: key = _T("VK_F7"); break; case VK_F8: key = _T("VK_F8"); break; case VK_F9: key = _T("VK_F9"); break; case VK_F10: key = _T("VK_F10"); break; case VK_F11: key = _T("VK_F11"); break; case VK_F12: key = _T("VK_F12"); break; case VK_F13: key = _T("VK_F13"); break; case VK_F14: key = _T("VK_F14"); break; case VK_F15: key = _T("VK_F15"); break; case VK_F16: key = _T("VK_F16"); break; case VK_F17: key = _T("VK_F17"); break; case VK_F18: key = _T("VK_F18"); break; case VK_F19: key = _T("VK_F19"); break; case VK_F20: key = _T("VK_F20"); break; case VK_F21: key = _T("VK_F21"); break; case VK_F22: key = _T("VK_F22"); break; case VK_F23: key = _T("VK_F23"); break; case VK_F24: key = _T("VK_F24"); break; default: { if ( wxIsprint((int)keycode) && keycode != 255) key.Printf(_T("'%c'"), (char)keycode); else if ( keycode > 0 && keycode < 27 ) key.Printf(_("Ctrl-%c"), _T('A') + keycode - 1); else key.Printf(_T("unknown (%ld)"), keycode); } } return key; }
bool wxTextCtrlBase::EmulateKeyPress(const wxKeyEvent& event) { // we have a native implementation for Win32 and so don't need this one #ifndef __WIN32__ wxChar ch = 0; int keycode = event.GetKeyCode(); switch ( keycode ) { case WXK_NUMPAD0: case WXK_NUMPAD1: case WXK_NUMPAD2: case WXK_NUMPAD3: case WXK_NUMPAD4: case WXK_NUMPAD5: case WXK_NUMPAD6: case WXK_NUMPAD7: case WXK_NUMPAD8: case WXK_NUMPAD9: ch = (wxChar)(_T('0') + keycode - WXK_NUMPAD0); break; case WXK_MULTIPLY: case WXK_NUMPAD_MULTIPLY: ch = _T('*'); break; case WXK_ADD: case WXK_NUMPAD_ADD: ch = _T('+'); break; case WXK_SUBTRACT: case WXK_NUMPAD_SUBTRACT: ch = _T('-'); break; case WXK_DECIMAL: case WXK_NUMPAD_DECIMAL: ch = _T('.'); break; case WXK_DIVIDE: case WXK_NUMPAD_DIVIDE: ch = _T('/'); break; case WXK_DELETE: case WXK_NUMPAD_DELETE: // delete the character at cursor { const long pos = GetInsertionPoint(); if ( pos < GetLastPosition() ) Remove(pos, pos + 1); } break; case WXK_BACK: // delete the character before the cursor { const long pos = GetInsertionPoint(); if ( pos > 0 ) Remove(pos - 1, pos); } break; default: #if wxUSE_UNICODE if ( event.GetUnicodeKey() ) { ch = event.GetUnicodeKey(); } else #endif if ( keycode < 256 && keycode >= 0 && wxIsprint(keycode) ) { // FIXME this is not going to work for non letters... if ( !event.ShiftDown() ) { keycode = wxTolower(keycode); } ch = (wxChar)keycode; } else { ch = _T('\0'); } } if ( ch ) { WriteText(ch); return true; } #else // __WIN32__ wxUnusedVar(event); #endif // !__WIN32__/__WIN32__ return false; }
// returns true if key was consumed bool wxVListBoxComboPopup::HandleKey( int keycode, bool saturate, wxChar keychar ) { const int itemCount = GetCount(); // keys do nothing in the empty control and returning immediately avoids // using invalid indices below if ( !itemCount ) return false; int value = m_value; int comboStyle = m_combo->GetWindowStyle(); if ( keychar > 0 ) { // we have character equivalent of the keycode; filter out these that // are not printable characters if ( !wxIsprint(keychar) ) keychar = 0; } if ( keycode == WXK_DOWN || keycode == WXK_NUMPAD_DOWN || keycode == WXK_RIGHT ) { value++; StopPartialCompletion(); } else if ( keycode == WXK_UP || keycode == WXK_NUMPAD_UP || keycode == WXK_LEFT ) { value--; StopPartialCompletion(); } else if ( keycode == WXK_PAGEDOWN || keycode == WXK_NUMPAD_PAGEDOWN ) { value+=10; StopPartialCompletion(); } else if ( keycode == WXK_PAGEUP || keycode == WXK_NUMPAD_PAGEUP ) { value-=10; StopPartialCompletion(); } else if ( keycode == WXK_HOME || keycode == WXK_NUMPAD_HOME ) { value=0; StopPartialCompletion(); } else if ( keycode == WXK_END || keycode == WXK_NUMPAD_END ) { value=itemCount-1; StopPartialCompletion(); } else if ( keychar && (comboStyle & wxCB_READONLY) ) { // Try partial completion // find the new partial completion string #if wxUSE_TIMER if (m_partialCompletionTimer.IsRunning()) m_partialCompletionString+=wxString(keychar); else #endif // wxUSE_TIMER m_partialCompletionString=wxString(keychar); // now search through the values to see if this is found int found = -1; unsigned int length=m_partialCompletionString.length(); int i; for (i=0; i<itemCount; i++) { wxString item=GetString(i); if (( item.length() >= length) && (! m_partialCompletionString.CmpNoCase(item.Left(length)))) { found=i; break; } } if (found<0) { StopPartialCompletion(); ::wxBell(); return true; // to stop the first value being set } else { value=i; #if wxUSE_TIMER m_partialCompletionTimer.Start(wxODCB_PARTIAL_COMPLETION_TIME, true); #endif // wxUSE_TIMER } } else return false; if ( saturate ) { if ( value >= itemCount ) value = itemCount - 1; else if ( value < 0 ) value = 0; } else { if ( value >= itemCount ) value -= itemCount; else if ( value < 0 ) value += itemCount; } if ( value == m_value ) // Even if value was same, don't skip the event // (good for consistency) return true; if ( value >= 0 ) m_combo->ChangeValue(m_strings[value]); // The m_combo->SetValue() call above sets m_value to the index of this // string. But if there are more identical string, the index is of the // first occurence, which may be wrong, so set the index explicitly here, // _after_ the SetValue() call. m_value = value; SendComboBoxEvent(m_value); return true; }
bool wxTextCtrlBase::EmulateKeyPress(const wxKeyEvent& event) { bool handled = false; // we have a native implementation for Win32 and so don't need this one #ifndef __WIN32__ wxChar ch = 0; int keycode = event.GetKeyCode(); long from, to; GetSelection(&from,&to); long insert = GetInsertionPoint(); long last = GetLastPosition(); // catch arrow left and right switch ( keycode ) { case WXK_LEFT: if ( event.ShiftDown() ) SetSelection( (from > 0 ? from - 1 : 0) , to ); else { if ( from != to ) insert = from; else if ( insert > 0 ) insert -= 1; SetInsertionPoint( insert ); } handled = true; break; case WXK_RIGHT: if ( event.ShiftDown() ) SetSelection( from, (to < last ? to + 1 : last) ); else { if ( from != to ) insert = to; else if ( insert < last ) insert += 1; SetInsertionPoint( insert ); } handled = true; break; case WXK_NUMPAD0: case WXK_NUMPAD1: case WXK_NUMPAD2: case WXK_NUMPAD3: case WXK_NUMPAD4: case WXK_NUMPAD5: case WXK_NUMPAD6: case WXK_NUMPAD7: case WXK_NUMPAD8: case WXK_NUMPAD9: ch = (wxChar)(wxT('0') + keycode - WXK_NUMPAD0); break; case WXK_MULTIPLY: case WXK_NUMPAD_MULTIPLY: ch = wxT('*'); break; case WXK_ADD: case WXK_NUMPAD_ADD: ch = wxT('+'); break; case WXK_SUBTRACT: case WXK_NUMPAD_SUBTRACT: ch = wxT('-'); break; case WXK_DECIMAL: case WXK_NUMPAD_DECIMAL: ch = wxT('.'); break; case WXK_DIVIDE: case WXK_NUMPAD_DIVIDE: ch = wxT('/'); break; case WXK_DELETE: case WXK_NUMPAD_DELETE: // delete the character at cursor { const long pos = GetInsertionPoint(); if ( pos < GetLastPosition() ) Remove(pos, pos + 1); handled = true; } break; case WXK_BACK: // delete the character before the cursor { const long pos = GetInsertionPoint(); if ( pos > 0 ) Remove(pos - 1, pos); handled = true; } break; default: #if wxUSE_UNICODE if ( event.GetUnicodeKey() ) { ch = event.GetUnicodeKey(); } else #endif if ( keycode < 256 && keycode >= 0 && wxIsprint(keycode) ) { // FIXME this is not going to work for non letters... if ( !event.ShiftDown() ) { keycode = wxTolower(keycode); } ch = (wxChar)keycode; } else { ch = wxT('\0'); } } if ( ch ) { WriteText(ch); handled = true; } #else // __WIN32__ wxUnusedVar(event); #endif // !__WIN32__/__WIN32__ return handled; }
// returns true if key was consumed bool wxVListBoxComboPopup::HandleKey( int keycode, bool saturate, wxChar unicode ) { const int itemCount = GetCount(); // keys do nothing in the empty control and returning immediately avoids // using invalid indices below if ( !itemCount ) return false; int value = m_value; int comboStyle = m_combo->GetWindowStyle(); // this is the character equivalent of the code wxChar keychar = 0; if ( keycode < WXK_START ) { #if wxUSE_UNICODE if ( unicode > 0 ) { if ( wxIsprint(unicode) ) keychar = unicode; } else #else wxUnusedVar(unicode); #endif if ( wxIsprint(keycode) ) { keychar = (wxChar) keycode; } } if ( keycode == WXK_DOWN || keycode == WXK_RIGHT ) { value++; StopPartialCompletion(); } else if ( keycode == WXK_UP || keycode == WXK_LEFT ) { value--; StopPartialCompletion(); } else if ( keycode == WXK_PAGEDOWN ) { value+=10; StopPartialCompletion(); } else if ( keycode == WXK_PAGEUP ) { value-=10; StopPartialCompletion(); } else if ( keychar && (comboStyle & wxCB_READONLY) ) { // Try partial completion // find the new partial completion string #if wxUSE_TIMER if (m_partialCompletionTimer.IsRunning()) m_partialCompletionString+=wxString(keychar); else #endif // wxUSE_TIMER m_partialCompletionString=wxString(keychar); // now search through the values to see if this is found int found = -1; unsigned int length=m_partialCompletionString.length(); int i; for (i=0; i<itemCount; i++) { wxString item=GetString(i); if (( item.length() >= length) && (! m_partialCompletionString.CmpNoCase(item.Left(length)))) { found=i; break; } } if (found<0) { StopPartialCompletion(); ::wxBell(); return true; // to stop the first value being set } else { value=i; #if wxUSE_TIMER m_partialCompletionTimer.Start(wxODCB_PARTIAL_COMPLETION_TIME, true); #endif // wxUSE_TIMER } } else return false; if ( saturate ) { if ( value >= itemCount ) value = itemCount - 1; else if ( value < 0 ) value = 0; } else { if ( value >= itemCount ) value -= itemCount; else if ( value < 0 ) value += itemCount; } if ( value == m_value ) // Even if value was same, don't skip the event // (good for consistency) return true; m_value = value; if ( value >= 0 ) m_combo->SetValue(m_strings[value]); SendComboBoxEvent(m_value); return true; }
// ---------------------------------------------------------------------------- wxString clKeyboardManager::KeyCodeToString(int keyCode) //(2019/02/25) // ---------------------------------------------------------------------------- { wxString res; //LOGIT("KeyCodeToString_IN:keyCode[%d]char[%c]", keyCode, keyCode ); switch (keyCode) { // IGNORED KEYS // --------------------------- case WXK_START: case WXK_LBUTTON: case WXK_RBUTTON: case WXK_MBUTTON: case WXK_CLEAR: case WXK_PAUSE: case WXK_NUMLOCK: case WXK_SCROLL : wxLogDebug(wxT("wxKeyBind::KeyCodeToString - ignored key: [%d]"), keyCode); return wxEmptyString; // these must be ABSOLUTELY ignored: they are key modifiers // we won't output any LOG message since these keys could be pressed // for long time while the user choose its preferred keycombination: // this would result into a long long queue of "ignored key" messages // which would be useless even in debug builds... case WXK_SHIFT: case WXK_CONTROL: case WXK_ALT: //+v0.5 return wxEmptyString; // FUNCTION KEYS // --------------------------- case WXK_F1: case WXK_F2: case WXK_F3: case WXK_F4: case WXK_F5: case WXK_F6: case WXK_F7: case WXK_F8: case WXK_F9: case WXK_F10: case WXK_F11: case WXK_F12: case WXK_F13: case WXK_F14: case WXK_F15: case WXK_F16: case WXK_F17: case WXK_F18: case WXK_F19: case WXK_F20: case WXK_F21: case WXK_F22: case WXK_F23: case WXK_F24: res << wxT('F') << wxString::Format(_T("%d"), keyCode - WXK_F1 + 1); break; // MISCELLANEOUS KEYS // --------------------------- case WXK_BACK: res << wxT("BACK"); break; case WXK_TAB: res << wxT("TAB"); break; case WXK_RETURN: res << wxT("RETURN"); break; case WXK_ESCAPE: res << wxT("ESCAPE"); break; case WXK_SPACE: res << wxT("SPACE"); break; case WXK_DELETE: res << wxT("DELETE"); break; case WXK_MULTIPLY: res << wxT("*"); break; case WXK_ADD: res << wxT("+"); break; case WXK_SEPARATOR: res << wxT("SEPARATOR"); break; case WXK_SUBTRACT: res << wxT("-"); break; case WXK_DECIMAL: res << wxT("."); break; case WXK_DIVIDE: res << wxT("/"); break; #if not wxCHECK_VERSION(2, 8, 0) case WXK_PRIOR: res << wxT("PgUp"); break; case WXK_NEXT: res << wxT("PgDn"); break; #endif case WXK_PAGEUP: res << wxT("PAGEUP"); break; case WXK_PAGEDOWN: res << wxT("PAGEDOWN"); break; case WXK_LEFT: res << wxT("LEFT"); break; case WXK_UP: res << wxT("UP"); break; case WXK_RIGHT: res << wxT("RIGHT"); break; case WXK_DOWN: res << wxT("DOWN"); break; case WXK_SELECT: res << wxT("SELECT"); break; case WXK_PRINT: res << wxT("PRINT"); break; case WXK_EXECUTE: res << wxT("EXECUTE"); break; case WXK_SNAPSHOT: res << wxT("SNAPSHOT"); break; case WXK_INSERT: res << wxT("INSERT"); break; case WXK_HELP: res << wxT("HELP"); break; case WXK_CANCEL: res << wxT("CANCEL"); break; case WXK_MENU: res << wxT("MENU"); break; case WXK_CAPITAL: res << wxT("CAPITAL"); break; case WXK_END: res << wxT("END"); break; case WXK_HOME: res << wxT("HOME"); break; //+V.05 (Pecan#1#): wxIsalnm is excluding keys not num or a-z like }{ etc //+v.05 (Pecan#1#): Holding Alt shows ALT+3 A: added WXK_ALT: to above case //+v.05 (Pecan#1#): ALT +Ctrl Left/Right show in Dlg, up/Down dont. Printable? // A: wxWidgets2.6.2 returns false on modifier keys for Ctrl+Alt+UP/DOWN combination. // It returns Ctrl+Alt+PRIOR instead of UP/DOWN and shows false for ctrl & alt. // Same is true for Ctrl+Shift+UP/Down. // Alt+Shift+Up/Down work ok. default: // ASCII chars... if (wxIsalnum(keyCode)) { res << (wxChar)keyCode; break; } else if ((res=NumpadKeyCodeToString(keyCode)) != wxEmptyString) { res << wxT(" (numpad)"); // so it is clear it's different from other keys break; } else if (wxIsprint(keyCode)) { //v+0.5 res << (wxChar)keyCode; break; } else { // we couldn't create a description for the given keycode... wxLogDebug(wxT("wxKeyBind::KeyCodeToString - unknown key: [%d]"), keyCode); return wxEmptyString; } }//default //#if LOGGING // LOGIT(_T("KeyCodeToStringOUT:keyCode[%d]char[%c]Desc[%s]"), // keyCode, keyCode, res.GetData() ); //#endif return res; }//KeyCodeToString
void ContentAssistantPopup::OnKeyPress(wxKeyEvent& event) { #if wxUSE_UNICODE wxChar key = event.GetUnicodeKey(); #else wxChar key = wxString::Format(wxT("%c"), ChangeNumpadToChar(event.GetKeyCode())); #endif switch (event.GetKeyCode()) { case WXK_TAB: if(m_completions.GetCount()>0) { wxChar ch; bool addChar = true; wxString word=m_editor->GetSelectionString(); int index=word.Length(); do { if(m_completions[0].Length()<=index) addChar = false; else { ch = m_completions[0][index]; for(size_t i=0;i<m_completions.GetCount();i++) if((m_completions[i].Length()<index + 1)||(m_completions[i][index]!=ch)) addChar = false; } if(addChar) { index++; word += ch; } } while(addChar); m_editor->ReplaceSelection(m_editor->GetSelectionString(),word,true); } break; case WXK_RETURN: case WXK_RIGHT: case WXK_NUMPAD_ENTER: { int selection = m_autocompletions->GetSelection(); if(selection<0) selection = 0; if(m_completions.GetCount()>0) m_editor->ReplaceSelection( m_editor->GetSelectionString(), m_completions[selection] ); this->GetParent()->GetParent()->Refresh(); if(!m_editor->IsActive()) m_editor->ActivateCell(); Dismiss(); } break; case WXK_LEFT: case WXK_ESCAPE: this->GetParent()->GetParent()->Refresh(); if(!m_editor->IsActive()) m_editor->ActivateCell(); Dismiss(); break; case WXK_UP: { int selection = m_autocompletions->GetSelection(); if(selection > 0) m_autocompletions->SetSelection(selection-1); else { if(m_completions.GetCount()>0) m_autocompletions->SetSelection(0); } break; } case WXK_DOWN: { int selection = m_autocompletions->GetSelection(); if(selection<0) selection = 0; selection++; if(selection >= m_completions.GetCount()) selection--; if(m_completions.GetCount()>0) m_autocompletions->SetSelection(selection); break; } case WXK_BACK: { wxString oldString=m_editor->GetSelectionString(); if(oldString!=wxEmptyString) { m_editor->ReplaceSelection( oldString, oldString.Left(oldString.Length()-1), true ); UpdateResults(); } else this->GetParent()->GetParent()->Refresh(); if(!m_editor->IsActive()) m_editor->ActivateCell(); Dismiss(); break; } default: { if((wxIsalpha(key))||(key==wxT('_'))) { wxString oldString=m_editor->GetSelectionString(); m_editor->ReplaceSelection( oldString, oldString+wxString(key), true ); UpdateResults(); } else if(wxIsprint(key)) { int selection = m_autocompletions->GetSelection(); if(selection<0) selection = 0; m_editor->ReplaceSelection( m_editor->GetSelectionString(), m_completions[selection]+key ); this->GetParent()->GetParent()->Refresh(); if(!m_editor->IsActive()) m_editor->ActivateCell(); Dismiss(); } else event.Skip(); } } this->GetParent()->GetParent()->Refresh(); }