diff options
-rw-r--r-- | include/svtools/brwbox.hxx | 2 | ||||
-rw-r--r-- | include/svtools/editbrowsebox.hxx | 2 | ||||
-rw-r--r-- | svtools/source/brwbox/editbrowsebox.cxx | 202 |
3 files changed, 107 insertions, 99 deletions
diff --git a/include/svtools/brwbox.hxx b/include/svtools/brwbox.hxx index df19ecf02a1b..67a3e8fdbb7a 100644 --- a/include/svtools/brwbox.hxx +++ b/include/svtools/brwbox.hxx @@ -587,7 +587,7 @@ public: // miscellaneous bool ReserveControlArea(sal_uInt16 nWidth = USHRT_MAX); tools::Rectangle GetControlArea() const; - bool ProcessKey( const KeyEvent& rEvt ); + virtual bool ProcessKey(const KeyEvent& rEvt); void Dispatch( sal_uInt16 nId ); void SetMode( BrowserMode nMode ); BrowserMode GetMode( ) const { return m_nCurrentMode; } diff --git a/include/svtools/editbrowsebox.hxx b/include/svtools/editbrowsebox.hxx index c86d1745155b..1e24ced1d8ed 100644 --- a/include/svtools/editbrowsebox.hxx +++ b/include/svtools/editbrowsebox.hxx @@ -810,6 +810,8 @@ namespace svt virtual tools::Rectangle GetFieldCharacterBounds(sal_Int32 _nRow,sal_Int32 _nColumnPos,sal_Int32 nIndex) override; virtual sal_Int32 GetFieldIndexAtPoint(sal_Int32 _nRow,sal_Int32 _nColumnPos,const Point& _rPoint) override; + virtual bool ProcessKey(const KeyEvent& rEvt) override; + css::uno::Reference< css::accessibility::XAccessible > CreateAccessibleCheckBoxCell(long _nRow, sal_uInt16 _nColumnPos,const TriState& eState); protected: // creates the accessible which wraps the active cell diff --git a/svtools/source/brwbox/editbrowsebox.cxx b/svtools/source/brwbox/editbrowsebox.cxx index 1f79a3686474..4328e22d5ee8 100644 --- a/svtools/source/brwbox/editbrowsebox.cxx +++ b/svtools/source/brwbox/editbrowsebox.cxx @@ -541,118 +541,124 @@ namespace svt BrowseBox::Dispatch( _nId ); } - bool EditBrowseBox::PreNotify(NotifyEvent& rEvt) - { - if (rEvt.GetType() == MouseNotifyEvent::KEYINPUT) - { - if ( (IsEditing() && Controller()->GetWindow().HasChildPathFocus()) - || rEvt.GetWindow() == &GetDataWindow() - || (!IsEditing() && HasChildPathFocus()) - ) + bool EditBrowseBox::ProcessKey(const KeyEvent& rKeyEvent) + { + sal_uInt16 nCode = rKeyEvent.GetKeyCode().GetCode(); + bool bShift = rKeyEvent.GetKeyCode().IsShift(); + bool bCtrl = rKeyEvent.GetKeyCode().IsMod1(); + bool bAlt = rKeyEvent.GetKeyCode().IsMod2(); + bool bLocalSelect = false; + bool bNonEditOnly = false; + sal_uInt16 nId = BROWSER_NONE; + + if (!bAlt && !bCtrl && !bShift ) + switch ( nCode ) { - const KeyEvent* pKeyEvent = rEvt.GetKeyEvent(); - sal_uInt16 nCode = pKeyEvent->GetKeyCode().GetCode(); - bool bShift = pKeyEvent->GetKeyCode().IsShift(); - bool bCtrl = pKeyEvent->GetKeyCode().IsMod1(); - bool bAlt = pKeyEvent->GetKeyCode().IsMod2(); - bool bLocalSelect = false; - bool bNonEditOnly = false; - sal_uInt16 nId = BROWSER_NONE; - - if (!bAlt && !bCtrl && !bShift ) - switch ( nCode ) - { - case KEY_DOWN: nId = BROWSER_CURSORDOWN; break; - case KEY_UP: nId = BROWSER_CURSORUP; break; - case KEY_PAGEDOWN: nId = BROWSER_CURSORPAGEDOWN; break; - case KEY_PAGEUP: nId = BROWSER_CURSORPAGEUP; break; - case KEY_HOME: nId = BROWSER_CURSORHOME; break; - case KEY_END: nId = BROWSER_CURSOREND; break; - - case KEY_TAB: - // ask if traveling to the next cell is allowed - if (IsTabAllowed(true)) - nId = BROWSER_CURSORRIGHT; - break; - - case KEY_RETURN: - // save the cell content (if necessary) - if (IsEditing() && aController->IsValueChangedFromSaved() && !SaveModified()) - { - // maybe we're not visible ... - EnableAndShow(); - aController->GetWindow().GrabFocus(); - return true; - } - // ask if traveling to the next cell is allowed - if (IsTabAllowed(true)) - nId = BROWSER_CURSORRIGHT; - - break; - case KEY_RIGHT: nId = BROWSER_CURSORRIGHT; break; - case KEY_LEFT: nId = BROWSER_CURSORLEFT; break; - case KEY_SPACE: nId = BROWSER_SELECT; bNonEditOnly = bLocalSelect = true; break; - } + case KEY_DOWN: nId = BROWSER_CURSORDOWN; break; + case KEY_UP: nId = BROWSER_CURSORUP; break; + case KEY_PAGEDOWN: nId = BROWSER_CURSORPAGEDOWN; break; + case KEY_PAGEUP: nId = BROWSER_CURSORPAGEUP; break; + case KEY_HOME: nId = BROWSER_CURSORHOME; break; + case KEY_END: nId = BROWSER_CURSOREND; break; + + case KEY_TAB: + // ask if traveling to the next cell is allowed + if (IsTabAllowed(true)) + nId = BROWSER_CURSORRIGHT; + break; - if ( !bAlt && !bCtrl && bShift ) - switch ( nCode ) + case KEY_RETURN: + // save the cell content (if necessary) + if (IsEditing() && aController->IsValueChangedFromSaved() && !SaveModified()) { - case KEY_DOWN: nId = BROWSER_SELECTDOWN; bLocalSelect = true; break; - case KEY_UP: nId = BROWSER_SELECTUP; bLocalSelect = true; break; - case KEY_HOME: nId = BROWSER_SELECTHOME; bLocalSelect = true; break; - case KEY_END: nId = BROWSER_SELECTEND; bLocalSelect = true; break; - case KEY_TAB: - if (IsTabAllowed(false)) - nId = BROWSER_CURSORLEFT; - break; + // maybe we're not visible ... + EnableAndShow(); + aController->GetWindow().GrabFocus(); + return true; } + // ask if traveling to the next cell is allowed + if (IsTabAllowed(true)) + nId = BROWSER_CURSORRIGHT; - if ( !bAlt && bCtrl && bShift ) - switch ( nCode ) - { - case KEY_SPACE: nId = BROWSER_SELECTCOLUMN; bLocalSelect = true; break; - } + break; + case KEY_RIGHT: nId = BROWSER_CURSORRIGHT; break; + case KEY_LEFT: nId = BROWSER_CURSORLEFT; break; + case KEY_SPACE: nId = BROWSER_SELECT; bNonEditOnly = bLocalSelect = true; break; + } + if ( !bAlt && !bCtrl && bShift ) + switch ( nCode ) + { + case KEY_DOWN: nId = BROWSER_SELECTDOWN; bLocalSelect = true; break; + case KEY_UP: nId = BROWSER_SELECTUP; bLocalSelect = true; break; + case KEY_HOME: nId = BROWSER_SELECTHOME; bLocalSelect = true; break; + case KEY_END: nId = BROWSER_SELECTEND; bLocalSelect = true; break; + case KEY_TAB: + if (IsTabAllowed(false)) + nId = BROWSER_CURSORLEFT; + break; + } - if ( !bAlt && bCtrl && !bShift ) - switch ( nCode ) - { - case KEY_DOWN: nId = BROWSER_SCROLLUP; break; - case KEY_UP: nId = BROWSER_SCROLLDOWN; break; - case KEY_PAGEDOWN: nId = BROWSER_CURSORENDOFFILE; break; - case KEY_PAGEUP: nId = BROWSER_CURSORTOPOFFILE; break; - case KEY_HOME: nId = BROWSER_CURSORTOPOFSCREEN; break; - case KEY_END: nId = BROWSER_CURSORENDOFSCREEN; break; - case KEY_SPACE: nId = BROWSER_ENHANCESELECTION; bLocalSelect = true; break; - } + if ( !bAlt && bCtrl && bShift ) + switch ( nCode ) + { + case KEY_SPACE: nId = BROWSER_SELECTCOLUMN; bLocalSelect = true; break; + } + + + if ( !bAlt && bCtrl && !bShift ) + switch ( nCode ) + { + case KEY_DOWN: nId = BROWSER_SCROLLUP; break; + case KEY_UP: nId = BROWSER_SCROLLDOWN; break; + case KEY_PAGEDOWN: nId = BROWSER_CURSORENDOFFILE; break; + case KEY_PAGEUP: nId = BROWSER_CURSORTOPOFFILE; break; + case KEY_HOME: nId = BROWSER_CURSORTOPOFSCREEN; break; + case KEY_END: nId = BROWSER_CURSORENDOFSCREEN; break; + case KEY_SPACE: nId = BROWSER_ENHANCESELECTION; bLocalSelect = true; break; + } - if ( ( nId != BROWSER_NONE ) - && ( !IsEditing() - || ( !bNonEditOnly - && aController->MoveAllowed( *pKeyEvent ) - ) - ) + if ( ( nId != BROWSER_NONE ) + && ( !IsEditing() + || ( !bNonEditOnly + && aController->MoveAllowed(rKeyEvent) ) + ) + ) + { + if (nId == BROWSER_SELECT || BROWSER_SELECTCOLUMN == nId ) + { + // save the cell content (if necessary) + if (IsEditing() && aController->IsValueChangedFromSaved() && !SaveModified()) { - if (nId == BROWSER_SELECT || BROWSER_SELECTCOLUMN == nId ) - { - // save the cell content (if necessary) - if (IsEditing() && aController->IsValueChangedFromSaved() && !SaveModified()) - { - // maybe we're not visible ... - EnableAndShow(); - aController->GetWindow().GrabFocus(); - return true; - } - } + // maybe we're not visible ... + EnableAndShow(); + aController->GetWindow().GrabFocus(); + return true; + } + } - Dispatch(nId); + Dispatch(nId); - if (bLocalSelect && (GetSelectRowCount() || GetSelection() != nullptr)) - DeactivateCell(); + if (bLocalSelect && (GetSelectRowCount() || GetSelection() != nullptr)) + DeactivateCell(); + return true; + } + return false; + } + + bool EditBrowseBox::PreNotify(NotifyEvent& rEvt) + { + if (rEvt.GetType() == MouseNotifyEvent::KEYINPUT) + { + if ( (IsEditing() && Controller()->GetWindow().HasChildPathFocus()) + || rEvt.GetWindow() == &GetDataWindow() + || (!IsEditing() && HasChildPathFocus()) + ) + { + if (ProcessKey(*rEvt.GetKeyEvent())) return true; - } } } return BrowseBox::PreNotify(rEvt); |