From 1944ad76180a4ef4e65764d456928539561d34b3 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin <vadim@wxwidgets.org> Date: Sun, 21 Jul 2002 14:29:13 +0000 Subject: [PATCH] 1. more consistency in wxTree/ListEvent methods naming convention: GetKeyCode() instead of GetCode() 2. wxTreeEvent::GetKeyEvent()::IsAltDown() now works under MSW 3. wxTreeEvent::GetKeyCode() works for alnum keys git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16236 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/listctrl.h | 9 ++- include/wx/msw/listctrl.h | 4 +- include/wx/treebase.h | 9 ++- samples/treectrl/treetest.cpp | 138 +++++++++++++++++++++++++++++++++- src/msw/treectrl.cpp | 24 ++++-- 5 files changed, 170 insertions(+), 14 deletions(-) diff --git a/include/wx/listctrl.h b/include/wx/listctrl.h index 1907ff19fd..e633113110 100644 --- a/include/wx/listctrl.h +++ b/include/wx/listctrl.h @@ -413,8 +413,8 @@ public: , m_pointDrag(event.m_pointDrag) , m_item(event.m_item) { } - - int GetCode() const { return m_code; } + + int GetKeyCode() const { return m_code; } long GetIndex() const { return m_itemIndex; } int GetColumn() const { return m_col; } wxPoint GetPoint() const { return m_pointDrag; } @@ -429,10 +429,13 @@ public: long GetCacheFrom() const { return m_oldItemIndex; } long GetCacheTo() const { return m_itemIndex; } - // these methods don't do anything at all #if WXWIN_COMPATIBILITY_2_2 + // these methods don't do anything at all long GetOldIndex() const { return 0; } long GetOldItem() const { return 0; } + + // this one is superseded by GetKeyCode() + int GetCode() const { return GetKeyCode(); } #endif // WXWIN_COMPATIBILITY_2_2 virtual wxEvent *Clone() const { return new wxListEvent(*this); } diff --git a/include/wx/msw/listctrl.h b/include/wx/msw/listctrl.h index de81e99dbe..fc495d9950 100644 --- a/include/wx/msw/listctrl.h +++ b/include/wx/msw/listctrl.h @@ -401,7 +401,5 @@ private: #endif // wxUSE_LISTCTRL -#endif - // _WX_LISTCTRL_H_ +#endif // _WX_LISTCTRL_H_ -// vi:sts=4:sw=4:et diff --git a/include/wx/treebase.h b/include/wx/treebase.h index 13df7c5199..aac2cab5c6 100644 --- a/include/wx/treebase.h +++ b/include/wx/treebase.h @@ -234,11 +234,16 @@ public: // keyboard data (for wxEVT_COMMAND_TREE_KEY_DOWN only) const wxKeyEvent& GetKeyEvent() const { return m_evtKey; } - int GetCode() const { return m_evtKey.GetKeyCode(); } + int GetKeyCode() const { return m_evtKey.GetKeyCode(); } // label (for EVT_TREE_{BEGIN|END}_LABEL_EDIT only) const wxString& GetLabel() const { return m_label; } +#if WXWIN_COMPATIBILITY_2_2 + // for compatibility only, don't use + int GetCode() const { return m_evtKey.GetKeyCode(); } +#endif // WXWIN_COMPATIBILITY_2_2 + private: // not all of the members are used (or initialized) for all events wxKeyEvent m_evtKey; @@ -314,7 +319,7 @@ END_DECLARE_EVENT_TYPES() #define EVT_TREE_SEL_CHANGED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TREE_SEL_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, NULL ), #define EVT_TREE_SEL_CHANGING(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TREE_SEL_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, NULL ), -// GetCode() returns the key code +// GetKeyCode() returns the key code // NB: this is the only message for which GetItem() is invalid (you may get the // item from GetSelection()) #define EVT_TREE_KEY_DOWN(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TREE_KEY_DOWN, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, NULL ), diff --git a/samples/treectrl/treetest.cpp b/samples/treectrl/treetest.cpp index fd2ab7efe1..4b82bf8ad0 100644 --- a/samples/treectrl/treetest.cpp +++ b/samples/treectrl/treetest.cpp @@ -848,10 +848,146 @@ TREE_EVENT_HANDLER(OnItemExpanding) TREE_EVENT_HANDLER(OnItemCollapsed) TREE_EVENT_HANDLER(OnSelChanged) TREE_EVENT_HANDLER(OnSelChanging) -TREE_EVENT_HANDLER(OnTreeKeyDown) #undef TREE_EVENT_HANDLER +void LogKeyEvent(const wxChar *name, const wxKeyEvent& event) +{ + wxString key; + long keycode = event.KeyCode(); + { + 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_ALT: key = "ALT"; 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: + { + if ( wxIsprint((int)keycode) ) + 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); + } + } + } + + wxLogMessage( _T("%s event: %s (flags = %c%c%c%c)"), + name, + key.c_str(), + event.ControlDown() ? _T('C') : _T('-'), + event.AltDown() ? _T('A') : _T('-'), + event.ShiftDown() ? _T('S') : _T('-'), + event.MetaDown() ? _T('M') : _T('-')); +} + +void MyTreeCtrl::OnTreeKeyDown(wxTreeEvent& event) +{ + LogKeyEvent(_T("Tree key down "), event.GetKeyEvent()); + + event.Skip(); +} + void MyTreeCtrl::OnBeginDrag(wxTreeEvent& event) { // need to explicitly allow drag diff --git a/src/msw/treectrl.cpp b/src/msw/treectrl.cpp index ffba0255fa..d4a3025c38 100644 --- a/src/msw/treectrl.cpp +++ b/src/msw/treectrl.cpp @@ -2294,12 +2294,26 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) eventType = wxEVT_COMMAND_TREE_KEY_DOWN; TV_KEYDOWN *info = (TV_KEYDOWN *)lParam; - // we pass 0 as 2 last CreateKeyEvent() parameters because we - // don't have access to the real key press flags here - but as - // it is only used to determin wxKeyEvent::m_altDown flag it's - // not too bad + // fabricate the lParam and wParam parameters sufficiently + // similar to the ones from a "real" WM_KEYDOWN so that + // CreateKeyEvent() works correctly + WXLPARAM lParam = + (::GetKeyState(VK_MENU) & 0x100 ? KF_ALTDOWN : 0) << 16; + + WXWPARAM wParam = info->wVKey; + + int keyCode = wxCharCodeMSWToWX(info->wVKey); + if ( !keyCode ) + { + // wxCharCodeMSWToWX() returns 0 to indicate that this is a + // simple ASCII key + keyCode = wParam; + } + event.m_evtKey = CreateKeyEvent(wxEVT_KEY_DOWN, - wxCharCodeMSWToWX(info->wVKey)); + keyCode, + lParam, + wParam); // a separate event for Space/Return if ( !wxIsCtrlDown() && !wxIsShiftDown() && -- 2.45.2