diff --git a/samples/controls/controls.cpp b/samples/controls/controls.cpp index a119c5975c..58d89b7688 100644 --- a/samples/controls/controls.cpp +++ b/samples/controls/controls.cpp @@ -71,9 +71,13 @@ public: : wxTextCtrl(parent, id, value, pos, size, style) { } void OnKeyDown(wxKeyEvent& event); + void OnKeyUp(wxKeyEvent& event); void OnChar(wxKeyEvent& event); private: + static inline char GetChar(bool on, char c) { return on ? c : '-'; } + void LogEvent(const char *name, wxKeyEvent& event) const; + DECLARE_EVENT_TABLE() }; @@ -211,25 +215,147 @@ bool MyApp::OnInit() BEGIN_EVENT_TABLE(MyTextCtrl, wxTextCtrl) EVT_KEY_DOWN(MyTextCtrl::OnKeyDown) + EVT_KEY_UP(MyTextCtrl::OnKeyUp) EVT_CHAR(MyTextCtrl::OnChar) END_EVENT_TABLE() -void MyTextCtrl::OnChar(wxKeyEvent& event) +void MyTextCtrl::LogEvent(const char *name, wxKeyEvent& event) const { - static int s_keycode = 0; - static size_t s_repeatCount = 0; - - int keycode = event.KeyCode(); - if ( keycode == s_keycode ) - s_repeatCount++; + wxString key; + long keycode = event.KeyCode(); + if ( isascii((int)keycode) ) + key.Printf("'%c'", (char)keycode); else { - s_keycode = keycode; - s_repeatCount = 1; + switch ( keycode ) + { + case WXK_BACK: key = "BACK"; break; + case WXK_TAB: key = "TAB"; break; + case WXK_RETURN: key = "RETURN"; break; + case WXK_ESCAPE: key = "ESCAPE"; break; + case WXK_SPACE: key = "SPACE"; break; + case WXK_DELETE: key = "DELETE"; break; + + case WXK_START: key = "START"; break; + case WXK_LBUTTON: key = "LBUTTON"; break; + case WXK_RBUTTON: key = "RBUTTON"; break; + case WXK_CANCEL: key = "CANCEL"; break; + case WXK_MBUTTON: key = "MBUTTON"; break; + case WXK_CLEAR: key = "CLEAR"; break; + case WXK_SHIFT: key = "SHIFT"; break; + case WXK_CONTROL: key = "CONTROL"; break; + case WXK_MENU: key = "MENU"; break; + case WXK_PAUSE: key = "PAUSE"; break; + case WXK_CAPITAL: key = "CAPITAL"; break; + case WXK_PRIOR: key = "PRIOR"; break; + case WXK_NEXT: key = "NEXT"; break; + case WXK_END: key = "END"; break; + case WXK_HOME: key = "HOME"; break; + case WXK_LEFT: key = "LEFT"; break; + case WXK_UP: key = "UP"; break; + case WXK_RIGHT: key = "RIGHT"; break; + case WXK_DOWN: key = "DOWN"; break; + case WXK_SELECT: key = "SELECT"; break; + case WXK_PRINT: key = "PRINT"; break; + case WXK_EXECUTE: key = "EXECUTE"; break; + case WXK_SNAPSHOT: key = "SNAPSHOT"; break; + case WXK_INSERT: key = "INSERT"; break; + case WXK_HELP: key = "HELP"; break; + case WXK_NUMPAD0: key = "NUMPAD0"; break; + case WXK_NUMPAD1: key = "NUMPAD1"; break; + case WXK_NUMPAD2: key = "NUMPAD2"; break; + case WXK_NUMPAD3: key = "NUMPAD3"; break; + case WXK_NUMPAD4: key = "NUMPAD4"; break; + case WXK_NUMPAD5: key = "NUMPAD5"; break; + case WXK_NUMPAD6: key = "NUMPAD6"; break; + case WXK_NUMPAD7: key = "NUMPAD7"; break; + case WXK_NUMPAD8: key = "NUMPAD8"; break; + case WXK_NUMPAD9: key = "NUMPAD9"; break; + case WXK_MULTIPLY: key = "MULTIPLY"; break; + case WXK_ADD: key = "ADD"; break; + case WXK_SEPARATOR: key = "SEPARATOR"; break; + case WXK_SUBTRACT: key = "SUBTRACT"; break; + case WXK_DECIMAL: key = "DECIMAL"; break; + case WXK_DIVIDE: key = "DIVIDE"; break; + case WXK_F1: key = "F1"; break; + case WXK_F2: key = "F2"; break; + case WXK_F3: key = "F3"; break; + case WXK_F4: key = "F4"; break; + case WXK_F5: key = "F5"; break; + case WXK_F6: key = "F6"; break; + case WXK_F7: key = "F7"; break; + case WXK_F8: key = "F8"; break; + case WXK_F9: key = "F9"; break; + case WXK_F10: key = "F10"; break; + case WXK_F11: key = "F11"; break; + case WXK_F12: key = "F12"; break; + case WXK_F13: key = "F13"; break; + case WXK_F14: key = "F14"; break; + case WXK_F15: key = "F15"; break; + case WXK_F16: key = "F16"; break; + case WXK_F17: key = "F17"; break; + case WXK_F18: key = "F18"; break; + case WXK_F19: key = "F19"; break; + case WXK_F20: key = "F20"; break; + case WXK_F21: key = "F21"; break; + case WXK_F22: key = "F22"; break; + case WXK_F23: key = "F23"; break; + case WXK_F24: key = "F24"; break; + case WXK_NUMLOCK: key = "NUMLOCK"; break; + case WXK_SCROLL: key = "SCROLL"; break; + case WXK_PAGEUP: key = "PAGEUP"; break; + case WXK_PAGEDOWN: key = "PAGEDOWN"; break; + case WXK_NUMPAD_SPACE: key = "NUMPAD_SPACE"; break; + case WXK_NUMPAD_TAB: key = "NUMPAD_TAB"; break; + case WXK_NUMPAD_ENTER: key = "NUMPAD_ENTER"; break; + case WXK_NUMPAD_F1: key = "NUMPAD_F1"; break; + case WXK_NUMPAD_F2: key = "NUMPAD_F2"; break; + case WXK_NUMPAD_F3: key = "NUMPAD_F3"; break; + case WXK_NUMPAD_F4: key = "NUMPAD_F4"; break; + case WXK_NUMPAD_HOME: key = "NUMPAD_HOME"; break; + case WXK_NUMPAD_LEFT: key = "NUMPAD_LEFT"; break; + case WXK_NUMPAD_UP: key = "NUMPAD_UP"; break; + case WXK_NUMPAD_RIGHT: key = "NUMPAD_RIGHT"; break; + case WXK_NUMPAD_DOWN: key = "NUMPAD_DOWN"; break; + case WXK_NUMPAD_PRIOR: key = "NUMPAD_PRIOR"; break; + case WXK_NUMPAD_PAGEUP: key = "NUMPAD_PAGEUP"; break; + case WXK_NUMPAD_PAGEDOWN: key = "NUMPAD_PAGEDOWN"; break; + case WXK_NUMPAD_END: key = "NUMPAD_END"; break; + case WXK_NUMPAD_BEGIN: key = "NUMPAD_BEGIN"; break; + case WXK_NUMPAD_INSERT: key = "NUMPAD_INSERT"; break; + case WXK_NUMPAD_DELETE: key = "NUMPAD_DELETE"; break; + case WXK_NUMPAD_EQUAL: key = "NUMPAD_EQUAL"; break; + case WXK_NUMPAD_MULTIPLY: key = "NUMPAD_MULTIPLY"; break; + case WXK_NUMPAD_ADD: key = "NUMPAD_ADD"; break; + case WXK_NUMPAD_SEPARATOR: key = "NUMPAD_SEPARATOR"; break; + case WXK_NUMPAD_SUBTRACT: key = "NUMPAD_SUBTRACT"; break; + case WXK_NUMPAD_DECIMAL: key = "NUMPAD_DECIMAL"; break; + + default: + key.Printf("unknown (%ld)", keycode); + } } - - wxLogStatus( _T("Key event: %d (x%u), at position %ld"), - s_keycode, s_repeatCount, GetInsertionPoint()); + + wxLogMessage( _T("%s event: %s (flags = %c%c%c%c)"), + name, + key.c_str(), + GetChar(event.ControlDown(), 'C'), + GetChar(event.AltDown(), 'A'), + GetChar(event.ShiftDown(), 'S'), + GetChar(event.MetaDown(), 'M')); + +} + +void MyTextCtrl::OnChar(wxKeyEvent& event) +{ + LogEvent("Char", event); + + event.Skip(); +} + +void MyTextCtrl::OnKeyUp(wxKeyEvent& event) +{ + LogEvent("Key up", event); event.Skip(); } @@ -266,10 +392,11 @@ void MyTextCtrl::OnKeyDown(wxKeyEvent& event) // go to position 10 SetInsertionPoint(10); break; - - default: - event.Skip(); } + + LogEvent("Key down", event); + + event.Skip(); } //---------------------------------------------------------------------- @@ -372,14 +499,16 @@ EVT_BUTTON (ID_MOVE_END_ENTRY, MyPanel::OnMoveToEndOfEntry) END_EVENT_TABLE() MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) -: wxPanel( frame, -1, wxPoint(x, y), wxSize(w, h) ), -m_text(NULL), m_notebook(NULL) + : wxPanel( frame, -1, wxPoint(x, y), wxSize(w, h) ), + m_text(NULL), m_notebook(NULL) { // SetBackgroundColour("cadet blue"); m_text = new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE ); // m_text->SetBackgroundColour("wheat"); + delete wxLog::SetActiveTarget(new wxLogTextCtrl(m_text)); + m_notebook = new wxNotebook( this, ID_NOTEBOOK, wxPoint(0,0), wxSize(200,150) ); wxString choices[] = @@ -465,7 +594,7 @@ m_text(NULL), m_notebook(NULL) button->SetToolTip( "Press here to set italic font" ); #endif // wxUSE_TOOLTIPS - m_checkbox = new wxCheckBox( panel, ID_LISTBOX_ENABLE, "Disable", wxPoint(20,130), wxSize(140,30) ); + m_checkbox = new wxCheckBox( panel, ID_LISTBOX_ENABLE, "&Disable", wxPoint(20,130), wxSize(-1, -1), wxALIGN_RIGHT ); m_checkbox->SetValue(FALSE); #if wxUSE_TOOLTIPS m_checkbox->SetToolTip( "Click here to disable the listbox" ); @@ -528,7 +657,7 @@ m_text(NULL), m_notebook(NULL) wxString choices2[] = { "First", "Second", - /* "Third", + /* "Third", "Fourth", "Fifth", "Sixth", "Seventh", "Eighth", "Nineth", "Tenth" */ };