From a5d567622ff7ce27bada02c30ff5a8f71b0a5ac1 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Sat, 4 Oct 2008 09:28:31 +0000 Subject: [PATCH] Removed wxNavigationKey code, new keyboard navigation git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56073 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/propgrid/propgrid.h | 6 -- src/propgrid/editors.cpp | 14 --- src/propgrid/propgrid.cpp | 176 +++++---------------------------- 3 files changed, 26 insertions(+), 170 deletions(-) diff --git a/include/wx/propgrid/propgrid.h b/include/wx/propgrid/propgrid.h index c524db9338..b1632a4d2e 100644 --- a/include/wx/propgrid/propgrid.h +++ b/include/wx/propgrid/propgrid.h @@ -483,8 +483,6 @@ enum wxPG_KEYBOARD_ACTIONS #define wxPG_FL_IN_MANAGER 0x00020000 // Set after wxPropertyGrid is shown in its initial good size #define wxPG_FL_GOOD_SIZE_SET 0x00040000 -// Next navigation key event will get ignored -#define wxPG_FL_IGNORE_NEXT_NAVKEY 0x00080000 // Set when in SelectProperty. #define wxPG_FL_IN_SELECT_PROPERTY 0x00100000 // Set when help string is shown in status bar @@ -1225,9 +1223,6 @@ public: void OnComboItemPaint( wxPGCustomComboControl* pCb,int item,wxDC& dc, wxRect& rect,int flags ); - // Used by simple check box for keyboard navigation - void SendNavigationKeyEvent( int dir ); - /** Standardized double-to-string conversion. */ static void DoubleToString( wxString& target, @@ -1633,7 +1628,6 @@ protected: void OnMouseUp( wxMouseEvent &event ); void OnKey( wxKeyEvent &event ); void OnKeyUp( wxKeyEvent &event ); - void OnNavigationKey( wxNavigationKeyEvent& event ); void OnResize( wxSizeEvent &event ); // event handlers diff --git a/src/propgrid/editors.cpp b/src/propgrid/editors.cpp index e53c0c29c0..11d186c66f 100644 --- a/src/propgrid/editors.cpp +++ b/src/propgrid/editors.cpp @@ -1283,14 +1283,6 @@ bool wxSimpleCheckBox::ProcessEvent(wxEvent& event) wxPropertyGrid* propGrid = (wxPropertyGrid*) GetParent()->GetParent(); wxASSERT( propGrid->IsKindOf(CLASSINFO(wxPropertyGrid)) ); - if ( event.GetEventType() == wxEVT_NAVIGATION_KEY ) - { - //wxLogDebug(wxT("wxEVT_NAVIGATION_KEY")); - //SetFocusFromKbd(); - //event.Skip(); - //return wxControl::ProcessEvent(event); - } - else if ( ( (event.GetEventType() == wxEVT_LEFT_DOWN || event.GetEventType() == wxEVT_LEFT_DCLICK) && ((wxMouseEvent&)event).m_x > (wxPG_XBEFORETEXT-2) && ((wxMouseEvent&)event).m_x <= (wxPG_XBEFORETEXT-2+m_boxHeight) ) @@ -1361,12 +1353,6 @@ bool wxSimpleCheckBox::ProcessEvent(wxEvent& event) { wxKeyEvent& keyEv = (wxKeyEvent&) event; - if ( keyEv.GetKeyCode() == WXK_TAB ) - { - propGrid->SendNavigationKeyEvent( keyEv.ShiftDown()?0:1 ); - return true; - } - else if ( keyEv.GetKeyCode() == WXK_SPACE ) { SetValue(2); diff --git a/src/propgrid/propgrid.cpp b/src/propgrid/propgrid.cpp index 7a2da5ef85..061e4024b7 100644 --- a/src/propgrid/propgrid.cpp +++ b/src/propgrid/propgrid.cpp @@ -414,12 +414,6 @@ protected: pg->OnKeyUp( event ); } - void OnNavigationKey( wxNavigationKeyEvent& event ) - { - wxPropertyGrid* pg = wxStaticCast(GetParent(), wxPropertyGrid); - pg->OnNavigationKey( event ); - } - void OnPaint( wxPaintEvent& event ); // Always be focussable, even with child windows @@ -445,7 +439,6 @@ BEGIN_EVENT_TABLE(wxPGCanvas, wxPanel) EVT_KEY_DOWN(wxPGCanvas::OnKey) EVT_KEY_UP(wxPGCanvas::OnKeyUp) EVT_CHAR(wxPGCanvas::OnKey) - EVT_NAVIGATION_KEY(wxPGCanvas::OnNavigationKey) END_EVENT_TABLE() @@ -3128,7 +3121,6 @@ void wxPropertyGrid::OnCustomEditorEvent( wxCommandEvent &event ) { wxPGProperty* selected = m_selected; - // // Somehow, event is handled after property has been deselected. // Possibly, but very rare. if ( !selected ) @@ -3227,7 +3219,7 @@ void wxPropertyGrid::OnCustomEditorEvent( wxCommandEvent &event ) if ( !PerformValidation(m_selected, pendingValue) ) validationFailure = true; - if ( validationFailure ) + if ( validationFailure) { OnValidationFailure(selected, pendingValue); } @@ -3238,7 +3230,6 @@ void wxPropertyGrid::OnCustomEditorEvent( wxCommandEvent &event ) DoPropertyChanged(selected, selFlags); EditorsValueWasNotModified(); - // // Regardless of editor type, unfocus editor on // text-editing related enter press. if ( event.GetEventType() == wxEVT_COMMAND_TEXT_ENTER ) @@ -3249,6 +3240,13 @@ void wxPropertyGrid::OnCustomEditorEvent( wxCommandEvent &event ) else { // No value after all + + // Regardless of editor type, unfocus editor on + // text-editing related enter press. + if ( event.GetEventType() == wxEVT_COMMAND_TEXT_ENTER ) + { + SetFocusOnCanvas(); + } // Let unhandled button click events go to the parent if ( !buttonWasHandled && event.GetEventType() == wxEVT_COMMAND_BUTTON_CLICKED ) @@ -3411,22 +3409,10 @@ void wxPropertyGrid::SetupChildEventHandling( wxWindow* argWnd ) argWnd->Connect(id, wxEVT_LEAVE_WINDOW, wxMouseEventHandler(wxPropertyGrid::OnMouseEntry), NULL, this); + argWnd->Connect(id, wxEVT_KEY_DOWN, + wxCharEventHandler(wxPropertyGrid::OnChildKeyDown), + NULL, this); } - else - { - argWnd->Connect(id, wxEVT_NAVIGATION_KEY, - wxNavigationKeyEventHandler(wxPropertyGrid::OnNavigationKey)); - } - - argWnd->Connect(id, wxEVT_KEY_DOWN, - wxKeyEventHandler(wxPropertyGrid::OnChildKeyDown), - NULL, this); - argWnd->Connect(id, wxEVT_KEY_UP, - wxKeyEventHandler(wxPropertyGrid::OnChildKeyUp), - NULL, this); - argWnd->Connect(id, wxEVT_KILL_FOCUS, - wxFocusEventHandler(wxPropertyGrid::OnFocusEvent), - NULL, this); } void wxPropertyGrid::FreeEditors() @@ -3473,7 +3459,18 @@ bool wxPropertyGrid::DoSelectProperty( wxPGProperty* p, unsigned int flags ) return false; } - // +/* + if (m_selected) + wxPrintf( "Selected %s\n", m_selected->GetClassInfo()->GetClassName() ); + else + wxPrintf( "None selected\n" ); + + if (p) + wxPrintf( "P = %s\n", p->GetClassInfo()->GetClassName() ); + else + wxPrintf( "P = NULL\n" ); +*/ + // If we are frozen, then just set the values. if ( m_frozen ) { @@ -4853,17 +4850,6 @@ void wxPropertyGrid::OnMouseUpChild( wxMouseEvent &event ) // wxPropertyGrid keyboard event handling // ----------------------------------------------------------------------- -void wxPropertyGrid::SendNavigationKeyEvent( int dir ) -{ - wxNavigationKeyEvent evt; - evt.SetFlags(wxNavigationKeyEvent::FromTab| - (dir?wxNavigationKeyEvent::IsForward: - wxNavigationKeyEvent::IsBackward)); - evt.SetEventObject(this); - m_canvas->GetEventHandler()->AddPendingEvent(evt); -} - - int wxPropertyGrid::KeyEventToActions(wxKeyEvent &event, int* pSecond) const { // Translates wxKeyEvent to wxPG_ACTION_XXX @@ -4950,10 +4936,8 @@ void wxPropertyGrid::HandleKeyEvent(wxKeyEvent &event) if ( keycode == WXK_TAB ) { - if ( HasFlag(wxTAB_TRAVERSAL) ) - SendNavigationKeyEvent( event.ShiftDown()?0:1 ); - else - event.Skip(); + if (m_selected) + DoSelectProperty( m_selected, wxPG_SEL_FOCUS ); return; } @@ -5075,7 +5059,6 @@ bool wxPropertyGrid::HandleChildKey( wxKeyEvent& event ) OnValidationFailureReset(m_selected); res = false; - UnfocusEditor(); } else if ( action == wxPG_ACTION_COPY ) @@ -5144,25 +5127,7 @@ bool wxPropertyGrid::HandleChildKey( wxKeyEvent& event ) void wxPropertyGrid::OnKey( wxKeyEvent &event ) { - - // - // Events to editor controls should get relayed here. - // - wxWindow* focused = wxWindow::FindFocus(); - - wxWindow* primaryCtrl = GetEditorControl(); - - if ( primaryCtrl && - (focused==primaryCtrl - || m_editorFocused) ) - { - // Child key must be processed here, since it can - // destroy the control which is referred by its own - // event handling. - HandleChildKey( event ); - } - else - HandleKeyEvent( event ); + HandleKeyEvent( event ); } // ----------------------------------------------------------------------- @@ -5174,88 +5139,6 @@ void wxPropertyGrid::OnKeyUp(wxKeyEvent &event) // ----------------------------------------------------------------------- -void wxPropertyGrid::OnNavigationKey( wxNavigationKeyEvent& event ) -{ - // Ignore events that occur very close to focus set - if ( m_iFlags & wxPG_FL_IGNORE_NEXT_NAVKEY ) - { - m_iFlags &= ~(wxPG_FL_IGNORE_NEXT_NAVKEY); - event.Skip(); - return; - } - - wxPGProperty* next = (wxPGProperty*) NULL; - - int dir = event.GetDirection()?1:-1; - - if ( m_selected ) - { - if ( dir == 1 && (m_wndEditor || m_wndEditor2) ) - { - wxWindow* focused = wxWindow::FindFocus(); - - wxWindow* wndToCheck = GetEditorControl(); - - // ODComboBox focus goes to its text ctrl, so we need to use it instead - if ( wndToCheck && wndToCheck->IsKindOf(CLASSINFO(wxOwnerDrawnComboBox)) ) - { - wxTextCtrl* comboTextCtrl = ((wxOwnerDrawnComboBox*)wndToCheck)->GetTextCtrl(); - if ( comboTextCtrl ) - wndToCheck = comboTextCtrl; - } - - /* - // Because of problems navigating from wxButton, do not go to it. - if ( !wndToCheck ) - { - // No primary, use secondary - wndToCheck = m_wndEditor2; - } - // If it has editor button, focus to it after the primary editor. - // NB: Doesn't work since wxButton on wxMSW doesn't seem to propagate - // key events (yes, I'm using wxWANTS_CHARS with it, and yes I - // have somewhat debugged in window.cpp itself). - else if ( focused == wndToCheck && - m_wndEditor2 && - !(GetExtraStyle() & wxPG_EX_NO_TAB_TO_BUTTON) ) - { - wndToCheck = m_wndEditor2; - wxLogDebug(wxT("Exp1")); - } - */ - - if ( focused != wndToCheck && - wndToCheck ) - { - wndToCheck->SetFocus(); - - // Select all text in wxTextCtrl etc. - if ( m_wndEditor && wndToCheck == m_wndEditor ) - m_selected->GetEditorClass()->OnFocus(m_selected,wndToCheck); - - m_editorFocused = 1; - next = m_selected; - } - } - - if ( !next ) - { - next = wxPropertyGridIterator::OneStep(m_pState, wxPG_ITERATE_VISIBLE, m_selected, dir); - - if ( next ) - { - // This allows preventing NavigateOut to occur - DoSelectProperty( next, wxPG_SEL_FOCUS ); - } - } - } - - if ( !next ) - event.Skip(); -} - -// ----------------------------------------------------------------------- - bool wxPropertyGrid::ButtonTriggerKeyTest( int action, wxKeyEvent& event ) { if ( action == -1 ) @@ -5347,13 +5230,8 @@ void wxPropertyGrid::HandleFocusChange( wxWindow* newFocused ) if ( (m_iFlags & wxPG_FL_FOCUSED) != (oldFlags & wxPG_FL_FOCUSED) ) { - // On each focus kill, mark the next nav key event - // to be ignored (can't do on set focus since the - // event would occur before it). if ( !(m_iFlags & wxPG_FL_FOCUSED) ) { - m_iFlags |= wxPG_FL_IGNORE_NEXT_NAVKEY; - // Need to store changed value CommitChangesFromEditor(); } @@ -5386,8 +5264,6 @@ void wxPropertyGrid::HandleFocusChange( wxWindow* newFocused ) } */ - - m_iFlags &= ~(wxPG_FL_IGNORE_NEXT_NAVKEY); } // Redraw selected -- 2.45.2