summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/svtools/brwbox.hxx2
-rw-r--r--include/svtools/editbrowsebox.hxx2
-rw-r--r--svtools/source/brwbox/editbrowsebox.cxx202
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);