From 6fc13fb03bc96eda65b91fd65ada26a162437404 Mon Sep 17 00:00:00 2001 From: Michael Weghorn Date: Thu, 23 Jan 2025 15:01:15 +0100 Subject: toolkit: Move TableControl key input logic into that class Move logic from DefaultInputHandler::KeyInput into the only caller, TableControl::KeyInput. Drop ITableControl::dispatchAction from that interface as TableControl is now the only caller and that one knows that it's TableControl::m_pImpl is a TableControl_Impl. Change-Id: I0445ce10f8abee17ab6e4895aba5adf42974721b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180662 Tested-by: Jenkins Reviewed-by: Michael Weghorn --- .../source/controls/table/defaultinputhandler.cxx | 45 ---------------------- toolkit/source/controls/table/tablecontrol.cxx | 43 ++++++++++++++++++++- .../source/controls/table/tablecontrol_impl.hxx | 14 ++++++- 3 files changed, 55 insertions(+), 47 deletions(-) (limited to 'toolkit/source/controls') diff --git a/toolkit/source/controls/table/defaultinputhandler.cxx b/toolkit/source/controls/table/defaultinputhandler.cxx index ef6e250547f8..ba00f0bb9384 100644 --- a/toolkit/source/controls/table/defaultinputhandler.cxx +++ b/toolkit/source/controls/table/defaultinputhandler.cxx @@ -114,51 +114,6 @@ namespace svt::table return delegateMouseEvent( i_tableControl, i_event, &MouseFunction::handleMouseUp ); } - - bool DefaultInputHandler::KeyInput( ITableControl& _rControl, const KeyEvent& rKEvt ) - { - bool bHandled = false; - - const vcl::KeyCode& rKeyCode = rKEvt.GetKeyCode(); - sal_uInt16 nKeyCode = rKeyCode.GetCode(); - - struct ActionMapEntry - { - sal_uInt16 nKeyCode; - sal_uInt16 nKeyModifier; - TableControlAction eAction; - } - static const aKnownActions[] = { - { KEY_DOWN, 0, TableControlAction::cursorDown }, - { KEY_UP, 0, TableControlAction::cursorUp }, - { KEY_LEFT, 0, TableControlAction::cursorLeft }, - { KEY_RIGHT, 0, TableControlAction::cursorRight }, - { KEY_HOME, 0, TableControlAction::cursorToLineStart }, - { KEY_END, 0, TableControlAction::cursorToLineEnd }, - { KEY_PAGEUP, 0, TableControlAction::cursorPageUp }, - { KEY_PAGEDOWN, 0, TableControlAction::cursorPageDown }, - { KEY_PAGEUP, KEY_MOD1, TableControlAction::cursorToFirstLine }, - { KEY_PAGEDOWN, KEY_MOD1, TableControlAction::cursorToLastLine }, - { KEY_HOME, KEY_MOD1, TableControlAction::cursorTopLeft }, - { KEY_END, KEY_MOD1, TableControlAction::cursorBottomRight }, - { KEY_SPACE, KEY_MOD1, TableControlAction::cursorSelectRow }, - { KEY_UP, KEY_SHIFT, TableControlAction::cursorSelectRowUp }, - { KEY_DOWN, KEY_SHIFT, TableControlAction::cursorSelectRowDown }, - { KEY_END, KEY_SHIFT, TableControlAction::cursorSelectRowAreaBottom }, - { KEY_HOME, KEY_SHIFT, TableControlAction::cursorSelectRowAreaTop } - }; - for (const ActionMapEntry& rAction : aKnownActions) - { - if ( ( rAction.nKeyCode == nKeyCode ) && ( rAction.nKeyModifier == rKeyCode.GetModifier() ) ) - { - bHandled = _rControl.dispatchAction( rAction.eAction ); - break; - } - } - - return bHandled; - } - } // namespace svt::table diff --git a/toolkit/source/controls/table/tablecontrol.cxx b/toolkit/source/controls/table/tablecontrol.cxx index bde7d9788126..c5b5ef1c6b78 100644 --- a/toolkit/source/controls/table/tablecontrol.cxx +++ b/toolkit/source/controls/table/tablecontrol.cxx @@ -96,7 +96,48 @@ namespace svt::table void TableControl::KeyInput( const KeyEvent& rKEvt ) { - if (!m_pImpl || !DefaultInputHandler::KeyInput(*m_pImpl, rKEvt)) + bool bHandled = false; + if (m_pImpl) + { + const vcl::KeyCode& rKeyCode = rKEvt.GetKeyCode(); + sal_uInt16 nKeyCode = rKeyCode.GetCode(); + + struct ActionMapEntry + { + sal_uInt16 nKeyCode; + sal_uInt16 nKeyModifier; + TableControlAction eAction; + } + static const aKnownActions[] = { + { KEY_DOWN, 0, TableControlAction::cursorDown }, + { KEY_UP, 0, TableControlAction::cursorUp }, + { KEY_LEFT, 0, TableControlAction::cursorLeft }, + { KEY_RIGHT, 0, TableControlAction::cursorRight }, + { KEY_HOME, 0, TableControlAction::cursorToLineStart }, + { KEY_END, 0, TableControlAction::cursorToLineEnd }, + { KEY_PAGEUP, 0, TableControlAction::cursorPageUp }, + { KEY_PAGEDOWN, 0, TableControlAction::cursorPageDown }, + { KEY_PAGEUP, KEY_MOD1, TableControlAction::cursorToFirstLine }, + { KEY_PAGEDOWN, KEY_MOD1, TableControlAction::cursorToLastLine }, + { KEY_HOME, KEY_MOD1, TableControlAction::cursorTopLeft }, + { KEY_END, KEY_MOD1, TableControlAction::cursorBottomRight }, + { KEY_SPACE, KEY_MOD1, TableControlAction::cursorSelectRow }, + { KEY_UP, KEY_SHIFT, TableControlAction::cursorSelectRowUp }, + { KEY_DOWN, KEY_SHIFT, TableControlAction::cursorSelectRowDown }, + { KEY_END, KEY_SHIFT, TableControlAction::cursorSelectRowAreaBottom }, + { KEY_HOME, KEY_SHIFT, TableControlAction::cursorSelectRowAreaTop } + }; + for (const ActionMapEntry& rAction : aKnownActions) + { + if ((rAction.nKeyCode == nKeyCode) && (rAction.nKeyModifier == rKeyCode.GetModifier())) + { + bHandled = m_pImpl->dispatchAction(rAction.eAction); + break; + } + } + } + + if (!bHandled) Control::KeyInput( rKEvt ); else { diff --git a/toolkit/source/controls/table/tablecontrol_impl.hxx b/toolkit/source/controls/table/tablecontrol_impl.hxx index db17ef85fdfe..a2fc6ec873d7 100644 --- a/toolkit/source/controls/table/tablecontrol_impl.hxx +++ b/toolkit/source/controls/table/tablecontrol_impl.hxx @@ -244,7 +244,19 @@ namespace svt::table // ITableControl virtual void hideCursor() override; virtual void showCursor() override; - virtual bool dispatchAction( TableControlAction _eAction ) override; + + /** dispatches an action to the table control + + @return + if the action could be dispatched successfully, otherwise. Usual + failure conditions include some other instance vetoing the action, or impossibility + to execute the action at all (for instance moving up one row when already positioned + on the very first row). + + @see TableControlAction + */ + virtual bool dispatchAction(TableControlAction _eAction); + virtual SelectionEngine* getSelEngine() override; virtual PTableModel getModel() const override; virtual ColPos getCurrentColumn() const override; -- cgit