From 1140ba710f5f138936cbfa866a0b1767ee9adcff Mon Sep 17 00:00:00 2001 From: dish Date: Thu, 12 Sep 2024 05:19:32 +0000 Subject: [PATCH] [bos #42003][EDF] (2024) Shortcuts improvements Multiple changes: 0) Add possibility to nest action into folders or folder-actions. Show shortcuts of different modules in separate tab; 1) Make undo/redo action meta-actions; 2) Add default icons; 3) Style descendant folders if ascendant key sequence is modified; Highlight tab if key sequence of a shortcut in a module is modified; 4) Show tooltips in Shortcut Editor; 5) Adjust column widths in Shortcut Editor; 6) Add search in Shortcut Editor; 7) Make logging clearer; 8) Add SUIT_ShortcutMgr::createAction(..); 9) Update doc; 10) Methods, which retrieve action assets, look into root module asset file if the action is meta-action; 11) Since action IDs were changed (at least they were prepended with folder IDs), but old IDs remain in user preference files, there were conflicts; To avoid this, name of shortcut section was appended with version of shortcut mgr; 12) Allow "Del" key to be set in Shortcut Editor. --- src/CAM/CAM_Module.cxx | 18 +- src/LightApp/LightApp_Application.cxx | 13 +- src/LightApp/LightApp_Module.cxx | 4 +- src/LightApp/resources/LightApp.xml | 90 +- src/OCCViewer/OCCViewer_ViewWindow.cxx | 18 +- src/Qtx/Qtx.qrc | 2 - src/Qtx/QtxAction.cxx | 8 +- src/Qtx/QtxWorkstack.cxx | 4 +- src/Qtx/QtxWorkstackAction.cxx | 4 +- src/STD/STD_Application.cxx | 20 +- src/SUIT/CMakeLists.txt | 16 +- src/SUIT/SUIT.qrc | 14 + src/SUIT/SUIT_FindActionDialog.cxx | 364 +-- src/SUIT/SUIT_FindActionDialog.h | 106 +- src/SUIT/SUIT_PagePrefShortcutTreeItem.cxx | 15 +- src/SUIT/SUIT_PagePrefShortcutTreeItem.h | 12 +- src/SUIT/SUIT_ShortcutEditor.cxx | 1195 ++++++++++ src/SUIT/SUIT_ShortcutEditor.h | 391 ++++ src/SUIT/SUIT_ShortcutMgr. ReadMe.md | 26 +- src/SUIT/SUIT_ShortcutMgr.cxx | 1974 +++++++++++------ src/SUIT/SUIT_ShortcutMgr.h | 611 +++-- src/SUIT/SUIT_ShortcutTree.cxx | 880 -------- src/SUIT/SUIT_ShortcutTree.h | 265 --- src/SUIT/Tools/SUIT_SentenceMatcher.cxx | 271 +++ src/SUIT/Tools/SUIT_SentenceMatcher.h | 103 + src/SUIT/Tools/SUIT_extensions.cxx | 75 + src/SUIT/Tools/SUIT_extensions.h | 87 + src/SUIT/resources/SUIT_msg_fr.ts | 26 + src/SUIT/resources/SUIT_msg_ja.ts | 30 +- src/SUIT/resources/action_assets.json | 1606 ++++++++------ src/SUIT/resources/default_action_icon.svg | 50 + .../resources/default_folder_action_icon.svg | 82 + src/SUIT/resources/default_folder_icon.svg | 74 + src/SUIT/resources/find.svg | 85 + .../resources}/shortcut_disable.svg | 0 .../resources}/shortcut_restore.svg | 0 src/SUIT/resources/sort_ascending.svg | 64 + .../resources/sort_ascending_leading_key.svg | 64 + src/SUIT/resources/sort_descending.svg | 64 + .../resources/sort_descending_leading_key.svg | 64 + src/SVTK/SVTK_ViewWindow.cxx | 18 +- src/SalomeApp/SalomeApp_Application.cxx | 14 +- .../ShortcutMgr. Resource generator.xlsx | Bin 901981 -> 0 bytes 43 files changed, 5721 insertions(+), 3106 deletions(-) create mode 100644 src/SUIT/SUIT.qrc create mode 100644 src/SUIT/SUIT_ShortcutEditor.cxx create mode 100644 src/SUIT/SUIT_ShortcutEditor.h delete mode 100644 src/SUIT/SUIT_ShortcutTree.cxx delete mode 100644 src/SUIT/SUIT_ShortcutTree.h create mode 100644 src/SUIT/Tools/SUIT_SentenceMatcher.cxx create mode 100644 src/SUIT/Tools/SUIT_SentenceMatcher.h create mode 100644 src/SUIT/Tools/SUIT_extensions.cxx create mode 100644 src/SUIT/Tools/SUIT_extensions.h create mode 100755 src/SUIT/resources/default_action_icon.svg create mode 100755 src/SUIT/resources/default_folder_action_icon.svg create mode 100755 src/SUIT/resources/default_folder_icon.svg create mode 100644 src/SUIT/resources/find.svg rename src/{Qtx/images => SUIT/resources}/shortcut_disable.svg (100%) rename src/{Qtx/images => SUIT/resources}/shortcut_restore.svg (100%) create mode 100644 src/SUIT/resources/sort_ascending.svg create mode 100644 src/SUIT/resources/sort_ascending_leading_key.svg create mode 100644 src/SUIT/resources/sort_descending.svg create mode 100644 src/SUIT/resources/sort_descending_leading_key.svg delete mode 100644 tools/DevTools/ShortcutMgr/ShortcutMgr. Resource generator.xlsx diff --git a/src/CAM/CAM_Module.cxx b/src/CAM/CAM_Module.cxx index a88c8e721..a56b92da8 100644 --- a/src/CAM/CAM_Module.cxx +++ b/src/CAM/CAM_Module.cxx @@ -984,19 +984,19 @@ int CAM_Module::actionId( const QAction* a ) const \param icon action icon \param menu menu text \param tip status bar tip - \param key will be disabled by SUIT_ShortcutMgr! + \param key May be disabled by SUIT_ShortcutMgr! \param parent parent object \param toggle if \c true, the action will be toggled - \param reciever action activation signal receiver object + \param receiver action activation signal receiver object \param member action activation signal receiver slot \param inModuleActionID module-unique action ID */ QAction* CAM_Module::createAction( const int id, const QString& text, const QIcon& icon, const QString& menu, const QString& tip, const int key, - QObject* parent, const bool toggle, QObject* reciever, + QObject* parent, const bool toggle, QObject* receiver, const char* member, const QString& inModuleActionID ) { - return createAction( id, text, icon, menu, tip, QKeySequence(key), parent, toggle, reciever, member, inModuleActionID ); + return createAction( id, text, icon, menu, tip, QKeySequence(key), parent, toggle, receiver, member, inModuleActionID ); } /*! @@ -1012,16 +1012,16 @@ QAction* CAM_Module::createAction( const int id, const QString& text, const QIco \param icon action icon \param menu menu text \param tip status bar tip - \param key will be disabled by SUIT_ShortcutMgr! + \param key May be disabled by SUIT_ShortcutMgr! \param parent parent object \param toggle if \c true, the action will be toggled - \param reciever action activation signal receiver object + \param receiver action activation signal receiver object \param member action activation signal receiver slot \param inModuleActionID module-unique action ID */ QAction* CAM_Module::createAction( const int id, const QString& text, const QIcon& icon, const QString& menu, const QString& tip, const QKeySequence& key, - QObject* parent, const bool toggle, QObject* reciever, + QObject* parent, const bool toggle, QObject* receiver, const char* member, const QString& inModuleActionID ) { const QString actionID = makeActionID(inModuleActionID); @@ -1030,8 +1030,8 @@ QAction* CAM_Module::createAction( const int id, const QString& text, const QIco connect( a, SIGNAL( triggered( bool ) ), this, SLOT( moduleActionActivated() ), Qt::UniqueConnection ); - if ( reciever && member ) - connect( a, SIGNAL( triggered( bool ) ), reciever, member ); + if ( receiver && member ) + connect( a, SIGNAL( triggered( bool ) ), receiver, member ); registerAction( id, a ); diff --git a/src/LightApp/LightApp_Application.cxx b/src/LightApp/LightApp_Application.cxx index a83faafc4..edd729cb7 100644 --- a/src/LightApp/LightApp_Application.cxx +++ b/src/LightApp/LightApp_Application.cxx @@ -646,7 +646,7 @@ void LightApp_Application::createActionForViewer( const int id, { QString vtlt = tr( QString( "NEW_WINDOW_%1" ).arg( suffix ).toLatin1().constData() ); QString tip = tr( "CREATING_NEW_WINDOW" ).arg( vtlt.remove( "&" ) ); - QAction* a = createAction(id, desktop(), false /*toggle*/, "/PRP_CREATE_NEW_WINDOW_FOR_VIEWER_" + suffix, + QAction* a = createAction(id, desktop(), false /*toggle*/, "/Window/New/ForViewer" + suffix, tip, vtlt, tip, QIcon(), this, SLOT(onNewWindow())); @@ -665,7 +665,7 @@ void LightApp_Application::createActions() // Preferences createAction( PreferencesId, tr( "TOT_DESK_PREFERENCES" ), QIcon(), tr( "MEN_DESK_PREFERENCES" ), tr( "PRP_DESK_PREFERENCES" ), - QKeySequence::UnknownKey, desk, false, this, SLOT( onPreferences() ), "/PRP_DESK_PREFERENCES" ); + QKeySequence::UnknownKey, desk, false, this, SLOT( onPreferences() ), "/File/Preferences" ); // Help menu @@ -791,10 +791,7 @@ void LightApp_Application::createActions() int windowMenu = createMenu( tr( "MEN_DESK_WINDOW" ), -1, MenuWindowId, 100 ); int newWinMenu = createMenu( tr( "MEN_DESK_NEWWINDOW" ), windowMenu, -1, 0 ); - createAction( CloseId, tr( "TOT_CLOSE" ), QIcon(), tr( "MEN_DESK_CLOSE" ), tr( "PRP_CLOSE" ), - Qt::CTRL+Qt::Key_F4, desk, false, this, SLOT( onCloseWindow() ) ); - - createAction( CloseId, desk, false /*toggle*/, "/PRP_CLOSE", + createAction( CloseId, desk, false /*toggle*/, "/Window/Close", tr( "TOT_CLOSE" ), tr( "MEN_DESK_CLOSE" ), tr( "PRP_CLOSE" ), QIcon(), this, SLOT( onCloseWindow() ) ); @@ -839,7 +836,7 @@ void LightApp_Application::createActions() createActionForViewer( NewQtViewId, newWinMenu, QString::number( 9 ) ); #endif - createAction( RenameId, desk, false /*toggle*/, "/PRP_RENAME", + createAction( RenameId, desk, false /*toggle*/, "/Window/Rename", tr( "TOT_RENAME" ), tr( "MEN_DESK_RENAME" ), tr( "PRP_RENAME" ), QIcon(), this, SLOT( onRenameWindow() ) ); @@ -859,7 +856,7 @@ void LightApp_Application::createActions() #endif // USE_SALOME_STYLE createAction( FullScreenId, tr( "TOT_FULLSCREEN" ), QIcon(), tr( "MEN_DESK_FULLSCREEN" ), tr( "PRP_FULLSCREEN" ), - QKeySequence::UnknownKey, desk, false, this, SLOT( onFullScreen() ), "/PRP_FULLSCREEN" ); + QKeySequence::UnknownKey, desk, false, this, SLOT( onFullScreen() ), "/View/FullScreen" ); int viewMenu = createMenu( tr( "MEN_DESK_VIEW" ), -1 ); diff --git a/src/LightApp/LightApp_Module.cxx b/src/LightApp/LightApp_Module.cxx index 903a037ca..a27c28845 100644 --- a/src/LightApp/LightApp_Module.cxx +++ b/src/LightApp/LightApp_Module.cxx @@ -455,9 +455,9 @@ QtxPopupMgr* LightApp_Module::popupMgr() QAction *disp = createAction( -1, tr( "TOP_SHOW" ), p, tr( "MEN_SHOW" ), tr( "STB_SHOW" ), - 0, d, false, this, SLOT( onShowHide() ), QString("#General/Object(s)/Show") ), + 0, d, false, this, SLOT( onShowHide() ), QString("Edit/#Object_Show") ), *erase = createAction( -1, tr( "TOP_HIDE" ), p, tr( "MEN_HIDE" ), tr( "STB_HIDE" ), - 0, d, false, this, SLOT( onShowHide() ) , QString("#General/Object(s)/Hide") ), + 0, d, false, this, SLOT( onShowHide() ) , QString("Edit/#Object_Hide") ), *dispOnly = createAction( -1, tr( "TOP_DISPLAY_ONLY" ), p, tr( "MEN_DISPLAY_ONLY" ), tr( "STB_DISPLAY_ONLY" ), 0, d, false, this, SLOT( onShowHide() ) ), *eraseAll = createAction( -1, tr( "TOP_ERASE_ALL" ), p, tr( "MEN_ERASE_ALL" ), tr( "STB_ERASE_ALL" ), diff --git a/src/LightApp/resources/LightApp.xml b/src/LightApp/resources/LightApp.xml index 3ba6a36e5..5e0d3cbf8 100644 --- a/src/LightApp/resources/LightApp.xml +++ b/src/LightApp/resources/LightApp.xml @@ -256,51 +256,53 @@ -
+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/OCCViewer/OCCViewer_ViewWindow.cxx b/src/OCCViewer/OCCViewer_ViewWindow.cxx index 372b9145a..f83c4f8ad 100644 --- a/src/OCCViewer/OCCViewer_ViewWindow.cxx +++ b/src/OCCViewer/OCCViewer_ViewWindow.cxx @@ -1291,42 +1291,42 @@ void OCCViewer_ViewWindow::createActions() // Projections aAction = new QtxAction(tr("MNU_FRONT_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_FRONT" ) ), - tr( "MNU_FRONT_VIEW" ), 0, this, false, "/#Viewers/View/Set X-"); + tr( "MNU_FRONT_VIEW" ), 0, this, false, "/View/ViewPoint/#SetDirOX-"); aAction->setStatusTip(tr("DSC_FRONT_VIEW")); connect(aAction, SIGNAL(triggered()), this, SLOT(onFrontView())); this->addAction(aAction); toolMgr()->registerAction( aAction, FrontId ); aAction = new QtxAction(tr("MNU_BACK_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_BACK" ) ), - tr( "MNU_BACK_VIEW" ), 0, this, false, "/#Viewers/View/Set X+"); + tr( "MNU_BACK_VIEW" ), 0, this, false, "/View/ViewPoint/#SetDirOX+"); aAction->setStatusTip(tr("DSC_BACK_VIEW")); connect(aAction, SIGNAL(triggered()), this, SLOT(onBackView())); this->addAction(aAction); toolMgr()->registerAction( aAction, BackId ); aAction = new QtxAction(tr("MNU_TOP_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_TOP" ) ), - tr( "MNU_TOP_VIEW" ), 0, this, false, "/#Viewers/View/Set Z-"); + tr( "MNU_TOP_VIEW" ), 0, this, false, "/View/ViewPoint/#SetDirOZ-"); aAction->setStatusTip(tr("DSC_TOP_VIEW")); connect(aAction, SIGNAL(triggered()), this, SLOT(onTopView())); this->addAction(aAction); toolMgr()->registerAction( aAction, TopId ); aAction = new QtxAction(tr("MNU_BOTTOM_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_BOTTOM" ) ), - tr( "MNU_BOTTOM_VIEW" ), 0, this, false, "/#Viewers/View/Set Z+"); + tr( "MNU_BOTTOM_VIEW" ), 0, this, false, "/View/ViewPoint/#SetDirOZ+"); aAction->setStatusTip(tr("DSC_BOTTOM_VIEW")); connect(aAction, SIGNAL(triggered()), this, SLOT(onBottomView())); this->addAction(aAction); toolMgr()->registerAction( aAction, BottomId ); aAction = new QtxAction(tr("MNU_LEFT_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_LEFT" ) ), - tr( "MNU_LEFT_VIEW" ), 0, this, false, "/#Viewers/View/Set Y+"); + tr( "MNU_LEFT_VIEW" ), 0, this, false, "/View/ViewPoint/#SetDirOY+"); aAction->setStatusTip(tr("DSC_LEFT_VIEW")); connect(aAction, SIGNAL(triggered()), this, SLOT(onLeftView())); this->addAction(aAction); toolMgr()->registerAction( aAction, LeftId ); aAction = new QtxAction(tr("MNU_RIGHT_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_RIGHT" ) ), - tr( "MNU_RIGHT_VIEW" ), 0, this, false, "/#Viewers/View/Set Y-"); + tr( "MNU_RIGHT_VIEW" ), 0, this, false, "/View/ViewPoint/#SetDirOY-"); aAction->setStatusTip(tr("DSC_RIGHT_VIEW")); connect(aAction, SIGNAL(triggered()), this, SLOT(onRightView())); this->addAction(aAction); @@ -1334,7 +1334,7 @@ void OCCViewer_ViewWindow::createActions() // rotate anticlockwise aAction = new QtxAction(tr("MNU_ANTICLOCKWISE_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_ANTICLOCKWISE" ) ), - tr( "MNU_ANTICLOCKWISE_VIEW" ), 0, this, false, "/#Viewers/View/Rotate anticlockwise"); + tr( "MNU_ANTICLOCKWISE_VIEW" ), 0, this, false, "/View/ViewPoint/#RotateAnticlockwise"); aAction->setStatusTip(tr("DSC_ANTICLOCKWISE_VIEW")); connect(aAction, SIGNAL(triggered()), this, SLOT(onAntiClockWiseView())); this->addAction(aAction); @@ -1342,7 +1342,7 @@ void OCCViewer_ViewWindow::createActions() // rotate clockwise aAction = new QtxAction(tr("MNU_CLOCKWISE_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_CLOCKWISE" ) ), - tr( "MNU_CLOCKWISE_VIEW" ), 0, this, false, "/#Viewers/View/Rotate clockwise"); + tr( "MNU_CLOCKWISE_VIEW" ), 0, this, false, "/View/ViewPoint/#RotateClockwise"); aAction->setStatusTip(tr("DSC_CLOCKWISE_VIEW")); connect(aAction, SIGNAL(triggered()), this, SLOT(onClockWiseView())); this->addAction(aAction); @@ -1380,7 +1380,7 @@ void OCCViewer_ViewWindow::createActions() // Reset aAction = new QtxAction(tr("MNU_RESET_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_RESET" ) ), - tr( "MNU_RESET_VIEW" ), 0, this, false, "/#Viewers/View/Reset"); + tr( "MNU_RESET_VIEW" ), 0, this, false, "/View/ViewPoint/#Reset"); aAction->setStatusTip(tr("DSC_RESET_VIEW")); connect(aAction, SIGNAL(triggered()), this, SLOT(onResetView())); this->addAction(aAction); diff --git a/src/Qtx/Qtx.qrc b/src/Qtx/Qtx.qrc index dc31318e3..a7c688b1f 100644 --- a/src/Qtx/Qtx.qrc +++ b/src/Qtx/Qtx.qrc @@ -32,8 +32,6 @@ images/open.png images/close.png images/appicon.png - images/shortcut_disable.svg - images/shortcut_restore.svg diff --git a/src/Qtx/QtxAction.cxx b/src/Qtx/QtxAction.cxx index 4184b45cd..deba00490 100644 --- a/src/Qtx/QtxAction.cxx +++ b/src/Qtx/QtxAction.cxx @@ -121,7 +121,7 @@ QtxAction::QtxAction( QObject* parent, bool toggle, const QString& ID, \param text tooltip text \param icon iconset \param menuText menu text - \param accel will be disabled by SUIT_ShortcutMgr! + \param accel May be disabled by SUIT_ShortcutMgr! \param parent parent object \param toggle if \c true the action will be a toggle action \param ID shortcut action identifier @@ -151,7 +151,7 @@ QtxAction::QtxAction( const QString& text, const QIcon& icon, const QString& men \param text tooltip text \param icon iconset \param menuText menu text - \param accel will be disabled by SUIT_ShortcutMgr! + \param accel May be disabled by SUIT_ShortcutMgr! \param parent parent object \param toggle if \c true the action will be a toggle action \param ID shortcut action identifier @@ -180,7 +180,7 @@ QtxAction::QtxAction( const QString& text, const QIcon& icon, const QString& men \param text tooltip text \param menuText menu text - \param accel will be disabled by SUIT_ShortcutMgr! + \param accel May be disabled by SUIT_ShortcutMgr! \param parent parent object \param toggle if \c true the action is a toggle action \param ID shortcut action identifier @@ -208,7 +208,7 @@ QtxAction::QtxAction( const QString& text, const QString& menuText, \param text tooltip text \param menuText menu text - \param accel will be disabled by SUIT_ShortcutMgr! + \param accel May be disabled by SUIT_ShortcutMgr! \param parent parent object \param toggle if \c true the action is a toggle action \param ID shortcut action identifier diff --git a/src/Qtx/QtxWorkstack.cxx b/src/Qtx/QtxWorkstack.cxx index c8a4f9ab4..b88a66250 100644 --- a/src/Qtx/QtxWorkstack.cxx +++ b/src/Qtx/QtxWorkstack.cxx @@ -1728,8 +1728,8 @@ QtxWorkstack::QtxWorkstack( QWidget* parent ) myWorkWin( 0 ), myWorkArea( 0 ) { - myActionsMap.insert( SplitVertical, new QtxAction( this, false /*toggle*/, "/PRP_DESK_WINDOW_VSPLIT", tr( "Split vertically" ) ) ); - myActionsMap.insert( SplitHorizontal, new QtxAction( this, false /*toggle*/, "/PRP_DESK_WINDOW_HSPLIT", tr( "Split horizontally" ) ) ); + myActionsMap.insert( SplitVertical, new QtxAction( this, false /*toggle*/, "/Window/SplitV", tr( "Split vertically" ) ) ); + myActionsMap.insert( SplitHorizontal, new QtxAction( this, false /*toggle*/, "/Window/SplitH", tr( "Split horizontally" ) ) ); myActionsMap.insert( Close, new QtxAction( this, false /*toggle*/, tr( "Close" ) ) ); myActionsMap.insert( Rename, new QtxAction( this, false /*toggle*/, tr( "Rename" ) ) ); diff --git a/src/Qtx/QtxWorkstackAction.cxx b/src/Qtx/QtxWorkstackAction.cxx index e441a5e59..58eba5628 100644 --- a/src/Qtx/QtxWorkstackAction.cxx +++ b/src/Qtx/QtxWorkstackAction.cxx @@ -125,13 +125,13 @@ QtxWorkstackAction::QtxWorkstackAction( QtxWorkstack* ws, QObject* parent ) if ( myWorkstack ) insertAction( myWorkstack->action( QtxWorkstack::SplitVertical ), SplitVertical ); else - insertAction( new QtxAction(this, false /*toggle*/, "/PRP_DESK_WINDOW_VSPLIT", + insertAction( new QtxAction(this, false /*toggle*/, "/Window/SplitV", tr( "Split the active window on two vertical parts" ), tr( "Split vertically" )), SplitVertical); if ( myWorkstack ) insertAction( myWorkstack->action( QtxWorkstack::SplitHorizontal ), SplitHorizontal ); else - insertAction( new QtxAction(this, false /*toggle*/, "/PRP_DESK_WINDOW_HSPLIT", + insertAction( new QtxAction(this, false /*toggle*/, "/Window/SplitH", tr( "Split the active window on two horizontal parts" ), tr( "Split horizontally" )), SplitHorizontal); connect( this, SIGNAL( triggered( int ) ), this, SLOT( onTriggered( int ) ) ); diff --git a/src/STD/STD_Application.cxx b/src/STD/STD_Application.cxx index 6dceb529f..9a9db0144 100644 --- a/src/STD/STD_Application.cxx +++ b/src/STD/STD_Application.cxx @@ -157,12 +157,12 @@ void STD_Application::createActions() createAction( FileNewId, tr( "TOT_DESK_FILE_NEW" ), resMgr->loadPixmap( "STD", tr( "ICON_FILE_NEW" ) ), tr( "MEN_DESK_FILE_NEW" ), tr( "PRP_DESK_FILE_NEW" ), - QKeySequence::UnknownKey, desk, false, this, SLOT( onNewDoc() ), "/TOT_DESK_FILE_NEW" ); + QKeySequence::UnknownKey, desk, false, this, SLOT( onNewDoc() ), "/File/New" ); createAction( FileOpenId, tr( "TOT_DESK_FILE_OPEN" ), resMgr->loadPixmap( "STD", tr( "ICON_FILE_OPEN" ) ), tr( "MEN_DESK_FILE_OPEN" ), tr( "PRP_DESK_FILE_OPEN" ), - QKeySequence::UnknownKey, desk, false, this, SLOT( onOpenDoc() ), "/TOT_DESK_FILE_OPEN" ); + QKeySequence::UnknownKey, desk, false, this, SLOT( onOpenDoc() ), "/File/Open" ); createAction( FileReopenId, tr( "TOT_DESK_FILE_REOPEN" ), QIcon(), tr( "MEN_DESK_FILE_REOPEN" ), tr( "PRP_DESK_FILE_REOPEN" ), @@ -171,34 +171,34 @@ void STD_Application::createActions() createAction( FileCloseId, tr( "TOT_DESK_FILE_CLOSE" ), resMgr->loadPixmap( "STD", tr( "ICON_FILE_CLOSE" ) ), tr( "MEN_DESK_FILE_CLOSE" ), tr( "PRP_DESK_FILE_CLOSE" ), - QKeySequence::UnknownKey, desk, false, this, SLOT( onCloseDoc() ), "/TOT_DESK_FILE_CLOSE" ); + QKeySequence::UnknownKey, desk, false, this, SLOT( onCloseDoc() ), "/File/Close" ); //no need in this action for mono-study application as it is same as NewDoc action( FileCloseId )->setVisible( false ); createAction( FileExitId, tr( "TOT_DESK_FILE_EXIT" ), QIcon(), tr( "MEN_DESK_FILE_EXIT" ), tr( "PRP_DESK_FILE_EXIT" ), - QKeySequence::UnknownKey, desk, false, this, SLOT( onExit() ), "/TOT_DESK_FILE_EXIT" ); + QKeySequence::UnknownKey, desk, false, this, SLOT( onExit() ), "/File/Exit" ); createAction( FileSaveId, tr( "TOT_DESK_FILE_SAVE" ), resMgr->loadPixmap( "STD", tr( "ICON_FILE_SAVE" ) ), tr( "MEN_DESK_FILE_SAVE" ), tr( "PRP_DESK_FILE_SAVE" ), - QKeySequence::UnknownKey, desk, false, this, SLOT( onSaveDoc() ), "/TOT_DESK_FILE_SAVE" ); + QKeySequence::UnknownKey, desk, false, this, SLOT( onSaveDoc() ), "/File/Save" ); createAction( FileSaveAsId, tr( "TOT_DESK_FILE_SAVEAS" ), QIcon(), tr( "MEN_DESK_FILE_SAVEAS" ), tr( "PRP_DESK_FILE_SAVEAS" ), - QKeySequence::UnknownKey, desk, false, this, SLOT( onSaveAsDoc() ), "/TOT_DESK_FILE_SAVEAS"); + QKeySequence::UnknownKey, desk, false, this, SLOT( onSaveAsDoc() ), "/File/SaveAs"); createAction( EditCopyId, tr( "TOT_DESK_EDIT_COPY" ), resMgr->loadPixmap( "STD", tr( "ICON_EDIT_COPY" ) ), tr( "MEN_DESK_EDIT_COPY" ), tr( "PRP_DESK_EDIT_COPY" ), - QKeySequence::UnknownKey, desk, false, this, SLOT( onCopy() ), "/#TOT_DESK_EDIT_COPY" ); + QKeySequence::UnknownKey, desk, false, this, SLOT( onCopy() ), "/Edit/#Clipboard_Copy" ); createAction( EditPasteId, tr( "TOT_DESK_EDIT_PASTE" ), resMgr->loadPixmap( "STD", tr( "ICON_EDIT_PASTE" ) ), tr( "MEN_DESK_EDIT_PASTE" ), tr( "PRP_DESK_EDIT_PASTE" ), - QKeySequence::UnknownKey, desk, false, this, SLOT( onPaste() ), "/TOT_DESK_EDIT_PASTE" ); + QKeySequence::UnknownKey, desk, false, this, SLOT( onPaste() ), "/Edit/#Clipboard_Paste" ); - QAction* a = createAction( ViewStatusBarId, desk, true /*toggle*/, "/PRP_DESK_VIEW_STATUSBAR", + QAction* a = createAction( ViewStatusBarId, desk, true /*toggle*/, "/View/StatusBar_Toggle", tr( "TOT_DESK_VIEW_STATUSBAR" ), tr( "MEN_DESK_VIEW_STATUSBAR" ), tr( "PRP_DESK_VIEW_STATUSBAR" )); a->setChecked( desk->statusBar()->isVisibleTo( desk ) ); @@ -207,7 +207,7 @@ void STD_Application::createActions() createAction( NewWindowId, tr( "TOT_DESK_NEWWINDOW" ), QIcon(), tr( "MEN_DESK_NEWWINDOW" ), tr( "PRP_DESK_NEWWINDOW" ), 0, desk ); - createAction( HelpAboutId, desk, false /*toggle*/, "/PRP_DESK_HELP_ABOUT", + createAction( HelpAboutId, desk, false /*toggle*/, "/AboutDialog", tr( "TOT_DESK_HELP_ABOUT" ), tr( "MEN_DESK_HELP_ABOUT" ), tr( "PRP_DESK_HELP_ABOUT" ), resMgr->loadPixmap( "STD", tr( "ICON_DESK_ABOUT" ) ), this, SLOT( onHelpAbout() ) ); diff --git a/src/SUIT/CMakeLists.txt b/src/SUIT/CMakeLists.txt index 95015a57c..403e27172 100644 --- a/src/SUIT/CMakeLists.txt +++ b/src/SUIT/CMakeLists.txt @@ -55,8 +55,8 @@ SET(_moc_HEADERS SUIT_PreferenceMgr.h SUIT_SelectionMgr.h SUIT_Session.h + SUIT_ShortcutEditor.h SUIT_ShortcutMgr.h - SUIT_ShortcutTree.h SUIT_Study.h SUIT_TreeModel.h SUIT_ViewManager.h @@ -80,6 +80,8 @@ SET(_other_HEADERS SUIT_SmartPtr.h SUIT_Tools.h SUIT_TreeSync.h + Tools/SUIT_extensions.h + Tools/SUIT_SentenceMatcher.h ) # header files / to install @@ -87,6 +89,9 @@ SET(suit_HEADERS ${_moc_HEADERS} ${_other_HEADERS}) # --- resources --- +# resource files / to be processed by rcc +SET(_rcc_RESOURCES SUIT.qrc) + # resource files / to be processed by lrelease SET(_ts_RESOURCES resources/SUIT_msg_en.ts @@ -108,6 +113,9 @@ SET(_other_RESOURCES # sources / moc wrappings QT_WRAP_MOC(_moc_SOURCES ${_moc_HEADERS}) +# sources / rcc wrappings +QT_ADD_RESOURCES(_rcc_SOURCES ${_rcc_RESOURCES}) + # sources / static SET(_other_SOURCES SUIT_Accel.cxx @@ -137,18 +145,20 @@ SET(_other_SOURCES SUIT_SelectionMgr.cxx SUIT_Selector.cxx SUIT_Session.cxx + SUIT_ShortcutEditor.cxx SUIT_ShortcutMgr.cxx - SUIT_ShortcutTree.cxx SUIT_Study.cxx SUIT_Tools.cxx SUIT_TreeModel.cxx SUIT_ViewManager.cxx SUIT_ViewModel.cxx SUIT_ViewWindow.cxx + Tools/SUIT_extensions.cxx + Tools/SUIT_SentenceMatcher.cxx ) # sources / to compile -SET(suit_SOURCES ${_other_SOURCES} ${_moc_SOURCES}) +SET(suit_SOURCES ${_other_SOURCES} ${_moc_SOURCES} ${_rcc_SOURCES}) # --- rules --- diff --git a/src/SUIT/SUIT.qrc b/src/SUIT/SUIT.qrc new file mode 100644 index 000000000..eecdafa38 --- /dev/null +++ b/src/SUIT/SUIT.qrc @@ -0,0 +1,14 @@ + + +resources/default_action_icon.svg +resources/default_folder_action_icon.svg +resources/default_folder_icon.svg +resources/find.svg +resources/shortcut_disable.svg +resources/shortcut_restore.svg +resources/sort_ascending.svg +resources/sort_ascending_leading_key.svg +resources/sort_descending.svg +resources/sort_descending_leading_key.svg + + diff --git a/src/SUIT/SUIT_FindActionDialog.cxx b/src/SUIT/SUIT_FindActionDialog.cxx index 3d5c52cbd..c0eb6c1bd 100644 --- a/src/SUIT/SUIT_FindActionDialog.cxx +++ b/src/SUIT/SUIT_FindActionDialog.cxx @@ -18,6 +18,7 @@ // #include "SUIT_FindActionDialog.h" +#include "Tools/SUIT_extensions.h" #include #include @@ -42,8 +43,46 @@ SUIT_FindActionDialog::SUIT_FindActionDialog(QWidget* theParent) : QDialog(theParent) { - setMinimumWidth(500); + setMinimumWidth(800); setWindowTitle(tr("Find action")); + + QVBoxLayout* layout = new QVBoxLayout(this); + + const auto callback = std::bind(&SUIT_FindActionDialog::executeAction, this, std::placeholders::_1, std::placeholders::_2); + myFindActionWidget = new SUIT_FindActionWidget(this, std::move(callback), tr("Double click to start."), false /*theEnableItemsOfUnavailableActions*/); + layout->addWidget(myFindActionWidget); +} + +void SUIT_FindActionDialog::setActiveModuleID(const QString& theModuleID) +{ + myFindActionWidget->setIncludedModuleIDs({theModuleID}); +} + +void SUIT_FindActionDialog::executeAction(const QString& theModuleID, const QString& theInModuleActionID) +{ + bool atLeastOneActionTriggered = false; + const auto& actions = SUIT_ShortcutMgr::get()->getActions(theModuleID, theInModuleActionID); + for (const auto& action : actions) { + if (action->isEnabled()) { + action->trigger(); + atLeastOneActionTriggered = true; + } + } + + if (atLeastOneActionTriggered) + accept(); +} + + +SUIT_FindActionWidget::SUIT_FindActionWidget( + QWidget* theParent, + const std::function theCallback, + const QString& theActionItemToolTip, + bool theEnableItemsOfUnavailableActions, + bool theShowKeySequenceColumn, + const std::function(const QString&, const QString&)>& theKeySequenceGetter +) : QWidget(theParent), myCallback(theCallback) +{ QVBoxLayout* layout = new QVBoxLayout(this); myQueryLineEdit = new QLineEdit(this); @@ -56,14 +95,32 @@ SUIT_FindActionDialog::SUIT_FindActionDialog(QWidget* theParent) myIncludeUnavailableActionsCB = new QCheckBox(tr("Unavailable actions"), this); myIncludeUnavailableActionsCB->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); myIncludeUnavailableActionsCB->setCheckState(Qt::CheckState::Checked); - myActionSearcher.includeDisabledActions(true); + + { // Setup ActionSearcher. + if (theKeySequenceGetter) { + myActionSearcher.setKeySequenceGetter( + [theKeySequenceGetter](const QString& theModuleID, const QString& theInModuleActionID) { + return theKeySequenceGetter(theModuleID, theInModuleActionID).first; + }, + true /*doNotUpdateResults*/ + ); + } + + auto fieldsToMatch = std::set({ SUIT_ActionSearcher::MatchField::Name, SUIT_ActionSearcher::MatchField::ToolTip }); + if (theShowKeySequenceColumn) + fieldsToMatch.emplace(SUIT_ActionSearcher::MatchField::KeySequence); + + myActionSearcher.setFieldsToMatch(fieldsToMatch, true /*doNotUpdateResults*/); + myActionSearcher.includeDisabledActions(true, true /*doNotUpdateResults*/); + } + myIncludeInactiveModulesCB = new QCheckBox(tr("Inactive modules"), this); myIncludeInactiveModulesCB->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); myIncludeInactiveModulesCB->setCheckState(Qt::CheckState::Unchecked); searchOptionsLayout->addWidget(myIncludeUnavailableActionsCB); searchOptionsLayout->addWidget(myIncludeInactiveModulesCB); - myFoundActionsTree = new SUIT_FoundActionTree(this); + myFoundActionsTree = new SUIT_FoundActionTree(this, theActionItemToolTip, theEnableItemsOfUnavailableActions, theShowKeySequenceColumn, theKeySequenceGetter); layout->addWidget(myFoundActionsTree); connect(myQueryLineEdit, SIGNAL(textChanged(const QString&)), this, SLOT(onQueryChanged(const QString&))); @@ -73,26 +130,50 @@ SUIT_FindActionDialog::SUIT_FindActionDialog(QWidget* theParent) myQueryLineEdit->installEventFilter(myFoundActionsTree); } -void SUIT_FindActionDialog::setActiveModuleID(const QString& theModuleID) +/*! \brief No need to call it, if expected search result changes are triggered by interaction with subwidgets. */ +void SUIT_FindActionWidget::updateUI() { - myActiveModuleID = theModuleID; - if(myActionSearcher.setIncludedModuleIDs(std::set({SUIT_ShortcutMgr::ROOT_MODULE_ID, myActiveModuleID}))) + myFoundActionsTree->updateItems(myActionSearcher.getSearchResults()); +} + +void SUIT_FindActionWidget::setColumnWidth(int theColumnIdx, int theColumnWidth) +{ + myFoundActionsTree->setColumnWidth(theColumnIdx, theColumnWidth); +} + +void SUIT_FindActionWidget::showOptions(bool theToShow) +{ + myIncludeUnavailableActionsCB->setVisible(theToShow); + myIncludeInactiveModulesCB->setVisible(theToShow); +} + +void SUIT_FindActionWidget::setIncludedModuleIDs(const std::set& theModuleIDs, bool doNotUpdateResults) +{ + myIncludedModuleIDs = theModuleIDs; + myIncludedModuleIDs.emplace(SUIT_ShortcutMgr::ROOT_MODULE_ID); + + if (myActionSearcher.setIncludedModuleIDs(myIncludedModuleIDs, doNotUpdateResults)) updateUI(); } -void SUIT_FindActionDialog::onQueryChanged(const QString& theQuery) +const std::set& SUIT_FindActionWidget::getIncludedModuleIDs() const +{ + return myIncludedModuleIDs; +} + +void SUIT_FindActionWidget::onQueryChanged(const QString& theQuery) { if (myActionSearcher.setQuery(theQuery)) updateUI(); } -void SUIT_FindActionDialog::onSearchOptionUnavailableActionsChanged(int theState) +void SUIT_FindActionWidget::onSearchOptionUnavailableActionsChanged(int theState) { if (myActionSearcher.includeDisabledActions(theState == Qt::CheckState::Checked)) updateUI(); } -void SUIT_FindActionDialog::onSearchOptionInactiveModulesChanged(int theState) +void SUIT_FindActionWidget::onSearchOptionInactiveModulesChanged(int theState) { bool resultsChanged = false; if (theState == Qt::CheckState::Checked) { @@ -102,69 +183,72 @@ void SUIT_FindActionDialog::onSearchOptionInactiveModulesChanged(int theState) } else { myIncludeUnavailableActionsCB->setDisabled(false); - resultsChanged = myActionSearcher.setIncludedModuleIDs(std::set({SUIT_ShortcutMgr::ROOT_MODULE_ID, myActiveModuleID})); + resultsChanged = myActionSearcher.setIncludedModuleIDs(myIncludedModuleIDs); } if (resultsChanged) updateUI(); } -void SUIT_FindActionDialog::updateUI() -{ - myFoundActionsTree->updateItems(myActionSearcher.getSearchResults()); -} +/*static*/ const QList> SUIT_FoundActionTree::DEFAULT_SORT_SCHEMA = +{ + {SUIT_FoundActionTree::SortKey::MatchMetrics, Qt::SortOrder::AscendingOrder}, + {SUIT_FoundActionTree::SortKey::Name, Qt::SortOrder::AscendingOrder}, + {SUIT_FoundActionTree::SortKey::ToolTip, Qt::SortOrder::AscendingOrder}, + {SUIT_FoundActionTree::SortKey::ID, Qt::SortOrder::AscendingOrder}, + {SUIT_FoundActionTree::SortKey::KeySequence, Qt::SortOrder::AscendingOrder} +}; +/*! \brief Default key sequence getter. + \returns {keySequence, false} */ +/*static*/ std::pair SUIT_FoundActionTree::getKeySequenceFromShortcutMgr(const QString& theModuleID, const QString& theInModuleActionID) +{ + return std::pair(SUIT_ShortcutMgr::get()->getKeySequence(theModuleID, theInModuleActionID).toString(), false); +} -SUIT_FoundActionTree::SUIT_FoundActionTree(SUIT_FindActionDialog* theParent) -: QTreeWidget(theParent) +/*! \param theKeySequenceGetter If default or empty, SUIT_FoundActionTree::getKeySequenceFromShortcutMgr is used.*/ +SUIT_FoundActionTree::SUIT_FoundActionTree( + SUIT_FindActionWidget* theParent, + const QString& theActionItemToolTip, + bool theEnableItemsOfUnavailableActions, + bool theShowKeySequenceColumn, + const std::function(const QString&, const QString&)>& theKeySequenceGetter +) : QTreeWidget(theParent), myEnableItemsOfUnavailableActions(theEnableItemsOfUnavailableActions), +myActionItemToolTip(theActionItemToolTip), myShowKeySequenceColumn(theShowKeySequenceColumn), +myKeySequenceGetter(theKeySequenceGetter ? theKeySequenceGetter : std::bind(&SUIT_FoundActionTree::getKeySequenceFromShortcutMgr, std::placeholders::_1, std::placeholders::_2)) { - setColumnCount(2); + setColumnCount(myShowKeySequenceColumn ? 3 : 2); setSelectionMode(QAbstractItemView::SingleSelection); setSortingEnabled(false); header()->setSectionResizeMode(QHeaderView::Interactive); { QMap labelMap; - labelMap[SUIT_FoundActionTree::ElementIdx::Name] = SUIT_FindActionDialog::tr("Action"); - labelMap[SUIT_FoundActionTree::ElementIdx::ToolTip] = SUIT_FindActionDialog::tr("Description"); + labelMap[SUIT_FoundActionTree::ColumnIdx::Name] = SUIT_FindActionWidget::tr("Action"); + labelMap[SUIT_FoundActionTree::ColumnIdx::ToolTip] = SUIT_FindActionWidget::tr("Description"); + if (myShowKeySequenceColumn) + labelMap[SUIT_FoundActionTree::ColumnIdx::KeySequence] = SUIT_FindActionWidget::tr("Key sequence"); + setHeaderLabels(labelMap.values()); } setExpandsOnDoubleClick(false); // Implemented manually. setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - setColumnWidth(SUIT_FoundActionTree::ElementIdx::Name, 120); - setColumnWidth(SUIT_FoundActionTree::ElementIdx::Name, 250); + setColumnWidth(SUIT_FoundActionTree::ColumnIdx::Name, 350); + setColumnWidth(SUIT_FoundActionTree::ColumnIdx::ToolTip, 500); + setColumnWidth(SUIT_FoundActionTree::ColumnIdx::KeySequence, 150); setMinimumHeight(300); setWindowFlags(windowFlags() | Qt::FramelessWindowHint); mySortKey = SUIT_FoundActionTree::SortKey::MatchMetrics; - mySortOrder = SUIT_FoundActionTree::SortOrder::Ascending; + mySortOrder = Qt::SortOrder::AscendingOrder; connect(this, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), this, SLOT(onItemExecuted(QTreeWidgetItem*, int))); } -/*! \brief Compensates lack of std::distance(), which is introduced in C++17. -\returns -1, if theIt does not belong to the */ -template -size_t indexOf( - const Container& theContainer, - const typename Container::iterator& theIt -) { - auto it = theContainer.begin(); - size_t distance = 0; - while (it != theContainer.end()) { - if (it == theIt) - return distance; - - it++; - distance++; - } - return -1; -} - -void SUIT_FoundActionTree::updateItems(const std::map>& theAssets) +void SUIT_FoundActionTree::updateItems(const std::map>& theActionAssetsAndSD) { std::set shownModuleIDs; // To sort module-items by their IDs. @@ -173,8 +257,8 @@ void SUIT_FoundActionTree::updateItems(const std::map(topLevelItem(moduleIdx)); myModuleItemExpansionStates[moduleItem->myModuleID] = moduleItem->isExpanded(); - const auto itUpdatedAssetsOfShownModule = theAssets.find(moduleItem->myModuleID); - if (itUpdatedAssetsOfShownModule == theAssets.end()) { + const auto itUpdatedAssetsOfShownModule = theActionAssetsAndSD.find(moduleItem->myModuleID); + if (itUpdatedAssetsOfShownModule == theActionAssetsAndSD.end()) { delete takeTopLevelItem(moduleIdx); continue; } @@ -189,24 +273,34 @@ void SUIT_FoundActionTree::updateItems(const std::map(parentWidget()); SUIT_FoundActionTreeAction* preselectedActionItem = nullptr; - for (const auto& moduleIDAndAssets : theAssets) { - const QString& moduleID = moduleIDAndAssets.first; - const auto& moduleAssets = moduleIDAndAssets.second; - if (moduleAssets.empty()) + for (const auto& moduleIDAndActionAssetsAndSD : theActionAssetsAndSD) { + const QString& moduleID = moduleIDAndActionAssetsAndSD.first; + const auto& moduleActionAssetsAndSD = moduleIDAndActionAssetsAndSD.second; + if (moduleActionAssetsAndSD.empty()) continue; const auto moduleItemAndIdx = findModuleItem(moduleID); SUIT_FoundActionTreeModule* moduleItem = moduleItemAndIdx.first; if (!moduleItem) { moduleItem = new SUIT_FoundActionTreeModule(moduleID); - moduleItem->setAssetsAndSearchData(SUIT_ActionSearcher::AssetsAndSearchData(shortcutMgr->getModuleAssets(moduleID)), lang); + + const auto moduleAssets = shortcutMgr->getModuleAssets(moduleID); + if (moduleAssets) + moduleItem->setAssets(*moduleAssets, lang); + else + ShCutDbg("SUIT_FoundActionTree can't retrieve module assets of \"" + moduleID + "\" from ShortcutMgr."); + + const auto& includedModuleIDs = findActionWidget->getIncludedModuleIDs(); + if (includedModuleIDs.find(moduleID) == includedModuleIDs.end()) + moduleItem->styleAsDimmed(); const auto emplaceRes = shownModuleIDs.emplace(moduleID); - insertTopLevelItem(indexOf(shownModuleIDs, emplaceRes.first), moduleItem); + insertTopLevelItem(::SUIT_tools::distanceFromBegin(shownModuleIDs, emplaceRes.first), moduleItem); moduleItem->setFlags(Qt::ItemIsEnabled); @@ -225,9 +319,9 @@ void SUIT_FoundActionTree::updateItems(const std::mapsetAssetsAndSearchData(assetsAndSearchData, lang); + if (myShowKeySequenceColumn) { + const auto KSAndToStyle = myKeySequenceGetter(moduleID, inModuleActionID); + actionItem->setKeySequence(KSAndToStyle.first); + actionItem->styleAsKeySequenceModified(KSAndToStyle.second); + } + sortedActionItems.emplace(actionItem); } SUIT_FoundActionTreeAction* preselectedActionItemCand = nullptr; for (const auto actionItem : sortedActionItems) { moduleItem->addChild(actionItem); + actionItem->setToolTip(myActionItemToolTip); // Consider first ranked available action in the module (if user did not collapsed it) as a candidate for preselected action. if (!preselectedActionItemCand && moduleItem->isExpanded() && actionItem->isEnabledBufferedValue()) @@ -262,7 +363,7 @@ void SUIT_FoundActionTree::updateItems(const std::mapkey(); const auto selectedItem = currentItem(); if ((key == Qt::Key_Enter || key == Qt::Key_Return) && selectedItem) - onItemExecuted(selectedItem, SUIT_FoundActionTree::ElementIdx::Name); + onItemExecuted(selectedItem, SUIT_FoundActionTree::ColumnIdx::Name); else QTreeWidget::keyPressEvent(theEvent); } @@ -330,7 +431,7 @@ bool approximatelyEqual(Float a, Float b, Float relativeTol = std::numeric_limit std::set> SUIT_FoundActionTree::createActionSetWithComparator() const { - QList> sortSchema = SUIT_FoundActionTree::DEFAULT_SORT_SCHEMA; + QList> sortSchema = SUIT_FoundActionTree::DEFAULT_SORT_SCHEMA; { for (auto itSameKey = sortSchema.begin(); itSameKey != sortSchema.end(); itSameKey++) { if (itSameKey->first == mySortKey) { @@ -338,7 +439,7 @@ std::set(mySortKey, mySortOrder)); + sortSchema.push_front(std::pair(mySortKey, mySortOrder)); } const std::function comparator = @@ -355,13 +456,13 @@ std::set 0; + return keyAndOrder.second == Qt::SortOrder::AscendingOrder ? res < 0 : res > 0; } } else { const int res = collator.compare(fieldOfA.toString(), fieldOfB.toString()); if (res != 0) - return keyAndOrder.second == SUIT_FoundActionTree::SortOrder::Ascending ? res < 0 : res > 0; + return keyAndOrder.second == Qt::SortOrder::AscendingOrder ? res < 0 : res > 0; } } return false; @@ -372,70 +473,54 @@ std::set(parentWidget()); SUIT_FoundActionTreeItem* const item = static_cast(theItem); + if (item->type() == SUIT_FoundActionTreeItem::Type::Action) { SUIT_FoundActionTreeAction* const actionItem = static_cast(theItem); - if (actionItem->trigger()) - static_cast(parentWidget())->accept(); + parent->myCallback(actionItem->myModuleID, actionItem->myInModuleActionID); } else /* if (item->type() == SUIT_FoundActionTreeItem::Type::Module) */ { item->setExpanded(!item->isExpanded()); } } -/*static*/ const QList> SUIT_FoundActionTree::DEFAULT_SORT_SCHEMA = -{ - {SUIT_FoundActionTree::SortKey::MatchMetrics, SUIT_FoundActionTree::SortOrder::Ascending}, - {SUIT_FoundActionTree::SortKey::Name, SUIT_FoundActionTree::SortOrder::Ascending}, - {SUIT_FoundActionTree::SortKey::ToolTip, SUIT_FoundActionTree::SortOrder::Ascending}, - {SUIT_FoundActionTree::SortKey::ID, SUIT_FoundActionTree::SortOrder::Ascending} -}; - +/*! \param theTree must not be nullptr. */ SUIT_FoundActionTreeItem::SUIT_FoundActionTreeItem(const QString& theModuleID) : QTreeWidgetItem(), myModuleID(theModuleID) { } QString SUIT_FoundActionTreeItem::name() const { - return text(SUIT_FoundActionTree::ElementIdx::Name); + return text(SUIT_FoundActionTree::ColumnIdx::Name); } QString SUIT_FoundActionTreeItem::toolTip() const { - return text(SUIT_FoundActionTree::ElementIdx::ToolTip); + return text(SUIT_FoundActionTree::ColumnIdx::ToolTip); +} + +void SUIT_FoundActionTreeItem::styleAsDimmed() { + static const QBrush greyedOutBrush = QBrush(Qt::gray); + setForeground(SUIT_FoundActionTree::ColumnIdx::Name, greyedOutBrush); + setForeground(SUIT_FoundActionTree::ColumnIdx::ToolTip, greyedOutBrush); } SUIT_FoundActionTreeModule::SUIT_FoundActionTreeModule(const QString& theModuleID) : SUIT_FoundActionTreeItem(theModuleID) { - QFont f = font(SUIT_FoundActionTree::ElementIdx::Name); + QFont f = font(SUIT_FoundActionTree::ColumnIdx::Name); f.setBold(true); - setFont(SUIT_FoundActionTree::ElementIdx::Name, f); - setText(SUIT_FoundActionTree::ElementIdx::Name, theModuleID); + setFont(SUIT_FoundActionTree::ColumnIdx::Name, f); + setText(SUIT_FoundActionTree::ColumnIdx::Name, theModuleID); } -void SUIT_FoundActionTreeModule::setAssetsAndSearchData(const SUIT_ActionSearcher::AssetsAndSearchData& theAssetsAndSD, const QString& theLang) +void SUIT_FoundActionTreeModule::setAssets(const SUIT_ShortcutModuleAssets& theAssets, const QString& theLang) { - if (!theAssetsAndSD.myAssets) - return; - - setIcon(SUIT_FoundActionTree::ElementIdx::Name, theAssetsAndSD.myAssets->myIcon); - - const auto& ldaMap = theAssetsAndSD.myAssets->myLangDependentAssets; - if (ldaMap.empty()) { - setText(SUIT_FoundActionTree::ElementIdx::Name, myModuleID); - return; - } - - auto itLDA = ldaMap.find(theLang); - if (itLDA == ldaMap.end()) - itLDA = ldaMap.begin(); - - const SUIT_ActionAssets::LangDependentAssets& lda = itLDA->second; - const QString& name = lda.myName.isEmpty() ? myModuleID : lda.myName; - setText(SUIT_FoundActionTree::ElementIdx::Name, name); + setText(SUIT_FoundActionTree::ColumnIdx::Name, theAssets.bestName(theLang)); + setIcon(SUIT_FoundActionTree::ColumnIdx::Name, theAssets.myIcon); } QVariant SUIT_FoundActionTreeModule::getValue(SUIT_FoundActionTree::SortKey theKey) const @@ -454,17 +539,12 @@ QVariant SUIT_FoundActionTreeModule::getValue(SUIT_FoundActionTree::SortKey theK } } -bool SUIT_FoundActionTreeModule::isEnabled() const -{ - return true; -} - SUIT_FoundActionTreeAction::SUIT_FoundActionTreeAction(const QString& theModuleID, const QString& theInModuleActionID) : SUIT_FoundActionTreeItem(theModuleID), myInModuleActionID(theInModuleActionID), myMatchMetrics(std::numeric_limits::infinity()), myIsEnabledBufferedValue(false) { - setText(SUIT_FoundActionTree::ElementIdx::Name, theInModuleActionID); + setText(SUIT_FoundActionTree::ColumnIdx::Name, theInModuleActionID); } /*static*/ SUIT_FoundActionTreeAction* SUIT_FoundActionTreeAction::create(const QString& theModuleID, const QString& theInModuleActionID) @@ -482,42 +562,47 @@ void SUIT_FoundActionTreeAction::setAssetsAndSearchData(const SUIT_ActionSearche if (!theAssetsAndSD.myAssets) return; - setIcon(SUIT_FoundActionTree::ElementIdx::Name, theAssetsAndSD.myAssets->myIcon); - - const auto& ldaMap = theAssetsAndSD.myAssets->myLangDependentAssets; - if (ldaMap.empty()) { - setText(SUIT_FoundActionTree::ElementIdx::Name, myInModuleActionID); - return; - } - - auto itLDA = ldaMap.find(theLang); - if (itLDA == ldaMap.end()) - itLDA = ldaMap.begin(); - - const SUIT_ActionAssets::LangDependentAssets& lda = itLDA->second; - const QString& name = lda.myName.isEmpty() ? myInModuleActionID : lda.myName; - setText(SUIT_FoundActionTree::ElementIdx::Name, name); - - setText(SUIT_FoundActionTree::ElementIdx::ToolTip, lda.myToolTip); + setText(SUIT_FoundActionTree::ColumnIdx::Name, theAssetsAndSD.myAssets->bestPath(theLang)); + setIcon(SUIT_FoundActionTree::ColumnIdx::Name, theAssetsAndSD.myAssets->icon()); + setText(SUIT_FoundActionTree::ColumnIdx::ToolTip, theAssetsAndSD.myAssets->bestToolTip(theLang)); + myMatchMetrics = theAssetsAndSD.matchMetrics(); +} +void SUIT_FoundActionTreeAction::setToolTip(const QString& theToolTip) +{ if (isEnabled()) { - setToolTip( - SUIT_FoundActionTree::ElementIdx::Name, - SUIT_FoundActionTree::tr("Double click to start") + QTreeWidgetItem::setToolTip( + SUIT_FoundActionTree::ColumnIdx::Name, + theToolTip ); - setToolTip( - SUIT_FoundActionTree::ElementIdx::ToolTip, - SUIT_FoundActionTree::tr("Double click to start") + QTreeWidgetItem::setToolTip( + SUIT_FoundActionTree::ColumnIdx::ToolTip, + theToolTip ); } - else { - static const QBrush greyedOutBrush = QBrush(Qt::gray); - setForeground(SUIT_FoundActionTree::ElementIdx::Name, greyedOutBrush); - setForeground(SUIT_FoundActionTree::ElementIdx::ToolTip, greyedOutBrush); - } + else + styleAsDimmed(); +} - myMatchMetrics = theAssetsAndSD.matchMetrics(); +void SUIT_FoundActionTreeAction::setKeySequence(const QString& theKeySequence) +{ + setText(SUIT_FoundActionTree::ColumnIdx::KeySequence, theKeySequence); +} + +QString SUIT_FoundActionTreeAction::keySequence() const +{ + return text(SUIT_FoundActionTree::ColumnIdx::KeySequence); +} + +void SUIT_FoundActionTreeAction::styleAsKeySequenceModified(bool theIsModified) +{ + static const QBrush bgHighlitingBrush = QBrush(Qt::darkGreen); + static const QBrush fgHighlitingBrush = QBrush(Qt::white); + static const QBrush noBrush = QBrush(); + + setBackground(SUIT_FoundActionTree::ColumnIdx::KeySequence, theIsModified ? bgHighlitingBrush : noBrush); + setForeground(SUIT_FoundActionTree::ColumnIdx::KeySequence, theIsModified ? fgHighlitingBrush : noBrush); } QVariant SUIT_FoundActionTreeAction::getValue(SUIT_FoundActionTree::SortKey theKey) const @@ -531,6 +616,8 @@ QVariant SUIT_FoundActionTreeAction::getValue(SUIT_FoundActionTree::SortKey theK return name(); case SUIT_FoundActionTree::SortKey::ToolTip: return toolTip(); + case SUIT_FoundActionTree::SortKey::KeySequence: + return keySequence(); default: return QString(); } @@ -538,20 +625,13 @@ QVariant SUIT_FoundActionTreeAction::getValue(SUIT_FoundActionTree::SortKey theK bool SUIT_FoundActionTreeAction::isEnabled() const { + const auto tree = static_cast(treeWidget()); + if (tree->myEnableItemsOfUnavailableActions) { + myIsEnabledBufferedValue = true; + return true; + } + const auto& actions = SUIT_ShortcutMgr::get()->getActions(myModuleID, myInModuleActionID); myIsEnabledBufferedValue = std::find_if(actions.begin(), actions.end(), [](const QAction* const theAction){ return theAction->isEnabled(); }) != actions.end(); return myIsEnabledBufferedValue; -} - -bool SUIT_FoundActionTreeAction::trigger() const -{ - bool res = false; - const auto& actions = SUIT_ShortcutMgr::get()->getActions(myModuleID, myInModuleActionID); - for (const auto& action : actions) { - if (action->isEnabled()) { - action->trigger(); - res = true; - } - } - return res; } \ No newline at end of file diff --git a/src/SUIT/SUIT_FindActionDialog.h b/src/SUIT/SUIT_FindActionDialog.h index 34ffbcb0e..a6fc81826 100644 --- a/src/SUIT/SUIT_FindActionDialog.h +++ b/src/SUIT/SUIT_FindActionDialog.h @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -42,6 +43,7 @@ class QLineEdit; class QLabel; class QPushButton; class QKeyEvent; +class SUIT_FindActionWidget; class SUIT_FoundActionTree; @@ -57,21 +59,58 @@ public: void setActiveModuleID(const QString& theModuleID = SUIT_ShortcutMgr::ROOT_MODULE_ID); +private: + void executeAction(const QString& theModuleID, const QString& theInModuleActionID); + +private: + SUIT_FindActionWidget* myFindActionWidget; +}; + + +class SUIT_EXPORT SUIT_FindActionWidget : public QWidget +{ + Q_OBJECT + +public: + SUIT_FindActionWidget( + QWidget* theParent, + const std::function theCallback, + const QString& theActionItemToolTip, + bool theEnableItemsOfUnavailableActions = false, + bool theShowKeySequenceColumn = false, + const std::function(const QString&, const QString&)>& theKeySequenceGetter = std::function(const QString&, const QString&)>() + ); + SUIT_FindActionWidget(const SUIT_FindActionWidget&) = delete; + SUIT_FindActionWidget& operator=(const SUIT_FindActionWidget&) = delete; + virtual ~SUIT_FindActionWidget() = default; + + void showOptions(bool theToShow); + + /*! \param doNotUpdateResults Set to true to initialize the instance without unnecessary computations. */ + void setIncludedModuleIDs(const std::set& theModuleIDs = {}, bool doNotUpdateResults = false); + const std::set& getIncludedModuleIDs() const; + + void updateUI(); + + void setColumnWidth(int theColumnIdx, int theColumnWidth); + private slots: void onQueryChanged(const QString& theKeyword); void onSearchOptionUnavailableActionsChanged(int); void onSearchOptionInactiveModulesChanged(int); private: - void updateUI(); - QLineEdit* myQueryLineEdit; QCheckBox* myIncludeUnavailableActionsCB; QCheckBox* myIncludeInactiveModulesCB; SUIT_FoundActionTree* myFoundActionsTree; - QString myActiveModuleID; + std::set myIncludedModuleIDs; SUIT_ActionSearcher myActionSearcher; + +public: + /** void callback(theModuleID, theInModuleActionID) */ + const std::function myCallback; }; @@ -85,31 +124,37 @@ class SUIT_EXPORT SUIT_FoundActionTree : public QTreeWidget Q_OBJECT public: - enum ElementIdx { - Name = 0, - ToolTip = 1 + enum ColumnIdx { + Name, + ToolTip, + KeySequence }; enum class SortKey { MatchMetrics, ID, Name, - ToolTip + ToolTip, + KeySequence }; - enum class SortOrder { - Ascending, - Descending - }; + static const QList> DEFAULT_SORT_SCHEMA; + static std::pair getKeySequenceFromShortcutMgr(const QString& theModuleID, const QString& theInModuleActionID); - SUIT_FoundActionTree(SUIT_FindActionDialog* theParent); + SUIT_FoundActionTree( + SUIT_FindActionWidget* theParent, + const QString& theActionItemToolTip, + bool theEnableItemsOfUnavailableActions = false, + bool theShowKeySequenceColumn = false, + const std::function(const QString&, const QString&)>& theKeySequenceGetter = std::function(const QString&, const QString&)>() + ); SUIT_FoundActionTree(const SUIT_FoundActionTree&) = delete; SUIT_FoundActionTree& operator=(const SUIT_FoundActionTree&) = delete; virtual ~SUIT_FoundActionTree() = default; - void updateItems(const std::map>& theAssets); + void updateItems(const std::map>& theActionAssetsAndSD); - void sort(SUIT_FoundActionTree::SortKey theKey, SUIT_FoundActionTree::SortOrder theOrder); + void sort(SUIT_FoundActionTree::SortKey theKey, Qt::SortOrder theOrder); void keyPressEvent(QKeyEvent* theEvent); @@ -123,15 +168,20 @@ private: private slots: void onItemExecuted(QTreeWidgetItem* theWidgetItem, int theColIdx); -public: - static const QList> DEFAULT_SORT_SCHEMA; - private: SUIT_FoundActionTree::SortKey mySortKey; - SUIT_FoundActionTree::SortOrder mySortOrder; + Qt::SortOrder mySortOrder; /** {moduleID, isExpanded}[] */ std::map myModuleItemExpansionStates; + +public: + const QString myActionItemToolTip; + const bool myEnableItemsOfUnavailableActions; // If false, items of unavailable actions/modules are dimmed. + const bool myShowKeySequenceColumn; + + /** std::pair getKeySequence(theModuleID, theInModuleActionID). Returns true, if KeySequence column of an action item must be styled as modified. */ + const std::function(const QString&, const QString&)> myKeySequenceGetter; }; @@ -139,8 +189,8 @@ class SUIT_FoundActionTreeItem : public QTreeWidgetItem { public: enum Type { - Module = 0, - Action = 1, + Module, + Action }; protected: @@ -150,13 +200,12 @@ public: virtual ~SUIT_FoundActionTreeItem() = default; virtual SUIT_FoundActionTreeItem::Type type() const = 0; - virtual void setAssetsAndSearchData(const SUIT_ActionSearcher::AssetsAndSearchData& theAssetsAndSD, const QString& theLang) = 0; QString name() const; QString toolTip() const; virtual QVariant getValue(SUIT_FoundActionTree::SortKey theKey) const = 0; - virtual bool isEnabled() const = 0; + virtual void styleAsDimmed(); public: const QString myModuleID; @@ -170,12 +219,9 @@ public: virtual ~SUIT_FoundActionTreeModule() = default; virtual SUIT_FoundActionTreeItem::Type type() const { return SUIT_FoundActionTreeItem::Type::Module; }; - /*! \brief Search data is unused. */ - virtual void setAssetsAndSearchData(const SUIT_ActionSearcher::AssetsAndSearchData& theAssetsAndSD, const QString& theLang); + void setAssets(const SUIT_ShortcutModuleAssets& theAssets, const QString& theLang); virtual QVariant getValue(SUIT_FoundActionTree::SortKey theKey) const; - - virtual bool isEnabled() const; }; @@ -189,7 +235,11 @@ public: virtual ~SUIT_FoundActionTreeAction() = default; virtual SUIT_FoundActionTreeItem::Type type() const { return SUIT_FoundActionTreeItem::Type::Action; }; - virtual void setAssetsAndSearchData(const SUIT_ActionSearcher::AssetsAndSearchData& theAssetsAndSD, const QString& theLang); + void setAssetsAndSearchData(const SUIT_ActionSearcher::AssetsAndSearchData& theAssetsAndSD, const QString& theLang); + void setToolTip(const QString& theToolTip); + void setKeySequence(const QString& theKeySequence); + QString keySequence() const; + void styleAsKeySequenceModified(bool theIsModified); virtual QVariant getValue(SUIT_FoundActionTree::SortKey theKey) const; double matchMetrics() const { return myMatchMetrics; }; @@ -197,8 +247,6 @@ public: virtual bool isEnabled() const; bool isEnabledBufferedValue() const { return myIsEnabledBufferedValue; }; - bool trigger() const; - const QString myInModuleActionID; private: diff --git a/src/SUIT/SUIT_PagePrefShortcutTreeItem.cxx b/src/SUIT/SUIT_PagePrefShortcutTreeItem.cxx index d05d51167..4451cb7b1 100644 --- a/src/SUIT/SUIT_PagePrefShortcutTreeItem.cxx +++ b/src/SUIT/SUIT_PagePrefShortcutTreeItem.cxx @@ -1,12 +1,12 @@ #include "SUIT_PagePrefShortcutTreeItem.h" -#include "SUIT_ShortcutTree.h" +#include "SUIT_ShortcutEditor.h" #include "SUIT_ShortcutMgr.h" /*! \brief Creates preference item for editing of key bindings - \param theParent parent preference item. Must not be nullptr. + \param theParent Must not be nullptr. */ SUIT_PagePrefShortcutTreeItem::SUIT_PagePrefShortcutTreeItem(QtxPreferenceItem* theParent) : QtxPagePrefItem(QString(), theParent) @@ -25,9 +25,8 @@ SUIT_PagePrefShortcutTreeItem::SUIT_PagePrefShortcutTreeItem(QtxPreferenceItem* } } - SUIT_ShortcutTree* tree = new SUIT_ShortcutTree(container); - tree->myModuleIDs = SUIT_ShortcutMgr::get()->getShortcutModuleIDs(); - setWidget(tree); + SUIT_ShortcutTabWidget* tabWidget = new SUIT_ShortcutTabWidget(SUIT_ShortcutMgr::get()->getShortcutModuleIDs(), container); + setWidget(tabWidget); } /*! @@ -37,7 +36,7 @@ SUIT_PagePrefShortcutTreeItem::SUIT_PagePrefShortcutTreeItem(QtxPreferenceItem* */ void SUIT_PagePrefShortcutTreeItem::retrieve() { - static_cast(widget())->setShortcutsFromManager(); + static_cast(widget())->setShortcutsFromManager(); } /*! @@ -47,7 +46,7 @@ void SUIT_PagePrefShortcutTreeItem::retrieve() */ void SUIT_PagePrefShortcutTreeItem::retrieveDefault() { - static_cast(widget())->setDefaultShortcuts(); + static_cast(widget())->setDefaultShortcuts(); } /*! @@ -58,7 +57,7 @@ void SUIT_PagePrefShortcutTreeItem::retrieveDefault() */ void SUIT_PagePrefShortcutTreeItem::store() { - static_cast(widget())->applyChangesToShortcutMgr(); + static_cast(widget())->applyChangesToShortcutMgr(); } /*static*/ std::map> SUIT_PagePrefShortcutTreeItem::shortcutContainers = diff --git a/src/SUIT/SUIT_PagePrefShortcutTreeItem.h b/src/SUIT/SUIT_PagePrefShortcutTreeItem.h index 653a1e08f..311ee1ad4 100644 --- a/src/SUIT/SUIT_PagePrefShortcutTreeItem.h +++ b/src/SUIT/SUIT_PagePrefShortcutTreeItem.h @@ -45,19 +45,17 @@ public: virtual void store(); private: - SUIT_ShortcutTree* myShortcutTree; - - // { root item (preference window), shortcut container of synchronized trees (widgets within the same window) } + // { root item (preference window), shortcut container of synchronized SUIT_ShortcutTabWidgets (widgets within the same window) } static std::map> shortcutContainers; /** Why is this? * Every QtxPagePrefMgr is eventually a preference window. Each preference window has button "Apply". * When the button is pressed, all descendants of the QtxPagePrefMgr store changes they carry into preferences. - * The pitfall with shortcut trees is as follows: made in independent shortcut trees, changes may conflict, - * and merge of such changes is ambiguous. And the solution is to keep shortcut trees within the same window - * synchronized - all changes being made in a tree of a synchronized bundle are projected to other trees from the bundle + * The pitfall with SUIT_ShortcutTabWidgets is as follows: made in independent instance of SUIT_ShortcutTabWidget, changes may conflict, + * and merge of such changes is ambiguous. And the solution is to keep SUIT_ShortcutTabWidgets within the same window + * synchronized - all changes being made in a SUIT_ShortcutTabWidget of a synchronized bundle are projected to other SUIT_ShortcutTabWidgets from the bundle * without interacting with SUIT_ShortcutMgr. * - * Every time shortcut preferences stored to the ShortcutMgr, all instances of SUIT_ShortcutTree are updated. + * Every time shortcut preferences stored to the ShortcutMgr, all instances of SUIT_ShortcutTabWidget are updated. */ }; diff --git a/src/SUIT/SUIT_ShortcutEditor.cxx b/src/SUIT/SUIT_ShortcutEditor.cxx new file mode 100644 index 000000000..d509caf14 --- /dev/null +++ b/src/SUIT/SUIT_ShortcutEditor.cxx @@ -0,0 +1,1195 @@ +// Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "SUIT_ShortcutEditor.h" +#include "Tools/SUIT_extensions.h" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + + +SUIT_KeySequenceEdit::SUIT_KeySequenceEdit(QWidget* parent) +: QFrame(parent) +{ + initialize(); + myKeySequenceLineEdit->installEventFilter(this); +} + +void SUIT_KeySequenceEdit::setConfirmedKeySequence(const QKeySequence& theKeySequence) +{ + myConfirmedKeySequenceString = theKeySequence.toString(); + myKeySequenceLineEdit->setText(myConfirmedKeySequenceString); + myPrevKeySequenceString = myConfirmedKeySequenceString; +} + +void SUIT_KeySequenceEdit::setEditedKeySequence(const QKeySequence& theKeySequence) +{ + const QString keySequenceString = theKeySequence.toString(); + myKeySequenceLineEdit->setText(keySequenceString); + myPrevKeySequenceString = keySequenceString; +} + +QKeySequence SUIT_KeySequenceEdit::editedKeySequence() const +{ + return QKeySequence::fromString(myKeySequenceLineEdit->text()); +} + +bool SUIT_KeySequenceEdit::isKeySequenceModified() const +{ + return QKeySequence(myConfirmedKeySequenceString) != editedKeySequence(); +} + +void SUIT_KeySequenceEdit::restoreKeySequence() +{ + myKeySequenceLineEdit->setText(myConfirmedKeySequenceString); + myPrevKeySequenceString = myConfirmedKeySequenceString; +} + +/*static*/ QString SUIT_KeySequenceEdit::parseEvent(QKeyEvent* e) +{ + bool isShiftPressed = e->modifiers() & Qt::ShiftModifier; + bool isControlPressed = e->modifiers() & Qt::ControlModifier; + bool isAltPressed = e->modifiers() & Qt::AltModifier; + bool isMetaPressed = e->modifiers() & Qt::MetaModifier; + bool isModifiersPressed = isControlPressed || isAltPressed || isMetaPressed; // Do not treat Shift alone as a modifier! + int result=0; + if(isControlPressed) + result += Qt::CTRL; + if(isAltPressed) + result += Qt::ALT; + if(isShiftPressed) + result += Qt::SHIFT; + if(isMetaPressed) + result += Qt::META; + + int aKey = e->key(); + if ((isValidKey(aKey) && isModifiersPressed) || ((aKey >= Qt::Key_F1) && (aKey <= Qt::Key_F12)) || aKey == Qt::Key_Delete) + result += aKey; + + return QKeySequence(result).toString(); +} + +/*static*/ bool SUIT_KeySequenceEdit::isValidKey(int theKey) +{ + if ( theKey == Qt::Key_Underscore || theKey == Qt::Key_Escape || + ( theKey >= Qt::Key_Backspace && theKey <= Qt::Key_Delete ) || + ( theKey >= Qt::Key_Home && theKey <= Qt::Key_PageDown ) || + ( theKey >= Qt::Key_F1 && theKey <= Qt::Key_F12 ) || + ( theKey >= Qt::Key_Space && theKey <= Qt::Key_Asterisk ) || + ( theKey >= Qt::Key_Comma && theKey <= Qt::Key_AsciiTilde ) ) + return true; + return false; +} + +void SUIT_KeySequenceEdit::onClear() +{ + myKeySequenceLineEdit->setText(""); + myPrevKeySequenceString = ""; + emit editingFinished(); +} + +void SUIT_KeySequenceEdit::onEditingFinished() +{ + if (myKeySequenceLineEdit->text().endsWith("+")) + myKeySequenceLineEdit->setText(myPrevKeySequenceString); + else + myPrevKeySequenceString = myKeySequenceLineEdit->text(); + emit editingFinished(); +} + +bool SUIT_KeySequenceEdit::eventFilter(QObject* theObject, QEvent* theEvent) +{ + if (theObject == myKeySequenceLineEdit) { + if (theEvent->type() == QEvent::KeyPress) { + QKeyEvent* keyEvent = static_cast(theEvent); + QString text = parseEvent(keyEvent); + if (keyEvent->key() == Qt::Key_Delete || keyEvent->key() == Qt::Key_Backspace) + myKeySequenceLineEdit->setText(""); + if (!text.isEmpty()) + myKeySequenceLineEdit->setText(text); + + emit editingStarted(); + return true; + } + if (theEvent->type() == QEvent::KeyRelease) { + onEditingFinished(); + return true; + } + } + return false; +} + +void SUIT_KeySequenceEdit::initialize() +{ + QHBoxLayout* base = new QHBoxLayout( this ); + base->setMargin(0); + base->setSpacing(5); + + base->addWidget(myKeySequenceLineEdit = new QLineEdit(this)); + setFocusProxy(myKeySequenceLineEdit); + + QToolButton* clearBtn = new QToolButton(); + clearBtn->setIcon(QIcon(":/resources/shortcut_disable.svg")); + clearBtn->setToolTip(tr("Disable shortcut.")); + base->addWidget(clearBtn); + + QToolButton* restoreBtn = new QToolButton(); + restoreBtn->setIcon(QIcon(":/resources/shortcut_restore.svg")); + restoreBtn->setToolTip(tr("Restore the currently applied key sequence.")); + base->addWidget(restoreBtn); + + myKeySequenceLineEdit->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); + clearBtn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + restoreBtn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + + connect(clearBtn, SIGNAL(clicked()), this, SLOT(onClear())); + connect(restoreBtn, SIGNAL(clicked()), this, SIGNAL(restoreFromShortcutMgrClicked())); + connect(myKeySequenceLineEdit, SIGNAL(editingFinished()), this, SLOT(onEditingFinished())); +} + + +SUIT_EditKeySequenceDialog::SUIT_EditKeySequenceDialog(SUIT_ShortcutTabWidget* theParent) +: QDialog(theParent) +{ + setMinimumWidth(500); + setWindowTitle(tr("Change key sequence")); + QVBoxLayout* layout = new QVBoxLayout(this); + myActionName = new QLabel(this); + myActionName->setTextFormat(Qt::RichText); + myKeySequenceEdit = new SUIT_KeySequenceEdit(this); + myTextEdit = new QTextEdit(this); + layout->addWidget(myActionName); + layout->addWidget(myKeySequenceEdit); + layout->addWidget(myTextEdit); + myActionName->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); + myKeySequenceEdit->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); + myTextEdit->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + myTextEdit->setReadOnly(true); + myTextEdit->setAcceptRichText(true); + myTextEdit->setPlaceholderText(tr("No conflicts.")); + setFocusProxy(myKeySequenceEdit); + + QHBoxLayout* buttonLayout = new QHBoxLayout(this); + layout->addLayout(buttonLayout); + QPushButton* confirmButton = new QPushButton(tr("Confirm"), this); + confirmButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + QPushButton* cancelButton = new QPushButton(tr("Cancel"), this); + cancelButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + buttonLayout->addStretch(); + buttonLayout->addWidget(confirmButton); + buttonLayout->addWidget(cancelButton); + + connect(myKeySequenceEdit, SIGNAL(editingStarted()), this, SLOT(onEditingStarted())); + connect(myKeySequenceEdit, SIGNAL(editingFinished()), this, SLOT(onEditingFinished())); + connect(myKeySequenceEdit, SIGNAL(restoreFromShortcutMgrClicked()), this, SLOT(onRestoreFromShortcutMgr())); + connect(confirmButton, SIGNAL(clicked()), this, SLOT(onConfirm())); + connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject())); +} + +void SUIT_EditKeySequenceDialog::setModuleAndActionID(const QString& theModuleID, const QString& theInModuleActionID) +{ + myModuleID = theModuleID; + myInModuleActionID = theInModuleActionID; +} + +const QString& SUIT_EditKeySequenceDialog::moduleID() const { return myModuleID; } +const QString& SUIT_EditKeySequenceDialog::inModuleActionID() const { return myInModuleActionID; } + +void SUIT_EditKeySequenceDialog::setModuleAndActionName(const QString& theModuleName, const QString& theActionName, const QString& theActionToolTip) +{ + myActionName->setText("" + theModuleName + "  " + theActionName); + myActionName->setToolTip(theActionToolTip); +} + +void SUIT_EditKeySequenceDialog::setConfirmedKeySequence(const QKeySequence& theSequence) +{ + myKeySequenceEdit->setConfirmedKeySequence(theSequence); +} + +QKeySequence SUIT_EditKeySequenceDialog::editedKeySequence() const +{ + return myKeySequenceEdit->editedKeySequence(); +} + +int SUIT_EditKeySequenceDialog::exec() +{ + myKeySequenceEdit->setFocus(Qt::ActiveWindowFocusReason); + return QDialog::exec(); +} + +void SUIT_EditKeySequenceDialog::onEditingStarted() +{ + myTextEdit->setEnabled(false); +} + +void SUIT_EditKeySequenceDialog::onEditingFinished() +{ + updateConflictsMessage(); +} + +void SUIT_EditKeySequenceDialog::onRestoreFromShortcutMgr() +{ + const auto mgr = SUIT_ShortcutMgr::get(); + myKeySequenceEdit->setEditedKeySequence(mgr->getKeySequence(myModuleID, myInModuleActionID)); + updateConflictsMessage(); +} + +void SUIT_EditKeySequenceDialog::updateConflictsMessage() +{ + myTextEdit->setEnabled(true); + QTextDocument* doc = myTextEdit->document(); + if (!doc) { + doc = new QTextDocument(myTextEdit); + myTextEdit->setDocument(doc); + } + + if (!myKeySequenceEdit->isKeySequenceModified()) { + doc->clear(); + return; + } + + const QKeySequence newKeySequence = editedKeySequence(); + + const auto tabWidget = static_cast(parentWidget()); + /** {moduleID, inModuleActionID}[] */ + std::set> conflicts = tabWidget->shortcutContainer()->getConflicts(myModuleID, myInModuleActionID, newKeySequence); + if (!conflicts.empty()) { + const auto mgr = SUIT_ShortcutMgr::get(); + + QString report = "" + tr("These shortcuts will be disabled on confirm:") + ""; + { + report += "
    "; + for (const auto& conflict : conflicts) { + const QString conflictingModuleName = mgr->getModuleName(conflict.first); + const auto actionAssets = SUIT_ShortcutMgr::get()->getActionAssets(conflict.first, conflict.second); +#ifdef SHORTCUT_MGR_DBG + if (!actionAssets) + ShCutDbg("SUIT_EditKeySequenceDialog::updateConflictsMessage(): action assets of \"" + conflict.first + "/" + conflict.second + "\" are absent in SUIT_ShortcutMgr."); +#endif + const QString conflictingActionName = actionAssets ? actionAssets->bestPath() : conflict.second; + report += "
  • " + conflictingModuleName + "  " + conflictingActionName + "
  • "; + } + report += "
"; + } + doc->setHtml(report); + } + else /* if no conflicts */ { + doc->clear(); + } +} + +void SUIT_EditKeySequenceDialog::onConfirm() +{ + if (myKeySequenceEdit->isKeySequenceModified()) + accept(); + else + reject(); +} + + +/*static*/ std::map> SUIT_ShortcutTabWidget::instances = +std::map>(); + +SUIT_ShortcutTabWidget::SUIT_ShortcutTabWidget( + const std::set& theIDsOfModulesToShow, + std::shared_ptr theContainer, + QWidget* theParent +) : QTabWidget(theParent), +myModuleIDs(theIDsOfModulesToShow.empty() ? std::set({SUIT_ShortcutMgr::ROOT_MODULE_ID}) : theIDsOfModulesToShow), +myShortcutContainer(theContainer ? theContainer : std::shared_ptr(new SUIT_ShortcutContainer())), +myIsPopulated(false) +{ + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + myEditDialog = new SUIT_EditKeySequenceDialog(this); + myFindActionWidget = new SUIT_FindActionWidget( + this, + std::bind(&SUIT_ShortcutTabWidget::jumpToTreeItem, this, std::placeholders::_1, std::placeholders::_2) /*call back on item double clicked*/, + tr("Double click to edit key sequence."), + true /*theEnableItemsOfUnavailableActions*/, + true /*theShowKeySequenceColumn*/, + std::bind(&SUIT_ShortcutTabWidget::getConfirmedKeySequence, this, std::placeholders::_1, std::placeholders::_2) /*theKeySequenceGetter*/ + ); + myFindActionWidget->showOptions(false); + myFindActionWidget->setIncludedModuleIDs(myModuleIDs, true /*doNotUpdateResults*/); + + const auto tabBar = new SUIT_ShortcutTabWidgetBar(this); + setTabBar(tabBar); + + insertTab(0, myFindActionWidget, QIcon(":/resources/find.svg"), ""/*Tab name*/); + setTabToolTip(0, tr("Find shortcut")); + + SUIT_ShortcutTabWidget::instances[myShortcutContainer.get()].emplace(this); +} + +SUIT_ShortcutTabWidget::~SUIT_ShortcutTabWidget() +{ + SUIT_ShortcutTabWidget::instances[myShortcutContainer.get()].erase(this); + if (SUIT_ShortcutTabWidget::instances[myShortcutContainer.get()].empty()) + SUIT_ShortcutTabWidget::instances.erase(myShortcutContainer.get()); +} + +void SUIT_ShortcutTabWidget::setShortcutsFromManager() +{ + *myShortcutContainer = SUIT_ShortcutMgr::get()->getShortcutContainer(); + // nb! ShortcutMgr never removes shortcuts from its container, only disables. + + updateTabs(false /*theHighlightModifiedTreeItems*/, true /*theUpdateSyncTabs*/); +} + +void SUIT_ShortcutTabWidget::setDefaultShortcuts() +{ + SUIT_ShortcutContainer defaultShortcuts; + SUIT_ShortcutMgr::fillContainerFromPreferences(defaultShortcuts, true /*theDefaultOnly*/); + + myShortcutContainer->merge(defaultShortcuts, true /*theOverride*/, true /*theTreatAbsentIncomingAsDisabled*/); + // nb! SUIT_ShortcutContainer never erases shortcuts, only disables. + + updateTabs(true /*theHighlightModifiedTreeItems*/, true /*theUpdateSyncTabs*/); +} + +void SUIT_ShortcutTabWidget::applyChangesToShortcutMgr() +{ + const auto mgr = SUIT_ShortcutMgr::get(); + mgr->mergeShortcutContainer(*myShortcutContainer); + + // Update non-synchronized with this instances. + for (const auto& containerAndSyncTabWidgets : SUIT_ShortcutTabWidget::instances) { + if (containerAndSyncTabWidgets.first == myShortcutContainer.get()) + continue; // Synchronized instances are updated in SUIT_ShortcutTabWidget::updateTabs. + + const std::set& syncTabWidgets = containerAndSyncTabWidgets.second; + const auto itFirstSyncTabWidget = syncTabWidgets.begin(); + if (itFirstSyncTabWidget == syncTabWidgets.end()) + continue; + + // No need to update each synchronized instance with the same SUIT_ShortcutContainer. + // Update just one of them, SUIT_ShortcutTabWidget::setShortcutsFromManager does rest. + (*itFirstSyncTabWidget)->setShortcutsFromManager(); + const auto editDialog = (*itFirstSyncTabWidget)->myEditDialog; + editDialog->setConfirmedKeySequence(mgr->getShortcutContainer().getKeySequence(editDialog->moduleID(), editDialog->inModuleActionID())); + editDialog->updateConflictsMessage(); + } +} + +std::shared_ptr SUIT_ShortcutTabWidget::shortcutContainer() const +{ + return myShortcutContainer; +} + +void SUIT_ShortcutTabWidget::onTreeItemDoubleClicked(SUIT_ShortcutTree* theTree, SUIT_ShortcutTreeItem* theItem) +{ + const auto mgr = SUIT_ShortcutMgr::get(); + + if (!theItem->isAction()) + return; + + myEditDialog->setModuleAndActionID(theTree->moduleID(), theItem->inModuleID()); + myEditDialog->setModuleAndActionName(theTree->name(), theItem->path(), theItem->toolTip()); + myEditDialog->setConfirmedKeySequence(QKeySequence::fromString(theItem->keySequence())); + myEditDialog->updateConflictsMessage(); + const bool somethingChanged = myEditDialog->exec() == QDialog::Accepted; + + if (!somethingChanged) + return; + + const QKeySequence newKeySequence = myEditDialog->editedKeySequence(); + + /** { moduleID, inModuleID }[] */ + std::set> disabledActionIDs = myShortcutContainer->setShortcut(theTree->moduleID(), theItem->inModuleID(), newKeySequence, true /*override*/); + + /** { moduleID, {inModuleID, keySequence}[] }[] */ + std::map> changes; + changes[theTree->moduleID()][theItem->inModuleID()] = newKeySequence.toString(); + for (const auto moduleAndActionID : disabledActionIDs) { + changes[moduleAndActionID.first][moduleAndActionID.second] = QString(); + } + + std::map moduleModifiedStatuses; + + // Set new key sequences to shortcut items. + for (const auto& moduleIDAndChanges : changes) { + const QString& moduleID = moduleIDAndChanges.first; + bool moduleModified = false; + + const auto itModuleTree = myModuleTrees.find(moduleID); + if (itModuleTree == myModuleTrees.end()) + continue; + + SUIT_ShortcutTree* const moduleTree = itModuleTree->second; + + /** {inModuleID, newKeySequence}[] */ + const std::map& moduleChanges = moduleIDAndChanges.second; + for (const auto& inModuleIDAndKS : moduleChanges) { + const QString& inModuleID = inModuleIDAndKS.first; + const QString& keySequence = inModuleIDAndKS.second; + + SUIT_ShortcutTreeItem* const item = moduleTree->findItem(SUIT_ShortcutMgr::splitIntoTokens(inModuleID)); + if (!item) { + ShCutDbg("No SUIT_ShortcutTreeItem for \"" + moduleID + "/" + inModuleID + "\" is found."); + continue; + } + + item->setKeySequence(keySequence); + + const QKeySequence& appliedKeySequence = mgr->getKeySequence(moduleID, inModuleID); + const bool keySequenceModified = QKeySequence::fromString(keySequence) != appliedKeySequence; + item->styleAsKeySequenceModified(keySequenceModified); + moduleModified = moduleModified || keySequenceModified; + } + + moduleModifiedStatuses[indexOf(moduleTree)] = moduleModified; + } + static_cast(tabBar())->mergeTabModifiedStatuses(moduleModifiedStatuses); + + // Key sequences have been changed. Update search tab. + myFindActionWidget->updateUI(); +} + +void SUIT_ShortcutTabWidget::jumpToTreeItem(const QString& theModuleID, const QString& theInModuleID) +{ + const auto itModuleTree = myModuleTrees.find(theModuleID); + if (itModuleTree == myModuleTrees.end()) { + ShCutDbg("SUIT_ShortcutTabWidget::jumpToTreeItem( moduleID = " + theModuleID + ", inModuleID = " + theInModuleID + "): the tab widget is set to not show the module."); + return; + } + + const auto moduleTree = itModuleTree->second; + const auto item = moduleTree->findItem(SUIT_ShortcutMgr::splitIntoTokens(theInModuleID)); + if (!item) { + ShCutDbg("SUIT_ShortcutTabWidget::jumpToTreeItem( moduleID = " + theModuleID + ", inModuleID = " + theInModuleID + "): tree widget does not have such item."); + return; + } + + setCurrentWidget(moduleTree); + moduleTree->scrollToItem(item); + moduleTree->setCurrentItem(item); + onTreeItemDoubleClicked(moduleTree, item); +} + +std::pair SUIT_ShortcutTabWidget::getConfirmedKeySequence(const QString& theModuleID, const QString& theInModuleActionID) const +{ + const QKeySequence& ksInMgr = SUIT_ShortcutMgr::get()->getKeySequence(theModuleID, theInModuleActionID); + const auto itModuleTree = myModuleTrees.find(theModuleID); + if (itModuleTree == myModuleTrees.end()) + std::pair(QString(), !ksInMgr.isEmpty()); + + const auto moduleTree = itModuleTree->second; + const auto item = moduleTree->findItem(SUIT_ShortcutMgr::splitIntoTokens(theInModuleActionID)); + if (!item) + std::pair(QString(), !ksInMgr.isEmpty()); + + const QString itemKSString = item->keySequence(); + return std::pair(itemKSString, itemKSString != ksInMgr.toString()); +} + +void SUIT_ShortcutTabWidget::updateTabs(bool theHighlightModifiedTreeItems, bool theUpdateSyncTabWidgets) +{ + const auto mgr = SUIT_ShortcutMgr::get(); + const QString lang = SUIT_ShortcutMgr::currentLang(); + + std::map moduleModifiedStatuses; + + for (const QString& moduleID : myModuleIDs) { + const auto moduleAssets = mgr->getModuleAssets(moduleID); + + if (!moduleAssets) { + ShCutDbg("SUIT_ShortcutTabWidget::updateTabs: SUIT_ShortcutMgr does not have assets of module \"" + moduleID + "\"." ); + const auto itModuleIDAndTree = myModuleTrees.find(moduleID); + if (itModuleIDAndTree != myModuleTrees.end()) { + SUIT_ShortcutTree* const moduleTree = itModuleIDAndTree->second; + removeTab(indexOf(moduleTree)); + myModuleTrees.erase(itModuleIDAndTree); + delete moduleTree; + } + continue; + } + + auto itModuleIDAndTree = myModuleTrees.find(moduleID); + if (itModuleIDAndTree == myModuleTrees.end()) { + SUIT_ShortcutTree* const moduleTree = new SUIT_ShortcutTree(this, moduleAssets, lang); + itModuleIDAndTree = myModuleTrees.emplace(moduleID, moduleTree).first; + + const int tabIndex = ::SUIT_tools::distanceFromBegin(myModuleIDs, myModuleIDs.find(moduleID)); + insertTab(tabIndex + 1 /*The first tab is SUIT_FindActionWidget.*/, moduleTree, moduleAssets->myIcon, moduleTree->name()); + } + + SUIT_ShortcutTree* const moduleTree = itModuleIDAndTree->second; + const bool isTreeShortcutModified = moduleTree->updateItems(theHighlightModifiedTreeItems); + + moduleModifiedStatuses[indexOf(moduleTree)] = isTreeShortcutModified; + } + + if (!myIsPopulated) { + setCurrentWidget(myModuleTrees.begin()->second); // Set active first tab with shortcut tree. + myIsPopulated = true; + + // Adjust widths of Find tab' columns. + for (int colIdx = 0; colIdx < SUIT_ShortcutTree::ColumnIdx::NotExist; colIdx++) { + int colWidth = 0; + for (const auto& moduleIDAndTree : myModuleTrees) { + const SUIT_ShortcutTree* const moduleTree = moduleIDAndTree.second; + const int treeColWidth = moduleTree->columnWidth(colIdx); + if (treeColWidth > colWidth) + colWidth = treeColWidth; + } + myFindActionWidget->setColumnWidth(SUIT_ShortcutTree::toFoundActionTreeColIdx(SUIT_ShortcutTree::ColumnIdx(colIdx)), colWidth); + } + } + + static_cast(tabBar())->mergeTabModifiedStatuses(moduleModifiedStatuses); + + // Key sequences have been changed. Update search tab. + myFindActionWidget->updateUI(); + + if (theUpdateSyncTabWidgets) { + const std::set& syncTabWidgets = SUIT_ShortcutTabWidget::instances[myShortcutContainer.get()]; + for (const auto syncTabWidget : syncTabWidgets) { + if (syncTabWidget == this) + continue; + + syncTabWidget->updateTabs(theHighlightModifiedTreeItems, false /*theUpdateSyncTabWidgets*/); + const auto editDialog = syncTabWidget->myEditDialog; + editDialog->setConfirmedKeySequence(myShortcutContainer->getKeySequence(editDialog->moduleID(), editDialog->inModuleActionID())); + editDialog->updateConflictsMessage(); + } + } +} + + +SUIT_ShortcutTabWidgetBar::SUIT_ShortcutTabWidgetBar(SUIT_ShortcutTabWidget* theTabWidget) : QTabBar(theTabWidget) {} + +void SUIT_ShortcutTabWidgetBar::mergeTabModifiedStatuses(const std::map& theTabModifiedStatuses) +{ + for (const auto& tabModifiedStatus : theTabModifiedStatuses) { + myTabModifiedStatuses[tabModifiedStatus.first] = tabModifiedStatus.second; + } +} + +void SUIT_ShortcutTabWidgetBar::paintEvent(QPaintEvent* theEvent) +{ + QTabBar::paintEvent(theEvent); + + QPainter painter(this); + QStyleOptionTab option; + + for (const auto& tabModifiedStatus : myTabModifiedStatuses) { + const int tabIdx = tabModifiedStatus.first; + const bool isKeySequenceModified = tabModifiedStatus.second; + + initStyleOption(&option, tabIdx); + if (isKeySequenceModified) + painter.fillRect(tabRect(tabIdx), Qt::darkGreen); + else + painter.fillRect(tabRect(tabIdx), palette().background()); + + style()->drawControl(QStyle::CE_TabBarTab, &option, &painter, this); + } + + const int activeTabIdx = static_cast(parentWidget())->currentIndex(); + const auto itActiveTabModifiedStatus = myTabModifiedStatuses.find(activeTabIdx); + if (itActiveTabModifiedStatus != myTabModifiedStatuses.end()) { + const bool isActiveTabModified = itActiveTabModifiedStatus->second; + if (isActiveTabModified) { + setStyleSheet( + "QTabBar::tab:selected {" + " background: darkgreen;" + " color: white;" + "}" + ); + } + else { + setStyleSheet( + "QTabBar::tab:selected {}" + ); + } + } +} + + +/*static*/ SUIT_FoundActionTree::ColumnIdx SUIT_ShortcutTree::toFoundActionTreeColIdx(const SUIT_ShortcutTree::ColumnIdx theColumnIdx) +{ + switch (theColumnIdx) { + case SUIT_ShortcutTree::ColumnIdx::Name: + return SUIT_FoundActionTree::ColumnIdx::Name; + case SUIT_ShortcutTree::ColumnIdx::ToolTip: + return SUIT_FoundActionTree::ColumnIdx::ToolTip; + case SUIT_ShortcutTree::ColumnIdx::KeySequence: + return SUIT_FoundActionTree::ColumnIdx::KeySequence; + default: + throw std::invalid_argument("SUIT_ShortcutTree::toFoundActionTreeColIdx(const SUIT_ShortcutTree::ColumnIdx): not handled ColumnIdx case."); + } +} + +/*static*/ SUIT_ShortcutTree::SortKey SUIT_ShortcutTree::toSortKey(const SUIT_ShortcutTree::ColumnIdx theColumnIdx) +{ + switch (theColumnIdx) { + case SUIT_ShortcutTree::ColumnIdx::Name: + return SUIT_ShortcutTree::SortKey::Name; + case SUIT_ShortcutTree::ColumnIdx::ToolTip: + return SUIT_ShortcutTree::SortKey::ToolTip; + case SUIT_ShortcutTree::ColumnIdx::KeySequence: + return SUIT_ShortcutTree::SortKey::KeySequence; + default: + throw std::invalid_argument("SUIT_ShortcutTree::toSortKey(const SUIT_ShortcutTree::ColumnIdx): not handled ColumnIdx case."); + } +} + +/*static*/ SUIT_ShortcutTree::ColumnIdx SUIT_ShortcutTree::toColumnIdx(const SUIT_ShortcutTree::SortKey theSortKey) +{ + switch (theSortKey) + { + case SUIT_ShortcutTree::SortKey::Name: + return SUIT_ShortcutTree::ColumnIdx::Name; + case SUIT_ShortcutTree::SortKey::ToolTip: + return SUIT_ShortcutTree::ColumnIdx::ToolTip; + case SUIT_ShortcutTree::SortKey::KeySequence: + return SUIT_ShortcutTree::ColumnIdx::KeySequence; + default: + return SUIT_ShortcutTree::ColumnIdx::NotExist; + } +} + +/*static*/ const QList> SUIT_ShortcutTree::DEFAULT_SORT_SCHEMA = +{ + {SUIT_ShortcutTree::SortKey::Name, Qt::SortOrder::AscendingOrder}, + {SUIT_ShortcutTree::SortKey::ToolTip, Qt::SortOrder::AscendingOrder}, + {SUIT_ShortcutTree::SortKey::KeySequence, Qt::SortOrder::AscendingOrder}, + {SUIT_ShortcutTree::SortKey::ID, Qt::SortOrder::AscendingOrder} +}; + +SUIT_ShortcutTree::SUIT_ShortcutTree( + SUIT_ShortcutTabWidget* theParent, + std::shared_ptr theAssets, + const QString& theLang +) : QTreeWidget(theParent), +myParentTabWidget(theParent), myAssets(theAssets), +myLeadingSortKey(SUIT_ShortcutTree::SortKey::Name), myIsPopulated(false) +{ + for (const auto& keyAndOrder : SUIT_ShortcutTree::DEFAULT_SORT_SCHEMA) { + mySortSchema[keyAndOrder.first] = keyAndOrder.second; + } + + setLang(theLang); + + setSelectionMode(QAbstractItemView::SingleSelection); + setColumnCount(int(SUIT_ShortcutTree::ColumnIdx::NotExist) - 1); + setHeaderItem(new SUIT_ShortcutTreeHeaderItem(mySortSchema, SUIT_ShortcutTree::toColumnIdx(myLeadingSortKey))); + setSortingEnabled(false); // Custom sorting is engaged. + header()->setSectionResizeMode(QHeaderView::Interactive); + header()->setSectionsClickable(true); + + setExpandsOnDoubleClick(false); // Open shortcut editor, if item is action, on double click instead. + setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents); + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + this->installEventFilter(this); + + connect(header(), SIGNAL(sectionClicked(int)), this, SLOT(onHeaderItemClicked(int))); + connect(header(), SIGNAL(sortIndicatorChanged(int, Qt::SortOrder)), this, SLOT(onSortColOrOrderChanged(int, Qt::SortOrder))); + connect(this, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), this, SLOT(onItemDoubleClicked(QTreeWidgetItem*, int))); + connect(this, SIGNAL(itemExpanded(QTreeWidgetItem*)), this, SLOT(onItemExpanded(QTreeWidgetItem*))); + connect(this, SIGNAL(itemCollapsed(QTreeWidgetItem*)), this, SLOT(onItemCollapsed(QTreeWidgetItem*))); +} + +SUIT_ShortcutTabWidget* SUIT_ShortcutTree::parentTabWidget() const +{ + return myParentTabWidget; // static_cast(QWidget::parentWidget()) somehow is not the same. +} + +const SUIT_ShortcutContainer& SUIT_ShortcutTree::shortcutContainer() const +{ + return *(myParentTabWidget->myShortcutContainer); +} + +const QString& SUIT_ShortcutTree::moduleID() const +{ + return myAssets->myModuleID; +} + +void SUIT_ShortcutTree::setLang(const QString& theLang) +{ + myName = myAssets->bestName(theLang); + myToolTip = myAssets->bestToolTip(theLang); +} + +const QString& SUIT_ShortcutTree::name() const +{ + return myName; +} + +const QString& SUIT_ShortcutTree::toolTip() const +{ + return myToolTip; +} + +void SUIT_ShortcutTree::sort(SUIT_ShortcutTree::SortKey theLeadingKey, Qt::SortOrder theOrder) +{ + if (theLeadingKey == myLeadingSortKey && theOrder == mySortSchema[theLeadingKey]) + return; + + myLeadingSortKey = theLeadingKey; + mySortSchema[theLeadingKey] = theOrder; + + const auto selectedItem = currentItem(); + sortRecursive(invisibleRootItem()); + if (selectedItem) { + scrollToItem(selectedItem); + setCurrentItem(selectedItem); + } +} + +void SUIT_ShortcutTree::sortRecursive(QTreeWidgetItem* theParentItem) +{ + const auto sortedChildren = getSortedChildren(theParentItem); + + theParentItem->takeChildren(); + + for (const auto childItem : sortedChildren) { + theParentItem->addChild(childItem); + childItem->setExpanded(childItem->isExpanded()); + sortRecursive(childItem); + } +} + +bool SUIT_ShortcutTree::updateItems(bool theHighlightModified) +{ + const std::shared_ptr moduleAssets = SUIT_ShortcutMgr::get()->getModuleAssets(moduleID()); + const bool isKeySequenceModified = updateChildrenItemsRecursively(theHighlightModified, invisibleRootItem(), true /*theItemIsInvisibleRoot*/); + + if (!myIsPopulated) { // Do not adjust column widths more than once to not reset user-made adjustments. + for (int colIdx = 0; colIdx < columnCount(); colIdx++) { + resizeColumnToContents(colIdx); + } + myIsPopulated = true; + } + + return isKeySequenceModified; +} + +bool SUIT_ShortcutTree::updateChildrenItemsRecursively( + bool theHighlightModified, + QTreeWidgetItem* const theItem, + bool theItemIsInvisibleRoot +) { + const auto mgr = SUIT_ShortcutMgr::get(); + const QString lang = SUIT_ShortcutMgr::currentLang(); + + // { IDLastToken, assets }. + const auto& childrenAssets = theItemIsInvisibleRoot ? myAssets->children() : static_cast(theItem)->myAssets->children(); + const auto& moduleShortcuts = shortcutContainer().getModuleShortcutsInversed(moduleID()); + + bool isKSModified = false; + + // Update exisiting child items. + for (int childItemIdx = 0; childItemIdx < theItem->childCount(); childItemIdx++) { + const auto childItem = static_cast(theItem->child(childItemIdx)); + const auto itChildAssets = childrenAssets.find(childItem->lastTokenOfID()); + if (itChildAssets == childrenAssets.end()) { + // Assets of the child item has been removed from ShortcutMgr - impossible. + ShCutDbg("Invalid logics: assets of \"" + moduleID() + "/" + childItem->inModuleID() + "\" are missing in ShortcutMgr."); + continue; + } + + if (childItem->isAction()) { + const bool isChildKSModified = updateItemShortcut(childItem, moduleShortcuts, theHighlightModified); + isKSModified = isKSModified || isChildKSModified; + } + + const bool isDescendantKSModified = updateChildrenItemsRecursively(theHighlightModified, childItem); + isKSModified = isKSModified || isDescendantKSModified; + } + + // Add new child items. + if (theItem->childCount() < childrenAssets.size()) { + auto sortedChildren = getSortedChildren(theItem); + for (const auto& childTokenAndAssets : childrenAssets) { + const QString& childToken = childTokenAndAssets.first; + const auto& childAssets = childTokenAndAssets.second; + + const auto predicate = [&childToken](const SUIT_ShortcutTreeItem* const theItem) -> bool { + return theItem->lastTokenOfID() == childToken; + }; + + if (std::find_if(sortedChildren.begin(), sortedChildren.end(), predicate) == sortedChildren.end()) { + if (!childAssets->isAction() && childAssets->children().empty()) + continue; // Do not create empty pure folders. + + const auto newChildItem = new SUIT_ShortcutTreeItem(childAssets, lang); + if (newChildItem->isAction()) { + const bool isChildKSModified = updateItemShortcut(newChildItem, moduleShortcuts, theHighlightModified); + isKSModified = isKSModified || isChildKSModified; + } + + insertChild(theItem, sortedChildren, newChildItem); + newChildItem->setExpanded(true); // Make tree expanded on first show. + const bool isDescendantKSModified = updateChildrenItemsRecursively(theHighlightModified, newChildItem); + isKSModified = isKSModified || isDescendantKSModified; + } + } + } + + return isKSModified; +} + +bool SUIT_ShortcutTree::updateItemShortcut( + SUIT_ShortcutTreeItem* const theItem, + const std::map& theModuleShortcuts, + bool theHighlightIfModified +) const { + static const QKeySequence NO_KEYSEQUENCE = QKeySequence(); + + const auto itShortcut = theModuleShortcuts.find(theItem->inModuleID()); + const QKeySequence& newKeySequence = itShortcut == theModuleShortcuts.end() ? NO_KEYSEQUENCE : itShortcut->second; + const QString newKeySequenceString = newKeySequence.toString(); + + if (theItem->keySequence() != newKeySequenceString) + theItem->setKeySequence(newKeySequenceString); + + const QKeySequence& appliedKeySequence = SUIT_ShortcutMgr::get()->getKeySequence(moduleID(), theItem->inModuleID()); + const bool isKeySequenceModified = newKeySequence != appliedKeySequence; + if (theHighlightIfModified) + theItem->styleAsKeySequenceModified(isKeySequenceModified); + else + theItem->styleAsKeySequenceModified(false); + + return isKeySequenceModified; +} + +SUIT_ShortcutTreeItem* SUIT_ShortcutTree::findItem(QStringList theRelativeIDTokens, const QTreeWidgetItem* theAncestorItem) const +{ + if (theRelativeIDTokens.isEmpty()) + return nullptr; + + if (!theAncestorItem) + theAncestorItem = invisibleRootItem(); + + const QString& token = theRelativeIDTokens.front(); + for (int childIdx = 0; childIdx < theAncestorItem->childCount(); childIdx++) { + const auto childItem = static_cast(theAncestorItem->child(childIdx)); + if (childItem->lastTokenOfID() == token) { + if (theRelativeIDTokens.length() > 1) { + theRelativeIDTokens.pop_front(); + return findItem(std::move(theRelativeIDTokens), childItem); + } + else + return childItem; + } + } + + return nullptr; +} + +std::set> SUIT_ShortcutTree::getSortedChildren(QTreeWidgetItem* theParentItem) +{ + auto sortSchema = SUIT_ShortcutTree::DEFAULT_SORT_SCHEMA; + for (auto itKeyAndOrder = sortSchema.begin(); itKeyAndOrder != sortSchema.end();) { + if (itKeyAndOrder->first == myLeadingSortKey) + sortSchema.erase(itKeyAndOrder); + else + itKeyAndOrder->second = mySortSchema[itKeyAndOrder->first]; + + itKeyAndOrder++; + } + sortSchema.push_front(std::pair(myLeadingSortKey, mySortSchema[myLeadingSortKey])); + + const std::function comparator = + [this, sortSchema](const SUIT_ShortcutTreeItem* theItemA, const SUIT_ShortcutTreeItem* theItemB) { + // Folders first. + if (theItemA->isFolder()) { + if (!theItemB->isFolder()) + return true; + } + else { + if (theItemB->isFolder()) + return false; + } + + const auto collator = QCollator(); + for (const auto& keyAndOrder : sortSchema) { + const QString valA = theItemA->getValue(keyAndOrder.first); + const QString valB = theItemB->getValue(keyAndOrder.first); + + // Empty lines last. + if (valA.isEmpty()) { + if (!valB.isEmpty()) + return false; + } + else { + if (valB.isEmpty()) + return true; + } + + const int res = collator.compare(valA, valB); + if (res != 0) + return keyAndOrder.second == Qt::SortOrder::AscendingOrder ? res < 0 : res > 0; + } + return false; + }; + + std::set> sortedChildren(comparator); + for (int childIdx = 0; childIdx < theParentItem->childCount(); childIdx++) { + SUIT_ShortcutTreeItem* const childItem = static_cast(theParentItem->child(childIdx)); + sortedChildren.emplace(childItem); + } + return sortedChildren; +} + +void SUIT_ShortcutTree::insertChild( + QTreeWidgetItem* theParentItem, + std::set>& theSortedChildren, + SUIT_ShortcutTreeItem* theChildItem +) { + const auto emplaceRes = theSortedChildren.emplace(theChildItem); + theParentItem->insertChild(::SUIT_tools::distanceFromBegin(theSortedChildren, emplaceRes.first), theChildItem); +} + +void SUIT_ShortcutTree::onItemExpanded(QTreeWidgetItem* theItem) +{ + static_cast(theItem)->setExpanded(true); +} + +void SUIT_ShortcutTree::onItemCollapsed(QTreeWidgetItem* theItem) +{ + static_cast(theItem)->setExpanded(false); +} + +void SUIT_ShortcutTree::onHeaderItemClicked(int theColIdx) +{ + const auto customHeaderItem = static_cast(headerItem()); + + const auto theLeadingColIdx = static_cast(theColIdx); + const auto theNewLeadingSortKey = SUIT_ShortcutTree::toSortKey(theLeadingColIdx); + if (myLeadingSortKey == theNewLeadingSortKey) { // Click on active column. Change order. + const auto newSortOrder = mySortSchema[myLeadingSortKey] == Qt::SortOrder::AscendingOrder ? Qt::SortOrder::DescendingOrder : Qt::SortOrder::AscendingOrder; + sort(myLeadingSortKey, newSortOrder); + } + else /* if click on inactive column. Change sorting key, preserve order. */ + sort(theNewLeadingSortKey, mySortSchema[theNewLeadingSortKey]); + + customHeaderItem->setSortSchemaAndLeadingColIdx(mySortSchema, theLeadingColIdx); +} + +void SUIT_ShortcutTree::onItemDoubleClicked(QTreeWidgetItem* theItem, int theColIdx) +{ + parentTabWidget()->onTreeItemDoubleClicked(this, static_cast(theItem)); +} + + +SUIT_ShortcutTreeItem::SUIT_ShortcutTreeItem(const std::shared_ptr theAssets, const QString& theLang) +: QTreeWidgetItem(), myAssets(theAssets), myIsExpanded(QTreeWidgetItem::isExpanded()) +{ + setFlags(Qt::ItemIsEnabled); + setIcon(SUIT_ShortcutTree::ColumnIdx::Name, myAssets->icon()); + setLang(theLang); + + if (myAssets->isFolder()) + styleAsFolder(true); +} + +void SUIT_ShortcutTreeItem::setLang(const QString& theLang) +{ + setText(SUIT_ShortcutTree::ColumnIdx::Name, myAssets->bestName(theLang)); + myPath = myAssets->bestPath(theLang); + + myToolTip = myAssets->bestToolTip(theLang); + if (!myToolTip.isEmpty() && myToolTip.at(myToolTip.length()-1) != ".") + myToolTip += "."; + + setText(SUIT_ShortcutTree::ColumnIdx::ToolTip, myToolTip); + + if (isAction()) { + if (myToolTip.isEmpty()) + setToolTip( + SUIT_ShortcutTree::ColumnIdx::Name, + SUIT_ShortcutTree::tr("Double click to edit key sequence.") + ); + else + setToolTip( + SUIT_ShortcutTree::ColumnIdx::Name, + myToolTip + "\n" + SUIT_ShortcutTree::tr("Double click to edit key sequence.") + ); + } + else { + setToolTip( + SUIT_ShortcutTree::ColumnIdx::Name, + myToolTip + ); + } +} + +const QString& SUIT_ShortcutTreeItem::moduleID() const +{ + return myAssets->myModuleID; +} + +const QString& SUIT_ShortcutTreeItem::inModuleID() const +{ + return myAssets->myInModuleID; +} + +const QString& SUIT_ShortcutTreeItem::lastTokenOfID() const +{ + return myAssets->myIDLastToken; +} + +bool SUIT_ShortcutTreeItem::isAction() const +{ + return myAssets->isAction(); +} + +bool SUIT_ShortcutTreeItem::isFolder() const +{ + return myAssets->isFolder(); +} + +QString SUIT_ShortcutTreeItem::name() const +{ + return text(SUIT_ShortcutTree::ColumnIdx::Name); +} + +const QString& SUIT_ShortcutTreeItem::path() const +{ + return myPath; +} + +const QString& SUIT_ShortcutTreeItem::toolTip() const +{ + return myToolTip; +} + +QString SUIT_ShortcutTreeItem::getValue(SUIT_ShortcutTree::SortKey theKey) const +{ + switch (theKey) { + case SUIT_ShortcutTree::SortKey::ID: + return inModuleID(); + case SUIT_ShortcutTree::SortKey::Name: + return name(); + case SUIT_ShortcutTree::SortKey::ToolTip: + return myToolTip; + case SUIT_ShortcutTree::SortKey::KeySequence: + return keySequence(); + default: + return QString(); + } +} + +void SUIT_ShortcutTreeItem::setKeySequence(const QString& theKeySequence) +{ + if (!isAction()) + return; + + setText(SUIT_ShortcutTree::ColumnIdx::KeySequence, theKeySequence); +} + +QString SUIT_ShortcutTreeItem::keySequence() const +{ + if (!isAction()) + return QString(); + + return text(SUIT_ShortcutTree::ColumnIdx::KeySequence); +} + +void SUIT_ShortcutTreeItem::styleAsFolder(bool theIsFolder) +{ + QFont f = font(SUIT_ShortcutTree::ColumnIdx::Name); + f.setBold(theIsFolder); + setFont(SUIT_ShortcutTree::ColumnIdx::Name, f); +} + +void SUIT_ShortcutTreeItem::styleAsKeySequenceModified(bool theIsModified) +{ + if (!isAction()) + return; + + static const QBrush bgHighlitingBrush = QBrush(Qt::darkGreen); + static const QBrush fgHighlitingBrush = QBrush(Qt::white); + static const QBrush noBrush = QBrush(); + + setBackground(SUIT_ShortcutTree::ColumnIdx::KeySequence, theIsModified ? bgHighlitingBrush : noBrush); + setForeground(SUIT_ShortcutTree::ColumnIdx::KeySequence, theIsModified ? fgHighlitingBrush : noBrush); + + { // Style ascendant folders as "descendant' key sequence is modified". + SUIT_ShortcutTreeItem* ascendant = dynamic_cast(parent()); + while (ascendant) { + ascendant->setBackground(SUIT_ShortcutTree::ColumnIdx::Name, theIsModified ? bgHighlitingBrush : noBrush); + ascendant->setForeground(SUIT_ShortcutTree::ColumnIdx::Name, theIsModified ? fgHighlitingBrush : noBrush); + ascendant = dynamic_cast(ascendant->parent()); + } + } +} + +void SUIT_ShortcutTreeItem::setExpanded(bool theVal) +{ + myIsExpanded = theVal; + QTreeWidgetItem::setExpanded(myIsExpanded); +} + +bool SUIT_ShortcutTreeItem::isExpanded() const +{ + return myIsExpanded; +} + + +SUIT_ShortcutTreeHeaderItem::SUIT_ShortcutTreeHeaderItem(const std::map& theSortSchema, SUIT_ShortcutTree::ColumnIdx theLeadingColIdx) +: QTreeWidgetItem() +{ + setText(SUIT_ShortcutTree::ColumnIdx::Name, SUIT_ShortcutTree::tr("Action")); + setText(SUIT_ShortcutTree::ColumnIdx::ToolTip, SUIT_ShortcutTree::tr("Description")); + setText(SUIT_ShortcutTree::ColumnIdx::KeySequence, SUIT_ShortcutTree::tr("Key sequence")); + setSortSchemaAndLeadingColIdx(theSortSchema, theLeadingColIdx); +} + +void SUIT_ShortcutTreeHeaderItem::setSortSchemaAndLeadingColIdx(const std::map& theSortSchema, SUIT_ShortcutTree::ColumnIdx theLeadingColIdx) +{ + static const QIcon ICON_ASCENDING_ORDER = QIcon(":/resources/sort_ascending.svg"); + static const QIcon ICON_DESCENDING_ORDER = QIcon(":/resources/sort_descending.svg"); + static const QIcon ICON_ASCENDING_ORDER_LEADING = QIcon(":/resources/sort_ascending_leading_key.svg"); + static const QIcon ICON_DESCENDING_ORDER_LEADING = QIcon(":/resources/sort_descending_leading_key.svg"); + + for (const auto& keyAndOrder : theSortSchema) { + const auto colIdx = SUIT_ShortcutTree::toColumnIdx(keyAndOrder.first); + if (colIdx >= SUIT_ShortcutTree::ColumnIdx::NotExist) + continue; + + if (colIdx == theLeadingColIdx) + setIcon(colIdx, keyAndOrder.second == Qt::SortOrder::AscendingOrder ? ICON_ASCENDING_ORDER_LEADING : ICON_DESCENDING_ORDER_LEADING); + else + setIcon(colIdx, keyAndOrder.second == Qt::SortOrder::AscendingOrder ? ICON_ASCENDING_ORDER : ICON_DESCENDING_ORDER); + } +} \ No newline at end of file diff --git a/src/SUIT/SUIT_ShortcutEditor.h b/src/SUIT/SUIT_ShortcutEditor.h new file mode 100644 index 000000000..2c564189b --- /dev/null +++ b/src/SUIT/SUIT_ShortcutEditor.h @@ -0,0 +1,391 @@ +// Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef SUIT_SHORTCUTEDITOR_H +#define SUIT_SHORTCUTEDITOR_H + +#include "SUIT.h" +#include +#include +#include +#include +#include +#include +#include +#include "SUIT_ShortcutMgr.h" +#include "SUIT_FindActionDialog.h" +#include +#include +#include +#include + + +class QLineEdit; +class QLabel; +class QPushButton; +class QTreeWidgetItem; + +class SUIT_EXPORT SUIT_KeySequenceEdit : public QFrame +{ + Q_OBJECT + +public: + SUIT_KeySequenceEdit(QWidget* = nullptr); + virtual ~SUIT_KeySequenceEdit() = default; + + /*! \brief Set a key sequence to edit. */ + void setConfirmedKeySequence(const QKeySequence&); + void setEditedKeySequence(const QKeySequence&); + QKeySequence editedKeySequence() const; + + /*! \returns true, if the edited key sequence differs from confirmed one. */ + bool isKeySequenceModified() const; + + /*! \brief Set confirmed key sequence to line editor. */ + void restoreKeySequence(); + + /*! \brief Extracts key sequnce string from theEvent. */ + static QString parseEvent(QKeyEvent* theEvent); + + /*! \brief Check if the key event contains a 'valid' key. + \param theKey Code of the key. */ + static bool isValidKey(int theKey); + +signals: + void editingStarted(); + + + void editingFinished(); + void restoreFromShortcutMgrClicked(); + +private slots: + /*! \brief Called when "Clear" button is clicked. */ + void onClear(); + + /*! \brief Called when myKeySequenceLineEdit loses focus. */ + void onEditingFinished(); + +protected: + /*! \returns \c true if further event processing should be stopped. */ + virtual bool eventFilter(QObject* theObject, QEvent* theEvent); + +private: + void initialize(); + +private: + QLineEdit* myKeySequenceLineEdit; + QString myConfirmedKeySequenceString; + + // Last valid key sequence string from myKeySequenceLineEdit. + QString myPrevKeySequenceString; +}; + +class SUIT_ShortcutTabWidget; +class SUIT_ShortcutTree; +class SUIT_ShortcutTreeItem; +class QTextEdit; + + +class SUIT_EXPORT SUIT_EditKeySequenceDialog : public QDialog +{ + Q_OBJECT + +public: + /*! \param theParent must not be nullptr. */ + SUIT_EditKeySequenceDialog(SUIT_ShortcutTabWidget* theParent); + SUIT_EditKeySequenceDialog(const SUIT_EditKeySequenceDialog&) = delete; + SUIT_EditKeySequenceDialog& operator=(const SUIT_EditKeySequenceDialog&) = delete; + virtual ~SUIT_EditKeySequenceDialog() = default; + + void setModuleAndActionID(const QString& theModuleID, const QString& theInModuleActionID); + const QString& moduleID() const; + const QString& inModuleActionID() const; + + void setModuleAndActionName(const QString& theModuleName, const QString& theActionName, const QString& theActionToolTip = ""); + + void setConfirmedKeySequence(const QKeySequence& theSequence); + QKeySequence editedKeySequence() const; + + /*! \brief Updates message with list of actions, whose shortcuts will be disabled on Confirm. */ + void updateConflictsMessage(); + + int exec(); + +private slots: + void onEditingStarted(); + void onEditingFinished(); + void onRestoreFromShortcutMgr(); + void onConfirm(); + +private: + QString myModuleID; + QString myInModuleActionID; + QLabel* myActionName; + SUIT_KeySequenceEdit* myKeySequenceEdit; + QTextEdit* myTextEdit; +}; + + +/*! \brief Main element of Shotcut Editor GUI. Each tab presents a shortcut tree of a module. */ +class SUIT_EXPORT SUIT_ShortcutTabWidget : public QTabWidget +{ + Q_OBJECT + + friend class SUIT_ShortcutTree; + +private: + /** + * Ensures that, if several SUIT_ShortcutTab instances coexist, + * all of them are updated when one of them applies pending changes to SUIT_ShortcutMgr. + * + * Sharing of SUIT_ShortcutContainer allows to keep trees in tabs synchronized even without + * applying changes to SUIT_ShortcutMgr. Why? See SUIT_PagePrefShortcutTreeItem. + * + * Access is not synchronized in assumption, that all instances live in the same thread. + */ + static std::map> instances; + +public: + /*! \param theContainer Share the same container between several trees, + to edit them synchronously even without exchange of changes with SUIT_ShortcutMgr. + Pass nullptr to create non-synchronized tab widget. */ + SUIT_ShortcutTabWidget( + const std::set& theIDsOfModulesToShow, + std::shared_ptr theContainer = std::shared_ptr(), + QWidget* theParent = nullptr + ); + + SUIT_ShortcutTabWidget& operator=(const SUIT_ShortcutTree&) = delete; + virtual ~SUIT_ShortcutTabWidget(); + + /*! \brief Copies shortcuts from ShortcutMgr. (Re)displays shortcuts of myModuleIDs. */ + void setShortcutsFromManager(); + + /*! \brief Copies shortcuts from resources, user files are not accounted. (Re)displays shortcuts of myModuleIDs. */ + void setDefaultShortcuts(); + + /*! \brief Applies pending changes to ShortcutMgr. Updates other instances of SUIT_ShortcutTabWidget. */ + void applyChangesToShortcutMgr(); + + std::shared_ptr shortcutContainer() const; + + void onTreeItemDoubleClicked(SUIT_ShortcutTree* theTree, SUIT_ShortcutTreeItem* theItem); + +private: + void jumpToTreeItem(const QString& theModuleID, const QString& theInModuleID); + + /*! \returns Key sequence from the tree and true, if it differs from a keysequence in ShortcutMgr (applied key sequence). */ + std::pair getConfirmedKeySequence(const QString& theModuleID, const QString& theInModuleActionID) const; + + /*! \param If theUpdateSyncTabWidgets, ShortcutTabWidgets sharing the same shortcut container are updated. */ + void updateTabs(bool theHighlightModifiedTreeItems, bool theUpdateSyncTabWidgets); + +public: + /** Keeps IDs of modules, which will are shown on setShortcutsFromManager(). */ + const std::set myModuleIDs; + +private: + /** Allows to modify plenty of shortcuts and then apply them to SUIT_ShortcutMgr as a batch. Never nullpt. */ + const std::shared_ptr myShortcutContainer; + + SUIT_FindActionWidget* myFindActionWidget; + + /** {moduleID, SUIT_ShortcutTree}. All tabs share the same SUIT_ShortcutContainer. */ + std::map myModuleTrees; + + SUIT_EditKeySequenceDialog* myEditDialog; + bool myIsPopulated; // If SUIT_ShortcutTabWidget::updateTabs(bool, bool) was called at least once. +}; + + +class SUIT_ShortcutTabWidgetBar : public QTabBar +{ + Q_OBJECT + +public: + SUIT_ShortcutTabWidgetBar(SUIT_ShortcutTabWidget* theTabWidget); + + void mergeTabModifiedStatuses(const std::map& theTabModifiedStatuses); + +protected: + void paintEvent(QPaintEvent* theEvent); + +private: + /** {tabIdx, isKeySequenceModified}[] */ + std::map myTabModifiedStatuses; +}; + + +class SUIT_EXPORT SUIT_ShortcutTree : public QTreeWidget +{ + Q_OBJECT + + friend class SUIT_ShortcutTabWidget; + +public: + enum ColumnIdx { + Name, + KeySequence, // Empty, if item is pure folder item. + ToolTip, + ///////////////////////////////////////////////////////////// + NotExist // Columns with the index and greater are not exist. + }; + + enum class SortKey { + ID, + Name, + ToolTip, + KeySequence, + }; + + static SUIT_FoundActionTree::ColumnIdx toFoundActionTreeColIdx(const SUIT_ShortcutTree::ColumnIdx theColumnIdx); + static SUIT_ShortcutTree::SortKey toSortKey(const SUIT_ShortcutTree::ColumnIdx theColumnIdx); + static SUIT_ShortcutTree::ColumnIdx toColumnIdx(const SUIT_ShortcutTree::SortKey theSortKey); + static const QList> DEFAULT_SORT_SCHEMA; + +private: + /*! + \param theParent must not be nullptr. + \param theAssets must not be nullptr. */ + SUIT_ShortcutTree( + SUIT_ShortcutTabWidget* theParent, + std::shared_ptr theAssets, + const QString& theLang + ); + SUIT_ShortcutTree(const SUIT_ShortcutTree&) = delete; + SUIT_ShortcutTree& operator=(const SUIT_ShortcutTree&) = delete; + +public: + virtual ~SUIT_ShortcutTree() = default; + + SUIT_ShortcutTabWidget* parentTabWidget() const; + const SUIT_ShortcutContainer& shortcutContainer() const; + const QString& moduleID() const; + + void setLang(const QString& theLang); + const QString& name() const; + const QString& toolTip() const; + + void sort(SUIT_ShortcutTree::SortKey theLeadingKey, Qt::SortOrder theOrder); + +private: + void sortRecursive(QTreeWidgetItem* theParentItem); + + /*! \returns True, if at least one key sequence is modified (differs from applied one). */ + bool updateItems(bool theHighlightModified); + + /*! \returns True, if at least one key sequence is modified (differs from applied one). */ + bool updateChildrenItemsRecursively( + bool theHighlightModified, + QTreeWidgetItem* const theItem, + bool theItemIsInvisibleRoot = false + ); + + /*! \returns True, if key sequence is modified (differs from applied one). */ + bool updateItemShortcut( + SUIT_ShortcutTreeItem* const theItem, + const std::map& theModuleShortcuts, + bool theHighlightModified + ) const; + + SUIT_ShortcutTreeItem* findItem(QStringList theRelativeIDTokens, const QTreeWidgetItem* theAncestorItem = nullptr) const; + + /*! \returns Children of theParentItem being sorted according to current sort mode and order. */ + std::set> getSortedChildren(QTreeWidgetItem* theParentItem); + + /*! \brief Inserts theChildItem to theParentItem and theSortedChildren. + Does not check whether theSortedChildren are actually child items of theParentItem. + Does not check whether current item sort schema is same as one of theSortedChildren. */ + void insertChild( + QTreeWidgetItem* theParentItem, + std::set>& theSortedChildren, + SUIT_ShortcutTreeItem* theChildItem + ); + +private slots: + void onItemExpanded(QTreeWidgetItem* theItem); + void onItemCollapsed(QTreeWidgetItem* theItem); + void onHeaderItemClicked(int theColIdx); + void onItemDoubleClicked(QTreeWidgetItem* theWidgetItem, int theColIdx); + +public: + const std::shared_ptr myAssets; + +private: + SUIT_ShortcutTabWidget* const myParentTabWidget; // Because dynamic_cast(QWidget::parentWidget()) == nullptr. + + SUIT_ShortcutTree::SortKey myLeadingSortKey; + std::map mySortSchema; + + QString myName; + QString myToolTip; + + bool myIsPopulated; // If SUIT_ShortcutTree::updateItems(bool) was called at least once. +}; + + +class SUIT_ShortcutTreeItem : public QTreeWidgetItem +{ +public: + /*! \param theAssets must not be nullptr. */ + SUIT_ShortcutTreeItem(const std::shared_ptr theAssets, const QString& theLang); + + void setLang(const QString& theLang); + + const QString& moduleID() const; + const QString& inModuleID() const; + const QString& lastTokenOfID() const; + bool isAction() const; + bool isFolder() const; + + QString name() const; + const QString& path() const; + const QString& toolTip() const; + QString getValue(SUIT_ShortcutTree::SortKey theKey) const; + void setKeySequence(const QString& theKeySequence); + QString keySequence() const; + + void styleAsFolder(bool theIsFolder); + void styleAsKeySequenceModified(bool theIsModified); + + void setExpanded(bool theVal); + bool isExpanded() const; + +public: + const std::shared_ptr myAssets; + bool myIsExpanded; + +private: + QString myPath; + QString myToolTip; +}; + + +class SUIT_ShortcutTreeHeaderItem : public QTreeWidgetItem +{ +public: + SUIT_ShortcutTreeHeaderItem(const std::map& theSortSchema, SUIT_ShortcutTree::ColumnIdx theLeadingColIdx); + SUIT_ShortcutTreeHeaderItem(const SUIT_ShortcutTreeHeaderItem&) = delete; + SUIT_ShortcutTreeHeaderItem& operator=(const SUIT_ShortcutTreeHeaderItem&) = delete; + ~SUIT_ShortcutTreeHeaderItem() = default; + + void setSortSchemaAndLeadingColIdx(const std::map& theSortSchema, SUIT_ShortcutTree::ColumnIdx theLeadingColIdx); +}; + +#endif // SUIT_SHORTCUTEDITOR_H diff --git a/src/SUIT/SUIT_ShortcutMgr. ReadMe.md b/src/SUIT/SUIT_ShortcutMgr. ReadMe.md index 13241772d..041d2679b 100644 --- a/src/SUIT/SUIT_ShortcutMgr. ReadMe.md +++ b/src/SUIT/SUIT_ShortcutMgr. ReadMe.md @@ -1,20 +1,11 @@ # ShortcutMgr ReadMe + At first, read SUIT_ShortcutMgr class documentation in code. -Hot keys must be considered as resources, being shared between all components of an application. E.g. it is unacceptable to have 'Close file' and 'Redo' actions being assigned to the same key sequence. When the SHAPER module is active, the application desktop is active too. The desktop has own hot keys, and they must not interfere with ones of SHAPER. Since the task implies granting users a right to assign shortcuts on their will, the application must track all assigned shortcuts of all modules, prevent intolerable user shortcut modifications and govern actual binding of QActions with key sequences. +For all identified actions, assets must be placed into asset files. People who do/refine localizations should keep this in mind and also process JSON files, which are referred in resource files in sections `
`. -`SUIT_ShortcutMgr` handles shortcuts of SALOME desktop and all modules. It is solely responsible and capable to dynamically bind actions with key sequences and (de)serialize shortcut preferences using `SUIT_ResourceMgr`. `SUIT_ShortcutContainer` encapsulates logics of conflict detecting and resolving. `SUIT_ShortcutTree` widget provides GUI to change shortcut preferences conveniently: it allows to remap plenty of shortcuts without applying, displays conflict-resolving dialog, highlights modifications until they are applied (saved into preference files). +To alleviate process of composing resource and asset files, a development tool `DevTools` has been made. See documentations of the class in code. -To (de)serialize shortcut preferences without dependence on language environment, shortcuts must be stored as pairs {action ID, key sequence}, where action IDs must be application-unique. - -Since desktop shortcuts may also be changed and interfere with shortcuts of modules, `SUIT_ShortcutTree` should always display desktop shortcuts and shortcuts of all modules altogether, even if some modules are inactive. It means, that `SUIT_ShortcutTree` must be fed not only with shortcut data {action ID, key sequence}[], but also with dictionaries {action ID, action name}[]. `SUIT_ShortcutTree` also requires other action assets - tool tip and icon path. - -Assets of actions may be retrieved from instances of actions, but there is a pitfall: if a module has not been activated yet, its actions have not been initialized either. -Qt Linguist is no help in this case too. To retrieve an action name using `QObject::tr(actionID)`, the `tr(const char*)` method must be called with instance of the class, which is designated as a context for the actionID in *.ts files. And contexts are usually descendants of SUIT_Application and CAM_Module. Again, until a module instance is created, there is no way for `SUIT_ShortcutMgr` to get even a name of a context-class, which an action with an ID belongs to, without any additional data. Straightforward mechanism for loading of action assets in advance has been devised: for all actions, which are bound by default or may be bound by user to hotkeys, assets must be placed into asset files. People who do/refine localizations should keep this in mind and also process JSON files, which are referred in resource files in sections `
`. - -To alleviate process of composing resource and asset files, a development tool `DevTools` has been made. It grabs all shortcuts and assets (except icon path) of intercepted at runtime actions with valid IDs and dumps shortcuts into XML files with identical to project-conventional resource files structure and assets into properly-formatted JSON files. Run modules/features of interest, switch application language, and if IDs or names in the selected language of some actions of the module are not added yet to preference files, these dump files will be appended with new data – shortcuts and assets, if the last ones are provided in *.ts files. -The tool also logs assets of intercepted actions with invalid IDs. The intent is as follows: run modules/features of interest at several languages in exactly the same sequence of actions, paste content of resulting language-dedicated *.csv files to corresponding sheet of [“ShortcutMgr. Resource generator.xlsx”](../../tools/DevTools/ShortcutMgr/ShortcutMgr. Resource generator.xlsx). Then come up with proper IDs for the actions, type the action IDs and their module IDs into corresponding columns and take away ready resource and asset items. - -Shortcuts and assets for all actions of SHAPER and GEOM and those actions of desktop, which were bound (hardcoded) to non-empty key sequences, have been added to resource files. Now they are available for hot key remapping via GUI, no conflicts guaranteed. Any hardcoded shortcut is disabled, unless the same shortcut persists in resource files. +Shortcuts and assets for all actions of SHAPER and GEOM and those actions of desktop, which were bound (hardcoded) to non-empty key sequences, have been added to preference and asset files. Now they are available for hot key remapping via GUI, no conflicts guaranteed. A hardcoded shortcut may be changed or disabled, if preference files override its key sequence. ## Conflicts between shortcuts of desktop and modules, except SHAPER and GEOM @@ -62,7 +53,7 @@ Then help menu has different shortcuts if the application is run in EN or FR. 2. After every occurrence of `QPushButton` creation type something like this: ``` // Occurrence -const auto helpButton = new QPushButton(tr("&Help"); +const auto helpButton = new QPushButton(tr("&Help")); SUIT_ShortcutMgr::get()->registerButtonActions("/#AltHelp", *helpButton); ---------------------------------------------------- @@ -74,7 +65,7 @@ void SUIT_ShortcutMgr::registerButtonActions(const QString& theActionID, const Q } ---------------------------------------------------- // Resource file -
+
``` @@ -82,6 +73,5 @@ Thus, ampersand-shortcuts will appear and be treated in shortcut editor as regul If the second option is preferable, should different ampersand-shortcuts for every target language be placed in resource files? ## Minor issues -1. `SUIT_ShortcutTree` widget does not take the whole available height of preference window, it only takes as mush as its items require. -2. Selection of `SUIT_ShortcutTree`' item shadows "modified" highlighter. Can be fixed by replacing base `QTreeWidget` of `SUIT_ShortcutTree` with `QTreeView`, or may be by applying some style sheet. -3. `SUIT_ShortcutMgr` introduces concept of module, but the first module class is `CAM_Module` is introduced along with `CAM_Application`, which is descendant of `SUIT_Application`. +1. Selection of `SUIT_ShortcutTree`' item shadows "modified" highlighter. Selection of module tab in `SUIT_ShortcutTabWidget` shadows "modified" highlighter. +2. `SUIT_ShortcutMgr` introduces concept of module, but the first module class is `CAM_Module` is introduced along with `CAM_Application`, which is descendant of `SUIT_Application`. diff --git a/src/SUIT/SUIT_ShortcutMgr.cxx b/src/SUIT/SUIT_ShortcutMgr.cxx index 95cede6d2..d22c05a64 100644 --- a/src/SUIT/SUIT_ShortcutMgr.cxx +++ b/src/SUIT/SUIT_ShortcutMgr.cxx @@ -25,6 +25,8 @@ #include "SUIT_Session.h" #include "SUIT_ResourceMgr.h" #include "SUIT_MessageBox.h" +#include "Tools/SUIT_extensions.h" +#include "Tools/SUIT_SentenceMatcher.h" #include #include @@ -37,16 +39,14 @@ #include #include #include -#include -#include -#include #include - - #include #include #include +#include + + const std::wstring SHORTCUT_MGR_LOG_PREFIX = L"SHORTCUT_MGR_DBG: "; bool ShCutDbg(const QString& theString) { @@ -83,26 +83,17 @@ static const QString TOKEN_SEPARATOR = QString("/"); static const QString META_ACTION_PREFIX = QString("#"); /** Prefix of names of shortcut setting sections in preference files. */ -static const QString SECTION_NAME_PREFIX = QString("shortcuts"); +static const QString SECTION_NAME_PREFIX = QString("shortcuts_vA1.0"); const QString DEFAULT_LANG = QString("en"); -const QStringList LANG_PRIORITY_LIST = QStringList({DEFAULT_LANG, "fr"}); const QString LANG_SECTION = QString("language"); static const QString SECTION_NAME_ACTION_ASSET_FILE_PATHS = QString("action_assets"); -/** - * Uncomment this, to start collecting all shortcuts and action assets (1), - * from instances of QtxActions, if a shortcut or action assets are absent in resource/asset files. - * - * (1) Set required language in the application settings and run features of interest. - * For all actions from these features, their assets will be dumped to appropriate places in dump files. - * - * Content of dump files is appended on every run. Files are located in "/shortcut_mgr_dev/". -*/ +/** Uncomment this to enable DevTools. */ // #define SHORTCUT_MGR_DEVTOOLS #ifdef SHORTCUT_MGR_DEVTOOLS #include @@ -117,10 +108,27 @@ static const QString SECTION_NAME_ACTION_ASSET_FILE_PATHS = QString("action_asse #include #endif // QT_NO_DOM -/*! \brief Generates XML files with appearing at runtime shortcuts, - using key sequences of QActions passed to the shortcut manager, - and JSON files with assets of QtxActions passed to the shortcut manager. - Content of these files can be easily copied to resource/asset files. */ +/*! \brief + Alleviates making actions, coded without taking into account SUIT_ShortcutMgr action requirements, dynamically assignable to shortcuts. + + Generates XML files with key sequences of actions, registered by the shortcut manager, + if these actions are anonymous or their shortcuts are absent in default preference files. + Generates JSON files with assets (using fieilds of action instances) of identified actions, registered by the shortcut manager, + if their assets are absent in assets files. + Content of these files can be easily copied to preference/asset files. + The files are dumped in "/shortcut_mgr_dev/". Content of dump files is appended on every run. + + HOW TO USE + 1) Run application and touch features of interest. + 2) Look into *actions_with_invalid_IDs.csv files. + 3) Identify where from those actions come from. + Also look for DevTools::SECTION_NAME_ACTION_IDS_TO_THROW_EXCEPTION and DevTools::SECTION_NAME_ACTION_TOOLTIPS_TO_THROW_EXCEPTION. + 4) Assign valid IDs to actions of interest in the code and rebuild. + 5) Delete all dump files. + 6) Go to apllication preferences and set language of interest (if these features are localized in that language). Run the features again. Repeat. + 7) Files *_assets*.json hold assets, composed using runtime data, of those identified actions, whose assets are absent in project asset files. + Files *_shortcuts.xml hold shortcuts of those identified actions, which are absent in default preference files. + */ class DevTools { private: @@ -177,6 +185,7 @@ public: } void collectAssets( + const SUIT_ShortcutModuleAssets& theModuleAssetsInResources, const QString& theModuleID, const QString& theInModuleActionID, const QString& theLang, @@ -184,27 +193,37 @@ public: ) { if (SUIT_ShortcutMgr::isInModuleMetaActionID(theInModuleActionID)) { QString actionID = SUIT_ShortcutMgr::makeActionID(SUIT_ShortcutMgr::ROOT_MODULE_ID, theInModuleActionID); - // { actionID, assets } [] - auto& moduleAssets = myAssetsOfMetaActions[theModuleID]; - auto& actionAssets = moduleAssets[actionID]; - actionAssets.myLangDependentAssets[theLang].myName = theAction->text(); - actionAssets.myLangDependentAssets[theLang].myToolTip = theAction->statusTip(); + auto itModuleAssets = myAssetsOfMetaActions.find(theModuleID); + if (itModuleAssets == myAssetsOfMetaActions.end()) { + itModuleAssets = myAssetsOfMetaActions.emplace(theModuleID, SUIT_ShortcutModuleAssets::create(SUIT_ShortcutMgr::ROOT_MODULE_ID)).first; + } + auto& moduleAssets = itModuleAssets->second; + + auto actionAssets = moduleAssets->descendantItem(theInModuleActionID); + actionAssets->myLangDependentAssets[theLang].myName = theAction->text(); + actionAssets->myLangDependentAssets[theLang].myToolTip = theAction->statusTip(); const QString fileName = theModuleID + DevTools::ASSETS_OF_META_SUFFIX; - writeToJSONFile(fileName, actionID, actionAssets); + writeToJSONFile(fileName, *moduleAssets); } else { QString actionID = SUIT_ShortcutMgr::makeActionID(theModuleID, theInModuleActionID); - // { actionID, assets } [] - auto& moduleAssets = myAssets[theModuleID]; - auto& actionAssets = moduleAssets[actionID]; - actionAssets.myLangDependentAssets[theLang].myName = theAction->text(); - actionAssets.myLangDependentAssets[theLang].myToolTip = theAction->statusTip(); + auto itModuleAssets = myAssets.find(theModuleID); + if (itModuleAssets == myAssets.end()) { + itModuleAssets = myAssets.emplace(theModuleID, SUIT_ShortcutModuleAssets::create(theModuleID)).first; + } + auto& moduleAssets = itModuleAssets->second; + + moduleAssets->merge(theModuleAssetsInResources, true); + auto actionAssets = moduleAssets->descendantItem(theInModuleActionID, true); + actionAssets->myLangDependentAssets[theLang].myName = theAction->text(); + actionAssets->myLangDependentAssets[theLang].myToolTip = theAction->statusTip(); + const QString fileName = theModuleID + DevTools::ASSETS_SUFFIX; - writeToJSONFile(fileName, actionID, actionAssets); + writeToJSONFile(fileName, *moduleAssets); } } @@ -224,15 +243,16 @@ public: return; } - const QString lang = resMgr->stringValue(LANG_SECTION, LANG_SECTION); - if (lang.isEmpty()) - return; + const QString lang = SUIT_ShortcutMgr::currentLang(); + const auto moduleAndActionAssetsInResources = SUIT_ShortcutMgr::getActionAssetsFromResources(theAction->ID()); + const auto& moduleAssetsInResources = moduleAndActionAssetsInResources.first; + const auto& actionAssetsInResources = moduleAndActionAssetsInResources.second; - const auto& assetsInResources = SUIT_ShortcutMgr::getActionAssetsFromResources(theAction->ID()); - if (assetsInResources.first && assetsInResources.second.myLangDependentAssets.find(lang) != assetsInResources.second.myLangDependentAssets.end()) + if (actionAssetsInResources && actionAssetsInResources->myLangDependentAssets.find(lang) != actionAssetsInResources->myLangDependentAssets.end()) return; - collectAssets(moduleIDAndActionID.first, moduleIDAndActionID.second, lang, theAction); + if (moduleAssetsInResources) + collectAssets(*moduleAssetsInResources, moduleIDAndActionID.first, moduleIDAndActionID.second, lang, theAction); } } @@ -348,7 +368,7 @@ private: } /*! Appends new entries to content of dump files. */ - bool writeToJSONFile(const QString& theFileName, const QString& theActionID, const SUIT_ActionAssets& theAssets) + bool writeToJSONFile(const QString& theFileName, const SUIT_ShortcutModuleAssets& theModuleAssetsInResources) { const auto itFileAndDoc = myJSONFilesAndDocs.find(theFileName); if (itFileAndDoc == myJSONFilesAndDocs.end()) { @@ -393,14 +413,17 @@ private: QFile* const file = fileAndDoc.first; QJsonDocument* const document = fileAndDoc.second; - QJsonObject rootJSON = document->object(); - QJsonObject actionAssetsJSON = rootJSON[theActionID].toObject(); - SUIT_ActionAssets actionAssets; - actionAssets.fromJSON(actionAssetsJSON); - actionAssets.merge(theAssets, true /*theOverride*/); - actionAssets.toJSON(actionAssetsJSON); - rootJSON[theActionID] = actionAssetsJSON; - document->setObject(rootJSON); + const QString& moduleID = theModuleAssetsInResources.myModuleID; + + QJsonObject documentJSONObject = document->object(); + QJsonObject moduleAssetsJSONObject = documentJSONObject[moduleID].toObject(); + const auto dumpedModuleAssets = SUIT_ShortcutModuleAssets::create(moduleID); + dumpedModuleAssets->fromJSON(moduleAssetsJSONObject); + dumpedModuleAssets->merge(theModuleAssetsInResources, true /*theOverride*/); + dumpedModuleAssets->toJSON(moduleAssetsJSONObject); + + documentJSONObject[moduleID] = moduleAssetsJSONObject; + document->setObject(documentJSONObject); file->resize(0); QTextStream outstream(file); @@ -456,17 +479,40 @@ public: static DevTools* instance; static const QString XML_SECTION_TOKENS_SEPARATOR; + + /** Add such section to preference file to throw exceptions upon registration of actions with listed IDs. + * Makes it easier to find the code where actions are created. + * +
+ ... + + ... +
+ */ + static const QString SECTION_NAME_ACTION_IDS_TO_THROW_EXCEPTION; + + /** Add such section to preference file to throw exceptions upon registration of actions with listed tool tips. + * Makes it easier to find the code where actions are created. + * +
+ ... + + ... +
+ */ + static const QString SECTION_NAME_ACTION_TOOLTIPS_TO_THROW_EXCEPTION; + /** { moduleID, { inModuleActionID, keySequence }[] }[]. keySequence can be empty. */ std::map> myShortcuts; /** { moduleID, { inModuleActionID, keySequence }[] }[]. keySequence can be empty. */ std::map> myShortcutsOfMetaActions; - /** { moduleID, { actionID, assets }[] }[] */ - std::map> myAssets; + /** { moduleID, moduleAssets }[] */ + std::map> myAssets; - /** { moduleID, { actionID, assets }[] }[] */ - std::map> myAssetsOfMetaActions; + /** { moduleID, moduleAssets }[] */ + std::map> myAssetsOfMetaActions; #ifndef QT_NO_DOM // { filename, {file, domDoc} }[] @@ -485,6 +531,8 @@ public: /*static*/ const QString DevTools::SHORTCUTS_OF_META_SUFFIX = "_shortcuts_of_meta_actions"; /*static*/ const QString DevTools::ASSETS_SUFFIX = "_assets"; /*static*/ const QString DevTools::ASSETS_OF_META_SUFFIX = "_assets_of_meta_actions"; +/*static*/ const QString DevTools::SECTION_NAME_ACTION_IDS_TO_THROW_EXCEPTION = "SHORTCUT_MGR_DEVTOOLS_Action_IDs_to_throw_exception"; +/*static*/ const QString DevTools::SECTION_NAME_ACTION_TOOLTIPS_TO_THROW_EXCEPTION = "SHORTCUT_MGR_DEVTOOLS_Action_tooltips_to_throw_exception"; #endif // SHORTCUT_MGR_DEVTOOLS @@ -753,13 +801,86 @@ QString SUIT_ShortcutContainer::toString() const return text; } -/*static*/ const QString SUIT_ActionAssets::LangDependentAssets::PROP_ID_NAME = "name"; -/*static*/ const QString SUIT_ActionAssets::LangDependentAssets::PROP_ID_TOOLTIP = "tooltip"; +std::map>> SUIT_ShortcutContainer::merge( + const SUIT_ShortcutContainer& theOther, + bool theOverride, + bool theTreatAbsentIncomingAsDisabled +) { + std::map>> changesOfThis; + + const SUIT_ShortcutContainer copyOfThisBeforeMerge = *this; // TODO Get rid of whole container copying. -bool SUIT_ActionAssets::LangDependentAssets::fromJSON(const QJsonObject& theJsonObject) + for (const auto& shortcutsInversedOfOtherPair : theOther.myShortcutsInversed) { + const QString& moduleIDOther = shortcutsInversedOfOtherPair.first; + const auto& shortcutsInversedOther = shortcutsInversedOfOtherPair.second; + for (const auto& shortcutInversedOther : shortcutsInversedOther) { + const QString& inModuleActionIDOther = shortcutInversedOther.first; + const QKeySequence& keySequenceOther = shortcutInversedOther.second; + const QKeySequence& keySequenceThis = getKeySequence(moduleIDOther, inModuleActionIDOther); + if (theOverride) { + if (hasShortcut(moduleIDOther, inModuleActionIDOther) && keySequenceThis == keySequenceOther) { + continue; + } + else /* if this has no shortcut for the action or if this has a shortcut for the action, but the key sequence differs. */ { + const auto disabledActionsOfThis = setShortcut(moduleIDOther, inModuleActionIDOther, keySequenceOther, true); + //changesOfThis[moduleIDOther][inModuleActionIDOther] = std::pair(keySequenceThis, keySequenceOther); + changesOfThis[moduleIDOther][inModuleActionIDOther] = std::pair(copyOfThisBeforeMerge.getKeySequence(moduleIDOther, inModuleActionIDOther), keySequenceOther); + for (const auto& disabledActionOfThis : disabledActionsOfThis) { + changesOfThis[disabledActionOfThis.first][disabledActionOfThis.second] = std::pair(keySequenceOther, NO_KEYSEQUENCE); + } + } + } + else /* if (!theOverride) */ { + if (hasShortcut(moduleIDOther, inModuleActionIDOther)) + continue; + else { + const auto conflictingActionsOfThis = setShortcut(moduleIDOther, inModuleActionIDOther, keySequenceOther, false); + if (conflictingActionsOfThis.empty()) { + changesOfThis[moduleIDOther][inModuleActionIDOther] = std::pair(NO_KEYSEQUENCE, keySequenceOther); + } + else /* if this has no shortcut for the action, but the incoming key sequence conflicts with others shortcuts. */ { + changesOfThis[moduleIDOther][inModuleActionIDOther] = std::pair(NO_KEYSEQUENCE, NO_KEYSEQUENCE); + } + } + } + } + } + + if (theOverride && theTreatAbsentIncomingAsDisabled) { + // Disable existing shortcuts, if they are absent in theOther. + for (auto& shortcutsInversedPair : myShortcutsInversed) { + const QString& moduleID = shortcutsInversedPair.first; + auto& moduleShortcutsInversed = shortcutsInversedPair.second; + for (auto& inversedShortcut : moduleShortcutsInversed) { + if (theOther.hasShortcut(moduleID, inversedShortcut.first)) + continue; + + if (inversedShortcut.second.isEmpty()) + continue; // Existing shortcut is already disabled. + + auto itShortcutsPair = myShortcuts.find(moduleID); + if (itShortcutsPair == myShortcuts.end()) + continue; // The check is an overhead in an error-free designed class, but let be just in case. + + auto& moduleShortcuts = itShortcutsPair->second; + moduleShortcuts.erase(inversedShortcut.second); + changesOfThis[moduleID][inversedShortcut.first] = std::pair(inversedShortcut.second, NO_KEYSEQUENCE); + inversedShortcut.second = NO_KEYSEQUENCE; + } + } + } + + return changesOfThis; +} + + +/*static*/ const QString SUIT_ShortcutAssets::LangDependentAssets::PROP_ID_NAME = "name"; +/*static*/ const QString SUIT_ShortcutAssets::LangDependentAssets::PROP_ID_TOOLTIP = "tooltip"; + +bool SUIT_ShortcutAssets::LangDependentAssets::fromJSON(const QJsonObject& theJsonObject) { - myName = theJsonObject[SUIT_ActionAssets::LangDependentAssets::PROP_ID_NAME].toString(); - myToolTip = theJsonObject[SUIT_ActionAssets::LangDependentAssets::PROP_ID_TOOLTIP].toString(); + myName = theJsonObject[SUIT_ShortcutAssets::LangDependentAssets::PROP_ID_NAME].toString(); + myToolTip = theJsonObject[SUIT_ShortcutAssets::LangDependentAssets::PROP_ID_TOOLTIP].toString(); if (myName.isEmpty()) myName = myToolTip; @@ -767,56 +888,340 @@ bool SUIT_ActionAssets::LangDependentAssets::fromJSON(const QJsonObject& theJson return !myName.isEmpty(); } -void SUIT_ActionAssets::LangDependentAssets::toJSON(QJsonObject& oJsonObject) const +void SUIT_ShortcutAssets::LangDependentAssets::toJSON(QJsonObject& oJsonObject) const { - oJsonObject[SUIT_ActionAssets::LangDependentAssets::PROP_ID_NAME] = myName; - oJsonObject[SUIT_ActionAssets::LangDependentAssets::PROP_ID_TOOLTIP] = myToolTip; + if (!myName.isEmpty()) + oJsonObject[SUIT_ShortcutAssets::LangDependentAssets::PROP_ID_NAME] = myName; + + if (!myToolTip.isEmpty()) + oJsonObject[SUIT_ShortcutAssets::LangDependentAssets::PROP_ID_TOOLTIP] = myToolTip; } -/*static*/ const QString SUIT_ActionAssets::STRUCT_ID = "SUIT_ActionAssets"; -/*static*/ const QString SUIT_ActionAssets::PROP_ID_LANG_DEPENDENT_ASSETS = "langDependentAssets"; -/*static*/ const QString SUIT_ActionAssets::PROP_ID_ICON_PATH = "iconPath"; -bool SUIT_ActionAssets::fromJSON(const QJsonObject& theJsonObject) +/*static*/ const QString SUIT_ShortcutAssets::PROP_ID_LANG_DEPENDENT_ASSETS = "langDependentAssets"; +/*static*/ const QString SUIT_ShortcutAssets::PROP_ID_ICON_PATH = "iconPath"; +/*static*/ const QString SUIT_ShortcutAssets::PROP_ID_CHILDREN = "children"; + +SUIT_ShortcutAssets::SUIT_ShortcutAssets(const QString& theModuleID) +: myModuleID(theModuleID) { - myLangDependentAssets.clear(); + if (!SUIT_ShortcutMgr::isModuleIDValid(myModuleID)) + throw std::invalid_argument("SUIT_ShortcutAssets: invalid module ID \"" + myModuleID.toStdString() + "\"."); +} + +SUIT_ShortcutAssets::~SUIT_ShortcutAssets() +{} + +const std::map>& SUIT_ShortcutAssets::children() const +{ + return myChildren; +} + +std::shared_ptr SUIT_ShortcutAssets::findDescendantItem(const QString& theRelativeID) const +{ + QStringList tokens = SUIT_ShortcutMgr::splitIntoTokens(theRelativeID); + if (tokens.isEmpty()) + return std::shared_ptr(nullptr); // Without the check *this with casted-away constness is returned. + + std::shared_ptr descendant = std::const_pointer_cast(shared_from_this()); + while (!tokens.isEmpty()) { + const QString& token = tokens.front(); + + const auto itChild = descendant->myChildren.find(token); + if (itChild == descendant->myChildren.end()) + return std::shared_ptr(nullptr); - auto lda = SUIT_ActionAssets::LangDependentAssets(); - const auto& langToLdaJson = theJsonObject[SUIT_ActionAssets::PROP_ID_LANG_DEPENDENT_ASSETS].toObject(); + descendant = itChild->second; + tokens.pop_front(); + } + return std::static_pointer_cast(descendant); +} + +std::shared_ptr SUIT_ShortcutAssets::descendantItem(const QString& theRelativeID, bool theIsAction) +{ + QStringList tokens = SUIT_ShortcutMgr::splitIntoTokens(theRelativeID); + if (tokens.isEmpty()) + return std::shared_ptr(nullptr); // Without the check return value type must be SUIT_ShortcutAssets*. + + std::shared_ptr descendant = std::const_pointer_cast(shared_from_this()); + while (!tokens.isEmpty()) { + const QString token = tokens.front(); + tokens.pop_front(); + + auto itChild = descendant->myChildren.find(token); + if (itChild == descendant->myChildren.end()) { + const bool childIsAction = tokens.isEmpty() ? theIsAction : false; // Make missing ancestors pure folders. + auto child = SUIT_ShortcutItemAssets::create(descendant, token, childIsAction); + if (!child) + return std::shared_ptr(nullptr); + + itChild = descendant->myChildren.emplace(token, std::move(child)).first; + } + descendant = itChild->second; + } + return std::static_pointer_cast(descendant); +} + +bool SUIT_ShortcutAssets::fromJSONOwnProps(const QJsonObject& theJsonObject, const std::set& theLangs) +{ + myLangDependentAssets.clear(); + auto lda = SUIT_ShortcutAssets::LangDependentAssets(); + const auto& langToLdaJson = theJsonObject[SUIT_ShortcutAssets::PROP_ID_LANG_DEPENDENT_ASSETS].toObject(); for (const QString& lang : langToLdaJson.keys()) { + if (!theLangs.empty() && theLangs.find(lang) == theLangs.end()) + continue; + if (!lda.fromJSON(langToLdaJson[lang].toObject())) continue; myLangDependentAssets[lang] = lda; } - myIconPath = theJsonObject[SUIT_ActionAssets::PROP_ID_ICON_PATH].toString(); + myIconPath = theJsonObject[SUIT_ShortcutAssets::PROP_ID_ICON_PATH].toString(); + const bool otherPropsParsed = fromJSONOtherProps(theJsonObject); + + return !myLangDependentAssets.empty() || !myIconPath.isEmpty() || otherPropsParsed; +} + +bool SUIT_ShortcutAssets::fromJSON(const QJsonObject& theJsonObject, bool theParseDescendants, const std::set& theLangs) +{ + for (const auto& IDLTAndChild : myChildren) { + IDLTAndChild.second->myParent.reset(); + } + myChildren.clear(); + + const bool ownPropsParsed = fromJSONOwnProps(theJsonObject, theLangs); + + if (theParseDescendants) { + const auto& childrenJsonObject = theJsonObject[SUIT_ShortcutAssets::PROP_ID_CHILDREN].toObject(); + for (const QString& IDLastToken : childrenJsonObject.keys()) { + if (!SUIT_ShortcutMgr::isInModuleIDTokenValid(IDLastToken)) { + Warning("SUIT_ActionAssets::fromJSON: child assets with invalid IDLastToken \"" + IDLastToken + "\" have been encountered. *this is " + description()); + continue; + } + + auto child = SUIT_ShortcutItemAssets::create(shared_from_this(), IDLastToken, false /*theIsAction*/); + child->fromJSON(childrenJsonObject[IDLastToken].toObject(), true /*theParseDescendants*/, theLangs); + myChildren.emplace(IDLastToken, std::move(child)); + } + } + + return ownPropsParsed || !myChildren.empty(); +} + +bool SUIT_ShortcutAssets::fromJSON(const QJsonObject& theJsonObject, const QString& theRelativeID, const std::set& theLangs) +{ + for (const auto& IDLTAndChild : myChildren) { + IDLTAndChild.second->myParent.reset(); + } + myChildren.clear(); + + const bool ownPropsParsed = fromJSONOwnProps(theJsonObject, theLangs); + + QStringList tokens = SUIT_ShortcutMgr::splitIntoTokens(theRelativeID); + if (!tokens.isEmpty()) { + const QString token = tokens.front(); + if (!SUIT_ShortcutMgr::isInModuleIDTokenValid(token)) + Warning("SUIT_ActionAssets::fromJSON: child assets with invalid IDLastToken \"" + token + "\" is requested. *this is " + description()); + else { + const auto& childrenJsonObject = theJsonObject[SUIT_ShortcutAssets::PROP_ID_CHILDREN].toObject(); + const auto itChildJSONValue = childrenJsonObject.find(token); + if (itChildJSONValue != childrenJsonObject.end()) { + auto child = SUIT_ShortcutItemAssets::create(shared_from_this(), token, false /*theIsAction*/); + tokens.pop_front(); + child->fromJSON(itChildJSONValue->toObject(), SUIT_ShortcutMgr::joinIntoRelativeID(tokens), theLangs); + myChildren.emplace(token, std::move(child)); + } + } + } + + return ownPropsParsed || !myChildren.empty(); +} + +void SUIT_ShortcutAssets::toJSON(QJsonObject& oJsonObject) const +{ + if (!myLangDependentAssets.empty()) { + auto langDependentAssetsJSON = QJsonObject(); + for (const auto& langAndLDA : myLangDependentAssets) { + auto langDependentAssetsItemJSON = QJsonObject(); + langAndLDA.second.toJSON(langDependentAssetsItemJSON); + langDependentAssetsJSON[langAndLDA.first] = langDependentAssetsItemJSON; + } + oJsonObject[SUIT_ShortcutAssets::PROP_ID_LANG_DEPENDENT_ASSETS] = langDependentAssetsJSON; + } + + if (!myIconPath.isEmpty()) + oJsonObject[SUIT_ShortcutAssets::PROP_ID_ICON_PATH] = myIconPath; + + toJSONVirtual(oJsonObject); + + if (!myChildren.empty()) { + auto childrenJSON = QJsonObject(); + for (const auto& IDLastTokenAndChild : myChildren) { + auto childJSON = QJsonObject(); + IDLastTokenAndChild.second->toJSON(childJSON); + childrenJSON[IDLastTokenAndChild.first] = childJSON; + } + oJsonObject[SUIT_ShortcutItemAssets::PROP_ID_CHILDREN] = childrenJSON; + } +} + +void SUIT_ShortcutAssets::merge(const SUIT_ShortcutAssets& theOther, bool theOverride) +{ + if (&theOther == this) + return; + + if (myModuleID != theOther.myModuleID) { + Warning("SUIT_ShortcutAssets::merge: attempt to merge assets with different module ID."); + return; + } + + for (const auto& otherLangAndLDA : theOther.myLangDependentAssets) { + const QString& lang = otherLangAndLDA.first; + const auto& otherLDA = otherLangAndLDA.second; + auto& thisLDA = myLangDependentAssets[lang]; + + if (thisLDA.myName.isEmpty() || theOverride && !otherLDA.myName.isEmpty()) + thisLDA.myName = otherLDA.myName; + + if (thisLDA.myToolTip.isEmpty() || theOverride && !otherLDA.myToolTip.isEmpty()) + thisLDA.myToolTip = otherLDA.myToolTip; + } + + if (myIconPath.isEmpty() || theOverride && !theOther.myIconPath.isEmpty()) { + myIconPath = theOther.myIconPath; + if (!myIcon.isNull()) + loadIcon(true /*theReload*/); + } + + for (const auto& otherChildIDLTAndChild : theOther.myChildren) { + const QString& childIDLastToken = otherChildIDLTAndChild.first; + const SUIT_ShortcutItemAssets& otherChild = *(otherChildIDLTAndChild.second); + + const auto itChild = myChildren.find(childIDLastToken); + if (itChild == myChildren.end()) { + auto child = SUIT_ShortcutItemAssets::create(shared_from_this(), childIDLastToken, false /*theIsAction*/); + child->merge(otherChild, theOverride); + myChildren.emplace(childIDLastToken, std::move(child)); + } + else { + std::shared_ptr child = itChild->second; + child->merge(otherChild, theOverride); + } + } +} + +void SUIT_ShortcutAssets::merge(SUIT_ShortcutAssets&& theOther, bool theOverride) +{ + if (&theOther == this) + return; + + if (myModuleID != theOther.myModuleID) { + Warning("SUIT_ShortcutAssets::merge: attempt to merge assets with different module ID."); + return; + } + + for (auto itOtherLangAndLDA = theOther.myLangDependentAssets.begin(); itOtherLangAndLDA != theOther.myLangDependentAssets.end();) { + const QString& lang = itOtherLangAndLDA->first; + const auto& otherLDA = itOtherLangAndLDA->second; + + const auto itThisLDA = myLangDependentAssets.find(lang); + if (itThisLDA == myLangDependentAssets.end()) { + myLangDependentAssets.emplace(lang, std::move(otherLDA)); + itOtherLangAndLDA = theOther.myLangDependentAssets.erase(itOtherLangAndLDA); + continue; + } + + auto& thisLDA = itThisLDA->second; + + if (thisLDA.myName.isEmpty() || theOverride && !otherLDA.myName.isEmpty()) + thisLDA.myName = otherLDA.myName; + + if (thisLDA.myToolTip.isEmpty() || theOverride && !otherLDA.myToolTip.isEmpty()) + thisLDA.myToolTip = otherLDA.myToolTip; + + itOtherLangAndLDA++; + } + + if (myIconPath.isEmpty() || theOverride && !theOther.myIconPath.isEmpty()) { + myIconPath = std::move(theOther.myIconPath); + if (!myIcon.isNull()) { + if (theOther.myIcon.isNull()) + loadIcon(true /*theReload*/); + else + myIcon = std::move(theOther.myIcon); + } + } + + for (auto itOtherChildIDLTAndChild = theOther.myChildren.begin(); itOtherChildIDLTAndChild != theOther.myChildren.end(); ) { + const QString& childIDLastToken = itOtherChildIDLTAndChild->first; + const auto& otherChild = itOtherChildIDLTAndChild->second; + + const auto itChild = myChildren.find(childIDLastToken); + if (itChild == myChildren.end()) { + auto child = otherChild; // Acquire ownership. + child->myParent = shared_from_this(); + itOtherChildIDLTAndChild = theOther.myChildren.erase(itOtherChildIDLTAndChild); + myChildren.emplace(childIDLastToken, std::move(child)); + } + else { + std::shared_ptr child = itChild->second; + child->merge(*otherChild, theOverride); + itOtherChildIDLTAndChild++; + } + } +} - return !myLangDependentAssets.empty(); +void SUIT_ShortcutAssets::loadIcon(bool theReload) +{ + if (!myIconPath.isEmpty() && (myIcon.isNull() || theReload)) + myIcon = QIcon(::SUIT_tools::substituteVars(myIconPath)); +} + +void SUIT_ShortcutAssets::forEachDescendant(const std::function& theFunc) const +{ + for (const auto& childIDLTAndChild : myChildren) { + SUIT_ShortcutItemAssets& child = *(childIDLTAndChild.second); + theFunc(child); + child.forEachDescendant(theFunc); + } } -void SUIT_ActionAssets::toJSON(QJsonObject& oJsonObject) const +void SUIT_ShortcutAssets::forEachDescendant(const std::function& theFunc) const { - auto langDependentAssetsJSON = QJsonObject(); + for (const auto& childIDLTAndChild : myChildren) { + const SUIT_ShortcutItemAssets& child = *(childIDLTAndChild.second); + theFunc(child); + child.forEachDescendant(theFunc); + } +} - auto langDependentAssetsItemJSON = QJsonObject(); - for (const auto& langAndLDA : myLangDependentAssets) { - langAndLDA.second.toJSON(langDependentAssetsItemJSON); - langDependentAssetsJSON[langAndLDA.first] = langDependentAssetsItemJSON; +void SUIT_ShortcutAssets::forEachDescendant(const std::function)>& theFunc) const +{ + for (const auto& childIDLTAndChild : myChildren) { + const std::shared_ptr& child = childIDLTAndChild.second; + theFunc(child); + child->forEachDescendant(theFunc); } - oJsonObject[SUIT_ActionAssets::PROP_ID_LANG_DEPENDENT_ASSETS] = langDependentAssetsJSON; +} - oJsonObject[SUIT_ActionAssets::PROP_ID_ICON_PATH] = myIconPath; +void SUIT_ShortcutAssets::forEachDescendant(const std::function)>& theFunc) const +{ + for (const auto& childIDLTAndChild : myChildren) { + const std::shared_ptr& child = childIDLTAndChild.second; + theFunc(child); + child->forEachDescendant(theFunc); + } } -QString SUIT_ActionAssets::toString() const +QString SUIT_ShortcutAssets::toString() const { QJsonObject jsonObject; toJSON(jsonObject); return QString::fromStdString(QJsonDocument(jsonObject).toJson(QJsonDocument::Indented).toStdString()); } -QStringList SUIT_ActionAssets::getLangs() const +QStringList SUIT_ShortcutAssets::getLangs() const { QStringList langs; @@ -827,7 +1232,7 @@ QStringList SUIT_ActionAssets::getLangs() const return langs; } -void SUIT_ActionAssets::clearAllLangsExcept(const QString& theLang) +void SUIT_ShortcutAssets::clearAllLangsExcept(const QString& theLang) { for (auto it = myLangDependentAssets.begin(); it != myLangDependentAssets.end();) { if (it->first == theLang) @@ -837,103 +1242,275 @@ void SUIT_ActionAssets::clearAllLangsExcept(const QString& theLang) } } -void SUIT_ActionAssets::merge(const SUIT_ActionAssets& theOther, bool theOverride) +const SUIT_ShortcutAssets::LangDependentAssets* SUIT_ShortcutAssets::bestLangDependentAssets(QString theLang) const { - for (const auto& otherLangAndLDA : theOther.myLangDependentAssets) { - const QString& lang = otherLangAndLDA.first; - const auto& otherLDA = otherLangAndLDA.second; - auto& thisLDA = myLangDependentAssets[lang]; + if (theLang.isEmpty()) + theLang = SUIT_ShortcutMgr::currentLang(); - if (thisLDA.myName.isEmpty() || theOverride && !otherLDA.myName.isEmpty()) - thisLDA.myName = otherLDA.myName; + auto langPriorityList = QStringList({DEFAULT_LANG}); + langPriorityList.push_front(theLang); + langPriorityList.removeDuplicates(); - if (thisLDA.myToolTip.isEmpty() || theOverride && !otherLDA.myToolTip.isEmpty()) - thisLDA.myToolTip = otherLDA.myToolTip; + for (const QString& lang : langPriorityList) { + const auto it = myLangDependentAssets.find(lang); + if (it != myLangDependentAssets.end()) + return &(it->second); } - if (theOverride) - myIconPath = theOther.myIconPath; + // Return any other LDA, if exist. + if (!myLangDependentAssets.empty()) + return &(myLangDependentAssets.begin()->second); + + return nullptr; } -std::map>> SUIT_ShortcutContainer::merge( - const SUIT_ShortcutContainer& theOther, - bool theOverride, - bool theTreatAbsentIncomingAsDisabled -) { - std::map>> changesOfThis; +const QString& SUIT_ShortcutAssets::bestToolTip(const QString& theLang) const +{ + static const QString dummyString = QString(); + const auto bestLDA = bestLangDependentAssets(theLang); + if (bestLDA) + return bestLDA->myToolTip; + else + return dummyString; +} - const SUIT_ShortcutContainer copyOfThisBeforeMerge = *this; // TODO Get rid of whole container copying. - for (const auto& shortcutsInversedOfOtherPair : theOther.myShortcutsInversed) { - const QString& moduleIDOther = shortcutsInversedOfOtherPair.first; - const auto& shortcutsInversedOther = shortcutsInversedOfOtherPair.second; - for (const auto& shortcutInversedOther : shortcutsInversedOther) { - const QString& inModuleActionIDOther = shortcutInversedOther.first; - const QKeySequence& keySequenceOther = shortcutInversedOther.second; - const QKeySequence& keySequenceThis = getKeySequence(moduleIDOther, inModuleActionIDOther); - if (theOverride) { - if (hasShortcut(moduleIDOther, inModuleActionIDOther) && keySequenceThis == keySequenceOther) { - continue; - } - else /* if this has no shortcut for the action or if this has a shortcut for the action, but the key sequence differs. */ { - const auto disabledActionsOfThis = setShortcut(moduleIDOther, inModuleActionIDOther, keySequenceOther, true); - //changesOfThis[moduleIDOther][inModuleActionIDOther] = std::pair(keySequenceThis, keySequenceOther); - changesOfThis[moduleIDOther][inModuleActionIDOther] = std::pair(copyOfThisBeforeMerge.getKeySequence(moduleIDOther, inModuleActionIDOther), keySequenceOther); - for (const auto& disabledActionOfThis : disabledActionsOfThis) { - changesOfThis[disabledActionOfThis.first][disabledActionOfThis.second] = std::pair(keySequenceOther, NO_KEYSEQUENCE); - } - } +SUIT_ShortcutModuleAssets::SUIT_ShortcutModuleAssets(const QString& theModuleID) +: SUIT_ShortcutAssets(theModuleID) +{} + +/*static*/ std::shared_ptr SUIT_ShortcutModuleAssets::create(const QString& theModuleID) +{ + if (!SUIT_ShortcutMgr::isModuleIDValid(theModuleID)) + return std::shared_ptr(nullptr); + + return std::shared_ptr(new SUIT_ShortcutModuleAssets(theModuleID)); +} + +const QString& SUIT_ShortcutModuleAssets::bestName(const QString& theLang) const +{ + const auto bestLDA = bestLangDependentAssets(theLang); + if (bestLDA) + return bestLDA->myName; + else + return myModuleID; +} + +QString SUIT_ShortcutModuleAssets::description() const +{ + return "SUIT_ShortcutModuleAssets \"" + myModuleID + "\"."; +} + + +/*static*/ void SUIT_ShortcutItemAssets::loadDefaultIcons() +{ + SUIT_ShortcutItemAssets::DEFAUT_ICON_ACTION = QIcon(":/resources/default_action_icon.svg"); + SUIT_ShortcutItemAssets::DEFAUT_ICON_FOLDER = QIcon(":/resources/default_folder_icon.svg"); + SUIT_ShortcutItemAssets::DEFAUT_ICON_FOLDER_ACTION = QIcon(":/resources/default_folder_action_icon.svg"); +} + +/*static*/ const QString SUIT_ShortcutItemAssets::PROP_ID_IS_ACTION = "isAction"; +/*static*/ QIcon SUIT_ShortcutItemAssets::DEFAUT_ICON_ACTION = QIcon(); +/*static*/ QIcon SUIT_ShortcutItemAssets::DEFAUT_ICON_FOLDER = QIcon(); +/*static*/ QIcon SUIT_ShortcutItemAssets::DEFAUT_ICON_FOLDER_ACTION = QIcon(); + +SUIT_ShortcutItemAssets::SUIT_ShortcutItemAssets(std::shared_ptr theModule, const QString& theIDLastToken, bool theIsAction) +: SUIT_ShortcutAssets(theModule->myModuleID), myParent(theModule), myIsAction(theIsAction), myIDLastToken(theIDLastToken), myInModuleID(theIDLastToken), myDepth(myInModuleID.split(TOKEN_SEPARATOR).length()) +{} + +SUIT_ShortcutItemAssets::SUIT_ShortcutItemAssets(std::shared_ptr theParentItem, const QString& theIDLastToken, bool theIsAction) +: SUIT_ShortcutAssets(theParentItem->myModuleID), myParent(theParentItem), myIsAction(theIsAction), + myIDLastToken(theIDLastToken), myInModuleID(theParentItem->myInModuleID + TOKEN_SEPARATOR + theIDLastToken), myDepth(SUIT_ShortcutMgr::splitIntoTokens(myInModuleID).length()) +{} + +/*static*/ std::shared_ptr SUIT_ShortcutItemAssets::create(std::shared_ptr theParentItemOrModule, const QString& theIDLastToken, bool theIsAction) +{ + auto res = std::shared_ptr(nullptr); + + if (!theParentItemOrModule) + return res; + + switch (theParentItemOrModule->type()) { + case SUIT_ShortcutAssets::Type::Module: + { + const auto moduleAssets = std::static_pointer_cast(theParentItemOrModule); + if (!SUIT_ShortcutMgr::isInModuleIDTokenValid(theIDLastToken)) { + Warning(QString("SUIT_ShortcutItemAssets::create: invalid inModuleID (last token of ID of root item) \"") + theIDLastToken + "\". Parent is module \"" + moduleAssets->myModuleID + "\"."); + return res; } - else /* if (!theOverride) */ { - if (hasShortcut(moduleIDOther, inModuleActionIDOther)) - continue; - else { - const auto conflictingActionsOfThis = setShortcut(moduleIDOther, inModuleActionIDOther, keySequenceOther, false); - if (conflictingActionsOfThis.empty()) { - changesOfThis[moduleIDOther][inModuleActionIDOther] = std::pair(NO_KEYSEQUENCE, keySequenceOther); - } - else /* if this has no shortcut for the action, but the incoming key sequence conflicts with others shortcuts. */ { - changesOfThis[moduleIDOther][inModuleActionIDOther] = std::pair(NO_KEYSEQUENCE, NO_KEYSEQUENCE); - } - } + + res.reset(new SUIT_ShortcutItemAssets(moduleAssets, theIDLastToken, theIsAction)); + return res; + }; + case SUIT_ShortcutAssets::Type::Item: + { + const auto itemAssets = std::static_pointer_cast(theParentItemOrModule); + if (!SUIT_ShortcutMgr::isInModuleIDTokenValid(theIDLastToken)) { + Warning(QString("SUIT_ShortcutItemAssets::create: invalid last token of ID \"") + theIDLastToken + "\". Parent is item \"" + itemAssets->actionID() + "\"."); + return res; } + + res.reset(new SUIT_ShortcutItemAssets(itemAssets, theIDLastToken, theIsAction)); + return res; + }; + default: + return res; + } +} + +int SUIT_ShortcutItemAssets::depth() const +{ + return myDepth; +} + +void SUIT_ShortcutItemAssets::merge(const SUIT_ShortcutItemAssets& theOther, bool theOverride) +{ + if (&theOther == this) + return; + + if (myInModuleID != theOther.myInModuleID) { + Warning("SUIT_ShortcutItemAssets::merge: attempt to merge assets with different IDs: \"" + theOther.myModuleID + TOKEN_SEPARATOR + theOther.myInModuleID + "\" into \"" + myModuleID + TOKEN_SEPARATOR + myInModuleID + "\"."); + return; + } + + SUIT_ShortcutAssets::merge(theOther, theOverride); + + myIsAction = myIsAction || theOther.myIsAction; +} + +void SUIT_ShortcutItemAssets::merge(SUIT_ShortcutItemAssets&& theOther, bool theOverride) +{ + if (&theOther == this) + return; + + if (myInModuleID != theOther.myInModuleID) { + Warning("SUIT_ShortcutItemAssets::merge: attempt to merge assets with different IDs: \"" + theOther.myModuleID + TOKEN_SEPARATOR + theOther.myInModuleID + "\" into \"" + myModuleID + TOKEN_SEPARATOR + myInModuleID + "\"."); + return; + } + + SUIT_ShortcutAssets::merge(theOther, theOverride); + + myIsAction = myIsAction || theOther.myIsAction; +} + +bool SUIT_ShortcutItemAssets::fromJSONOtherProps(const QJsonObject& theJsonObject) +{ + myIsAction = theJsonObject[SUIT_ShortcutItemAssets::PROP_ID_IS_ACTION].toBool(true); + return !myIsAction; +} + +void SUIT_ShortcutItemAssets::toJSONVirtual(QJsonObject& oJsonObject) const +{ + if (!myIsAction) + oJsonObject[SUIT_ShortcutItemAssets::PROP_ID_IS_ACTION] = false; +} + +const QString& SUIT_ShortcutItemAssets::bestName(const QString& theLang) const +{ + const auto bestLDA = bestLangDependentAssets(theLang); + if (bestLDA) + return bestLDA->myName; + else + return myIDLastToken; +} + +const QString& SUIT_ShortcutItemAssets::bestPath(QString theLang) const +{ + if (theLang.isEmpty()) + theLang = SUIT_ShortcutMgr::currentLang(); + + auto itBestPath = myBestPaths.find(theLang); + if (itBestPath != myBestPaths.end()) + return itBestPath->second; + + QString path = bestName(theLang); + std::shared_ptr ancestor = parent(); + int ancestorDepth = depth() - 1; + while (ancestor && ancestor->type() == SUIT_ShortcutAssets::Type::Item) { + const auto ancestorItem = std::static_pointer_cast(ancestor); + path = ancestorItem->bestName(theLang) + TOKEN_SEPARATOR + path; + ancestor = ancestorItem->parent(); + ancestorDepth--; + } + + if (ancestorDepth > 0) { + Warning(QString("SUIT_ShortcutItemAssets::bestPath: instance \"") + actionID() + "\" is dangling at depth " + QString::number(ancestorDepth) + ". "); + auto tokens = SUIT_ShortcutMgr::splitIntoTokens(myInModuleID); + for (int i = ancestorDepth; i > 0; i--) { + path = tokens[i] + TOKEN_SEPARATOR + path; } } - if (theOverride && theTreatAbsentIncomingAsDisabled) { - // Disable existing shortcuts, if they are absent in theOther. - for (auto& shortcutsInversedPair : myShortcutsInversed) { - const QString& moduleID = shortcutsInversedPair.first; - auto& moduleShortcutsInversed = shortcutsInversedPair.second; - for (auto& inversedShortcut : moduleShortcutsInversed) { - if (theOther.hasShortcut(moduleID, inversedShortcut.first)) - continue; + itBestPath = myBestPaths.emplace(theLang, path).first; + return itBestPath->second; +} - if (inversedShortcut.second.isEmpty()) - continue; // Existing shortcut is already disabled. +QString SUIT_ShortcutItemAssets::description() const +{ + return QString("SUIT_ShortcutItemAssets ") + (myIsAction ? "" : "(not action)") + " \"" + actionID() + "\"."; +} - auto itShortcutsPair = myShortcuts.find(moduleID); - if (itShortcutsPair == myShortcuts.end()) - continue; // The check is an overhead in an error-free designed class, but let be just in case. +bool SUIT_ShortcutItemAssets::isAction() const +{ + return myIsAction; +} - auto& moduleShortcuts = itShortcutsPair->second; - moduleShortcuts.erase(inversedShortcut.second); - changesOfThis[moduleID][inversedShortcut.first] = std::pair(inversedShortcut.second, NO_KEYSEQUENCE); - inversedShortcut.second = NO_KEYSEQUENCE; - } +bool SUIT_ShortcutItemAssets::isFolder() const +{ + return !myIsAction || !children().empty(); +} + +std::shared_ptr SUIT_ShortcutItemAssets::parent() const +{ + return myParent.lock(); +} + +std::shared_ptr SUIT_ShortcutItemAssets::module() const +{ + std::shared_ptr ancestor = parent(); + while (ancestor) { + if (ancestor->type() == SUIT_ShortcutAssets::Type::Module) + return std::static_pointer_cast(ancestor); + else if (ancestor->type() == SUIT_ShortcutAssets::Type::Item) + ancestor = std::static_pointer_cast(ancestor)->parent(); + else { + Warning("SUIT_ShortcutItemAssets::module: unexpected SUIT_ShortcutAssets::Type has been encountered. Fix the method!"); + return std::shared_ptr(nullptr); } } + return std::shared_ptr(nullptr); +} - return changesOfThis; +QString SUIT_ShortcutItemAssets::actionID() const +{ + return myModuleID + TOKEN_SEPARATOR + myInModuleID; +} + +const QIcon& SUIT_ShortcutItemAssets::icon() const +{ + if (myIcon.isNull()) { + if (myIsAction) { + if (children().empty()) + return SUIT_ShortcutItemAssets::DEFAUT_ICON_ACTION; + else + return SUIT_ShortcutItemAssets::DEFAUT_ICON_FOLDER_ACTION; + } + else + return SUIT_ShortcutItemAssets::DEFAUT_ICON_FOLDER; + } + else + return myIcon; } SUIT_ShortcutMgr* SUIT_ShortcutMgr::myShortcutMgr = nullptr; SUIT_ShortcutMgr::SUIT_ShortcutMgr() -: QObject(), myActiveModuleIDs({SUIT_ShortcutMgr::ROOT_MODULE_ID}) +: QObject(), myActiveModuleIDs({SUIT_ShortcutMgr::ROOT_MODULE_ID}), myAssetsLoaded(false) { + Q_INIT_RESOURCE( SUIT ); qApp->installEventFilter( this ); + SUIT_ShortcutItemAssets::loadDefaultIcons(); } SUIT_ShortcutMgr::~SUIT_ShortcutMgr() @@ -944,8 +1521,11 @@ SUIT_ShortcutMgr::~SUIT_ShortcutMgr() /*static*/ void SUIT_ShortcutMgr::Init() { if( myShortcutMgr == nullptr) { + ShCutDbg("SUIT_ShortcutMgr initialization has started."); myShortcutMgr = new SUIT_ShortcutMgr(); + myShortcutMgr->setAssetsFromResources(); myShortcutMgr->setShortcutsFromPreferences(); + ShCutDbg("SUIT_ShortcutMgr initialization has finished."); } } @@ -992,17 +1572,31 @@ SUIT_ShortcutMgr::~SUIT_ShortcutMgr() return true; } +/*static*/ bool SUIT_ShortcutMgr::isInModuleIDTokenValid(const QString& theInModuleIDToken) +{ + if (theInModuleIDToken.contains(TOKEN_SEPARATOR)) + return false; + + const QString simplifiedToken = theInModuleIDToken.simplified(); + return !simplifiedToken.isEmpty() && + simplifiedToken == theInModuleIDToken && + simplifiedToken != META_ACTION_PREFIX; +} + +/*static*/ bool SUIT_ShortcutMgr::isInModuleIDTokenMeta(const QString& theInModuleIDToken) +{ + return theInModuleIDToken.startsWith(META_ACTION_PREFIX); +} + /*static*/ bool SUIT_ShortcutMgr::isInModuleActionIDValid(const QString& theInModuleActionID) { - QStringList tokens = theInModuleActionID.split(TOKEN_SEPARATOR); - for (QStringList::size_type i = 0; i < tokens.length(); i++) { - const QString simplifiedToken = tokens[i].simplified(); - if ( - simplifiedToken.isEmpty() || - simplifiedToken != tokens[i] || - i == 0 && simplifiedToken == META_ACTION_PREFIX || - i != 0 && simplifiedToken.startsWith(META_ACTION_PREFIX) - ) + const QStringList tokens = SUIT_ShortcutMgr::splitIntoTokens(theInModuleActionID); + + if (tokens.isEmpty()) + return false; + + for (const QString& token : tokens) { + if (!SUIT_ShortcutMgr::isInModuleIDTokenValid(token)) return false; } return true; @@ -1010,7 +1604,11 @@ SUIT_ShortcutMgr::~SUIT_ShortcutMgr() /*static*/ bool SUIT_ShortcutMgr::isInModuleMetaActionID(const QString& theInModuleActionID) { - return theInModuleActionID.startsWith(META_ACTION_PREFIX); + const QStringList tokens = SUIT_ShortcutMgr::splitIntoTokens(theInModuleActionID); + if (tokens.isEmpty()) + return false; + + return SUIT_ShortcutMgr::isInModuleIDTokenMeta(tokens.back()); } /*static*/ std::pair SUIT_ShortcutMgr::splitIntoModuleIDAndInModuleID(const QString& theActionID) @@ -1027,14 +1625,8 @@ SUIT_ShortcutMgr::~SUIT_ShortcutMgr() res.first = tokens[0]; tokens.pop_front(); - for (QStringList::size_type i = 0; i < tokens.length(); i++) { - const QString simplifiedToken = tokens[i].simplified(); - if ( - simplifiedToken.isEmpty() || - simplifiedToken != tokens[i] || - i == 0 && simplifiedToken == META_ACTION_PREFIX || - i != 0 && simplifiedToken.startsWith(META_ACTION_PREFIX) - ) + for (const QString& token : tokens) { + if (!SUIT_ShortcutMgr::isInModuleIDTokenValid(token)) return std::pair(); } res.second = tokens.join(TOKEN_SEPARATOR); @@ -1042,6 +1634,19 @@ SUIT_ShortcutMgr::~SUIT_ShortcutMgr() return res; } +/*static*/ QStringList SUIT_ShortcutMgr::splitIntoTokens(const QString& theRelativeID) +{ + if (theRelativeID.isEmpty()) + return QStringList(); + + return theRelativeID.split(TOKEN_SEPARATOR); +} + +/*static*/ QString SUIT_ShortcutMgr::joinIntoRelativeID(const QStringList& theTokens) +{ + return theTokens.join(TOKEN_SEPARATOR); +} + /*static*/ bool SUIT_ShortcutMgr::isActionIDValid(const QString& theActionID) { return !SUIT_ShortcutMgr::splitIntoModuleIDAndInModuleID(theActionID).second.isEmpty(); @@ -1060,7 +1665,7 @@ SUIT_ShortcutMgr::~SUIT_ShortcutMgr() /*static*/ void SUIT_ShortcutMgr::fillContainerFromPreferences(SUIT_ShortcutContainer& theContainer, bool theDefaultOnly) { - ShCutDbg() && ShCutDbg("Retrieving preferences from resources."); + ShCutDbg() && ShCutDbg(QString("SUIT_ShortcutMgr::fillContainerFromPreferences(theContainer, theDefaultOnly = ") + (theDefaultOnly ? "true" : "false") + ") started."); SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); if (!resMgr) { @@ -1112,7 +1717,7 @@ SUIT_ShortcutMgr::~SUIT_ShortcutMgr() resMgr->value(sectionName, inModuleActionID, keySequenceString); const auto keySequence = SUIT_ShortcutMgr::toKeySequenceIfValid(keySequenceString); - ShCutDbg() && ShCutDbg("Shortcut discovered: \"" + moduleID + "\"\t\"" + inModuleActionID + "\"\t\"" + keySequenceString + "\"."); + ShCutDbg() && ShCutDbg("Shortcut parsed: \"" + moduleID + "\"\t\"" + inModuleActionID + "\"\t\"" + keySequenceString + "\"."); if ( !SUIT_ShortcutMgr::isInModuleActionIDValid(inModuleActionID) || @@ -1201,100 +1806,95 @@ SUIT_ShortcutMgr::~SUIT_ShortcutMgr() resMgr->setWorkingMode(resMgrWorkingModeBefore); ShCutDbg() && ShCutDbg("theContainer holds following shortcuts:\n" + theContainer.toString()); + ShCutDbg() && ShCutDbg(QString("SUIT_ShortcutMgr::fillContainerFromPreferences(theContainer, theDefaultOnly = ") + (theDefaultOnly ? "true" : "false") + ") finished."); } -QString substituteBashVars(const QString& theString) +/*static*/ std::pair, std::shared_ptr> +SUIT_ShortcutMgr::getActionAssetsFromResources(const QString& theActionID, const std::set& theLangs) { - QString res = theString; - const auto env = QProcessEnvironment::systemEnvironment(); - int pos = 0; - QRegExp rx("\\$\\{([^\\}]+)\\}"); // Match substrings enclosed by "${" and "}". - rx.setMinimal(true); // Set search to non-greedy. - while((pos = rx.indexIn(res, pos)) != -1) { - QString capture = rx.cap(1); - QString subst = env.value(capture); - ShCutDbg("capture = " + capture); - ShCutDbg("subst = " + subst); - res.replace("${" + capture + "}", subst); - pos += rx.matchedLength(); - } - return res; -} + ShCutDbg("SUIT_ShortcutMgr::getActionAssetsFromResources(\"" + theActionID + "\") START"); -QString substitutePowerShellVars(const QString& theString) -{ - QString res = theString; - int pos = 0; - QRegExp rx("%([^%]+)%"); // Match substrings enclosed by "%". - rx.setMinimal(true); // Set search to non-greedy. - while((pos = rx.indexIn(res, pos)) != -1) { - QString capture = rx.cap(1); - QString subst = Qtx::getenv(capture.toUtf8().constData()); - ShCutDbg("capture = " + capture); - ShCutDbg("subst = " + subst); - res.replace("%" + capture + "%", subst); - pos += rx.matchedLength(); + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + if (!resMgr) { + Warning("SUIT_ShortcutMgr::getActionAssetsFromResources: can't retrieve resource manager!"); + return std::pair, std::shared_ptr>(nullptr, nullptr); } - return res; -} -QString substituteVars(const QString& theString) -{ - QString str = substituteBashVars(theString); - return substitutePowerShellVars(str); -} + const auto splittedActionID = splitIntoModuleIDAndInModuleID(theActionID); + if (splittedActionID.second.isEmpty()) { + Warning(QString("SUIT_ShortcutMgr::getActionAssetsFromResources: \"") + theActionID + "\" is invalid."); + return std::pair, std::shared_ptr>(nullptr, nullptr); + } -/*static*/ std::pair SUIT_ShortcutMgr::getActionAssetsFromResources(const QString& theActionID) -{ - auto res = std::pair(false, SUIT_ActionAssets()); + const QString& moduleID = SUIT_ShortcutMgr::isInModuleMetaActionID(splittedActionID.second) ? SUIT_ShortcutMgr::ROOT_MODULE_ID : splittedActionID.first; + const QString& inModuleID = splittedActionID.second; - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - if (!resMgr) { - Warning("SUIT_ShortcutMgr can't retrieve resource manager!"); - return res; - } + std::shared_ptr combinedModuleAssets(nullptr); QStringList actionAssetFilePaths = resMgr->parameters(SECTION_NAME_ACTION_ASSET_FILE_PATHS); +#ifdef SHORTCUT_MGR_DBG + ShCutDbg("Asset file paths: " + actionAssetFilePaths.join(", ") + "."); +#endif + for (const QString& actionAssetFilePath : actionAssetFilePaths) { - const QString path = substituteVars(actionAssetFilePath); + const QString path = ::SUIT_tools::substituteVars(actionAssetFilePath); + ShCutDbg("Parsing asset file \"" + path + "\"."); QFile actionAssetFile(path); if (!actionAssetFile.open(QIODevice::ReadOnly)) { - Warning("SUIT_ShortcutMgr can't open action asset file \"" + path + "\"!"); + Warning("SUIT_ShortcutMgr::getActionAssetsFromResources: can't open action asset file \"" + path + "\"!"); continue; } QJsonParseError jsonError; QJsonDocument document = QJsonDocument::fromJson(actionAssetFile.readAll(), &jsonError); actionAssetFile.close(); - if(jsonError.error != QJsonParseError::NoError) { - Warning("SUIT_ShortcutMgr: error during parsing of action asset file \"" + path + "\"!"); + if (jsonError.error != QJsonParseError::NoError) { + Warning("SUIT_ShortcutMgr::getActionAssetsFromResources: error during parsing of action asset file \"" + path + "\"!"); continue; } - if(!document.isObject()) { - Warning("SUIT_ShortcutMgr: empty action asset file \"" + path + "\"!"); + if (!document.isObject()) { + Warning("SUIT_ShortcutMgr::getActionAssetsFromResources: invalid asset file \"" + path + "\"!"); continue; } - QJsonObject object = document.object(); - if (object.keys().indexOf(theActionID) == -1) + QJsonObject documentJSONObject = document.object(); + const auto itModuleJSONValue = documentJSONObject.find(moduleID); + if (itModuleJSONValue == documentJSONObject.end()) continue; - SUIT_ActionAssets actionAssets; - if (!actionAssets.fromJSON(object[theActionID].toObject())) { - ShCutDbg("Action asset file \"" + path + "\" contains invalid action assets with ID \"" + theActionID + "\"."); + if (!itModuleJSONValue->isObject()) { + ShCutDbg("SUIT_ShortcutMgr::getActionAssetsFromResources: file \"" + path + "\" contains invalid value with module ID \"" + moduleID + "\"."); continue; } - res.second.merge(actionAssets, true); + if (!combinedModuleAssets) + combinedModuleAssets = SUIT_ShortcutModuleAssets::create(moduleID); + + const auto fileModuleAssets = SUIT_ShortcutModuleAssets::create(moduleID); + const bool somethingUsefulIsParsed = fileModuleAssets->fromJSON(itModuleJSONValue->toObject(), inModuleID, theLangs); + + if (!somethingUsefulIsParsed) + continue; + + combinedModuleAssets->merge(*fileModuleAssets, true); } - res.first = true; - return res; + if (combinedModuleAssets) { +#ifdef SHORTCUT_MGR_DBG + ShCutDbg("SUIT_ShortcutMgr::getActionAssetsFromResources: module assets " + combinedModuleAssets->toString()); + ShCutDbg("SUIT_ShortcutMgr::getActionAssetsFromResources(\"" + theActionID + "\") END\n"); +#endif + return std::pair, std::shared_ptr>(combinedModuleAssets, combinedModuleAssets->findDescendantItem(inModuleID)); + } + else { + ShCutDbg("SUIT_ShortcutMgr::getActionAssetsFromResources(\"" + theActionID + "\") END\n"); + return std::pair, std::shared_ptr>(nullptr, nullptr); + } } -/*static*/ QString SUIT_ShortcutMgr::getLang() +/*static*/ QString SUIT_ShortcutMgr::currentLang() { SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); if (!resMgr) { @@ -1308,6 +1908,22 @@ QString substituteVars(const QString& theString) void SUIT_ShortcutMgr::registerAction(const QString& theActionID, QAction* theAction) { +#ifdef SHORTCUT_MGR_DEVTOOLS + SUIT_ResourceMgr* const resMgr = SUIT_Session::session()->resourceMgr(); + if (!resMgr) { + Warning("SHORTCUT_MGR_DEVTOOLS: can't retrieve resource manager to check throw lists."); + } + else { + const auto actionIDsToThrow = resMgr->parameters(DevTools::SECTION_NAME_ACTION_IDS_TO_THROW_EXCEPTION); + if (actionIDsToThrow.contains(theActionID)) + throw std::invalid_argument(QString("SHORTCUT_MGR_DEVTOOLS: action with ID \"" + theActionID + "\" from throw list has been registered.").toStdString()); + + const auto actionToolTipsToThrow = resMgr->parameters(DevTools::SECTION_NAME_ACTION_TOOLTIPS_TO_THROW_EXCEPTION); + if (actionToolTipsToThrow.contains(theAction->toolTip())) + throw std::invalid_argument(QString("SHORTCUT_MGR_DEVTOOLS: action with tool tip \"" + theAction->toolTip() + "\" from throw list has been registered.").toStdString()); + } +#endif //SHORTCUT_MGR_DEVTOOLS + const auto moduleIDAndActionID = splitIntoModuleIDAndInModuleID(theActionID); const QString& moduleID = moduleIDAndActionID.first; const QString& inModuleActionID = moduleIDAndActionID.second; @@ -1319,7 +1935,7 @@ void SUIT_ShortcutMgr::registerAction(const QString& theActionID, QAction* theAc } { // If an action with the same memory address was registered earlier, - // clear all data about it to start registering procedure from scratch. + // clear all data about it to start registration from scratch. auto itPreviousModuleAndActionID = myActionIDs.find(theAction); if (itPreviousModuleAndActionID != myActionIDs.end()) { // Clear the data from myActions. @@ -1359,19 +1975,43 @@ void SUIT_ShortcutMgr::registerAction(const QString& theActionID, QAction* theAc connect(theAction, SIGNAL(destroyed(QObject*)), this, SLOT (onActionDestroyed(QObject*))); + // Check if assets are provided. + if (myAssetsLoaded) { + const auto& actionAssets = getActionAssets(moduleID, inModuleActionID, true /*theTryToCreateRuntimeAssetsIfAbsent*/); + if (!actionAssets) + Warning("Assets of action \"" + moduleID + TOKEN_SEPARATOR + inModuleActionID + "\" are not provided in asset files and could not be created using runtime data."); + } +#ifdef SHORTCUT_MGR_DBG + else + ShCutDbg("Action \"" + moduleID + TOKEN_SEPARATOR + inModuleActionID + "\" has been registered, but ShortcutMgr has not yet loaded asset files."); +#endif //SHORTCUT_MGR_DBG + + // Assign key sequence from preferences. if (myShortcutContainer.hasShortcut(moduleID, inModuleActionID)) { const QKeySequence& keySequence = getKeySequence(moduleID, inModuleActionID); theAction->setShortcut(keySequence); + // Do not log/warn if action arrived with different key sequence. There are to many of them. } - else { - ShCutDbg( - "Action with ID \"" + + else { // Unbind any key sequence, if it was bound outside of the class and interferes with other shortcuts. + const QKeySequence actionKeySequence = theAction->shortcut(); + auto conflicts = myShortcutContainer.setShortcut(moduleID, inModuleActionID, actionKeySequence, false); + if (!conflicts.empty()) + theAction->setShortcut(NO_KEYSEQUENCE); + +#ifdef SHORTCUT_MGR_DBG + if (myAssetsLoaded) { + QString report = "Shortcut \"" + (SUIT_ShortcutMgr::isInModuleMetaActionID(inModuleActionID) ? SUIT_ShortcutMgr::ROOT_MODULE_ID + TOKEN_SEPARATOR + inModuleActionID : theActionID) + - "\" is not added to default resource files." - ); - auto conflicts = myShortcutContainer.setShortcut(moduleID, inModuleActionID, theAction->shortcut(), false); - if (!conflicts.empty()) - theAction->setShortcut(NO_KEYSEQUENCE); // Unbind any key sequence, if it was bound outside of the class and interferes with other shortcuts. + "\"->\"" + actionKeySequence.toString() + "\" is not added to default preference files. "; + + if (!conflicts.empty()) + report += "The shortcut conflicted with other shortcuts and has been disabled."; + + report += QString("The ") + (conflicts.empty() ? "" : "disabled ") + "shortcut has been added to user preference files."; + + ShCutDbg(report); + } +#endif //SHORTCUT_MGR_DBG } } @@ -1535,7 +2175,7 @@ const SUIT_ShortcutContainer& SUIT_ShortcutMgr::getShortcutContainer() const return myShortcutContainer; } -void SUIT_ShortcutMgr::mergeShortcutContainer(const SUIT_ShortcutContainer& theContainer, bool theOverride, bool theTreatAbsentIncomingAsDisabled) +void SUIT_ShortcutMgr::mergeShortcutContainer(const SUIT_ShortcutContainer& theContainer, bool theOverride, bool theTreatAbsentIncomingAsDisabled, bool theSaveToPreferences) { ShCutDbg() && ShCutDbg("ShortcutMgr merges shortcut container..."); const auto changes = myShortcutContainer.merge(theContainer, theOverride, theTreatAbsentIncomingAsDisabled); @@ -1610,7 +2250,8 @@ void SUIT_ShortcutMgr::mergeShortcutContainer(const SUIT_ShortcutContainer& theC enableAnonymousShortcutsClashingWith(keySequence, !ksIsBoundToAnActionInActiveModule); } - SUIT_ShortcutMgr::saveShortcutsToPreferences(changes); + if (theSaveToPreferences) + SUIT_ShortcutMgr::saveShortcutsToPreferences(changes); } const QKeySequence& SUIT_ShortcutMgr::getKeySequence(const QString& theModuleID, const QString& theInModuleActionID) const @@ -1633,111 +2274,158 @@ std::set SUIT_ShortcutMgr::getIDsOfInterferingModules(const QString& th return myShortcutContainer.getIDsOfInterferingModules(theModuleID); } -std::shared_ptr SUIT_ShortcutMgr::getModuleAssets(const QString& theModuleID) const +std::shared_ptr SUIT_ShortcutMgr::getModuleAssets(const QString& theModuleID) const { const auto itModuleAssets = myModuleAssets.find(theModuleID); - if (itModuleAssets == myModuleAssets.end()) { - auto assets = std::shared_ptr(new SUIT_ActionAssets()); - auto lda = SUIT_ActionAssets::LangDependentAssets(); - lda.myName = theModuleID; // At least something meaningful. + if (itModuleAssets == myModuleAssets.end()) + return std::shared_ptr(nullptr); - assets->myLangDependentAssets.emplace(SUIT_ShortcutMgr::getLang(), lda); - return assets; - } return itModuleAssets->second; } QString SUIT_ShortcutMgr::getModuleName(const QString& theModuleID, const QString& theLang) const { const auto assets = getModuleAssets(theModuleID); - const auto& ldaMap = assets->myLangDependentAssets; - if (ldaMap.empty()) + if (!assets) return theModuleID; - auto itLang = ldaMap.find(theLang.isEmpty() ? SUIT_ShortcutMgr::getLang() : theLang); - if (itLang == ldaMap.end()) - itLang = ldaMap.begin(); // Get name in any language. - - const auto& name = itLang->second.myName; - return name.isEmpty() ? theModuleID : name; + return assets->bestName(theLang); } -std::shared_ptr SUIT_ShortcutMgr::getActionAssets(const QString& theModuleID, const QString& theInModuleActionID) const +std::shared_ptr SUIT_ShortcutMgr::getActionAssets(const QString& theModuleID, const QString& theInModuleActionID, bool theTryToCreateRuntimeAssetsIfAbsent) const { const QString actionID = SUIT_ShortcutMgr::makeActionID(theModuleID, theInModuleActionID); if (actionID.isEmpty()) { ShCutDbg() && ShCutDbg("Can't get action assets: either/both module ID \"" + theModuleID + "\" or/and in-module action ID \"" + theInModuleActionID + "\" is/are invalid."); - return std::shared_ptr(nullptr); + return std::shared_ptr(nullptr); } - return getActionAssets(actionID); + return getActionAssets(actionID, theTryToCreateRuntimeAssetsIfAbsent); } -std::shared_ptr SUIT_ShortcutMgr::getActionAssets(const QString& theActionID) const +std::shared_ptr SUIT_ShortcutMgr::getActionAssets(const QString& theActionID, bool theTryToCreateRuntimeAssetsIfAbsent) const { const auto moduleIDAndActionID = SUIT_ShortcutMgr::splitIntoModuleIDAndInModuleID(theActionID); - const QString& moduleID = moduleIDAndActionID.first; + const QString& moduleID = SUIT_ShortcutMgr::isInModuleMetaActionID(moduleIDAndActionID.second) ? SUIT_ShortcutMgr::ROOT_MODULE_ID : moduleIDAndActionID.first; const QString& inModuleActionID = moduleIDAndActionID.second; if (inModuleActionID.isEmpty()) { ShCutDbg() && ShCutDbg("Attempt to get assets of an action with invalid ID \"" + theActionID + "\"."); - return std::shared_ptr(nullptr); + return std::shared_ptr(nullptr); } - const auto itModuleActionAssets = myActionAssets.find(moduleID); - if (itModuleActionAssets == myActionAssets.end()) - return std::shared_ptr(nullptr); - else { - const auto moduleActionAssets = itModuleActionAssets->second; - const auto itActionAssets = moduleActionAssets.find(inModuleActionID); - if (itActionAssets == moduleActionAssets.end()) - return std::shared_ptr(nullptr); - else - return itActionAssets->second; + auto itModuleAssets = myModuleAssets.find(moduleID); + if (itModuleAssets != myModuleAssets.end()) { + const std::shared_ptr moduleAssets = itModuleAssets->second; + auto assets = moduleAssets->findDescendantItem(inModuleActionID); + if (assets) + return assets; + } + + if (!myAssetsLoaded) { + Warning("SUIT_ShortcutMgr::getActionAssets(\"" + theActionID + "\") has been called prior to loading of asset files."); + return std::shared_ptr(nullptr); + } + else { // Action assets are not provided in asset files. + Warning("SUIT_ShortcutMgr::getActionAssets(..): Assets of \"" + theActionID + "\" are not provided in asset files."); + if (theTryToCreateRuntimeAssetsIfAbsent) { + const auto runtimeAssets = createRuntimeActionAssets(moduleID, inModuleActionID); + if (runtimeAssets) { + if (itModuleAssets == myModuleAssets.end()) + itModuleAssets = myModuleAssets.emplace(moduleID, std::move(SUIT_ShortcutModuleAssets::create(moduleID))).first; + + auto& moduleAssets = itModuleAssets->second; + auto actionAssets = moduleAssets->descendantItem(inModuleActionID, true /*theIsAction*/); + + actionAssets->merge(std::move(*runtimeAssets), false); + ShCutDbg("Assets of action \"" + theActionID + "\" has been created using runtime data."); + return actionAssets; + } + } } + return std::shared_ptr(nullptr); } -QString SUIT_ShortcutMgr::getActionName(const QString& theModuleID, const QString& theInModuleActionID, const QString& theLang) const +std::shared_ptr SUIT_ShortcutMgr::createRuntimeActionAssets(const QString& theModuleID, const QString& theInModuleActionID) const { - const QString actionID = SUIT_ShortcutMgr::makeActionID(theModuleID, theInModuleActionID); - if (actionID.isEmpty()) { - ShCutDbg() && ShCutDbg("Can't get action name: either/both module ID \"" + theModuleID + "\" or/and in-module action ID \"" + theInModuleActionID + "\" is/are invalid."); - return actionID; + const auto actions = SUIT_ShortcutMgr::getActions(theModuleID, theInModuleActionID); + if (actions.empty()) + return std::shared_ptr(nullptr); + + SUIT_ShortcutAssets::LangDependentAssets runtimeLDA; + QIcon runtimeIcon; + for (const auto action : actions) { + if (!action->text().isEmpty()) + runtimeLDA.myName = action->text(); + + if (!action->statusTip().isEmpty()) + runtimeLDA.myToolTip = action->statusTip(); + + if (!action->icon().isNull()) + runtimeIcon = action->icon(); } - const auto itModuleActionAssets = myActionAssets.find(theModuleID); - if (itModuleActionAssets == myActionAssets.end()) - return actionID; + if (runtimeLDA.myName.isEmpty() && runtimeLDA.myToolTip.isEmpty() && runtimeIcon.isNull()) + return std::shared_ptr(nullptr); - const auto moduleActionAssets = itModuleActionAssets->second; - const auto itActionAssets = moduleActionAssets.find(theInModuleActionID); - if (itActionAssets != moduleActionAssets.end() && !itActionAssets->second->myLangDependentAssets.empty()) { - const auto& ldaMap = itActionAssets->second->myLangDependentAssets; - if (ldaMap.empty()) - return theInModuleActionID; + if (runtimeLDA.myName.isEmpty()) + runtimeLDA.myName = runtimeLDA.myToolTip; - auto itLang = ldaMap.find(theLang.isEmpty() ? SUIT_ShortcutMgr::getLang() : theLang); - if (itLang == ldaMap.end()) - itLang = ldaMap.begin(); // Get name in any language. + const auto moduleAssets = SUIT_ShortcutModuleAssets::create(theModuleID); + if (!moduleAssets) + return std::shared_ptr(nullptr); - const auto& name = itLang->second.myName; - return name.isEmpty() ? theInModuleActionID : name; - } - else /* if action assets have not been loaded. */ { - // Try to get action->text() and use it as a name. + const auto actionAssets = moduleAssets->descendantItem(theInModuleActionID, true /*theIsAction*/); + if (!actionAssets) + return std::shared_ptr(nullptr); - // Pitfall of the approach: at the time this code block is called, the action may not exist. - // Moreover, an action with such an ID may not even have been created at the time of calling this method. - // Thus, even buffering of assets of every action ever created at runtime does not guarantee, - // that the assets will be available at any point in the life of the application, - // unless the assets are added to dedicated section in an asset file. + if (runtimeLDA.myName.isEmpty()) + runtimeLDA.myName = actionAssets->myInModuleID; - const auto actions = getActions(theModuleID, theInModuleActionID); - for (const auto& action : actions) { - if (!action->text().isEmpty()) - return action->text(); - } + actionAssets->myLangDependentAssets[SUIT_ShortcutMgr::currentLang()] = std::move(runtimeLDA); + actionAssets->myIcon = std::move(runtimeIcon); + + return actionAssets; +} + +QString SUIT_ShortcutMgr::getActionName(const QString& theModuleID, const QString& theInModuleActionID, const QString& theLang) const +{ + std::shared_ptr actionAssets = getActionAssets(theModuleID, theInModuleActionID, true /*theTryToCreateRuntimeAssetsIfAbsent*/); + if (!actionAssets) return theInModuleActionID; + + auto LDA = actionAssets->bestLangDependentAssets(theLang); + if (LDA) + return LDA->myName; + + return theInModuleActionID; +} + +QtxAction* SUIT_ShortcutMgr::createAction(QObject* theParent, QObject* theReceiver, const char* theReceiverMemberMethod, const QString& theActionID, const bool theIsToggle) const +{ + const auto moduleIDAndInModuleID = SUIT_ShortcutMgr::splitIntoModuleIDAndInModuleID(theActionID); + const QString& moduleID = moduleIDAndInModuleID.first; + const QString& inModuleID = moduleIDAndInModuleID.second; + + if (inModuleID.isEmpty()) { + Warning("Attempt to create action with invalid ID \"" + theActionID + "\"."); + return nullptr; } + + QtxAction* action = nullptr; + const auto actionAssets = getActionAssets(theActionID, false /*theTryToCreateRuntimeAssetsIfAbsent*/); + if (!actionAssets) { + Warning("SUIT_ShortcutMgr::createAction(\"" + theActionID + "\"): assets of the action are absent."); + const QString lastTokenOfID = SUIT_ShortcutMgr::splitIntoTokens(inModuleID).back(); + action = new QtxAction(theParent, theIsToggle, theActionID, inModuleID, lastTokenOfID, QIcon()); + } + else { + action = new QtxAction(theParent, theIsToggle, theActionID, actionAssets->bestToolTip(), actionAssets->bestName(), actionAssets->myIcon); + } + + if (theReceiver && theReceiverMemberMethod) + connect(action, SIGNAL(triggered(bool)), theReceiver, theReceiverMemberMethod); + + return action; } void SUIT_ShortcutMgr::onActionDestroyed(QObject* theObject) @@ -1892,19 +2580,34 @@ std::set> SUIT_ShortcutMgr::setShortcutNoIDChecks(co void SUIT_ShortcutMgr::setShortcutsFromPreferences() { - ShCutDbg() && ShCutDbg("ShortcutMgr is initializing..."); + ShCutDbg() && ShCutDbg("Retrieving shortcuts from preferences has started."); SUIT_ShortcutContainer container; SUIT_ShortcutMgr::fillContainerFromPreferences(container, false /*theDefaultOnly*/); - mergeShortcutContainer(container, true /*theOverride*/, false /*theTreatAbsentIncomingAsDisabled*/); - setAssetsFromResources(); + mergeShortcutContainer(container, true /*theOverride*/, false /*theTreatAbsentIncomingAsDisabled*/, false /*theSaveToPreferences*/); + + if (myAssetsLoaded) { + // Warn, if some action assets are not provided. + const auto moduleIDs = myShortcutContainer.getIDsOfAllModules(); + for (const QString& moduleID : moduleIDs) { + const auto& moduleShortcutsInversed = getModuleShortcutsInversed(moduleID); + for (const auto& shortcutInversed : moduleShortcutsInversed) { + const QString& inModuleActionID = shortcutInversed.first; + const auto& actionAssets = getActionAssets(moduleID, inModuleActionID, false /*theTryToCreateRuntimeAssetsIfAbsent*/); + if (!actionAssets) + Warning("SUIT_ShortcutMgr::setShortcutsFromPreferences(): Assets of action \"" + moduleID + TOKEN_SEPARATOR + inModuleActionID + "\" are not provided in asset files."); + } + } + } + else + Warning("SUIT_ShortcutMgr: loading of shortcuts from preferences happened earlier, than loading of asset files."); - ShCutDbg() && ShCutDbg("ShortcutMgr has been initialized."); + ShCutDbg() && ShCutDbg("Retrieving shortcuts from preferences has finished."); } /*static*/ void SUIT_ShortcutMgr::saveShortcutsToPreferences(const std::map>& theShortcutsInversed) { - ShCutDbg() && ShCutDbg("Saving preferences to resources."); + ShCutDbg() && ShCutDbg("SUIT_ShortcutMgr::saveShortcutsToPreferences(New_Shortcuts_Inversed)"); SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); if (!resMgr) { @@ -1931,7 +2634,7 @@ void SUIT_ShortcutMgr::setShortcutsFromPreferences() /*static*/ void SUIT_ShortcutMgr::saveShortcutsToPreferences(const std::map>>& theShortcutsInversed) { - ShCutDbg() && ShCutDbg("Saving preferences to resources."); + ShCutDbg() && ShCutDbg("SUIT_ShortcutMgr::saveShortcutsToPreferences(Old_&_New_Shortcuts_Inversed)"); SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); if (!resMgr) { @@ -1958,7 +2661,8 @@ void SUIT_ShortcutMgr::setShortcutsFromPreferences() void SUIT_ShortcutMgr::setAssetsFromResources(QString theLanguage) { - ShCutDbg() && ShCutDbg("Retrieving action assets."); + ShCutDbg() && ShCutDbg("Retrieving shortcut assets."); + static const std::function loadIcon = [] (SUIT_ShortcutAssets& theAssets) { theAssets.loadIcon(); }; SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); if (!resMgr) { @@ -1967,18 +2671,19 @@ void SUIT_ShortcutMgr::setAssetsFromResources(QString theLanguage) } if (theLanguage.isEmpty()) - theLanguage = resMgr->stringValue(LANG_SECTION, LANG_SECTION, DEFAULT_LANG); + theLanguage = SUIT_ShortcutMgr::currentLang(); - QStringList langPriorityList = LANG_PRIORITY_LIST; - langPriorityList.push_front(theLanguage); - langPriorityList.removeDuplicates(); + ShCutDbg("Requested asset language is \"" + theLanguage + "\"."); + + const auto langs = std::set({ DEFAULT_LANG, theLanguage }); QStringList actionAssetFilePaths = resMgr->parameters(SECTION_NAME_ACTION_ASSET_FILE_PATHS); #ifdef SHORTCUT_MGR_DBG ShCutDbg("Asset files: " + actionAssetFilePaths.join(", ") + "."); #endif for (const QString& actionAssetFilePath : actionAssetFilePaths) { - const QString path = substituteVars(actionAssetFilePath); + const QString path = ::SUIT_tools::substituteVars(actionAssetFilePath); + ShCutDbg("Parsing asset file \"" + path + "\"."); QFile actionAssetFile(path); if (!actionAssetFile.open(QIODevice::ReadOnly)) { Warning("SUIT_ShortcutMgr can't open action asset file \"" + path + "\"!"); @@ -1988,120 +2693,101 @@ void SUIT_ShortcutMgr::setAssetsFromResources(QString theLanguage) QJsonParseError jsonError; QJsonDocument document = QJsonDocument::fromJson(actionAssetFile.readAll(), &jsonError); actionAssetFile.close(); - if(jsonError.error != QJsonParseError::NoError) { - Warning("SUIT_ShortcutMgr: error during parsing of action asset file \"" + path + "\"!"); - continue; + if (jsonError.error != QJsonParseError::NoError) { + Warning("SUIT_ShortcutMgr: error during parsing of action asset file \"" + path + "\"!"); + continue; } - if(document.isObject()) { - QJsonObject object = document.object(); - SUIT_ActionAssets actionAssets; - for (const QString& actionID : object.keys()) { - const auto moduleIDAndActionID = SUIT_ShortcutMgr::splitIntoModuleIDAndInModuleID(actionID); - const QString& moduleID = moduleIDAndActionID.first; - const QString& inModuleActionID = moduleIDAndActionID.second; - - if (inModuleActionID.isEmpty()) { - ShCutDbg("Action asset file \"" + path + "\" contains invalid action ID \"" + actionID + "\"."); + if (document.isObject()) { + QJsonObject documentJSONObject = document.object(); + for (const QString& moduleID : documentJSONObject.keys()) { + if (!SUIT_ShortcutMgr::isModuleIDValid(moduleID)) { + ShCutDbg("Action asset file \"" + path + "\" contains invalid module ID \"" + moduleID + "\"."); continue; } - if (!actionAssets.fromJSON(object[actionID].toObject())) { - ShCutDbg("Action asset file \"" + path + "\" contains invalid action assets with ID \"" + actionID + "\"."); + const auto& moduleJSONValue = documentJSONObject[moduleID]; + if (!moduleJSONValue.isObject()) { + ShCutDbg("Action asset file \"" + path + "\" contains invalid value with module ID \"" + moduleID + "\"."); continue; } - const bool nameInCurLangExists = actionAssets.myLangDependentAssets.find(theLanguage) != actionAssets.myLangDependentAssets.end(); - if (nameInCurLangExists) { - actionAssets.clearAllLangsExcept(theLanguage); + const auto parsedModuleAssets = SUIT_ShortcutModuleAssets::create(moduleID); + if (!parsedModuleAssets->fromJSON(moduleJSONValue.toObject(), true /*theParseDescendants*/, langs)) { + ShCutDbg("Action asset file \"" + path + "\" contains invalid/empty assets of module with ID \"" + moduleID + "\"."); + continue; } - else { - bool nameInLinguaFrancaExists = false; - QString usedLanguage = QString(); - for (int i = 1; i < langPriorityList.length(); i++) { - nameInLinguaFrancaExists = actionAssets.myLangDependentAssets.find(langPriorityList[i]) != actionAssets.myLangDependentAssets.end(); - if (nameInLinguaFrancaExists) { - usedLanguage = langPriorityList[i]; - actionAssets.clearAllLangsExcept(usedLanguage); - break; - } - } - #ifdef SHORTCUT_MGR_DBG - if (nameInLinguaFrancaExists) - ShCutDbg("Can't find assets for action with ID \"" + actionID + "\" at current (" + theLanguage + ") language. Assets in " + usedLanguage + " is used for the action." ); - else { - ShCutDbg("Can't find assets for action with ID \"" + actionID + "\". Tried " + langPriorityList.join(", ") + " languages." ); - continue; + auto itModuleAssets = myModuleAssets.find(moduleID); + if (itModuleAssets == myModuleAssets.end()) { + itModuleAssets = myModuleAssets.emplace(moduleID, std::move(parsedModuleAssets)).first; + SUIT_ShortcutModuleAssets& moduleAssets = *(itModuleAssets->second); + + moduleAssets.loadIcon(); + moduleAssets.forEachDescendant(loadIcon); + + { // Fill default assets of module itself, not its actions/folders. The default assets are overriden by assets in files. + if (moduleID == SUIT_ShortcutMgr::ROOT_MODULE_ID) { + if (moduleAssets.myLangDependentAssets.find(DEFAULT_LANG) == moduleAssets.myLangDependentAssets.end()) { + auto& lda = moduleAssets.myLangDependentAssets[DEFAULT_LANG]; + lda.myName = tr("General"); + } + + if (moduleAssets.myIconPath.isEmpty()) { + QString dirPath; + if (resMgr->value("resources", "LightApp", dirPath)) + moduleAssets.myIconPath = dirPath + (!dirPath.isEmpty() && dirPath.back() == "/" ? "" : "/") + "icon_default.png"; + } + + if (moduleAssets.myIcon.isNull()) + moduleAssets.myIcon = QIcon(::SUIT_tools::substituteVars(moduleAssets.myIconPath)); + } + else /* if module is not root module */ { + if (moduleAssets.myLangDependentAssets.find(DEFAULT_LANG) == moduleAssets.myLangDependentAssets.end()) { + auto& lda = moduleAssets.myLangDependentAssets[DEFAULT_LANG]; + + QString moduleName = moduleID; + resMgr->value(moduleID, "name", moduleName); + lda.myName = moduleName; + + resMgr->value(moduleID, "description", lda.myToolTip); + } + + if (moduleAssets.myIconPath.isEmpty()) { + QString dirPath; + QString fileName; + if (resMgr->value("resources", moduleID, dirPath) && resMgr->value(moduleID, "icon", fileName)) + moduleAssets.myIconPath = dirPath + (!dirPath.isEmpty() && dirPath.back() == "/" ? "" : "/") + fileName; + } + + if (moduleAssets.myIcon.isNull()) + moduleAssets.myIcon = QIcon(::SUIT_tools::substituteVars(moduleAssets.myIconPath)); + } } - #endif } + else /* if assets of the module have already been added */ { + SUIT_ShortcutModuleAssets& moduleAssets = *(itModuleAssets->second); - auto& moduleActionAssets = myActionAssets[moduleID]; - auto itAssets = moduleActionAssets.find(inModuleActionID); - if (itAssets == moduleActionAssets.end()) { - auto pAssets = std::shared_ptr(new SUIT_ActionAssets(actionAssets)); - itAssets = moduleActionAssets.emplace(inModuleActionID, pAssets).first; + moduleAssets.merge(std::move(*parsedModuleAssets), true); + moduleAssets.loadIcon(); + moduleAssets.forEachDescendant(loadIcon); } - else - itAssets->second->merge(actionAssets, true); - - const auto& assets = itAssets->second; - if (!assets->myIconPath.isEmpty() && assets->myIcon.isNull()) - assets->myIcon = QIcon(substituteVars(assets->myIconPath)); } } } - #ifdef SHORTCUT_MGR_DBG - ShCutDbg("Parsed assets: "); - QJsonObject object; - for (const auto& moduleIDAndAssets : myActionAssets) { - for (const auto& actionIDAndAssets : moduleIDAndAssets.second) { - actionIDAndAssets.second->toJSON(object); - QJsonDocument doc(object); - QString strJson = doc.toJson(QJsonDocument::Indented); - const QString actionID = SUIT_ShortcutMgr::makeActionID(moduleIDAndAssets.first, actionIDAndAssets.first); - ShCutDbg(actionID + " : " + strJson); - } - } - #endif - - // Fill myModuleAssets. - for (const auto& moduleID : myShortcutContainer.getIDsOfAllModules()) { - const auto assets = std::shared_ptr(new SUIT_ActionAssets()); - auto& lda = assets->myLangDependentAssets[DEFAULT_LANG]; - - if (moduleID == SUIT_ShortcutMgr::ROOT_MODULE_ID) { - lda.myName = tr("General"); - - { // Load icon. - QString dirPath; - if (resMgr->value("resources", "LightApp", dirPath)) { - assets->myIconPath = dirPath + (!dirPath.isEmpty() && dirPath[dirPath.length() - 1] == "/" ? "" : "/") + "icon_default.png"; - assets->myIcon = QIcon(substituteVars(assets->myIconPath)); - } - } - } - else { - QString moduleName = moduleID; - resMgr->value(moduleID, "name", moduleName); - lda.myName = moduleName; - - resMgr->value(moduleID, "description", lda.myToolTip); - - { // Load icon. - QString dirPath; - QString fileName; - if (resMgr->value("resources", moduleID, dirPath) && resMgr->value(moduleID, "icon", fileName)) { - assets->myIconPath = dirPath + (!dirPath.isEmpty() && dirPath[dirPath.length() - 1] == "/" ? "" : "/") + fileName; - assets->myIcon = QIcon(substituteVars(assets->myIconPath)); - } - } - } + myAssetsLoaded = true; - myModuleAssets.emplace(moduleID, std::move(assets)); +#ifdef SHORTCUT_MGR_DBG + ShCutDbg("All assets: "); + QJsonObject moduleJSONObject; + for (const auto& moduleIDAndAssets : myModuleAssets) { + moduleIDAndAssets.second->toJSON(moduleJSONObject); + QJsonDocument doc(moduleJSONObject); + QString strJson = doc.toJson(QJsonDocument::Indented); + ShCutDbg("\"" + moduleIDAndAssets.first + "\": " + strJson); } +#endif } void SUIT_ShortcutMgr::registerAnonymousShortcut(QAction* const theAction) @@ -2210,251 +2896,7 @@ QString SUIT_ShortcutMgr::anonymousShortcutsToString() const } - -SUIT_SentenceMatcher::SUIT_SentenceMatcher() -{ - myUseExactWordOrder = false; - myUseFuzzyWords = true; - myIsCaseSensitive = false; -} - -void SUIT_SentenceMatcher::setUseExactWordOrder(bool theOn) -{ - if (myUseExactWordOrder == theOn) - return; - - myUseExactWordOrder = theOn; - if (theOn) { - myPermutatedSentences.clear(); - myFuzzyPermutatedSentences.clear(); - return; - } - - if (myPermutatedSentences.isEmpty()) - SUIT_SentenceMatcher::makePermutatedSentences(myWords, myPermutatedSentences); - - if (myUseFuzzyWords && myFuzzyPermutatedSentences.isEmpty()) - SUIT_SentenceMatcher::makePermutatedSentences(myFuzzyWords, myFuzzyPermutatedSentences); -} - -void SUIT_SentenceMatcher::setUseFuzzyWords(bool theOn) -{ - if (myUseFuzzyWords == theOn) - return; - - myUseFuzzyWords = theOn; - if (myWords.isEmpty() || !theOn) { - myFuzzyWords.clear(); - myFuzzyPermutatedSentences.clear(); - return; - } - - myFuzzyWords.clear(); - SUIT_SentenceMatcher::makeFuzzyWords(myWords, myFuzzyWords); - - if (!myUseExactWordOrder) { - myFuzzyPermutatedSentences.clear(); - SUIT_SentenceMatcher::makePermutatedSentences(myFuzzyWords, myFuzzyPermutatedSentences); - } -} - -void SUIT_SentenceMatcher::setCaseSensitive(bool theOn) -{ - myIsCaseSensitive = theOn; -} - -void SUIT_SentenceMatcher::setQuery(QString theQuery) -{ - theQuery = theQuery.simplified(); - if (theQuery == myQuery) - return; - - myQuery = theQuery; - myWords = theQuery.split(" ", QString::SkipEmptyParts); - - { // Set permutated sentences. - myPermutatedSentences.clear(); - if (!myUseExactWordOrder) - SUIT_SentenceMatcher::makePermutatedSentences(myWords, myPermutatedSentences); - } - - // Set fuzzy words and sentences. - myFuzzyWords.clear(); - myFuzzyPermutatedSentences.clear(); - - if (myUseFuzzyWords) { - SUIT_SentenceMatcher::makeFuzzyWords(myWords, myFuzzyWords); - if (!myUseExactWordOrder) - SUIT_SentenceMatcher::makePermutatedSentences(myFuzzyWords, myFuzzyPermutatedSentences); - } -} - -double SUIT_SentenceMatcher::match(const QString& theInputString) const -{ - int n = 0; - if (myUseExactWordOrder) { - n = SUIT_SentenceMatcher::match(theInputString, myWords, myIsCaseSensitive); - if (n != theInputString.length() && myUseFuzzyWords) { - const int nFuzzy = SUIT_SentenceMatcher::match(theInputString, myFuzzyWords, myIsCaseSensitive); - if (nFuzzy > n) - n = nFuzzy; - } - } - else /* if match with permutated query sentences */ { - n = SUIT_SentenceMatcher::match(theInputString, myPermutatedSentences, myIsCaseSensitive); - if (n != theInputString.length() && myUseFuzzyWords) { - const int nFuzzy = SUIT_SentenceMatcher::match(theInputString, myFuzzyPermutatedSentences, myIsCaseSensitive); - if (nFuzzy > n) - n = nFuzzy; - } - } - - if (n <= 0) - return std::numeric_limits::infinity(); - - const auto strLength = theInputString.length() > myQuery.length() ? theInputString.length() : myQuery.length(); - - if (n > strLength) - return 0; // Exact match or almost exact. - - return double(strLength - n); -} - -QString SUIT_SentenceMatcher::toString() const -{ - QString res = QString("myUseExactWordOrder: ") + (myUseExactWordOrder ? "true" : "false") + ";\n"; - res += QString("myUseFuzzyWords: ") + (myUseFuzzyWords ? "true" : "false") + ";\n"; - res += QString("myIsCaseSensitive: ") + (myIsCaseSensitive ? "true" : "false") + ";\n"; - res += QString("myQuery: ") + myQuery + ";\n"; - res += QString("myWords: ") + myWords.join(", ") + ";\n"; - res += QString("myFuzzyWords: ") + myFuzzyWords.join(", ") + ";\n"; - - res += "myPermutatedSentences:\n"; - for (const auto& sentence : myPermutatedSentences) { - res += "\t" + sentence.join(", ") + ";\n"; - } - - res += "myFuzzyPermutatedSentences:\n"; - for (const auto& sentence : myFuzzyPermutatedSentences) { - res += "\t" + sentence.join(", ") + ";\n"; - } - - res += "."; - return res; -} - -/*static*/ bool SUIT_SentenceMatcher::makePermutatedSentences(const QStringList& theWords, QList& theSentences) -{ - theSentences.clear(); - theSentences.push_back(theWords); - QStringList nextPerm = theWords; - QStringList prevPerm = theWords; - - bool hasNextPerm = true; - bool hasPrevPerm = true; - - while (hasNextPerm || hasPrevPerm) { - if (hasNextPerm) - hasNextPerm = std::next_permutation(nextPerm.begin(), nextPerm.end()); - - if (hasNextPerm && !theSentences.contains(nextPerm)) - theSentences.push_back(nextPerm); - - if (hasPrevPerm) - hasPrevPerm = std::prev_permutation(prevPerm.begin(), prevPerm.end()); - - if (hasPrevPerm && !theSentences.contains(prevPerm)) - theSentences.push_back(prevPerm); - } - - return theSentences.size() > 1; -} - -/*static*/ void SUIT_SentenceMatcher::makeFuzzyWords(const QStringList& theWords, QStringList& theFuzzyWords) -{ - theFuzzyWords.clear(); - for (const QString& word : theWords) { - QString fuzzyWord; - for (int i = 0; i < word.size(); i++) { - fuzzyWord += word[i]; - fuzzyWord += "\\w*"; - } - theFuzzyWords.push_back(fuzzyWord); - } -} - -/*static*/ int SUIT_SentenceMatcher::matchWithSentenceIgnoreEndings(const QString& theInputString, const QStringList& theSentence, bool theCaseSensitive) -{ - const QRegExp regExp("^" + theSentence.join("\\w*\\W+"), theCaseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive); - regExp.indexIn(theInputString); - const int matchMetrics = regExp.matchedLength(); - return matchMetrics > 0 ? matchMetrics : 0; -} - -/*static*/ int SUIT_SentenceMatcher::matchWithSentencesIgnoreEndings(const QString& theInputString, const QList& theSentences, bool theCaseSensitive) -{ - int res = 0; - for (const QStringList& sentence : theSentences) { - const int matchMetrics = SUIT_SentenceMatcher::matchWithSentenceIgnoreEndings(theInputString, sentence, theCaseSensitive); - if (matchMetrics > res) { - res = matchMetrics; - if (res == theInputString.length()) - return res; - } - } - return res; -} - -/*static*/ int SUIT_SentenceMatcher::matchAtLeastOneWord(const QString& theInputString, const QStringList& theWords, bool theCaseSensitive) -{ - int res = 0; - for (const QString& word : theWords) { - const auto regExp = QRegExp(word, theCaseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive); - regExp.indexIn(theInputString); - const int matchMetrics = regExp.matchedLength(); - // The same input word can be counted multiple times. Nobody cares. - if (matchMetrics > 0) - res += matchMetrics; - } - return res; -} - -/*static*/ int SUIT_SentenceMatcher::match( - const QString& theInputString, - const QStringList& theSentence, - bool theCaseSensitive -) { - int res = SUIT_SentenceMatcher::matchWithSentenceIgnoreEndings(theInputString, theSentence, theCaseSensitive); - if (res == theInputString.length()) - return res; - - const int matchMetrics = SUIT_SentenceMatcher::matchAtLeastOneWord(theInputString, theSentence, theCaseSensitive); - if (matchMetrics > res) - res = matchMetrics; - - return res; -} - -/*static*/ int SUIT_SentenceMatcher::match( - const QString& theInputString, - const QList& theSentences, - bool theCaseSensitive -) { - int res = SUIT_SentenceMatcher::matchWithSentencesIgnoreEndings(theInputString, theSentences, theCaseSensitive); - if (res == theInputString.length()) - return res; - - if (theSentences.size() > 0) { - const int matchMetrics = SUIT_SentenceMatcher::matchAtLeastOneWord(theInputString, theSentences[0], theCaseSensitive); - if (matchMetrics > res) - res = matchMetrics; - } - - return res; -} - - -SUIT_ActionSearcher::AssetsAndSearchData::AssetsAndSearchData(std::shared_ptr theAssets, double theMatchMetrics) +SUIT_ActionSearcher::AssetsAndSearchData::AssetsAndSearchData(std::shared_ptr theAssets, double theMatchMetrics) : myAssets(theAssets), myMatchMetrics(theMatchMetrics) { if (theMatchMetrics < 0) { @@ -2493,17 +2935,45 @@ QString SUIT_ActionSearcher::AssetsAndSearchData::toString() const return QString(doc.toJson(QJsonDocument::Indented)); } +/*static*/ double SUIT_ActionSearcher::matchKeySequenceString(const QString& theQuery, const QString& theKeySequence) +{ + static const QRegExp spaceRegEx("\\s"); + + if (theKeySequence.isEmpty()) + return std::numeric_limits::infinity(); + + QString queryCleaned = theQuery.simplified().remove(spaceRegEx);; + if (queryCleaned.isEmpty()) + return std::numeric_limits::infinity(); + + if (queryCleaned.contains(theKeySequence, Qt::CaseInsensitive)) + return queryCleaned.length() - theKeySequence.length(); + else if (theKeySequence.contains(queryCleaned, Qt::CaseInsensitive)) + return theKeySequence.length() - queryCleaned.length(); + + return std::numeric_limits::infinity(); +} + SUIT_ActionSearcher::SUIT_ActionSearcher() { myIncludedModuleIDs = { SUIT_ShortcutMgr::ROOT_MODULE_ID }; myIncludeDisabledActions = false; myFieldsToMatch = { SUIT_ActionSearcher::MatchField::Name, SUIT_ActionSearcher::MatchField::ToolTip }; - myMatcher.setCaseSensitive(false); - myMatcher.setUseExactWordOrder(false); - myMatcher.setUseFuzzyWords(true); + myMatcher = new ::SUIT_tools::SUIT_SentenceMatcher(); + myMatcher->setCaseSensitive(false); + myMatcher->setUseExactWordOrder(false); + myMatcher->setUseFuzzyWords(true); + myKeySequenceGetter = [] (const QString& theModuleID, const QString& theInModuleActionID) { + return SUIT_ShortcutMgr::get()->getKeySequence(theModuleID, theInModuleActionID).toString(); + }; } -bool SUIT_ActionSearcher::setIncludedModuleIDs(std::set theIncludedModuleIDs) +SUIT_ActionSearcher::~SUIT_ActionSearcher() +{ + delete myMatcher; +} + +bool SUIT_ActionSearcher::setIncludedModuleIDs(std::set theIncludedModuleIDs, bool doNotUpdateResults) { ShCutDbg("SUIT_ActionSearcher::setIncludedModuleIDs"); @@ -2512,6 +2982,9 @@ bool SUIT_ActionSearcher::setIncludedModuleIDs(std::set theIncludedModu myIncludedModuleIDs = theIncludedModuleIDs; + if (doNotUpdateResults) + return false; + bool res = false; // Erase search results from excluded modules. Erase IDs of modules, which are already in search results, from theIncludedModuleIDs. for (auto itFound = mySearchResults.begin(); itFound != mySearchResults.end(); ) { @@ -2527,29 +3000,32 @@ bool SUIT_ActionSearcher::setIncludedModuleIDs(std::set theIncludedModu } // Filter assets of added modules. - const auto& allAssets = SUIT_ShortcutMgr::get()->getActionAssets(); + const std::function)> filterItem = [this, &res] (std::shared_ptr theItemAssets) { + if (!theItemAssets->isAction()) + return; + + const double matchMetrics = matchAction(*theItemAssets); + if (matchMetrics < std::numeric_limits::infinity()) { + mySearchResults[theItemAssets->myModuleID][theItemAssets->myInModuleID] = SUIT_ActionSearcher::AssetsAndSearchData(theItemAssets, matchMetrics); + res = true; + } + }; + + const auto& allAssets = SUIT_ShortcutMgr::get()->getModuleAssets(); for (const auto& moduleIDAndAssets : allAssets) { const QString& moduleID = moduleIDAndAssets.first; - const auto& actionIDsAndAssets = moduleIDAndAssets.second; if (theIncludedModuleIDs.find(moduleID) == theIncludedModuleIDs.end()) continue; - for (const auto& actionIDAndAssets : actionIDsAndAssets) { - const QString& inModuleActionID = actionIDAndAssets.first; - const double matchMetrics = matchAction(moduleID, inModuleActionID, actionIDAndAssets.second); - if (matchMetrics < std::numeric_limits::infinity()) { - mySearchResults[moduleID][inModuleActionID] = SUIT_ActionSearcher::AssetsAndSearchData(actionIDAndAssets.second, matchMetrics); - res = true; - } - } + const auto& moduleAssets = moduleIDAndAssets.second; + moduleAssets->forEachDescendant(filterItem); } ShCutDbg() && ShCutDbg(toString()); - return res; } -bool SUIT_ActionSearcher::includeDisabledActions(bool theOn) +bool SUIT_ActionSearcher::includeDisabledActions(bool theOn, bool doNotUpdateResults) { ShCutDbg("SUIT_ActionSearcher::includeDisabledActions"); @@ -2558,6 +3034,9 @@ bool SUIT_ActionSearcher::includeDisabledActions(bool theOn) myIncludeDisabledActions = theOn; + if (doNotUpdateResults) + return false; + bool res; if (myIncludeDisabledActions) res = extendResults(); @@ -2568,7 +3047,7 @@ bool SUIT_ActionSearcher::includeDisabledActions(bool theOn) return res; } -bool SUIT_ActionSearcher::setFieldsToMatch(const std::set& theFields) +bool SUIT_ActionSearcher::setFieldsToMatch(const std::set& theFields, bool doNotUpdateResults) { if (myFieldsToMatch == theFields) return false; @@ -2579,24 +3058,22 @@ bool SUIT_ActionSearcher::setFieldsToMatch(const std::set& theSetA, const std::set& theSetB) { + for (const auto& valA : theSetA) { + if (theSetB.find(valA) == theSetB.end()) + return false; } - } + return true; + }; - bool extends = true; - for (const SUIT_ActionSearcher::MatchField field : myFieldsToMatch) { - if (theFields.find(field) == theFields.end()) { - extends = false; - break; - } - } + const bool narrows = isASubsetOfB(theFields, myFieldsToMatch); + const bool extends = isASubsetOfB(myFieldsToMatch, theFields); myFieldsToMatch = theFields; + if (doNotUpdateResults) + return false; + bool res; if (narrows) res = filterResults().first; @@ -2609,12 +3086,31 @@ bool SUIT_ActionSearcher::setFieldsToMatch(const std::set SUIT_ActionSearcher::setKeySequenceGetter(const std::function& theKeySequenceGetter, bool doNotUpdateResults) +{ + if (theKeySequenceGetter) + myKeySequenceGetter = theKeySequenceGetter; + else { + myKeySequenceGetter = [] (const QString& theModuleID, const QString& theInModuleActionID) { + return SUIT_ShortcutMgr::get()->getKeySequence(theModuleID, theInModuleActionID).toString(); + }; + } + + if (doNotUpdateResults) + return std::pair(false, false); + + return filter(); +} + +bool SUIT_ActionSearcher::setCaseSensitive(bool theOn, bool doNotUpdateResults) { - if (myMatcher.isCaseSensitive() == theOn) + if (myMatcher->isCaseSensitive() == theOn) return false; - myMatcher.setCaseSensitive(theOn); + myMatcher->setCaseSensitive(theOn); + + if (doNotUpdateResults) + return false; bool res; if (theOn) @@ -2630,15 +3126,21 @@ bool SUIT_ActionSearcher::setQuery(const QString& theQuery) { ShCutDbg("SUIT_ActionSearcher::setQuery"); - if (theQuery.simplified() == myMatcher.getQuery().simplified()) + if (theQuery.simplified() == myMatcher->getQuery().simplified()) return false; - myMatcher.setQuery(theQuery); + myMatcher->setQuery(theQuery); bool res = filter().first; ShCutDbg() && ShCutDbg(toString()); return res; } +const QString& SUIT_ActionSearcher::getQuery() const +{ + return myMatcher->getQuery(); +} + + const std::map>& SUIT_ActionSearcher::getSearchResults() const { return mySearchResults; @@ -2647,19 +3149,20 @@ const std::map SUIT_ActionSearcher::filter() { ShCutDbg("SUIT_ActionSearcher::filter()"); - auto res = std::pair(false, false); - for (const auto& moduleIDAndAssets : SUIT_ShortcutMgr::get()->getActionAssets()) { + for (const auto& moduleIDAndAssets : SUIT_ShortcutMgr::get()->getModuleAssets()) { const auto& moduleID = moduleIDAndAssets.first; if (myIncludedModuleIDs.find(moduleID) == myIncludedModuleIDs.end()) continue; - const auto& actionIDsAndAssets = moduleIDAndAssets.second; - auto itFoundModuleIDAndAssets = mySearchResults.find(moduleID); - for (const auto& actionIDAndAssets : actionIDsAndAssets) { - const QString& inModuleActionID = actionIDAndAssets.first; + const std::function)> filterItem = [this, &res, &itFoundModuleIDAndAssets] (std::shared_ptr theItemAssets) { + if (!theItemAssets->isAction()) + return; + + const QString& moduleID = theItemAssets->myModuleID; + const QString& inModuleActionID = theItemAssets->myInModuleID; if (itFoundModuleIDAndAssets != mySearchResults.end()) { auto& foundActionIDsAndAssets = itFoundModuleIDAndAssets->second; @@ -2667,7 +3170,7 @@ std::pair SUIT_ActionSearcher::filter() if (itFoundActionIDAndAssets != foundActionIDsAndAssets.end()) { // Action is already in search results. SUIT_ActionSearcher::AssetsAndSearchData& aAndD = itFoundActionIDAndAssets->second; - const double matchMetrics = matchAction(moduleID, inModuleActionID, aAndD.myAssets); + const double matchMetrics = matchAction(*(aAndD.myAssets)); if (matchMetrics < std::numeric_limits::infinity()) { if (matchMetrics != aAndD.matchMetrics()) { aAndD.setMatchMetrics(matchMetrics); @@ -2678,19 +3181,22 @@ std::pair SUIT_ActionSearcher::filter() foundActionIDsAndAssets.erase(itFoundActionIDAndAssets); res.first = true; } - continue; + return; } } - const double matchMetrics = matchAction(moduleID, inModuleActionID, actionIDAndAssets.second); + const double matchMetrics = matchAction(*theItemAssets); if (matchMetrics < std::numeric_limits::infinity()) { if (itFoundModuleIDAndAssets == mySearchResults.end()) itFoundModuleIDAndAssets = mySearchResults.emplace(moduleID, std::map()).first; - itFoundModuleIDAndAssets->second.emplace(inModuleActionID, SUIT_ActionSearcher::AssetsAndSearchData(actionIDAndAssets.second, matchMetrics)); + itFoundModuleIDAndAssets->second.emplace(inModuleActionID, SUIT_ActionSearcher::AssetsAndSearchData(theItemAssets, matchMetrics)); res.first = true; } - } + }; + + const auto& moduleAssets = moduleIDAndAssets.second; + moduleAssets->forEachDescendant(filterItem); } return res; @@ -2706,7 +3212,7 @@ std::pair SUIT_ActionSearcher::filterResults() for (auto itActionIDAndAssets = actionIDsAndAssets.begin(); itActionIDAndAssets != actionIDsAndAssets.end(); ) { const QString& inModuleActionID = itActionIDAndAssets->first; SUIT_ActionSearcher::AssetsAndSearchData& assetsAndSearchData = itActionIDAndAssets->second; - const double matchMetrics = matchAction(moduleID, inModuleActionID, assetsAndSearchData.myAssets); + const double matchMetrics = matchAction(*(assetsAndSearchData.myAssets)); if (matchMetrics == std::numeric_limits::infinity()) { itActionIDAndAssets = actionIDsAndAssets.erase(itActionIDAndAssets); res.first = true; @@ -2732,49 +3238,53 @@ std::pair SUIT_ActionSearcher::filterResults() bool SUIT_ActionSearcher::extendResults() { ShCutDbg("SUIT_ActionSearcher::extendResults()"); - bool res = false; - for (const auto& moduleIDAndAssets : SUIT_ShortcutMgr::get()->getActionAssets()) { + + for (const auto& moduleIDAndAssets : SUIT_ShortcutMgr::get()->getModuleAssets()) { const auto& moduleID = moduleIDAndAssets.first; if (myIncludedModuleIDs.find(moduleID) == myIncludedModuleIDs.end()) continue; - const auto& actionIDsAndAssets = moduleIDAndAssets.second; - auto itFoundModuleIDAndAssets = mySearchResults.find(moduleID); - for (const auto& actionIDAndAssets : actionIDsAndAssets) { - const QString& inModuleActionID = actionIDAndAssets.first; + const std::function)> filterItem = [this, &res, &itFoundModuleIDAndAssets] (std::shared_ptr theItemAssets) { + if (!theItemAssets->isAction()) + return; + + const QString& moduleID = theItemAssets->myModuleID; + const QString& inModuleActionID = theItemAssets->myInModuleID; if (itFoundModuleIDAndAssets != mySearchResults.end()) { const auto& foundActionIDsAndAssets = itFoundModuleIDAndAssets->second; if (foundActionIDsAndAssets.find(inModuleActionID) != foundActionIDsAndAssets.end()) - continue; // Action is already in search results. + return; // Action is already in search results. } - ShCutDbg() && ShCutDbg("SUIT_ActionSearcher::extendResults(): " + moduleID + "/" + inModuleActionID + "." ); - const double matchMetrics = matchAction(moduleID, inModuleActionID, actionIDAndAssets.second); + ShCutDbg() && ShCutDbg("SUIT_ActionSearcher::extendResults(): " + moduleID + TOKEN_SEPARATOR + inModuleActionID + "." ); + const double matchMetrics = matchAction(*theItemAssets); if (matchMetrics < std::numeric_limits::infinity()) { ShCutDbg("SUIT_ActionSearcher::extendResults(): match, metrics = " + QString::fromStdString(std::to_string(matchMetrics))); if (itFoundModuleIDAndAssets == mySearchResults.end()) itFoundModuleIDAndAssets = mySearchResults.emplace(moduleID, std::map()).first; - itFoundModuleIDAndAssets->second.emplace(inModuleActionID, SUIT_ActionSearcher::AssetsAndSearchData(actionIDAndAssets.second, matchMetrics)); + itFoundModuleIDAndAssets->second.emplace(inModuleActionID, SUIT_ActionSearcher::AssetsAndSearchData(theItemAssets, matchMetrics)); res = true; } - } + }; + + const auto& moduleAssets = moduleIDAndAssets.second; + moduleAssets->forEachDescendant(filterItem); } + return res; } -double SUIT_ActionSearcher::matchAction(const QString& theModuleID, const QString& theInModuleActionID, std::shared_ptr theAssets) +double SUIT_ActionSearcher::matchAction(const SUIT_ShortcutItemAssets& theAssets) { - if (!theAssets) { - ShCutDbg("WARNING: SUIT_ActionSearcher::matchAction: theAssets is nullptr."); + if (!theAssets.isAction()) return std::numeric_limits::infinity(); - } if (!myIncludeDisabledActions) { - const auto& actions = SUIT_ShortcutMgr::get()->getActions(theModuleID, theInModuleActionID); + const auto& actions = SUIT_ShortcutMgr::get()->getActions(theAssets.myModuleID, theAssets.myInModuleID); const bool actionEnabled = std::find_if(actions.begin(), actions.end(), [](const QAction* const theAction){ return theAction->isEnabled(); } ) != actions.end(); if (!actionEnabled) return std::numeric_limits::infinity(); @@ -2782,29 +3292,47 @@ double SUIT_ActionSearcher::matchAction(const QString& theModuleID, const QStrin double res = std::numeric_limits::infinity(); - for (const auto& langAndLDA : theAssets->myLangDependentAssets) { + std::set langs = std::set({DEFAULT_LANG, SUIT_ShortcutMgr::currentLang()}); + for (const auto& langAndLDA : theAssets.myLangDependentAssets) { if (myFieldsToMatch.find(SUIT_ActionSearcher::MatchField::ToolTip) != myFieldsToMatch.end()) { - const double matchMetrics = myMatcher.match(langAndLDA.second.myToolTip); + const double matchMetrics = myMatcher->match(langAndLDA.second.myToolTip); if (matchMetrics < res) res = matchMetrics; } if (myFieldsToMatch.find(SUIT_ActionSearcher::MatchField::Name) != myFieldsToMatch.end()) { - const double matchMetrics = myMatcher.match(langAndLDA.second.myName); + const double matchMetrics = myMatcher->match(langAndLDA.second.myName); + if (matchMetrics < res) + res = matchMetrics; + + // The block is not engaged at all, if theAssets does not contain LDA. But in fact, query may match with path prefix. + // Path is matched in current, default and exisiting LDA languages in the next block. + // + // const double matchMetricsPath = myMatcher->match(theAssets.bestPath(langAndLDA.first)); + // if (matchMetricsPath < res) + // res = matchMetricsPath; + } + langs.emplace(langAndLDA.first); + } + + // Match path. + if (myFieldsToMatch.find(SUIT_ActionSearcher::MatchField::Name) != myFieldsToMatch.end()) { + for (const QString& lang : langs) { + const double matchMetrics = myMatcher->match(theAssets.bestPath(lang)); if (matchMetrics < res) res = matchMetrics; } } if (myFieldsToMatch.find(SUIT_ActionSearcher::MatchField::ID) != myFieldsToMatch.end()) { - const double matchMetrics = myMatcher.match(SUIT_ShortcutMgr::makeActionID(theModuleID, theInModuleActionID)); + const double matchMetrics = myMatcher->match(SUIT_ShortcutMgr::makeActionID(theAssets.myModuleID, theAssets.myInModuleID)); if (matchMetrics < res) res = matchMetrics; } if (myFieldsToMatch.find(SUIT_ActionSearcher::MatchField::KeySequence) != myFieldsToMatch.end()) { - const QString keySequence = SUIT_ShortcutMgr::get()->getKeySequence(theModuleID, theInModuleActionID).toString(); - const double matchMetrics = myMatcher.match(keySequence); + const QString keySequence = myKeySequenceGetter(theAssets.myModuleID, theAssets.myInModuleID); + const double matchMetrics = SUIT_ActionSearcher::matchKeySequenceString(myMatcher->getQuery(), keySequence); if (matchMetrics < res) res = matchMetrics; } @@ -2817,7 +3345,7 @@ QString SUIT_ActionSearcher::toString() const QString res; res += "myMatcher: {\n"; - res += myMatcher.toString(); + res += myMatcher->toString(); res += "};\n"; res += "myIncludedModuleIDs: "; diff --git a/src/SUIT/SUIT_ShortcutMgr.h b/src/SUIT/SUIT_ShortcutMgr.h index b0d813931..228de4067 100644 --- a/src/SUIT/SUIT_ShortcutMgr.h +++ b/src/SUIT/SUIT_ShortcutMgr.h @@ -149,9 +149,20 @@ private: }; -/*! \brief GUI-related assets. */ -struct SUIT_EXPORT SUIT_ActionAssets +class SUIT_ShortcutItemAssets; + + +/*! \brief Base class for GUI-related assets of module, action or folder. Used by Shortcut Manager, Find Action Dialog, etc. */ +class SUIT_EXPORT SUIT_ShortcutAssets : public std::enable_shared_from_this { +public: + enum class Type + { + Module, + Item // Folder, action or folder-action. + }; + + struct LangDependentAssets { static const QString PROP_ID_NAME; @@ -164,25 +175,221 @@ struct SUIT_EXPORT SUIT_ActionAssets QString myToolTip; }; - static const QString STRUCT_ID; + static const QString PROP_ID_LANG_DEPENDENT_ASSETS; static const QString PROP_ID_ICON_PATH; + static const QString PROP_ID_CHILDREN; + +protected: + SUIT_ShortcutAssets(const QString& theModuleID); + +public: + virtual ~SUIT_ShortcutAssets() = 0; + + const std::map>& children() const; + + /*! + \param theRelativeID If empty, nullptr is returned. + \returns Descdendant item (if exist) with inModuleID = myInModuleID/theRelativeID. + Module assets effectively have empty myInModuleID. */ + std::shared_ptr findDescendantItem(const QString& theRelativeID) const; + + /*! + \param theRelativeID If empty, nullptr is returned. + \param theIsAction If true and the descendant is missing, makes the created item action. + \returns Descdendant item with inModuleID = myInModuleID/theRelativeID. + If the descendant item does not exist, creates the item and its missing ancestors. All missing ancestors are created as not actions. + Module assets effectively have empty myInModuleID. */ + std::shared_ptr descendantItem(const QString& theRelativeID, bool theIsAction = true); + + virtual int depth() const = 0; + virtual SUIT_ShortcutAssets::Type type() const = 0; + +private: + /*! \brief Parses everything, except children. + \param theLangs If empty, LangDependentAssets in all available languages are parsed. */ + bool fromJSONOwnProps(const QJsonObject& theJsonObject, const std::set& theLangs = {}); + +public: + /*! + \param theLangs If empty, LangDependentAssets in all available languages are parsed. + \returns true, if any property is parsed. */ + bool fromJSON(const QJsonObject& theJsonObject, bool theParseDescendants = true, const std::set& theLangs = {}); + + /*! \brief Parses only the branch of descdendants, which leads to the item with theRelativeID. + \param theRelativeID If empty, no descendants are added/updated. + \param theLangs If empty, LangDependentAssets in all available languages are parsed. + \returns true, if any property is parsed. */ + bool fromJSON(const QJsonObject& theJsonObject, const QString& theRelativeID, const std::set& theLangs = {}); - bool fromJSON(const QJsonObject& theJsonObject); void toJSON(QJsonObject& oJsonObject) const; + + /*! \param theOverride If true, values of theOther override conflicting values of this. */ + virtual void merge(const SUIT_ShortcutAssets& theOther, bool theOverride); + + /*! \param theOverride If true, values of theOther override conflicting values of this. */ + virtual void merge(SUIT_ShortcutAssets&& theOther, bool theOverride); + +private: + /*! \brief Parses properties of SUIT_ShortcutAssets subclasses. + \returns true, if any property is parsed. */ + virtual bool fromJSONOtherProps(const QJsonObject& theJsonObject) { return false; }; + + virtual void toJSONVirtual(QJsonObject& oJsonObject) const {}; + +public: + void loadIcon(bool theReload = false); + + /*! \brief Iterates all descendants. *this is not iterated. */ + void forEachDescendant(const std::function& theFunc) const; + + /*! \brief Iterates all descendants. *this is not iterated. */ + void forEachDescendant(const std::function& theFunc) const; + + /*! \brief Iterates all descendants. *this is not iterated. */ + void forEachDescendant(const std::function)>& theFunc) const; + + /*! \brief Iterates all descendants. *this is not iterated. */ + void forEachDescendant(const std::function)>& theFunc) const; + QString toString() const; + virtual QString description() const = 0; QStringList getLangs() const; void clearAllLangsExcept(const QString& theLang); - /*! \param theOverride If true, values of theOther override conflicting values of this. */ - void merge(const SUIT_ActionAssets& theOther, bool theOverride); + /*! + \param theLang If empty, current language is requested. + \returns Requested assets or assets in EN, if requested language is absent. */ + const LangDependentAssets* bestLangDependentAssets(QString theLang = QString()) const; + + virtual const QString& bestName(const QString& theLang = QString()) const = 0; + + /*! + \param theLang If empty, current language is requested. + \returns Requested tool tip or tool tip in EN, if requested language is absent. If EN is absent - empty string. */ + virtual const QString& bestToolTip(const QString& theLang = QString()) const; + +public: + const QString myModuleID; std::map myLangDependentAssets; QString myIconPath; - /*! Is not serialized. */ + /*! Not serialized. */ QIcon myIcon; + +private: + // { IDLastToken, assets }. + std::map> myChildren; +}; + + +/*! \brief GUI-related module assets.*/ +class SUIT_EXPORT SUIT_ShortcutModuleAssets : public SUIT_ShortcutAssets +{ +private: + SUIT_ShortcutModuleAssets(const QString& theModuleID); + SUIT_ShortcutModuleAssets(const SUIT_ShortcutModuleAssets&) = delete; + SUIT_ShortcutModuleAssets& operator= (const SUIT_ShortcutModuleAssets&) = delete; + +public: + static std::shared_ptr create(const QString& theModuleID); + ~SUIT_ShortcutModuleAssets() = default; + + int depth() const { return 0; }; + SUIT_ShortcutAssets::Type type() const { return SUIT_ShortcutAssets::Type::Module; }; + + /*! + \param theLang If empty, current language is requested. + \returns Requested name or name in EN, if requested language is absent. If EN is absent - moduleID. */ + const QString& bestName(const QString& theLang = QString()) const; + + QString description() const; +}; + + +/*! \brief May represent not just an action, but also a folder within item tree of a module. +May also represent action-folder: an action with nested actions. +Each action inModuleID is unique within a tree of assets. */ +class SUIT_EXPORT SUIT_ShortcutItemAssets : public SUIT_ShortcutAssets +{ + friend class SUIT_ShortcutAssets; + +public: + static void loadDefaultIcons(); + static const QString PROP_ID_IS_ACTION; // Absense of the key in JSON means myIsAction == true. + +private: + static QIcon DEFAUT_ICON_ACTION; + static QIcon DEFAUT_ICON_FOLDER; + static QIcon DEFAUT_ICON_FOLDER_ACTION; + + /*! \brief Creates root item of module. + \param theModule must not be nullptr. + \param theIDLastToken is also a inModuleID. + */ + SUIT_ShortcutItemAssets(std::shared_ptr theModule, const QString& theIDLastToken, bool theIsAction = true); + + /*! \brief Creates nested item within item tree of module. + \param theParent must not be nullptr. */ + SUIT_ShortcutItemAssets(std::shared_ptr theParentItem, const QString& theIDLastToken, bool theIsAction = true); + SUIT_ShortcutItemAssets(const SUIT_ShortcutItemAssets&) = delete; + SUIT_ShortcutItemAssets& operator= (const SUIT_ShortcutItemAssets&) = delete; + static std::shared_ptr create(std::shared_ptr theParentItemOrModule, const QString& theIDLastToken, bool theIsAction = true); + + public: + ~SUIT_ShortcutItemAssets() = default; + + int depth() const; + SUIT_ShortcutAssets::Type type() const { return SUIT_ShortcutAssets::Type::Item; }; + + /*! \param theOverride If true, values of theOther override conflicting values of this. */ + void merge(const SUIT_ShortcutItemAssets& theOther, bool theOverride); + + /*! \param theOverride If true, values of theOther override conflicting values of this. */ + virtual void merge(SUIT_ShortcutItemAssets&& theOther, bool theOverride); + +private: + bool fromJSONOtherProps(const QJsonObject& theJsonObject); + void toJSONVirtual(QJsonObject& oJsonObject) const; + +public: + /*! + \param theLang If empty, current language is requested. + \returns Requested name or name in EN, if requested language is absent. If EN is absent - inModuleID. */ + const QString& bestName(const QString& theLang = QString()) const; + + /*! \brief Composed as /....../bestName>. Module name is not included. */ + const QString& bestPath(const QString theLang = QString()) const; + + QString description() const; + + bool isAction() const; + bool isFolder() const; + std::shared_ptr parent() const; + std::shared_ptr module() const; + + /*! \brief Even if SUIT_ShortcutItemAssets is not action, its ID is composed in the same way. */ + QString actionID() const; + + /*! \returns myIcon, if !myIcon.isNull(). Otherwise returns appropriate default icon. */ + const QIcon& icon() const; + +private: + std::weak_ptr myParent; + + bool myIsAction; + +public: + const QString myIDLastToken; + const QString myInModuleID; // Composed as /....../myIDLastToken>. Synonym for inModuleActionID. + +private: + const int myDepth; + + /** {lang, bestPath}[] */ + mutable std::map myBestPaths; }; @@ -190,58 +397,82 @@ struct SUIT_EXPORT SUIT_ActionAssets \class SUIT_ShortcutMgr \brief Handles action shortcut customization. - IDENTIFIED ACTIONS/SHORTCUTS - - Register actions under action IDs. Set shortcuts, which are [action ID]<->[key sequence] mappings. - Every time an action is registered or a shorcut is set, if there are an action and a shortcut, - which are mapped to the same action ID, the action is bound to the key sequence of the shortcut. - Action IDs are also used to (de)serialize shortcut settings. - Several QActions may be registered under the same ID. - - Most of actions are intercepted on creation in SUIT_ShortcutMgr:eventFilter(QObject* theObject, QEvent* theEvent). - If an intercepted action is instance of QtxAction, it is registered automatically. - Since non-QtxActions have no member ID(), SUIT_ShortcutMgr is unable to register them automatically - in SUIT_ShortcutMgr::eventFilter(). Thus, every non-QtxAction should be - passed to SUIT_ShortcutMgr::registerAction(const QString& theActionID, QAction* theAction). - - Action ID is application-unique must be composed as /. - If an action belongs to a desktop or is available even if no module is active (e.g. 'Save As'), - use empty string as . Let's call such actions as root actions. - - There is a need to keep multiple actions, which do the same from user' perspective, - bound to the same key sequence. E.g. 'Front view'. Let's call such set of actions as meta-action. - Actions of a meta-action may belong to different modules, and/or there may be several actions - of the same meta-action in the same module. of all members of a meta-action - must be the same and start with "#". - Meta-action is root action when it comes to checking for conflicts. - Shortcuts of meta-actions are (de)serialized to the same section of preference files as root shortcuts. - - can contain several "/". Go to \ref isInModuleActionIDValid(const QString&) for details. - You can refer to multiple actions, whose starts with the prefix. - - Only one module can be active at instance. So a key sequence must be unique within a joined temporary table of - root and active module shortcuts. An action is allowed to be bound with only key sequence. - - ANONYMOUS ACTIONS/SHORTCUTS - - Actions without action IDs or with invalid ones are called anonymous actions. - All anonymous actions with non-empty shortcut key sequences are registered by SUIT_ShortcutMgr. - If a shortcut for an anonymous action clashes with a shortcut for an action with defined ID (identified action/shortcut), - the shortcut for the anonymous action is disabled, but [the anonymous action, the hard-coded key sequence] pair - remains within the SUIT_ShortcutMgr. If user redefines key sequences for identified actions, - and the clash is gone, SUIT_ShortcutMgr enables back the shortcut for the anonymous action. - - WARNING! - Avoid assigning shortcuts to instances of QAction and all its descendants directly. - (1) Key sequence being bound directly to any registered/intercepted action with valid ID, - if the key sequence does not conflict with shortcuts kept by SUIT_ShortcutMgr, - is added to the manager and appears in user preference file. If it does conflict, - it is reassigned with a key sequence from preference files or - disabled and added to user preference files (if the files have no shortcut for the action). - (2) It is not possible to reassign key sequences for anonymous actions using the Shortcut Editor GUI. - It is not possible to always warn user, if a key sequence, he assigns to an identified action, - disables an anonymous shortcut, because SUIT_ShortcutMgr has no data about anonymous actions until they appear in runtime. - To prevent the user from relying on such warnings, they are completely disabled. + The manager is designed to detect shortcut conflicts even for actions, which are not constructed yet. + To do this, data about action shortcuts should be available for the manager prior to construction of actions. + + SHORTCUT PREFERENCES + The data about shortcuts is stored in preference files (see SUIT_ShortcutMgr::setShortcutsFromPreferences()) as maps [action ID]->[key sequence]. + It means, actions should have valid IDs (see SUIT_ShortcutMgr::isActionIDValid(const QString&)). + Let's call such action identified, and actions with invalid IDs anonymous. + Action IDs are language-independent. + + After an action is constructed (even if it is anonymous), it must be registered by the manager. + If the action is instance of QtxAction, the manager registers it automatically (see SUIT_ShortcutMgr:eventFilter(QObject* theObject, QEvent* theEvent)). + Otherwise SUIT_ShortcutMgr::registerAction(const QString& theActionID, QAction* theAction) must be called. + + Upon registration of an action, the manager checks, if a key sequence, assigned to the action, clashes with other shortcuts. + If it does, and the action is anonymous - empty keysequnce is set to the action. + If the action is identified - a keysequence from preferences is set to the action, + even if incoming key sequence does not clash with other shortcuts. Absence of an action ID in preference files means + default key sequence is empty. + + If shortcuts are changed (via SUIT_ShortcutMgr::mergeShortcutContainer(const SUIT_ShortcutContainer&, bool, bool, bool)), + the manager serizalizes the changes into user preference file and sets new key sequences to according registered actions. + + ACTION ASSETS + Users are not aware about action IDs, since GUI normally shows user-friendly data: action names, tooltips and icons. Let's call the data assets. + Assets of an action should be available for GUI for shortcut presenting/editing (let's call the piece of GUI Shortcut Editor) even before + the action is constructed. The assets should be provided is asset files (see SUIT_ShortcutMgr::setAssetsFromResources(QString)). + + CONFLICT DETECTION + IDENTIFIED ACTIONS/SHORTCUTS + Let's call GUI module root module. + Only one module, besides the root module, can be active at instance. So a key sequence must be unique within a joined temporary table of + root and active module shortcuts. An action is allowed to be bound with only key sequence. Multiple actions may be registered under the same ID. + + Action ID is application-unique, language-independent and must be composed as /. + If an action belongs to root module (e.g. 'Save As'), use empty string as . + Let's call actions with empty module ID root actions. + + can be composed of several tokens, delimited by "/". See SUIT_ShortcutMgr::isInModuleActionIDValid(const QString&) for details. + Shortcut Editor considers as "path": + without the last token is inModuleID of parent folder or action-folder (see SUIT_ShortcutMgr::setAssetsFromResources(QString)). + + META-ACTIONS + There is a need to keep actions from different modules, which do the same from user' perspective, + bound to the same key sequence. E.g. 'Front view' or 'Undo'. Let's call such set of actions meta-action. + of all members of a meta-action must be the same and the last token of the ID must start with "#". + Meta-action is root action, when it comes to checking for conflicts. + Shortcuts of meta-actions are (de)serialized to the same section of preference files as root shortcuts. + Assets of meta-actions should be placed in asset files of root (GUI) module. + + ANONYMOUS ACTIONS/SHORTCUTS + Actions without action IDs or with invalid ones are called anonymous actions. + All anonymous actions with non-empty shortcut key sequences are registered by SUIT_ShortcutMgr. + If a shortcut for an anonymous action clashes with a shortcut for an action with defined ID (identified action/shortcut), + the shortcut for the anonymous action is disabled, but [the anonymous action, the hard-coded key sequence] pair + remains within the SUIT_ShortcutMgr. If user redefines key sequences for identified actions, + and the clash is gone, SUIT_ShortcutMgr enables back the shortcut for the anonymous action. + + It is not possible to reassign key sequences for anonymous actions using the Shortcut Editor GUI. + It is not possible to always warn users, if a key sequence, they assigns to an identified action, + disables an anonymous shortcut, because SUIT_ShortcutMgr has no data about anonymous actions until they appear in runtime. + To prevent the user from relying on such warnings, they are completely disabled. + + HOW TO USE + 1) Come up with valid action ID for an action and: + 1A) Pass the ID as an agrument to constructor of QtxAction; or + 1B) Call SUIT_ShortcutMgr::registerAction(const QString& theActionID, QAction* theAction); or + 1C) Construct the action using SUIT_ShortcutMgr::createAction(..). The latest option allows to avoid duplication of action assets in *.ts files. + 2) Add action assets in asset files. + 3) Add action default keysequence to default preference file. + + DEVELOPMENT + There are two macros: SHORTCUT_MGR_DBG and SHORTCUT_MGR_DEVTOOLS. + SHORTCUT_MGR_DBG enables shortcut-related debug output. + SHORTCUT_MGR_DEVTOOLS enables DevTools class. It assists in making anonymous actions identified and composing asset and default preference files. + + More details can be found in the "SUIT_ShortcutMgr. ReadMe.md". */ class SUIT_EXPORT SUIT_ShortcutMgr: public QObject { @@ -273,10 +504,14 @@ public: Empty module ID is valid - it is root module ID. */ static bool isModuleIDValid(const QString& theModuleID); + static bool isInModuleIDTokenValid(const QString& theInModuleIDToken); + + static bool isInModuleIDTokenMeta(const QString& theInModuleIDToken); + /*! \brief Valid in-module action ID may consist of several tokens, separated by "/": /.../. Each must be non-empty and be equal to QString().simplified(). - Empty or "#" in-module action ID is not valid. */ + Token "#" is also not valid, since the character in the beginning of the last token means action is meta-action. */ static bool isInModuleActionIDValid(const QString& theInModuleActionID); /*! \returns true, is theInModuleActionID starts with "#". */ @@ -287,11 +522,17 @@ public: \returns { _ , "" }, if theActionID is invalid. */ static std::pair splitIntoModuleIDAndInModuleID(const QString& theActionID); + /*! \brief Does not check validity. */ + static QStringList splitIntoTokens(const QString& theRelativeID); + + /*! \brief Does not check validity. */ + static QString joinIntoRelativeID(const QStringList& theTokens); + /*! See \ref splitIntoModuleIDAndInModuleID(const QString&). */ static bool isActionIDValid(const QString& theActionID); /*! \brief Creates application-unique action ID. Reverse to splitIntoModuleIDAndInModuleID. - \returns Emppty string, if either theModuleID or theInModuleActionID is invalid*/ + \returns Empty string, if either theModuleID or theInModuleActionID is invalid*/ static QString makeActionID(const QString& theModuleID, const QString& theInModuleActionID); /*! \brief Sets all shortcuts from preferences to theContainer. Incoming shortcuts override existing ones. @@ -301,12 +542,14 @@ public: \param theDefaultOnly If true, user preferences are ignored and only default preferences are used. */ static void fillContainerFromPreferences(SUIT_ShortcutContainer& theContainer, bool theDefaultOnly); - /*! \brief Checks the resource manager directly. - \returns {assetsExist, assets}. */ - static std::pair getActionAssetsFromResources(const QString& theActionID); + /*! \brief Returns item assets as they are in asset files. + Returned module assets is necessary to keep memory ownership of theAction ancestors. The module assets contain only ancestors of theActionID. + \param theLangs If empty, all languages is parsed. */ + static std::pair, std::shared_ptr> + getActionAssetsFromResources(const QString& theActionID, const std::set& theLangs = {}); /*! \returns Language, which is set in resource manager. */ - static QString getLang(); + static QString currentLang(); /*! \brief Add theAction to map of managed actions. */ @@ -362,7 +605,7 @@ public: const SUIT_ShortcutContainer& getShortcutContainer() const; /*! \brief Does not perform validity checks on theModuleID and theInModuleActionID. */ - void mergeShortcutContainer(const SUIT_ShortcutContainer& theContainer, bool theOverride = true, bool theTreatAbsentIncomingAsDisabled = false); + void mergeShortcutContainer(const SUIT_ShortcutContainer& theContainer, bool theOverride = true, bool theTreatAbsentIncomingAsDisabled = false, bool theSaveToPreferences = true); /*! \brief Get a key sequence mapped to the action. */ const QKeySequence& getKeySequence(const QString& theModuleID, const QString& theInModuleActionID) const; @@ -377,24 +620,25 @@ public: if the module is root (theModuleID is empty) - returns all module IDs, otherwise returns ["", theModuleID]. */ std::set getIDsOfInterferingModules(const QString& theModuleID) const; - /*! \returns assets, which describe module's header, not its content. */ - std::shared_ptr getModuleAssets(const QString& theModuleID) const; + std::shared_ptr getModuleAssets(const QString& theModuleID) const; + const std::map>& getModuleAssets() const { return myModuleAssets; } - /*! \returns assets, which describe modules' headers, not their content. */ - std::map> getModuleAssets() const { return myModuleAssets; } - - /*! \brief Retrieves module name, if the asset was loaded using \ref setAssetsFromResources(). If theLang is empty, it is effectively current language. */ + /*! \brief Retrieves module name, if the asset was loaded using \ref setAssetsFromResources(). If theLang is empty, it is current language. */ QString getModuleName(const QString& theModuleID, const QString& theLang = "") const; - std::shared_ptr getActionAssets(const QString& theModuleID, const QString& theInModuleActionID) const; + std::shared_ptr getActionAssets(const QString& theModuleID, const QString& theInModuleActionID, bool theTryToCreateRuntimeAssetsIfAbsent = true) const; - std::shared_ptr getActionAssets(const QString& theActionID) const; + std::shared_ptr getActionAssets(const QString& theActionID, bool theTryToCreateRuntimeAssetsIfAbsent = true) const; - std::map>> getActionAssets() const { return myActionAssets; } + /*! \brief Creates assets using action instance fields, if corresponding action is registered. */ + std::shared_ptr createRuntimeActionAssets(const QString& theModuleID, const QString& theInModuleActionID) const; - /*! \brief Retrieves action name, if the asset was loaded using \ref setAssetsFromResources(). If theLang is empty, it is effectively current language. */ + /*! \brief Retrieves action name, if the asset is myModuleAssets. Name of module is not included. If theLang is empty, it is current language. */ QString getActionName(const QString& theModuleID, const QString& theInModuleActionID, const QString& theLang = "") const; + /*! \brief Creates an action and sets asset data to the action. */ + QtxAction* createAction(QObject* theParent, QObject* theReceiver, const char* theReceiverSlot, const QString& theActionID, const bool theIsToggle = false) const; + private slots: /*! \brief Called when the corresponding action is destroyed. @@ -415,7 +659,7 @@ private: /*! \brief Set shortcuts from preference files. The method is intended to be called before any calls to setShortcut() or mergeShortcutContainer(). Definition of this method assumes, that shortcut settings are serialized as prerefence entries {name=, val=} - in dedicated section for each module, with names of sections being composed as "shortcuts:". + in dedicated section for each module, with names of sections being composed as "shortcuts_vA1.0:". E.g. in case of XML file it may look like this: -
- - - - - - +
+ + + + +
-
- - - - +
+ + + + + +
Empty inModuleActionIDs are ignored. - - nb! For any theQtxAction you wish user be able to assign it to a shortcut, - add theQtxAction.ID() to default resource files (you can map it to no key sequence).*/ + */ void setShortcutsFromPreferences(); /*! \brief Writes shortcuts to preference files. @@ -455,26 +698,58 @@ private: OldKeySequences are ignored. */ static void saveShortcutsToPreferences(const std::map>>& theShortcutsInversed); - /*! Fills myActionAssets from asset files in theLanguage. - \param theLanguage If default, fills assets in current language. - If an asset in requested language is not found, seeks for the asset EN in and then in FR. + /*! Fills myModuleAssets from asset files in theLanguage and EN. + \param theLanguage If empty, fills assets in current language and EN. Asset files must be structured like this: { - ... - actionID : { + moduleID: { + "iconPath": iconPath, "langDependentAssets": { ... lang: { - "name": name, - "tooltip": tooltip + "name": moduleName, + "tooltip": moduleTooltip }, ... }, - "iconPath": iconPath - }, - ... + "children": { + ... + actionA_IDLastToken : { + "iconPath": iconPath, + "langDependentAssets": { + ... + lang: { + "name": actionName, + "tooltip": actionTooltip + }, + ... + }, + "children": { // The action has nested actions. + actionB_IDLastToken: { + ... + } + } + }, + ... + folderC_IDLastToken: { + "isAction": false, // The folder is pure folder. + "iconPath": iconPath, + "langDependentAssets": { + ... + }, + children: { + ... + } + } + ... + } + } } + + The JSON above describes an action-folder with ID "moduleID/actionA_IDLastToken" and a pure folder with ID "moduleID/folderC_IDLastToken". + The action-folder has a nested action with "moduleID/actionA_IDLastToken//actionB_IDLastToken". + Requirements for action' and folder' IDs are the same. */ void setAssetsFromResources(QString theLanguage = QString()); @@ -500,11 +775,11 @@ private: Sets of moduleIDs and inModuleActionIDs may NOT be equal for myActions and myShortcutContainer. */ - /** { moduleID, {inModuleActionID, assets}[] }[] */ - std::map>> myActionAssets; + /** {moduleID, moduleAssets}[]. Structured assets: module assets refer to folders and actions, folders and actions refer to nested ones, etc. */ + mutable std::map> myModuleAssets; - /** {moduleID, assets}[] */ - mutable std::map> myModuleAssets; + /** True, if SUIT_ShortcutMgr::setAssetsFromResources(QString) was called. */ + bool myAssetsLoaded; mutable std::set myActiveModuleIDs; @@ -518,75 +793,9 @@ private: }; -/*! - \class SUIT_SentenceMatcher - \brief Approximate string matcher, treats strings as sentences composed of words. -*/ -class SUIT_EXPORT SUIT_SentenceMatcher -{ -public: - /*! Default config: - Exact word order = false; - Fuzzy words = true; - Case sensitive = false; - Query = ""; // matches nothing. - */ - SUIT_SentenceMatcher(); - - void setUseExactWordOrder(bool theOn); - void setUseFuzzyWords(bool theOn); - void setCaseSensitive(bool theOn); - inline bool isCaseSensitive() const { return myIsCaseSensitive; }; - - /*! \param theQuery should not be regex. */ - void setQuery(QString theQuery); - - inline const QString& getQuery() const { return myQuery; }; - - /*! \returns match metrics. The metrics >= 0. INF means mismatch. - The class is unable to differentiate exact match with some approximate matches! */ - double match(const QString& theInputString) const; - - /** \brief For debug. */ - QString toString() const; - -private: - static bool makePermutatedSentences(const QStringList& theWords, QList& theSentences); - static void makeFuzzyWords(const QStringList& theWords, QStringList& theFuzzyWords); - - /*! \returns number of characters in matched words. The number >= 0. */ - static int matchWithSentenceIgnoreEndings(const QString& theInputString, const QStringList& theSentence, bool theCaseSensitive); - /*! \returns number of characters in matched words. The number >= 0. */ - static int matchWithSentencesIgnoreEndings(const QString& theInputString, const QList& theSentences, bool theCaseSensitive); - - /*! \returns number of characters in matched words. The number >= 0. */ - static int matchAtLeastOneWord(const QString& theInputString, const QStringList& theWords, bool theCaseSensitive); - - /*! \returns number of characters in matched words. The number >= 0. */ - static int match( - const QString& theInputString, - const QStringList& theSentence, - bool theCaseSensitive - ); - - /*! \returns number of characters in matched words. The number >= 0. */ - static int match( - const QString& theInputString, - const QList& theSentences, - bool theCaseSensitive - ); - - bool myUseExactWordOrder; // If false, try to match with sentences, composed of query's words in different orders. - bool myUseFuzzyWords; // Try to match with sentences, composed of query's truncated words. - bool myIsCaseSensitive; - QString myQuery; - - QStringList myWords; // It is also original search sentence. - QList myPermutatedSentences; - - QStringList myFuzzyWords; // Regexes. - QList myFuzzyPermutatedSentences; -}; +namespace SUIT_tools { + class SUIT_SentenceMatcher; +} /*! @@ -598,7 +807,7 @@ class SUIT_EXPORT SUIT_ActionSearcher public: enum MatchField { ID, - Name, + Name, // Also matches with path, composed as /....../. ToolTip, KeySequence }; @@ -606,12 +815,12 @@ public: class AssetsAndSearchData { public: - AssetsAndSearchData(std::shared_ptr theAssets = nullptr, double theMatchMetrics = std::numeric_limits::infinity()); + AssetsAndSearchData(std::shared_ptr theAssets = nullptr, double theMatchMetrics = std::numeric_limits::infinity()); void setMatchMetrics(double theMatchMetrics); double matchMetrics() const { return myMatchMetrics; }; - std::shared_ptr myAssets; + std::shared_ptr myAssets; void toJSON(QJsonObject& oJsonObject) const; QString toString() const; @@ -621,35 +830,50 @@ public: double myMatchMetrics; }; + + static double matchKeySequenceString(const QString& theQuery, const QString& theKeySequence); + /*! Default config: Included modules' IDs = { ROOT_MODULE_ID }; Include disabled actions = false; Fields to match = { Name, Tooltip }; Case sensitive = false; Fuzzy matching = true; - Query = ""; // matches everything. + Query = ""; // matches nothing. */ SUIT_ActionSearcher(); SUIT_ActionSearcher(const SUIT_ActionSearcher&) = delete; SUIT_ActionSearcher& operator=(const SUIT_ActionSearcher&) = delete; - virtual ~SUIT_ActionSearcher() = default; + virtual ~SUIT_ActionSearcher(); - /*! \returns true, if set of results is changed. */ - bool setIncludedModuleIDs(std::set theIncludedModuleIDs); + /*! \returns true, if set of results is changed. + \param doNotUpdateResults Set to true to initialize the instance without unnececessary computations. */ + bool setIncludedModuleIDs(std::set theIncludedModuleIDs, bool doNotUpdateResults = false); - /*! \returns true, if set of results is changed. */ - bool includeDisabledActions(bool theOn); + /*! \returns true, if set of results is changed. + \param doNotUpdateResults Set to true to initialize the instance without unnececessary computations. */ + bool includeDisabledActions(bool theOn, bool doNotUpdateResults = false); inline bool areDisabledActionsIncluded() const {return myIncludeDisabledActions;}; - /*! \returns true, if set of results is changed. */ - bool setFieldsToMatch(const std::set& theFields); + /*! \returns true, if set of results is changed. + \param doNotUpdateResults Set to true to initialize the instance without unnececessary computations. */ + bool setFieldsToMatch(const std::set& theFields, bool doNotUpdateResults = false); - /*! \returns true, if set of results is changed. */ - bool setCaseSensitive(bool theOn); + /*! \returns { true, _ } if set of results is changed; { _ , true } if matching metrics is changed for at least one result. + \param theKeySequenceGetter getKeySequence(theModuleID, theInModuleActionID). If empty, a default getter, retrieving key sequence from ShortcutMgr, is set. + \param doNotUpdateResults Set to true to initialize the instance without unnececessary computations. */ + std::pair setKeySequenceGetter( + const std::function& theKeySequenceGetter = std::function(), + bool doNotUpdateResults = false + ); + + /*! \returns true, if set of results is changed. + \param doNotUpdateResults Set to true to initialize the instance without unnececessary computations. */ + bool setCaseSensitive(bool theOn, bool doNotUpdateResults = false); /*! \returns true, if set of results is changed. */ bool setQuery(const QString& theQuery); - inline const QString& getQuery() const {return myMatcher.getQuery();}; + inline const QString& getQuery() const; const std::map>& getSearchResults() const; @@ -667,7 +891,7 @@ private: \returns True, if set of results is extended. */ bool extendResults(); - double matchAction(const QString& theModuleID, const QString& theInModuleActionID, std::shared_ptr theAssets); + double matchAction(const SUIT_ShortcutItemAssets& theAssets); QString toString() const; @@ -676,7 +900,10 @@ private: bool myIncludeDisabledActions; std::set myFieldsToMatch; - SUIT_SentenceMatcher myMatcher; + ::SUIT_tools::SUIT_SentenceMatcher* myMatcher; + + /* getKeySequence(theModuleID, theInModuleActionID) */ + std::function myKeySequenceGetter; /* { moduleID, {inModuleActionID, assetsAndSearchData}[] }[]. */ std::map> mySearchResults; @@ -687,4 +914,4 @@ private: #pragma warning( default: 4251 ) #endif -#endif +#endif //SUIT_SHORTCUTMGR_H diff --git a/src/SUIT/SUIT_ShortcutTree.cxx b/src/SUIT/SUIT_ShortcutTree.cxx deleted file mode 100644 index 5e7f321f9..000000000 --- a/src/SUIT/SUIT_ShortcutTree.cxx +++ /dev/null @@ -1,880 +0,0 @@ -// Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#include "SUIT_ShortcutTree.h" - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - - -#define COLUMN_SIZE 500 - - -SUIT_KeySequenceEdit::SUIT_KeySequenceEdit(QWidget* parent) -: QFrame(parent) -{ - initialize(); - myKeySequenceLineEdit->installEventFilter(this); -} - -/*! \brief Set a key sequence to edit. */ -void SUIT_KeySequenceEdit::setConfirmedKeySequence(const QKeySequence& theKeySequence) -{ - myConfirmedKeySequenceString = theKeySequence.toString(); - myKeySequenceLineEdit->setText(myConfirmedKeySequenceString); - myPrevKeySequenceString = myConfirmedKeySequenceString; -} - -void SUIT_KeySequenceEdit::setEditedKeySequence(const QKeySequence& theKeySequence) -{ - const QString keySequenceString = theKeySequence.toString(); - myKeySequenceLineEdit->setText(keySequenceString); - myPrevKeySequenceString = keySequenceString; -} - -QKeySequence SUIT_KeySequenceEdit::editedKeySequence() const -{ - return QKeySequence::fromString(myKeySequenceLineEdit->text()); -} - -/*! \returns true, if the edited key sequence differs from confirmed one. */ -bool SUIT_KeySequenceEdit::isKeySequenceModified() const -{ - return QKeySequence(myConfirmedKeySequenceString) != editedKeySequence(); -} - -/*! \brief Set confirmed key sequence to line editor. */ -void SUIT_KeySequenceEdit::restoreKeySequence() -{ - myKeySequenceLineEdit->setText(myConfirmedKeySequenceString); - myPrevKeySequenceString = myConfirmedKeySequenceString; -} - -/*! - \brief Gets the key sequence from keys that were pressed - \param e a key event - \returns a string representation of the key sequence -*/ -/*static*/ QString SUIT_KeySequenceEdit::parseEvent(QKeyEvent* e) -{ - bool isShiftPressed = e->modifiers() & Qt::ShiftModifier; - bool isControlPressed = e->modifiers() & Qt::ControlModifier; - bool isAltPressed = e->modifiers() & Qt::AltModifier; - bool isMetaPressed = e->modifiers() & Qt::MetaModifier; - bool isModifiersPressed = isControlPressed || isAltPressed || isMetaPressed; // Do not treat Shift alone as a modifier! - int result=0; - if(isControlPressed) - result += Qt::CTRL; - if(isAltPressed) - result += Qt::ALT; - if(isShiftPressed) - result += Qt::SHIFT; - if(isMetaPressed) - result += Qt::META; - - int aKey = e->key(); - if ((isValidKey(aKey) && isModifiersPressed) || ((aKey >= Qt::Key_F1) && (aKey <= Qt::Key_F12))) - result += aKey; - - return QKeySequence(result).toString(); -} - -/*! - \brief Check if the key event contains a 'valid' key - \param theKey the code of the key - \returns \c true if the key is 'valid' -*/ -/*static*/ bool SUIT_KeySequenceEdit::isValidKey(int theKey) -{ - if ( theKey == Qt::Key_Underscore || theKey == Qt::Key_Escape || - ( theKey >= Qt::Key_Backspace && theKey <= Qt::Key_Delete ) || - ( theKey >= Qt::Key_Home && theKey <= Qt::Key_PageDown ) || - ( theKey >= Qt::Key_F1 && theKey <= Qt::Key_F12 ) || - ( theKey >= Qt::Key_Space && theKey <= Qt::Key_Asterisk ) || - ( theKey >= Qt::Key_Comma && theKey <= Qt::Key_AsciiTilde ) ) - return true; - return false; -} - -/*! \brief Called when "Clear" button is clicked. */ -void SUIT_KeySequenceEdit::onClear() -{ - myKeySequenceLineEdit->setText(""); - myPrevKeySequenceString = ""; - emit editingFinished(); -} - -/*! \brief Called when myKeySequenceLineEdit loses focus. */ -void SUIT_KeySequenceEdit::onEditingFinished() -{ - if (myKeySequenceLineEdit->text().endsWith("+")) - myKeySequenceLineEdit->setText(myPrevKeySequenceString); - else - myPrevKeySequenceString = myKeySequenceLineEdit->text(); - emit editingFinished(); -} - -/*! - \brief Custom event filter. - \param obj event receiver object - \param event event - \returns \c true if further event processing should be stopped -*/ -bool SUIT_KeySequenceEdit::eventFilter(QObject* theObject, QEvent* theEvent) -{ - if (theObject == myKeySequenceLineEdit) { - if (theEvent->type() == QEvent::KeyPress) { - QKeyEvent* keyEvent = static_cast(theEvent); - QString text = parseEvent(keyEvent); - if (keyEvent->key() == Qt::Key_Delete || keyEvent->key() == Qt::Key_Backspace) - myKeySequenceLineEdit->setText(""); - if (!text.isEmpty()) - myKeySequenceLineEdit->setText(text); - - emit editingStarted(); - return true; - } - if (theEvent->type() == QEvent::KeyRelease) { - onEditingFinished(); - return true; - } - } - return false; -} - -/* - \brief Perform internal intialization. -*/ -void SUIT_KeySequenceEdit::initialize() -{ - static const int PIXMAP_SIZE = 30; - - QHBoxLayout* base = new QHBoxLayout( this ); - base->setMargin(0); - base->setSpacing(5); - - base->addWidget(myKeySequenceLineEdit = new QLineEdit(this)); - setFocusProxy(myKeySequenceLineEdit); - - QToolButton* clearBtn = new QToolButton(); - auto clearPixmap = QPixmap(":/images/shortcut_disable.svg"); - clearPixmap.scaled(QSize(PIXMAP_SIZE, PIXMAP_SIZE), Qt::KeepAspectRatio, Qt::SmoothTransformation); - clearBtn->setIcon(clearPixmap); - clearBtn->setToolTip(tr("Disable shortcut.")); - base->addWidget(clearBtn); - - QToolButton* restoreBtn = new QToolButton(); - auto restorePixmap = QPixmap(":/images/shortcut_restore.svg"); - restorePixmap.scaled(QSize(PIXMAP_SIZE, PIXMAP_SIZE), Qt::KeepAspectRatio, Qt::SmoothTransformation); - restoreBtn->setIcon(restorePixmap); - restoreBtn->setToolTip(tr("Restore the currently applied key sequence.")); - base->addWidget(restoreBtn); - - myKeySequenceLineEdit->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); - clearBtn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - restoreBtn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - - connect(clearBtn, SIGNAL(clicked()), this, SLOT(onClear())); - connect(restoreBtn, SIGNAL(clicked()), this, SIGNAL(restoreFromShortcutMgrClicked())); - connect(myKeySequenceLineEdit, SIGNAL(editingFinished()), this, SLOT(onEditingFinished())); -} - - -/*! \param theParent must not be nullptr. */ -SUIT_EditKeySequenceDialog::SUIT_EditKeySequenceDialog(SUIT_ShortcutTree* theParent) -: QDialog(theParent) -{ - setMinimumWidth(500); - setWindowTitle(tr("Change key sequence")); - QVBoxLayout* layout = new QVBoxLayout(this); - myActionName = new QLabel(this); - myActionName->setTextFormat(Qt::RichText); - myKeySequenceEdit = new SUIT_KeySequenceEdit(this); - myTextEdit = new QTextEdit(this); - layout->addWidget(myActionName); - layout->addWidget(myKeySequenceEdit); - layout->addWidget(myTextEdit); - myActionName->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); - myKeySequenceEdit->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); - myTextEdit->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); - myTextEdit->setReadOnly(true); - myTextEdit->setAcceptRichText(true); - myTextEdit->setPlaceholderText(tr("No conflicts.")); - setFocusProxy(myKeySequenceEdit); - - QHBoxLayout* buttonLayout = new QHBoxLayout(this); - layout->addLayout(buttonLayout); - QPushButton* confirmButton = new QPushButton(tr("Confirm"), this); - confirmButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - QPushButton* cancelButton = new QPushButton(tr("Cancel"), this); - cancelButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - buttonLayout->addStretch(); - buttonLayout->addWidget(confirmButton); - buttonLayout->addWidget(cancelButton); - - connect(myKeySequenceEdit, SIGNAL(editingStarted()), this, SLOT(onEditingStarted())); - connect(myKeySequenceEdit, SIGNAL(editingFinished()), this, SLOT(onEditingFinished())); - connect(myKeySequenceEdit, SIGNAL(restoreFromShortcutMgrClicked()), this, SLOT(onRestoreFromShortcutMgr())); - connect(confirmButton, SIGNAL(clicked()), this, SLOT(onConfirm())); - connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject())); -} - -void SUIT_EditKeySequenceDialog::setModuleAndActionID(const QString& theModuleID, const QString& theInModuleActionID) -{ - myModuleID = theModuleID; - myInModuleActionID = theInModuleActionID; -} - -const QString& SUIT_EditKeySequenceDialog::moduleID() const { return myModuleID; } -const QString& SUIT_EditKeySequenceDialog::inModuleActionID() const { return myInModuleActionID; } - -void SUIT_EditKeySequenceDialog::setModuleAndActionName(const QString& theModuleName, const QString& theActionName, const QString& theActionToolTip) -{ - myActionName->setText("" + theModuleName + "  " + theActionName); - myActionName->setToolTip(theActionToolTip); -} - -void SUIT_EditKeySequenceDialog::setConfirmedKeySequence(const QKeySequence& theSequence) -{ - myKeySequenceEdit->setConfirmedKeySequence(theSequence); -} - -QKeySequence SUIT_EditKeySequenceDialog::editedKeySequence() const -{ - return myKeySequenceEdit->editedKeySequence(); -} - -int SUIT_EditKeySequenceDialog::exec() -{ - myKeySequenceEdit->setFocus(Qt::ActiveWindowFocusReason); - return QDialog::exec(); -} - -void SUIT_EditKeySequenceDialog::onEditingStarted() -{ - myTextEdit->setEnabled(false); -} - -void SUIT_EditKeySequenceDialog::onEditingFinished() -{ - updateConflictsMessage(); -} - -void SUIT_EditKeySequenceDialog::onRestoreFromShortcutMgr() -{ - const auto shortcutMgr = SUIT_ShortcutMgr::get(); - myKeySequenceEdit->setEditedKeySequence(shortcutMgr->getKeySequence(myModuleID, myInModuleActionID)); - updateConflictsMessage(); -} - -/*! Updates message with list of actions, whose shortcuts will be disabled on Confirm. */ -void SUIT_EditKeySequenceDialog::updateConflictsMessage() -{ - myTextEdit->setEnabled(true); - QTextDocument* doc = myTextEdit->document(); - if (!doc) { - doc = new QTextDocument(myTextEdit); - myTextEdit->setDocument(doc); - } - - if (!myKeySequenceEdit->isKeySequenceModified()) { - doc->clear(); - return; - } - - const QKeySequence newKeySequence = editedKeySequence(); - - const auto shortcutTree = static_cast(parentWidget()); - /** {moduleID, inModuleActionID}[] */ - std::set> conflicts = shortcutTree->shortcutContainer()->getConflicts(myModuleID, myInModuleActionID, newKeySequence); - if (!conflicts.empty()) { - const auto shortcutMgr = SUIT_ShortcutMgr::get(); - - QString report = "" + tr("These shortcuts will be disabled on confirm:") + ""; - { - report += "
    "; - for (const auto& conflict : conflicts) { - const QString conflictingModuleName = shortcutMgr->getModuleName(conflict.first); - const QString conflictingActionName = shortcutMgr->getActionName(conflict.first, conflict.second); - report += "
  • " + conflictingModuleName + "  " + conflictingActionName + "
  • "; - } - report += "
"; - } - doc->setHtml(report); - } - else /* if no conflicts */ { - doc->clear(); - } -} - -void SUIT_EditKeySequenceDialog::onConfirm() -{ - if (myKeySequenceEdit->isKeySequenceModified()) - accept(); - else - reject(); -} - - -/*! \brief Compensates lack of std::distance(), which is introduced in C++17. -\returns -1, if theIt does not belong to the */ -template -size_t indexOf( - const Container& theContainer, - const typename Container::iterator& theIt -) { - auto it = theContainer.begin(); - size_t distance = 0; - while (it != theContainer.end()) { - if (it == theIt) - return distance; - - it++; - distance++; - } - return -1; -} - - -/*! \param theContainer Share the same container between several trees, -to edit them synchronously even without exchange of changes with SUIT_ShortcutMgr. -Pass nullptr to create non-synchronized tree. */ -SUIT_ShortcutTree::SUIT_ShortcutTree( - std::shared_ptr theContainer, - QWidget* theParent -) : QTreeWidget(theParent), -myShortcutContainer(theContainer ? theContainer : std::shared_ptr(new SUIT_ShortcutContainer())), -mySortKey(SUIT_ShortcutTree::SortKey::Name), mySortOrder(SUIT_ShortcutTree::SortOrder::Ascending) -{ - setColumnCount(2); - setSelectionMode(QAbstractItemView::SingleSelection); - setColumnWidth(0, COLUMN_SIZE); - setSortingEnabled(false); // Items are sorted in the same way, as in ShortcutContainer. - header()->setSectionResizeMode(QHeaderView::Interactive); - { - QMap labelMap; - labelMap[SUIT_ShortcutTree::ElementIdx::Name] = tr("Action"); - labelMap[SUIT_ShortcutTree::ElementIdx::KeySequence] = tr("Key sequence"); - setHeaderLabels(labelMap.values()); - } - setExpandsOnDoubleClick(false); // Open shortcut editor on double click instead. - setSortingEnabled(false); - setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents); - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - myEditDialog = new SUIT_EditKeySequenceDialog(this); - - this->installEventFilter(this); - connect(this, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), this, SLOT(onItemDoubleClicked(QTreeWidgetItem*, int))); - - SUIT_ShortcutTree::instances[myShortcutContainer.get()].emplace(this); -} - -SUIT_ShortcutTree::~SUIT_ShortcutTree() -{ - SUIT_ShortcutTree::instances[myShortcutContainer.get()].erase(this); - if (SUIT_ShortcutTree::instances[myShortcutContainer.get()].empty()) - SUIT_ShortcutTree::instances.erase(myShortcutContainer.get()); -} - -/*! \brief Copies shortcuts from ShortcutMgr. (Re)displays shortcuts of myModuleIDs. */ -void SUIT_ShortcutTree::setShortcutsFromManager() -{ - const auto shortcutMgr = SUIT_ShortcutMgr::get(); - *myShortcutContainer = shortcutMgr->getShortcutContainer(); - // nb! ShortcutMgr never removes shortcuts from its container, only disables. - - updateItems(false /*theHighlightModified*/, true /*theUpdateSyncTrees*/); -} - -/*! \brief Copies shortcuts from resources, user files are not accounted. (Re)displays shortcuts of myModuleIDs. */ -void SUIT_ShortcutTree::setDefaultShortcuts() -{ - SUIT_ShortcutContainer defaultShortcuts; - SUIT_ShortcutMgr::fillContainerFromPreferences(defaultShortcuts, true /*theDefaultOnly*/); - - myShortcutContainer->merge(defaultShortcuts, true /*theOverride*/, true /*theTreatAbsentIncomingAsDisabled*/); - // nb! SUIT_ShortcutContainer never erases shortcuts, only disables. - - updateItems(true /*theHighlightModified*/, true /*theUpdateSyncTrees*/); -} - -/*! \brief Applies pending changes to ShortcutMgr. Updates other instances of SUIT_ShortcutTree. */ -void SUIT_ShortcutTree::applyChangesToShortcutMgr() -{ - const auto mgr = SUIT_ShortcutMgr::get(); - mgr->mergeShortcutContainer(*myShortcutContainer); - - // Update non-synchronized with this instances. - for (const auto& containerAndSyncTrees : SUIT_ShortcutTree::instances) { - if (containerAndSyncTrees.first == myShortcutContainer.get()) - continue; - - const std::set& syncTrees = containerAndSyncTrees.second; - const auto itFirstSyncTree = syncTrees.begin(); - if (itFirstSyncTree == syncTrees.end()) - continue; - - (*itFirstSyncTree)->setShortcutsFromManager(); - const auto editDialog = (*itFirstSyncTree)->myEditDialog; - editDialog->setConfirmedKeySequence(mgr->getShortcutContainer().getKeySequence(editDialog->moduleID(), editDialog->inModuleActionID())); - editDialog->updateConflictsMessage(); - } -} - -std::shared_ptr SUIT_ShortcutTree::shortcutContainer() const -{ - return myShortcutContainer; -} - -/*! \brief Does not sort modules. */ -void SUIT_ShortcutTree::sort(SUIT_ShortcutTree::SortKey theKey, SUIT_ShortcutTree::SortOrder theOrder) -{ - if (theKey == mySortKey && theOrder == mySortOrder) - return; - - mySortKey = theKey; - mySortOrder = theOrder; - - for (int moduleIdx = 0; moduleIdx < topLevelItemCount(); moduleIdx++) { - const auto moduleItem = static_cast(topLevelItem(moduleIdx)); - const auto sortedChildren = getSortedChildren(moduleItem); - moduleItem->takeChildren(); - - for (const auto childItem : sortedChildren) { - moduleItem->addChild(childItem); - } - } -} - -/*! \param If theUpdateSyncTrees, trees sharing the same shortcut container are updated. */ -void SUIT_ShortcutTree::updateItems(bool theHighlightModified, bool theUpdateSyncTrees) -{ - const auto shortcutMgr = SUIT_ShortcutMgr::get(); - const QString lang = SUIT_ShortcutMgr::getLang(); - - for (const QString& moduleID : myModuleIDs) { - const auto& moduleShortcuts = myShortcutContainer->getModuleShortcutsInversed(moduleID); - if (moduleShortcuts.empty()) { - // Do not display empty module. - const auto moduleItemAndIdx = findModuleFolderItem(moduleID); - if (moduleItemAndIdx.second >= 0) - delete takeTopLevelItem(moduleItemAndIdx.second); - - continue; - } - - const auto moduleItemAndIdx = findModuleFolderItem(moduleID); - SUIT_ShortcutTreeFolder* moduleItem = moduleItemAndIdx.first; - if (!moduleItem) { - moduleItem = new SUIT_ShortcutTreeFolder(moduleID); - moduleItem->setAssets(shortcutMgr->getModuleAssets(moduleID), lang); - addTopLevelItem(moduleItem); - moduleItem->setFlags(Qt::ItemIsEnabled); - - auto sortedChildren = getSortedChildren(moduleItem); - for (const auto& shortcut : moduleShortcuts) { - const QString& inModuleActionID = shortcut.first; - const QKeySequence& keySequence = shortcut.second; - const QString keySequenceString = keySequence.toString(); - - auto actionItem = SUIT_ShortcutTreeAction::create(moduleID, inModuleActionID); - if (!actionItem) { - ShCutDbg("SUIT_ShortcutTree can't create child item for action ID = \"" + SUIT_ShortcutMgr::makeActionID(moduleID, inModuleActionID) + "\"."); - continue; - } - - actionItem->setAssets(shortcutMgr->getActionAssets(moduleID, inModuleActionID), lang); - actionItem->setKeySequence(keySequenceString); - - if (theHighlightModified) { - const QKeySequence& appliedKeySequence = SUIT_ShortcutMgr::get()->getKeySequence(moduleID, inModuleActionID); - actionItem->highlightKeySequenceAsModified(keySequence != appliedKeySequence); - } - - insertChild(moduleItem, sortedChildren, actionItem); - } - - moduleItem->setExpanded(true); // Make tree expanded on first show. - } - else /* if the tree has the module-item */ { - for (int childIdx = 0; childIdx < moduleItem->childCount(); childIdx++) { - // Update exisiting items of a module. - SUIT_ShortcutTreeAction* const childItem = static_cast(moduleItem->child(childIdx)); - const auto itShortcut = moduleShortcuts.find(childItem->myInModuleActionID); - if (itShortcut == moduleShortcuts.end()) { - // Shortcut of the item has been removed from myShortcutContainer - impossible. - continue; - } - const QKeySequence& newKeySequence = itShortcut->second; - const QString newKeySequenceString = newKeySequence.toString(); - if (childItem->keySequence() != newKeySequenceString) - childItem->setKeySequence(newKeySequenceString); - - if (theHighlightModified) { - const QKeySequence& appliedKeySequence = SUIT_ShortcutMgr::get()->getKeySequence(moduleID, childItem->myInModuleActionID); - childItem->highlightKeySequenceAsModified(newKeySequence != appliedKeySequence); - } - else - childItem->highlightKeySequenceAsModified(false); - } - - // Add new items if myShortcutContainer acquired new shortcuts, which may happen if a developer forgot - // to add shortcuts for registered actions to resource files. - if (moduleItem->childCount() < moduleShortcuts.size()) { - auto sortedChildren = getSortedChildren(moduleItem); - for (const auto& shortcut : moduleShortcuts) { - const QString& inModuleActionID = shortcut.first; - const auto predicate = [&inModuleActionID](const SUIT_ShortcutTreeItem* const theItem) -> bool { - return static_cast(theItem)->myInModuleActionID == inModuleActionID; - }; - - if (std::find_if(sortedChildren.begin(), sortedChildren.end(), predicate) == sortedChildren.end()) { - const auto actionItem = SUIT_ShortcutTreeAction::create(moduleID, inModuleActionID); - if (!actionItem) { - ShCutDbg("SUIT_ShortcutTree can't create child item for action ID = \"" + SUIT_ShortcutMgr::makeActionID(moduleID, inModuleActionID) + "\"."); - continue; - } - - const QKeySequence& keySequence = shortcut.second; - actionItem->setAssets(shortcutMgr->getActionAssets(moduleID, inModuleActionID), lang); - actionItem->setKeySequence(keySequence.toString()); - - if (theHighlightModified) { - const QKeySequence& appliedKeySequence = SUIT_ShortcutMgr::get()->getKeySequence(moduleID, inModuleActionID); - actionItem->highlightKeySequenceAsModified(keySequence != appliedKeySequence); - } - - insertChild(moduleItem, sortedChildren, actionItem); - } - } - } - } - } - - if (theUpdateSyncTrees) { - const std::set& syncTrees = SUIT_ShortcutTree::instances[myShortcutContainer.get()]; - for (const auto syncTree: syncTrees) { - if (syncTree == this) - continue; - - syncTree->updateItems(theHighlightModified, false /*theUpdateSyncTrees*/); - const auto editDialog = syncTree->myEditDialog; - editDialog->setConfirmedKeySequence(myShortcutContainer->getKeySequence(editDialog->moduleID(), editDialog->inModuleActionID())); - editDialog->updateConflictsMessage(); - } - } -} - -/*! \returns Pointer and index of top-level item. -If the tree does not contain an item with theModuleID, returns {nullptr, -1}. */ -std::pair SUIT_ShortcutTree::findModuleFolderItem(const QString& theModuleID) const -{ - for (int moduleIdx = 0; moduleIdx < topLevelItemCount(); moduleIdx++) { - SUIT_ShortcutTreeFolder* moduleItem = static_cast(topLevelItem(moduleIdx)); - if (moduleItem->myModuleID == theModuleID) - return std::pair(moduleItem, moduleIdx); - } - return std::pair(nullptr, -1); -} - -/*! \returns Children of theParentItem being sorted according to current sort mode and order. */ -std::set> SUIT_ShortcutTree::getSortedChildren(SUIT_ShortcutTreeFolder* theParentItem) -{ - QList> sortSchema = SUIT_ShortcutTree::DEFAULT_SORT_SCHEMA; - { - for (auto itSameKey = sortSchema.begin(); itSameKey != sortSchema.end(); itSameKey++) { - if (itSameKey->first == mySortKey) { - sortSchema.erase(itSameKey); - break; - } - } - sortSchema.push_front(std::pair(mySortKey, mySortOrder)); - } - - const std::function comparator = - [this, sortSchema](const SUIT_ShortcutTreeItem* theItemA, const SUIT_ShortcutTreeItem* theItemB) { - const auto collator = QCollator(); - for (const auto& keyAndOrder : sortSchema) { - const int res = collator.compare(theItemA->getValue(keyAndOrder.first), theItemB->getValue(keyAndOrder.first)); - if (res != 0) - return keyAndOrder.second == SUIT_ShortcutTree::SortOrder::Ascending ? res < 0 : res > 0; - } - return false; - }; - - std::set> sortedChildren(comparator); - for (int childIdx = 0; childIdx < theParentItem->childCount(); childIdx++) { - SUIT_ShortcutTreeAction* const childItem = static_cast(theParentItem->child(childIdx)); - sortedChildren.emplace(childItem); - } - return sortedChildren; -} - -/*! \brief Inserts theChildItem to theParentItem and theSortedChildren. -Does not check whether theSortedChildren are actually child items of theParentItem. -Does not check whether current item sort schema is same as one of theSortedChildren. */ -void SUIT_ShortcutTree::insertChild( - SUIT_ShortcutTreeFolder* theParentItem, - std::set>& theSortedChildren, - SUIT_ShortcutTreeItem* theChildItem -) { - auto emplaceRes = theSortedChildren.emplace(theChildItem); - theParentItem->insertChild(indexOf(theSortedChildren, emplaceRes.first), theChildItem); -} - -void SUIT_ShortcutTree::onItemDoubleClicked(QTreeWidgetItem* theItem, int theColIdx) -{ - { - SUIT_ShortcutTreeItem* const item = static_cast(theItem); - // Do not react if folder-item is clicked. - if (item->type() != SUIT_ShortcutTreeItem::Type::Action) - return; - } - - SUIT_ShortcutTreeAction* const actionItem = static_cast(theItem); - - myEditDialog->setModuleAndActionID(actionItem->myModuleID, actionItem->myInModuleActionID); - QString actionToolTip = actionItem->toolTip(SUIT_ShortcutTree::ElementIdx::Name); - actionToolTip.truncate(actionToolTip.lastIndexOf('\n') + 1); - myEditDialog->setModuleAndActionName( - static_cast(actionItem->parent())->name(), - actionItem->name(), - actionToolTip - ); - myEditDialog->setConfirmedKeySequence(QKeySequence::fromString(actionItem->keySequence())); - myEditDialog->updateConflictsMessage(); - const bool somethingChanged = myEditDialog->exec() == QDialog::Accepted; - - if (!somethingChanged) - return; - - const QKeySequence newKeySequence = myEditDialog->editedKeySequence(); - - /** { moduleID, inModuleActionID }[] */ - std::set> disabledActionIDs = myShortcutContainer->setShortcut(actionItem->myModuleID, actionItem->myInModuleActionID, newKeySequence, true /*override*/); - - /** { moduleID, {inModuleActionID, keySequence}[] }[] */ - std::map> changes; - changes[actionItem->myModuleID][actionItem->myInModuleActionID] = newKeySequence.toString(); - for (const auto moduleAndActionID : disabledActionIDs) { - changes[moduleAndActionID.first][moduleAndActionID.second] = QString(); - } - - // Set new key sequences to shortcut items. - for (const auto& moduleIDAndChanges : changes) { - const QString& moduleID = moduleIDAndChanges.first; - - const auto moduleItemAndIdx = findModuleFolderItem(moduleID); - const auto moduleItem = moduleItemAndIdx.first; - if (!moduleItem) - continue; - - /** {inModuleActionID, newKeySequence}[] */ - const std::map& moduleChanges = moduleIDAndChanges.second; - - // Go through module' shortcut items, and highlight those, whose key sequences differ from applied key sequences. - for (int childIdx = 0; childIdx < moduleItem->childCount(); childIdx++) { - SUIT_ShortcutTreeAction* const childItem = static_cast(moduleItem->child(childIdx)); - const auto itChange = moduleChanges.find(childItem->myInModuleActionID); - if (itChange == moduleChanges.end()) { - // The shortcut has not been changed. - continue; - } - - childItem->setKeySequence(itChange->second); - - const QKeySequence& appliedKeySequence = SUIT_ShortcutMgr::get()->getKeySequence(moduleID, childItem->myInModuleActionID); - childItem->highlightKeySequenceAsModified(QKeySequence::fromString(itChange->second) != appliedKeySequence); - } - } -} - -/*static*/ const QList> SUIT_ShortcutTree::DEFAULT_SORT_SCHEMA = -{ - {SUIT_ShortcutTree::SortKey::Name, SUIT_ShortcutTree::SortOrder::Ascending}, - {SUIT_ShortcutTree::SortKey::ToolTip, SUIT_ShortcutTree::SortOrder::Ascending}, - {SUIT_ShortcutTree::SortKey::KeySequence, SUIT_ShortcutTree::SortOrder::Ascending}, - {SUIT_ShortcutTree::SortKey::ID, SUIT_ShortcutTree::SortOrder::Ascending} -}; - -/*static*/ std::map> SUIT_ShortcutTree::instances = -std::map>(); - - - -SUIT_ShortcutTreeItem::SUIT_ShortcutTreeItem(const QString& theModuleID) -: QTreeWidgetItem(), myModuleID(theModuleID) -{ } - -QString SUIT_ShortcutTreeItem::name() const -{ - return text(SUIT_ShortcutTree::ElementIdx::Name); -} - - -SUIT_ShortcutTreeFolder::SUIT_ShortcutTreeFolder(const QString& theModuleID) -: SUIT_ShortcutTreeItem(theModuleID) -{ - QFont f = font(SUIT_ShortcutTree::ElementIdx::Name); - f.setBold(true); - setFont(SUIT_ShortcutTree::ElementIdx::Name, f); - setText(SUIT_ShortcutTree::ElementIdx::Name, theModuleID); -} - -void SUIT_ShortcutTreeFolder::setAssets(std::shared_ptr theAssets, const QString& theLang) -{ - if (!theAssets) - return; - - setIcon(SUIT_ShortcutTree::ElementIdx::Name, theAssets->myIcon); - - const auto& ldaMap = theAssets->myLangDependentAssets; - if (ldaMap.empty()) { - setText(SUIT_ShortcutTree::ElementIdx::Name, myModuleID); - return; - } - - auto itLDA = ldaMap.find(theLang); - if (itLDA == ldaMap.end()) - itLDA = ldaMap.begin(); - - const SUIT_ActionAssets::LangDependentAssets& lda = itLDA->second; - const QString& name = lda.myName.isEmpty() ? myModuleID : lda.myName; - setText(SUIT_ShortcutTree::ElementIdx::Name, name); -} - -QString SUIT_ShortcutTreeFolder::getValue(SUIT_ShortcutTree::SortKey theKey) const -{ - switch (theKey) { - case SUIT_ShortcutTree::SortKey::ID: - return myModuleID; - case SUIT_ShortcutTree::SortKey::Name: - return name(); - case SUIT_ShortcutTree::SortKey::ToolTip: - return name(); - default: - return QString(); - } -} - - -SUIT_ShortcutTreeAction::SUIT_ShortcutTreeAction(const QString& theModuleID, const QString& theInModuleActionID) -: SUIT_ShortcutTreeItem(theModuleID), myInModuleActionID(theInModuleActionID) -{ - setText(SUIT_ShortcutTree::ElementIdx::Name, theInModuleActionID); - setToolTip( - SUIT_ShortcutTree::ElementIdx::Name, - theInModuleActionID + (theInModuleActionID.at(theInModuleActionID.length()-1) == "." ? "\n" : ".\n") + SUIT_ShortcutTree::tr("Double click to edit key sequence.") - ); - setToolTip(SUIT_ShortcutTree::ElementIdx::KeySequence, SUIT_ShortcutTree::tr("Double click to edit key sequence.")); -} - -/*static*/ SUIT_ShortcutTreeAction* SUIT_ShortcutTreeAction::create(const QString& theModuleID, const QString& theInModuleActionID) -{ - if (theInModuleActionID.isEmpty()) { - ShCutDbg("SUIT_ShortcutTreeItem: attempt to create item with empty action ID."); - return nullptr; - } - - return new SUIT_ShortcutTreeAction(theModuleID, theInModuleActionID); -} - -void SUIT_ShortcutTreeAction::setAssets(std::shared_ptr theAssets, const QString& theLang) -{ - if (!theAssets) - return; - - setIcon(SUIT_ShortcutTree::ElementIdx::Name, theAssets->myIcon); - - const auto& ldaMap = theAssets->myLangDependentAssets; - if (ldaMap.empty()) { - setText(SUIT_ShortcutTree::ElementIdx::Name, myInModuleActionID); - return; - } - - auto itLDA = ldaMap.find(theLang); - if (itLDA == ldaMap.end()) - itLDA = ldaMap.begin(); - - const SUIT_ActionAssets::LangDependentAssets& lda = itLDA->second; - const QString& name = lda.myName.isEmpty() ? myInModuleActionID : lda.myName; - setText(SUIT_ShortcutTree::ElementIdx::Name, name); - - const QString& actionToolTip = lda.myToolTip.isEmpty() ? name : lda.myToolTip; - setToolTip( - SUIT_ShortcutTree::ElementIdx::Name, - actionToolTip + (actionToolTip.at(actionToolTip.length()-1) == "." ? "\n" : ".\n") + SUIT_ShortcutTree::tr("Double click to edit key sequence.") - ); -} - -QString SUIT_ShortcutTreeAction::getValue(SUIT_ShortcutTree::SortKey theKey) const -{ - switch (theKey) { - case SUIT_ShortcutTree::SortKey::ID: - return myInModuleActionID; - case SUIT_ShortcutTree::SortKey::Name: - return name(); - case SUIT_ShortcutTree::SortKey::ToolTip: - return toolTip(SUIT_ShortcutTree::ElementIdx::Name); - case SUIT_ShortcutTree::SortKey::KeySequence: - return keySequence(); - default: - return QString(); - } -} - -void SUIT_ShortcutTreeAction::setKeySequence(const QString& theKeySequence) -{ - setText(SUIT_ShortcutTree::ElementIdx::KeySequence, theKeySequence); -} - -QString SUIT_ShortcutTreeAction::keySequence() const -{ - return text(SUIT_ShortcutTree::ElementIdx::KeySequence); -} - -/*! \brief Highlights text at ElementIdx::KeySequence. */ -void SUIT_ShortcutTreeAction::highlightKeySequenceAsModified(bool theHighlight) -{ - static const QBrush bgHighlitingBrush = QBrush(Qt::darkGreen); - static const QBrush fgHighlitingBrush = QBrush(Qt::white); - static const QBrush noBrush = QBrush(); - - setBackground(SUIT_ShortcutTree::ElementIdx::KeySequence, theHighlight ? bgHighlitingBrush : noBrush); - setForeground(SUIT_ShortcutTree::ElementIdx::KeySequence, theHighlight ? fgHighlitingBrush : noBrush); -} \ No newline at end of file diff --git a/src/SUIT/SUIT_ShortcutTree.h b/src/SUIT/SUIT_ShortcutTree.h deleted file mode 100644 index 7d2df2238..000000000 --- a/src/SUIT/SUIT_ShortcutTree.h +++ /dev/null @@ -1,265 +0,0 @@ -// Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -#ifndef SUIT_SHORTCUTTREE_H -#define SUIT_SHORTCUTTREE_H - -#include "SUIT.h" -#include -#include -#include -#include "SUIT_ShortcutMgr.h" -#include -#include -#include -#include - - -class QLineEdit; -class QLabel; -class QPushButton; -class QTreeWidgetItem; - -class SUIT_EXPORT SUIT_KeySequenceEdit : public QFrame -{ - Q_OBJECT - -public: - SUIT_KeySequenceEdit(QWidget* = nullptr); - virtual ~SUIT_KeySequenceEdit() = default; - - void setConfirmedKeySequence(const QKeySequence&); - void setEditedKeySequence(const QKeySequence&); - QKeySequence editedKeySequence() const; - bool isKeySequenceModified() const; - void restoreKeySequence(); - - static QString parseEvent(QKeyEvent*); - static bool isValidKey(int); - -signals: - void editingStarted(); - void editingFinished(); - void restoreFromShortcutMgrClicked(); - -private slots: - void onClear(); - void onEditingFinished(); - -protected: - virtual bool eventFilter(QObject*, QEvent*); - -private: - void initialize(); - -private: - QLineEdit* myKeySequenceLineEdit; - QString myConfirmedKeySequenceString; - - // Last valid key sequence string from myKeySequenceLineEdit. - QString myPrevKeySequenceString; -}; - - -class SUIT_ShortcutTree; -class SUIT_ShortcutTreeItem; -class SUIT_ShortcutTreeFolder; -class SUIT_ShortcutTreeAction; -class QTextEdit; - - -class SUIT_EXPORT SUIT_EditKeySequenceDialog : public QDialog -{ - Q_OBJECT - -public: - SUIT_EditKeySequenceDialog(SUIT_ShortcutTree* theParent); - SUIT_EditKeySequenceDialog(const SUIT_EditKeySequenceDialog&) = delete; - SUIT_EditKeySequenceDialog& operator=(const SUIT_EditKeySequenceDialog&) = delete; - virtual ~SUIT_EditKeySequenceDialog() = default; - - void setModuleAndActionID(const QString& theModuleID, const QString& theInModuleActionID); - const QString& moduleID() const; - const QString& inModuleActionID() const; - - void setModuleAndActionName(const QString& theModuleName, const QString& theActionName, const QString& theActionToolTip = ""); - - void setConfirmedKeySequence(const QKeySequence& theSequence); - QKeySequence editedKeySequence() const; - - void updateConflictsMessage(); - - int exec(); - -private slots: - void onEditingStarted(); - void onEditingFinished(); - void onRestoreFromShortcutMgr(); - void onConfirm(); - -private: - QString myModuleID; - QString myInModuleActionID; - QLabel* myActionName; - SUIT_KeySequenceEdit* myKeySequenceEdit; - QTextEdit* myTextEdit; -}; - - -class SUIT_EXPORT SUIT_ShortcutTree : public QTreeWidget -{ - Q_OBJECT - -public: - enum ElementIdx { - Name = 0, - KeySequence = 1, // Empty, if item is folder item. - }; - - enum class SortKey { - ID, - Name, - ToolTip, - KeySequence, - }; - - enum class SortOrder { - Ascending, - Descending - }; - - SUIT_ShortcutTree( - std::shared_ptr theContainer = std::shared_ptr(), - QWidget* theParent = nullptr - ); - SUIT_ShortcutTree(const SUIT_ShortcutTree&) = delete; - SUIT_ShortcutTree& operator=(const SUIT_ShortcutTree&) = delete; - virtual ~SUIT_ShortcutTree(); - - void setShortcutsFromManager(); - void setDefaultShortcuts(); - void applyChangesToShortcutMgr(); - - std::shared_ptr shortcutContainer() const; - - void sort(SUIT_ShortcutTree::SortKey theKey, SUIT_ShortcutTree::SortOrder theOrder); - -private: - void updateItems(bool theHighlightModified, bool theUpdateSyncTrees); - std::pair findModuleFolderItem(const QString& theModuleID) const; - - std::set> getSortedChildren(SUIT_ShortcutTreeFolder* theParentItem); - - void insertChild( - SUIT_ShortcutTreeFolder* theParentItem, - std::set>& theSortedChildren, - SUIT_ShortcutTreeItem* theChildItem - ); - -private slots: - void onItemDoubleClicked(QTreeWidgetItem* theWidgetItem, int theColIdx); - -public: - /** Keeps IDs of modules, which will are shown on setShortcutsFromManager(). */ - std::set myModuleIDs; - - static const QList> DEFAULT_SORT_SCHEMA; - -private: - /** Allows to modify plenty of shortcuts and then apply them to SUIT_ShortcutMgr as a batch. */ - const std::shared_ptr myShortcutContainer; - - SUIT_EditKeySequenceDialog* myEditDialog; - - SUIT_ShortcutTree::SortKey mySortKey; - SUIT_ShortcutTree::SortOrder mySortOrder; - - /** - * Ensures that, if several SUIT_ShortcutTree instances coexist, - * all of them are updated when one of them applies pending changes to SUIT_ShortcutMgr. - * - * Sharing of SUIT_ShortcutContainer allows to keep some trees synchronized even without - * applying changes to SUIT_ShortcutMgr. Why? See SUIT_PagePrefShortcutTreeItem. - * - * Access is not synchronized in assumption, that all instances live in the same thread. - */ - static std::map> instances; -}; - - -class SUIT_ShortcutTreeItem : public QTreeWidgetItem -{ -public: - enum Type { - Folder = 0, - Action = 1, - }; - -protected: - SUIT_ShortcutTreeItem(const QString& theModuleID); - -public: - virtual ~SUIT_ShortcutTreeItem() = default; - virtual SUIT_ShortcutTreeItem::Type type() const = 0; - - virtual void setAssets(std::shared_ptr theAssets, const QString& theLang) = 0; - QString name() const; - - virtual QString getValue(SUIT_ShortcutTree::SortKey theKey) const = 0; - -public: - const QString myModuleID; -}; - - -class SUIT_ShortcutTreeFolder : public SUIT_ShortcutTreeItem -{ -public: - SUIT_ShortcutTreeFolder(const QString& theModuleID); - virtual ~SUIT_ShortcutTreeFolder() = default; - virtual SUIT_ShortcutTreeItem::Type type() const { return SUIT_ShortcutTreeItem::Type::Folder; }; - - virtual void setAssets(std::shared_ptr theAssets, const QString& theLang); - - virtual QString getValue(SUIT_ShortcutTree::SortKey theKey) const; -}; - - -class SUIT_ShortcutTreeAction : public SUIT_ShortcutTreeItem -{ -private: - SUIT_ShortcutTreeAction(const QString& theModuleID, const QString& theInModuleActionID); - -public: - static SUIT_ShortcutTreeAction* create(const QString& theModuleID, const QString& theInModuleActionID); - virtual ~SUIT_ShortcutTreeAction() = default; - virtual SUIT_ShortcutTreeItem::Type type() const { return SUIT_ShortcutTreeItem::Type::Action; }; - - virtual void setAssets(std::shared_ptr theAssets, const QString& theLang); - - virtual QString getValue(SUIT_ShortcutTree::SortKey theKey) const; - - void setKeySequence(const QString& theKeySequence); - QString keySequence() const; - void highlightKeySequenceAsModified(bool theHighlight); - - const QString myInModuleActionID; -}; - -#endif // SUIT_SHORTCUTTREE_H diff --git a/src/SUIT/Tools/SUIT_SentenceMatcher.cxx b/src/SUIT/Tools/SUIT_SentenceMatcher.cxx new file mode 100644 index 000000000..2d7878016 --- /dev/null +++ b/src/SUIT/Tools/SUIT_SentenceMatcher.cxx @@ -0,0 +1,271 @@ +// Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "SUIT_SentenceMatcher.h" +#include + + +namespace SUIT_tools { + +SUIT_SentenceMatcher::SUIT_SentenceMatcher() +{ + myUseExactWordOrder = false; + myUseFuzzyWords = true; + myIsCaseSensitive = false; +} + +void SUIT_SentenceMatcher::setUseExactWordOrder(bool theOn) +{ + if (myUseExactWordOrder == theOn) + return; + + myUseExactWordOrder = theOn; + if (theOn) { + myPermutatedSentences.clear(); + myFuzzyPermutatedSentences.clear(); + return; + } + + if (myPermutatedSentences.isEmpty()) + SUIT_SentenceMatcher::makePermutatedSentences(myWords, myPermutatedSentences); + + if (myUseFuzzyWords && myFuzzyPermutatedSentences.isEmpty()) + SUIT_SentenceMatcher::makePermutatedSentences(myFuzzyWords, myFuzzyPermutatedSentences); +} + +void SUIT_SentenceMatcher::setUseFuzzyWords(bool theOn) +{ + if (myUseFuzzyWords == theOn) + return; + + myUseFuzzyWords = theOn; + if (myWords.isEmpty() || !theOn) { + myFuzzyWords.clear(); + myFuzzyPermutatedSentences.clear(); + return; + } + + myFuzzyWords.clear(); + SUIT_SentenceMatcher::makeFuzzyWords(myWords, myFuzzyWords); + + if (!myUseExactWordOrder) { + myFuzzyPermutatedSentences.clear(); + SUIT_SentenceMatcher::makePermutatedSentences(myFuzzyWords, myFuzzyPermutatedSentences); + } +} + +void SUIT_SentenceMatcher::setCaseSensitive(bool theOn) +{ + myIsCaseSensitive = theOn; +} + +void SUIT_SentenceMatcher::setQuery(QString theQuery) +{ + theQuery = theQuery.simplified(); + if (theQuery == myQuery) + return; + + myQuery = theQuery; + myWords = theQuery.split(" ", QString::SkipEmptyParts); + + { // Set permutated sentences. + myPermutatedSentences.clear(); + if (!myUseExactWordOrder) + SUIT_SentenceMatcher::makePermutatedSentences(myWords, myPermutatedSentences); + } + + // Set fuzzy words and sentences. + myFuzzyWords.clear(); + myFuzzyPermutatedSentences.clear(); + + if (myUseFuzzyWords) { + SUIT_SentenceMatcher::makeFuzzyWords(myWords, myFuzzyWords); + if (!myUseExactWordOrder) + SUIT_SentenceMatcher::makePermutatedSentences(myFuzzyWords, myFuzzyPermutatedSentences); + } +} + +double SUIT_SentenceMatcher::match(const QString& theInputString) const +{ + int n = 0; + if (myUseExactWordOrder) { + n = SUIT_SentenceMatcher::match(theInputString, myWords, myIsCaseSensitive); + if (n != theInputString.length() && myUseFuzzyWords) { + const int nFuzzy = SUIT_SentenceMatcher::match(theInputString, myFuzzyWords, myIsCaseSensitive); + if (nFuzzy > n) + n = nFuzzy; + } + } + else /* if match with permutated query sentences */ { + n = SUIT_SentenceMatcher::match(theInputString, myPermutatedSentences, myIsCaseSensitive); + if (n != theInputString.length() && myUseFuzzyWords) { + const int nFuzzy = SUIT_SentenceMatcher::match(theInputString, myFuzzyPermutatedSentences, myIsCaseSensitive); + if (nFuzzy > n) + n = nFuzzy; + } + } + + if (n <= 0) + return std::numeric_limits::infinity(); + + const auto strLength = theInputString.length() > myQuery.length() ? theInputString.length() : myQuery.length(); + + if (n > strLength) + return 0; // Exact match or almost exact. + + return double(strLength - n); +} + +QString SUIT_SentenceMatcher::toString() const +{ + QString res = QString("myUseExactWordOrder: ") + (myUseExactWordOrder ? "true" : "false") + ";\n"; + res += QString("myUseFuzzyWords: ") + (myUseFuzzyWords ? "true" : "false") + ";\n"; + res += QString("myIsCaseSensitive: ") + (myIsCaseSensitive ? "true" : "false") + ";\n"; + res += QString("myQuery: ") + myQuery + ";\n"; + res += QString("myWords: ") + myWords.join(", ") + ";\n"; + res += QString("myFuzzyWords: ") + myFuzzyWords.join(", ") + ";\n"; + + res += "myPermutatedSentences:\n"; + for (const auto& sentence : myPermutatedSentences) { + res += "\t" + sentence.join(", ") + ";\n"; + } + + res += "myFuzzyPermutatedSentences:\n"; + for (const auto& sentence : myFuzzyPermutatedSentences) { + res += "\t" + sentence.join(", ") + ";\n"; + } + + res += "."; + return res; +} + +/*static*/ bool SUIT_SentenceMatcher::makePermutatedSentences(const QStringList& theWords, QList& theSentences) +{ + theSentences.clear(); + theSentences.push_back(theWords); + QStringList nextPerm = theWords; + QStringList prevPerm = theWords; + + bool hasNextPerm = true; + bool hasPrevPerm = true; + + while (hasNextPerm || hasPrevPerm) { + if (hasNextPerm) + hasNextPerm = std::next_permutation(nextPerm.begin(), nextPerm.end()); + + if (hasNextPerm && !theSentences.contains(nextPerm)) + theSentences.push_back(nextPerm); + + if (hasPrevPerm) + hasPrevPerm = std::prev_permutation(prevPerm.begin(), prevPerm.end()); + + if (hasPrevPerm && !theSentences.contains(prevPerm)) + theSentences.push_back(prevPerm); + } + + return theSentences.size() > 1; +} + +/*static*/ void SUIT_SentenceMatcher::makeFuzzyWords(const QStringList& theWords, QStringList& theFuzzyWords) +{ + theFuzzyWords.clear(); + for (const QString& word : theWords) { + QString fuzzyWord; + for (int i = 0; i < word.size(); i++) { + fuzzyWord += word[i]; + fuzzyWord += "\\w*"; + } + theFuzzyWords.push_back(fuzzyWord); + } +} + +/*static*/ int SUIT_SentenceMatcher::matchWithSentenceIgnoreEndings(const QString& theInputString, const QStringList& theSentence, bool theCaseSensitive) +{ + const QRegExp regExp("^" + theSentence.join("\\w*\\W+"), theCaseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive); + regExp.indexIn(theInputString); + const int matchMetrics = regExp.matchedLength(); + return matchMetrics > 0 ? matchMetrics : 0; +} + +/*static*/ int SUIT_SentenceMatcher::matchWithSentencesIgnoreEndings(const QString& theInputString, const QList& theSentences, bool theCaseSensitive) +{ + int res = 0; + for (const QStringList& sentence : theSentences) { + const int matchMetrics = SUIT_SentenceMatcher::matchWithSentenceIgnoreEndings(theInputString, sentence, theCaseSensitive); + if (matchMetrics > res) { + res = matchMetrics; + if (res == theInputString.length()) + return res; + } + } + return res; +} + +/*static*/ int SUIT_SentenceMatcher::matchAtLeastOneWord(const QString& theInputString, const QStringList& theWords, bool theCaseSensitive) +{ + int res = 0; + for (const QString& word : theWords) { + const auto regExp = QRegExp(word, theCaseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive); + regExp.indexIn(theInputString); + const int matchMetrics = regExp.matchedLength(); + // The same input word can be counted multiple times. Nobody cares. + if (matchMetrics > 0) + res += matchMetrics; + } + return res; +} + +/*static*/ int SUIT_SentenceMatcher::match( + const QString& theInputString, + const QStringList& theSentence, + bool theCaseSensitive +) { + int res = SUIT_SentenceMatcher::matchWithSentenceIgnoreEndings(theInputString, theSentence, theCaseSensitive); + if (res == theInputString.length()) + return res; + + const int matchMetrics = SUIT_SentenceMatcher::matchAtLeastOneWord(theInputString, theSentence, theCaseSensitive); + if (matchMetrics > res) + res = matchMetrics; + + return res; +} + +/*static*/ int SUIT_SentenceMatcher::match( + const QString& theInputString, + const QList& theSentences, + bool theCaseSensitive +) { + int res = SUIT_SentenceMatcher::matchWithSentencesIgnoreEndings(theInputString, theSentences, theCaseSensitive); + if (res == theInputString.length()) + return res; + + if (theSentences.size() > 0) { + const int matchMetrics = SUIT_SentenceMatcher::matchAtLeastOneWord(theInputString, theSentences[0], theCaseSensitive); + if (matchMetrics > res) + res = matchMetrics; + } + + return res; +} + +} //namespace SUIT_tools \ No newline at end of file diff --git a/src/SUIT/Tools/SUIT_SentenceMatcher.h b/src/SUIT/Tools/SUIT_SentenceMatcher.h new file mode 100644 index 000000000..15d6ad03a --- /dev/null +++ b/src/SUIT/Tools/SUIT_SentenceMatcher.h @@ -0,0 +1,103 @@ +// Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef SUIT_SENTENCEMATCHER_H +#define SUIT_SENTENCEMATCHER_H + +#include "../SUIT.h" + +#include +#include + + +namespace SUIT_tools { + /*! \class SUIT_SentenceMatcher + \brief Approximate string matcher, treats strings as sentences composed of words. */ + class SUIT_EXPORT SUIT_SentenceMatcher + { + public: + /*! Default config: + Exact word order = false; + Fuzzy words = true; + Case sensitive = false; + Query = ""; // matches nothing. + */ + SUIT_SentenceMatcher(); + + void setUseExactWordOrder(bool theOn); + void setUseFuzzyWords(bool theOn); + void setCaseSensitive(bool theOn); + inline bool isCaseSensitive() const { return myIsCaseSensitive; }; + + /*! \param theQuery should not be regex. */ + void setQuery(QString theQuery); + + inline const QString& getQuery() const { return myQuery; }; + + /*! \returns match metrics. The metrics >= 0. INF means mismatch. + The class is unable to differentiate exact match with some approximate matches! */ + double match(const QString& theInputString) const; + + /** \brief For debug. */ + QString toString() const; + + private: + static bool makePermutatedSentences(const QStringList& theWords, QList& theSentences); + static void makeFuzzyWords(const QStringList& theWords, QStringList& theFuzzyWords); + + /*! \returns number of characters in matched words. The number >= 0. */ + static int matchWithSentenceIgnoreEndings(const QString& theInputString, const QStringList& theSentence, bool theCaseSensitive); + /*! \returns number of characters in matched words. The number >= 0. */ + static int matchWithSentencesIgnoreEndings(const QString& theInputString, const QList& theSentences, bool theCaseSensitive); + + /*! \returns number of characters in matched words. The number >= 0. */ + static int matchAtLeastOneWord(const QString& theInputString, const QStringList& theWords, bool theCaseSensitive); + + /*! \returns number of characters in matched words. The number >= 0. */ + static int match( + const QString& theInputString, + const QStringList& theSentence, + bool theCaseSensitive + ); + + /*! \returns number of characters in matched words. The number >= 0. */ + static int match( + const QString& theInputString, + const QList& theSentences, + bool theCaseSensitive + ); + + bool myUseExactWordOrder; // If false, try to match with sentences, composed of query's words in different orders. + bool myUseFuzzyWords; // Try to match with sentences, composed of query's truncated words. + bool myIsCaseSensitive; + QString myQuery; + + QStringList myWords; // It is also original search sentence. + QList myPermutatedSentences; + + QStringList myFuzzyWords; // Regexes. + QList myFuzzyPermutatedSentences; + }; + +} //namespace SUIT_tools + +#endif //SUIT_SENTENCEMATCHER_H \ No newline at end of file diff --git a/src/SUIT/Tools/SUIT_extensions.cxx b/src/SUIT/Tools/SUIT_extensions.cxx new file mode 100644 index 000000000..5d089b9bb --- /dev/null +++ b/src/SUIT/Tools/SUIT_extensions.cxx @@ -0,0 +1,75 @@ +// Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "SUIT_extensions.h" +#include +#include +#include +#include +#include + +namespace SUIT_tools { + +QString substituteBashVars(const QString& theString) +{ + QString res = theString; + const auto env = QProcessEnvironment::systemEnvironment(); + int pos = 0; + QRegExp rx("\\$\\{([^\\}]+)\\}"); // Match substrings enclosed with "${" and "}". + rx.setMinimal(true); // Set search to non-greedy. + while((pos = rx.indexIn(res, pos)) != -1) { + QString capture = rx.cap(1); + QString subst = env.value(capture); + res.replace("${" + capture + "}", subst); + pos += rx.matchedLength(); + } + return res; +} + +QString substituteDOSVars(const QString& theString) +{ + QString res = theString; + int pos = 0; + QRegExp rx("%([^%]+)%"); // Match substrings enclosed with "%". + rx.setMinimal(true); // Set search to non-greedy. + while((pos = rx.indexIn(res, pos)) != -1) { + QString capture = rx.cap(1); + QString subst = Qtx::getenv(capture.toUtf8().constData()); + res.replace("%" + capture + "%", subst); + pos += rx.matchedLength(); + } + return res; +} + +QString substituteVars(const QString& theString) +{ + QString str = substituteBashVars(theString); + return substituteDOSVars(str); +} + +std::wstring to_wstring(const std::string& theStdString) +{ + std::wstring wideString = std::wstring_convert>().from_bytes(theStdString); + return wideString; +} + +} //namespace SUIT_tools diff --git a/src/SUIT/Tools/SUIT_extensions.h b/src/SUIT/Tools/SUIT_extensions.h new file mode 100644 index 000000000..c107db2a1 --- /dev/null +++ b/src/SUIT/Tools/SUIT_extensions.h @@ -0,0 +1,87 @@ +// Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef SUIT_TOOLS_EXTENSIONS_H +#define SUIT_TOOLS_EXTENSIONS_H + +#include "../SUIT.h" +#include +#include +#include +#include + + +namespace SUIT_tools { + + /*! \brief Compensates lack of std::distance(..) prior to C++17. + Does not check whether the iterators iterate the same container instance.*/ + template + SUIT_EXPORT std::size_t distance( + const Iterator& theStartIt, + const Iterator& theFinalIt + ) { + auto it = theStartIt; + std::size_t distance = 0; + while (distance <= std::numeric_limits::difference_type>::max()) { + if (it == theFinalIt) + return distance; + + it++; + distance++; + } + return distance; + } + + /*! \returns Distance from the theContainer.begin() to theIt. + \returns Inf, if theIt is not iterator of theContainer. */ + template + SUIT_EXPORT std::size_t distanceFromBegin( + const Container& theContainer, + const typename Container::const_iterator& theIt + ) { + auto it = theContainer.begin(); + std::size_t distance = 0; + while (it != theContainer.end()) { + if (it == theIt) + return distance; + + it++; + distance++; + } + return std::numeric_limits::infinity(); + } + + /*! \brief Replaces all Bash-style variables (enlosed with "${" and "}") with values of corresponding environment variables. */ + SUIT_EXPORT QString substituteBashVars(const QString& theString); + + /*! \brief Replaces all DOS-style variables (enlosed with "%") with values of corresponding environment variables. */ + SUIT_EXPORT QString substituteDOSVars(const QString& theString); + + /*! \brief Replaces all Bash- and DOS- style variables with values of corresponding environment variables. */ + SUIT_EXPORT QString substituteVars(const QString& theString); + + SUIT_EXPORT std::wstring to_wstring(const std::string& theStdString); + +} //namespace SUIT_tools + +#endif //SUIT_TOOLS_EXTENSIONS_H + diff --git a/src/SUIT/resources/SUIT_msg_fr.ts b/src/SUIT/resources/SUIT_msg_fr.ts index 9b8a31906..5698213e9 100644 --- a/src/SUIT/resources/SUIT_msg_fr.ts +++ b/src/SUIT/resources/SUIT_msg_fr.ts @@ -166,6 +166,13 @@ Voulez-vous l'écraser ? Find action Trouver une action + + Double click to start. + Double-cliquez pour démarrer. + + + + SUIT_FindActionWidget Unavailable actions Actions indisponibles @@ -182,6 +189,10 @@ Voulez-vous l'écraser ? Description Description + + Key sequence + Séquence de touches + SUIT_ViewWindow @@ -255,6 +266,17 @@ Voulez-vous l'écraser ? Ces raccourcis seront désactivés lors de la confirmation : + + SUIT_ShortcutTabWidget + + Double click to edit key sequence. + Double-cliquez pour modifier la séquence de touches. + + + Find shortcut + Trouver un raccourci + + SUIT_ShortcutTree @@ -265,6 +287,10 @@ Voulez-vous l'écraser ? Key sequence Séquence de touches + + Description + Description + Double click to edit key sequence. Double-cliquez pour modifier la séquence de touches. diff --git a/src/SUIT/resources/SUIT_msg_ja.ts b/src/SUIT/resources/SUIT_msg_ja.ts index ad3f28ddb..df619aa52 100644 --- a/src/SUIT/resources/SUIT_msg_ja.ts +++ b/src/SUIT/resources/SUIT_msg_ja.ts @@ -156,10 +156,17 @@ SUIT_FindActionDialog - + Find action 検索アクション - + + + Double click to start. + ダブルクリックして開始します。 + + + + SUIT_FindActionWidget Unavailable actions 利用できないアクション @@ -176,6 +183,10 @@ Description 説明 + + Key sequence + キーシーケンス + SUIT_ViewWindow @@ -249,6 +260,17 @@ これらのショートカットは確認時に無効になります。 + + SUIT_ShortcutTabWidget + + Double click to edit key sequence. + キーシーケンスを編集するにはダブルクリックします。 + + + Find shortcut + ショートカットを探す + + SUIT_ShortcutTree @@ -259,6 +281,10 @@ Key sequence キーシーケンス + + Description + 説明 + Double click to edit key sequence. ダブルクリックしてキー シーケンスを編集します。 diff --git a/src/SUIT/resources/action_assets.json b/src/SUIT/resources/action_assets.json index 14bbfeff2..16ccf28a8 100644 --- a/src/SUIT/resources/action_assets.json +++ b/src/SUIT/resources/action_assets.json @@ -1,733 +1,881 @@ { - "/#TOT_DESK_EDIT_COPY": { - "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/copy.png", - "langDependentAssets": { - "en": { - "name": "Copy", - "tooltip": "Copy the selection to the Clipboard" - }, - "fr": { - "name": "Copier", - "tooltip": "Copier la sélection dans le presse-papiers" - }, - "ja": { - "name": "コピー", - "tooltip": "選択範囲をクリップボードにコピー" - } - } - }, - "/#Viewers/View/Reset": { - "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/reset.png", - "langDependentAssets": { - "en": { - "name": "Reset", - "tooltip": "Reset View Point" - }, - "fr": { - "name": "Restaurer", - "tooltip": "Restaurer le point de vue" - }, - "ja": { - "name": "復元", - "tooltip": "ビューのポイントを復元します。" - } - } - }, - "/#Viewers/View/Rotate anticlockwise": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Rotate counterclockwise", - "tooltip": "Rotate view counterclockwise" - }, - "fr": { - "name": "Tourner la vue à gauche", - "tooltip": "Tourner la vue à gauche" - }, - "ja": { - "name": "表示を左に", - "tooltip": "表示を左に" - } - } - }, - "/#Viewers/View/Rotate clockwise": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Rotate clockwise", - "tooltip": "Rotate View Clockwise" - }, - "fr": { - "name": "Tourner la vue à droite", - "tooltip": "Tourner la vue à droite" - }, - "ja": { - "name": "右のビューを回転させる", - "tooltip": "右のビューを回転させる" - } - } - }, - "/#Viewers/View/Set X+": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "+OX", - "tooltip": "+OX View" - }, - "fr": { - "name": "+OX", - "tooltip": "Vue +OX" - }, - "ja": { - "name": "+OX", - "tooltip": "+OX View" - } - } - }, - "/#Viewers/View/Set X-": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "-OX", - "tooltip": "-OX View" - }, - "fr": { - "name": "-OX", - "tooltip": "Vue -OX" - }, - "ja": { - "name": "-OX", - "tooltip": "-OX View" - } - } - }, - "/#Viewers/View/Set Y+": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "+OY", - "tooltip": "+OY View" - }, - "fr": { - "name": "+OY", - "tooltip": "Vue +OY" - }, - "ja": { - "name": "+OY", - "tooltip": "+OY View" - } - } - }, - "/#Viewers/View/Set Y-": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "-OY", - "tooltip": "-OY View" - }, - "fr": { - "name": "-OY", - "tooltip": "Vue -OY" - }, - "ja": { - "name": "-OY", - "tooltip": "-OY View" - } - } - }, - "/#Viewers/View/Set Z+": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "+OZ", - "tooltip": "+OZ View" - }, - "fr": { - "name": "+OZ", - "tooltip": "Vue +OZ" - }, - "ja": { - "name": "+OZ", - "tooltip": "+OZ View" - } - } - }, - "/#Viewers/View/Set Z-": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "-OZ", - "tooltip": "-OZ View" - }, - "fr": { - "name": "-OZ", - "tooltip": "Vue -OZ" - }, - "ja": { - "name": "-OZ", - "tooltip": "-OZ View" - } - } - }, - "/#General/Object(s)/Hide": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Hide", - "tooltip": "Hide" - }, - "fr": { - "name": "Cacher", - "tooltip": "Cacher" - }, - "ja": { - "name": "非表示", - "tooltip": "非表示" - } - } - }, - "/#General/Object(s)/Show": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Show", - "tooltip": "Show" - }, - "fr": { - "name": "Afficher", - "tooltip": "Afficher" - }, - "ja": { - "name": "表示", - "tooltip": "表示" - } - } - }, - "/PRP_CLOSE": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Close", - "tooltip": "Close active window" - }, - "fr": { - "name": "Fermer", - "tooltip": "Fermer la fenêtre active" - }, - "ja": { - "name": "閉じる", - "tooltip": "アクティブ ウィンドウを閉じる" - } - } - }, - "/PRP_CREATE_NEW_WINDOW_FOR_VIEWER_0": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "GL 2D view", - "tooltip": "Create new GL 2D view" - }, - "fr": { - "name": "Scène GL ", - "tooltip": "Créer une nouvelle Scène GL " - }, - "ja": { - "name": "GL 2D view", - "tooltip": "新しい GL 2D view を作成します。" - } - } - }, - "/PRP_CREATE_NEW_WINDOW_FOR_VIEWER_1": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Plot 2D view", - "tooltip": "Create new Plot 2D view" - }, - "fr": { - "name": "Scène Plot2d ", - "tooltip": "Créer une nouvelle Scène Plot2d " - }, - "ja": { - "name": "Plot 2D View", - "tooltip": "新しい Plot 2D View を作成します。" - } - } - }, - "/PRP_CREATE_NEW_WINDOW_FOR_VIEWER_2": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "OCC 3D view", - "tooltip": "Create new OCC 3D view" - }, - "fr": { - "name": "Scène OCC", - "tooltip": "Créer une nouvelle Scène OCC" - }, - "ja": { - "name": "OCC 3D View", - "tooltip": "新しい OCC 3D View を作成します。" - } - } - }, - "/PRP_CREATE_NEW_WINDOW_FOR_VIEWER_3": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "VTK 3D view", - "tooltip": "Create new VTK 3D view" - }, - "fr": { - "name": "Scène VTK", - "tooltip": "Créer une nouvelle Scène VTK" - }, - "ja": { - "name": "VTK 3D View", - "tooltip": "新しい VTK 3D View を作成します。" - } - } - }, - "/PRP_CREATE_NEW_WINDOW_FOR_VIEWER_4": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "QxScene 2D view", - "tooltip": "Create new QxScene 2D view" - }, - "fr": { - "name": "Scène QxScene", - "tooltip": "Créer une nouvelle Scène QxScene" - }, - "ja": { - "name": "シーン QxScene", - "tooltip": "新しい シーン QxScene を作成します。" - } - } - }, - "/PRP_CREATE_NEW_WINDOW_FOR_VIEWER_5": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Graphics view", - "tooltip": "Create new Graphics view" - }, - "fr": { - "name": "Scène Graphiques", - "tooltip": "Créer une nouvelle Scène Graphiques" - }, - "ja": { - "name": "グラフィックの表示", - "tooltip": "新しい グラフィックの表示 を作成します。" - } - } - }, - "/PRP_CREATE_NEW_WINDOW_FOR_VIEWER_6": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "ParaView view", - "tooltip": "Create new ParaView view" - }, - "fr": { - "name": "Scène ParaView", - "tooltip": "Créer une nouvelle Scène ParaView" - }, - "ja": { - "name": "ParaView 表示 ", - "tooltip": "新しい ParaView 表示 を作成します。" - } - } - }, - "/PRP_CREATE_NEW_WINDOW_FOR_VIEWER_7": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Python view", - "tooltip": "Create new Python view" - }, - "fr": { - "name": "Vue Python", - "tooltip": "Créer une nouvelle Vue Python" - }, - "ja": { - "name": "Python view", - "tooltip": "新しい Python view を作成します。" - } - } - }, - "/PRP_CREATE_NEW_WINDOW_FOR_VIEWER_8": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "ParaView3D view", - "tooltip": "Create new ParaView3D view" - }, - "fr": { - "name": "ParaView3D view", - "tooltip": "Créer une nouvelle ParaView3D view" - }, - "ja": { - "name": "ParaView3D view", - "tooltip": "新しい ParaView3D view を作成します。" - } - } - }, - "/PRP_CREATE_NEW_WINDOW_FOR_VIEWER_9": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "QtView view", - "tooltip": "Create new QtView view" - }, - "fr": { - "name": "QtView view", - "tooltip": "Créer une nouvelle QtView view" - }, - "ja": { - "name": "QtView view", - "tooltip": "新しい QtView view を作成します。" - } - } - }, - "/PRP_DESK_CATALOG_GENERATOR": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Catalog Generator", - "tooltip": "Generates XML catalog of a component's interface" - }, - "fr": { - "name": "Genérateur de catalogue", - "tooltip": "Génére un catalogue XML de l'interface du composant" - }, - "ja": { - "name": "カタログ ジェネレーター", - "tooltip": "コンポーネントインターフェイスのXMLカタログを生成" - } - } - }, - "/PRP_DESK_FIND_ACTION": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Find action", - "tooltip": "Opens action search dialog" - }, - "fr": { - "name": "Trouver une action", - "tooltip": "Ouvre la boîte de dialogue de recherche d'action" - }, - "ja": { - "name": "検索アクション", - "tooltip": "アクション検索ダイアログを開きます" - } - } - }, - "/PRP_DESK_CONNECT": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Connect", - "tooltip": "Connect active study" - }, - "fr": { - "name": "Connecter", - "tooltip": "Connecter l'étude en cours" - }, - "ja": { - "name": "接続", - "tooltip": "アクティブスタディの接続" - } - } - }, - "/PRP_DESK_DISCONNECT": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Disconnect", - "tooltip": "Disconnect the current study" - }, - "fr": { - "name": "Déconnecter", - "tooltip": "Déconnecter l'étude en cours" - }, - "ja": { - "name": "切断", - "tooltip": "カレントスタディの切断" - } - } - }, - "/PRP_DESK_FILE_DUMP_STUDY": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Dump Study...", - "tooltip": "Dumps study to the python script" - }, - "fr": { - "name": "Générer le script de l'étude...", - "tooltip": "Génère le script python de l'étude" - }, - "ja": { - "name": "スクリプトを保存", - "tooltip": "Pythonスクリプトにスタディをダンプする" - } - } - }, - "/PRP_DESK_FILE_LOAD_SCRIPT": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Load Script...", - "tooltip": "Loads python script from file" - }, - "fr": { - "name": "Exécuter un script...", - "tooltip": "Exécute un script Python à partir d'un fichier" - }, - "ja": { - "name": "スクリプトを読込み...", - "tooltip": "ファイルからPythonスクリプトを読込み" - } - } - }, - "/PRP_DESK_HELP_ABOUT": { - "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/about.png", - "langDependentAssets": { - "en": { - "name": "About...", - "tooltip": "Shows 'About' dialog" - }, - "fr": { - "name": "A propos de...", - "tooltip": "Montre la boîte de dialogue 'A propos'" - }, - "ja": { - "name": "バージョン情報...", - "tooltip": "ソフト情報の表示" - } - } - }, - "/PRP_DESK_PREFERENCES": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Preferences...", - "tooltip": "Allow to change the preferences" - }, - "fr": { - "name": "Préférences...", - "tooltip": "Permettre de changer les préférences" - }, - "ja": { - "name": "環境設定...", - "tooltip": "設定を変更することができます。" - } - } - }, - "/PRP_DESK_VIEW_STATUSBAR": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Status Bar", - "tooltip": "Toggles status bar view on/off" - }, - "fr": { - "name": "Barre de status", - "tooltip": "Activer ou désactiver la barre de status" - }, - "ja": { - "name": "ステータス バー", - "tooltip": "ステータスバーの有効/無効" - } - } - }, - "/PRP_DESK_WINDOW_HSPLIT": { - "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/htile.png", - "langDependentAssets": { - "en": { - "name": "Split Horizontally", - "tooltip": "Splits the active window on two horizontal parts" - }, - "fr": { - "name": "Séparation horizontale", - "tooltip": "Diviser la fenêtre actuelle en deux parties horizontales" - }, - "ja": { - "name": "水平分割", - "tooltip": "現在のウィンドウを 2つに水平分割" - } - } - }, - "/PRP_DESK_WINDOW_VSPLIT": { - "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/vtile.png", - "langDependentAssets": { - "en": { - "name": "Split Vertically", - "tooltip": "Splits the active window on two vertical parts" - }, - "fr": { - "name": "Séparation verticale", - "tooltip": "Diviser la fenêtre actuelle en deux parties verticales" - }, - "ja": { - "name": "垂直分割", - "tooltip": "現在のウィンドウを2つに上下分割" - } - } - }, - "/PRP_FULLSCREEN": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Full screen", - "tooltip": "Switch to full screen mode" - }, - "fr": { - "name": "Plein écran", - "tooltip": "Basculer en mode plein écran" - }, - "ja": { - "name": "全画面表示", - "tooltip": "全画面表示モードに切り替え" - } - } - }, - "/PRP_RENAME": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Rename", - "tooltip": "Rename active window" - }, - "fr": { - "name": "Renommer", - "tooltip": "Renommer la fenêtre active" - }, - "ja": { - "name": "名前変更", - "tooltip": "アクティブなウィンドウの名前を変更" - } - } - }, - "/TOT_DESK_EDIT_PASTE": { - "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/paste.png", - "langDependentAssets": { - "en": { - "name": "Paste", - "tooltip": "Inserts the Clipboard content at the insertion point" - }, - "fr": { - "name": "Coller", - "tooltip": "Insérer le contenu du presse-papiers au point d'insertion" - }, - "ja": { - "name": "貼り付け", - "tooltip": "クリップボードの内容を挿入" - } - } - }, - "/TOT_DESK_FILE_CLOSE": { - "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/close.png", - "langDependentAssets": { - "en": { - "name": "Close", - "tooltip": "Closes the active document" - }, - "fr": { - "name": "Fermer", - "tooltip": "Ferme le document actuel" - }, - "ja": { - "name": "閉じる", - "tooltip": "現在のドキュメントを閉じる" - } - } - }, - "/TOT_DESK_FILE_EXIT": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Exit", - "tooltip": "Exits the application" - }, - "fr": { - "name": "Quitter", - "tooltip": "Quitte l'application" - }, - "ja": { - "name": "終了", - "tooltip": "アプリケーションを終了" - } - } - }, - "/TOT_DESK_FILE_NEW": { - "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/new.png", - "langDependentAssets": { - "en": { - "name": "New", - "tooltip": "Create a new document" - }, - "fr": { - "name": "Nouveau", - "tooltip": "Créer une nouvelle étude" - }, - "ja": { - "name": "新規作成", - "tooltip": "新しいドキュメントを作成" - } - } - }, - "/TOT_DESK_FILE_OPEN": { - "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/open.png", - "langDependentAssets": { - "en": { - "name": "Open...", - "tooltip": "Open an existing document" - }, - "fr": { - "name": "Ouvrir...", - "tooltip": "Ouvre une étude existant" - }, - "ja": { - "name": "開く...", - "tooltip": "既存のドキュメントを開く" - } - } - }, - "/TOT_DESK_FILE_SAVE": { - "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/save.png", - "langDependentAssets": { - "en": { - "name": "Save", - "tooltip": "Save the active document" - }, - "fr": { - "name": "Enregistrer", - "tooltip": "Sauvegarder l'étude actuelle" - }, - "ja": { - "name": "保存", - "tooltip": "現在のドキュメントを保存" - } - } - }, - "/TOT_DESK_FILE_SAVEAS": { - "iconPath": "", - "langDependentAssets": { - "en": { - "name": "Save As...", - "tooltip": "Saves the active document with a new name" - }, - "fr": { - "name": "Enregistrer sous...", - "tooltip": "Sauvegarder le document actuel sous un nouveau nom" - }, - "ja": { - "name": "別名保存...", - "tooltip": "現在のドキュメントを新しい名前で保存" + "": { + "children": { + "File": { + "isAction": false, + "langDependentAssets": { + "en": { + "name": "File" + }, + "fr": { + "name": "Fichier" + }, + "ja": { + "name": "ファイル" + } + }, + "children": { + "New": { + "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/new.png", + "langDependentAssets": { + "en": { + "name": "New", + "tooltip": "Create a new document" + }, + "fr": { + "name": "Nouveau", + "tooltip": "Créer une nouvelle étude" + }, + "ja": { + "name": "新規作成", + "tooltip": "新しいドキュメントを作成" + } + } + }, + "Open": { + "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/open.png", + "langDependentAssets": { + "en": { + "name": "Open...", + "tooltip": "Open an existing document" + }, + "fr": { + "name": "Ouvrir...", + "tooltip": "Ouvre une étude existant" + }, + "ja": { + "name": "開く...", + "tooltip": "既存のドキュメントを開く" + } + } + }, + "Close": { + "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/close.png", + "langDependentAssets": { + "en": { + "name": "Close", + "tooltip": "Closes the active document" + }, + "fr": { + "name": "Fermer", + "tooltip": "Ferme le document actuel" + }, + "ja": { + "name": "閉じる", + "tooltip": "現在のドキュメントを閉じる" + } + } + }, + "Save": { + "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/save.png", + "langDependentAssets": { + "en": { + "name": "Save", + "tooltip": "Save the active document" + }, + "fr": { + "name": "Enregistrer", + "tooltip": "Sauvegarder l'étude actuelle" + }, + "ja": { + "name": "保存", + "tooltip": "現在のドキュメントを保存" + } + } + }, + "SaveAs": { + "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/save.png", + "langDependentAssets": { + "en": { + "name": "Save As...", + "tooltip": "Saves the active document with a new name" + }, + "fr": { + "name": "Enregistrer sous...", + "tooltip": "Sauvegarder le document actuel sous un nouveau nom" + }, + "ja": { + "name": "別名保存...", + "tooltip": "現在のドキュメントを新しい名前で保存" + } + } + }, + "Study_ScriptPy_DumpTo": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "Dump Study...", + "tooltip": "Dumps study to the python script" + }, + "fr": { + "name": "Générer le script de l'étude...", + "tooltip": "Génère le script python de l'étude" + }, + "ja": { + "name": "スクリプトを保存", + "tooltip": "Pythonスクリプトにスタディをダンプする" + } + } + }, + "Study_ScriptPy_LoadFrom": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "Load Script...", + "tooltip": "Loads python script from file" + }, + "fr": { + "name": "Exécuter un script...", + "tooltip": "Exécute un script Python à partir d'un fichier" + }, + "ja": { + "name": "スクリプトを読込み...", + "tooltip": "ファイルからPythonスクリプトを読込み" + } + } + }, + "Study_Connection_Connect": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "Connect", + "tooltip": "Connect active study" + }, + "fr": { + "name": "Connecter", + "tooltip": "Connecter l'étude en cours" + }, + "ja": { + "name": "接続", + "tooltip": "アクティブスタディの接続" + } + } + }, + "Study_Connection_Disconnect": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "Disconnect", + "tooltip": "Disconnect the current study" + }, + "fr": { + "name": "Déconnecter", + "tooltip": "Déconnecter l'étude en cours" + }, + "ja": { + "name": "切断", + "tooltip": "カレントスタディの切断" + } + } + }, + "Preferences": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "Preferences...", + "tooltip": "Allow to change the preferences" + }, + "fr": { + "name": "Préférences...", + "tooltip": "Permettre de changer les préférences" + }, + "ja": { + "name": "環境設定...", + "tooltip": "設定を変更することができます。" + } + } + }, + "Exit": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "Exit", + "tooltip": "Exits the application" + }, + "fr": { + "name": "Quitter", + "tooltip": "Quitte l'application" + }, + "ja": { + "name": "終了", + "tooltip": "アプリケーションを終了" + } + } + } + } + }, + + "Edit": { + "isAction": false, + "langDependentAssets": { + "en": { + "name": "Edit" + }, + "fr": { + "name": "Edition" + }, + "ja": { + "name": "編集" + } + }, + "children": { + "#Clipboard_Copy": { + "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/copy.png", + "langDependentAssets": { + "en": { + "name": "Copy", + "tooltip": "Copy the selection to the Clipboard" + }, + "fr": { + "name": "Copier", + "tooltip": "Copier la sélection dans le presse-papiers" + }, + "ja": { + "name": "コピー", + "tooltip": "選択範囲をクリップボードにコピー" + } + } + }, + "#Clipboard_Paste": { + "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/paste.png", + "langDependentAssets": { + "en": { + "name": "Paste", + "tooltip": "Inserts the Clipboard content at the insertion point" + }, + "fr": { + "name": "Coller", + "tooltip": "Insérer le contenu du presse-papiers au point d'insertion" + }, + "ja": { + "name": "貼り付け", + "tooltip": "クリップボードの内容を挿入" + } + } + }, + "#Object_Hide": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "Hide", + "tooltip": "Hide" + }, + "fr": { + "name": "Cacher", + "tooltip": "Cacher" + }, + "ja": { + "name": "非表示", + "tooltip": "非表示" + } + } + }, + "#Object_Show": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "Show", + "tooltip": "Show" + }, + "fr": { + "name": "Afficher", + "tooltip": "Afficher" + }, + "ja": { + "name": "表示", + "tooltip": "表示" + } + } + }, + "#Undo": { + "iconPath": "%SHAPER_ROOT_DIR%/share/salome/resources/shaper/icons/XGUI/undo.png", + "langDependentAssets": { + "en": { + "name": "Undo", + "tooltip": "Undo last command" + }, + "fr": { + "name": "Annuler", + "tooltip": "Annuler la dernière commande" + } + } + }, + "#Redo": { + "iconPath": "%SHAPER_ROOT_DIR%/share/salome/resources/shaper/icons/XGUI/redo.png", + "langDependentAssets": { + "en": { + "name": "Redo", + "tooltip": "Redo last command" + }, + "fr": { + "name": "Refaire", + "tooltip": "Refaire la dernière commande" + } + } + } + } + }, + + "View": { + "isAction": false, + "langDependentAssets": { + "en": { + "name": "View" + }, + "fr": { + "name": "Affichage" + }, + "ja": { + "name": "ビュー" + } + }, + "children": { + "ViewPoint": { + "isAction": false, + "langDependentAssets": { + "en": { + "name": "View Point" + }, + "fr": { + "name": "Point de Vue" + }, + "ja": { + "name": "ビューポイント" + } + }, + "children": { + "#Reset": { + "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/reset.png", + "langDependentAssets": { + "en": { + "name": "Reset", + "tooltip": "Reset View Point" + }, + "fr": { + "name": "Restaurer", + "tooltip": "Restaurer le point de vue" + }, + "ja": { + "name": "復元", + "tooltip": "ビューのポイントを復元します。" + } + } + }, + "#RotateAnticlockwise": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "Rotate counterclockwise", + "tooltip": "Rotate view counterclockwise" + }, + "fr": { + "name": "Tourner la vue à gauche", + "tooltip": "Tourner la vue à gauche" + }, + "ja": { + "name": "表示を左に", + "tooltip": "表示を左に" + } + } + }, + "#RotateClockwise": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "Rotate clockwise", + "tooltip": "Rotate View Clockwise" + }, + "fr": { + "name": "Tourner la vue à droite", + "tooltip": "Tourner la vue à droite" + }, + "ja": { + "name": "右のビューを回転させる", + "tooltip": "右のビューを回転させる" + } + } + }, + "#SetDirOX+": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "+OX", + "tooltip": "+OX View" + }, + "fr": { + "name": "+OX", + "tooltip": "Vue +OX" + }, + "ja": { + "name": "+OX", + "tooltip": "+OX View" + } + } + }, + "#SetDirOX-": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "-OX", + "tooltip": "-OX View" + }, + "fr": { + "name": "-OX", + "tooltip": "Vue -OX" + }, + "ja": { + "name": "-OX", + "tooltip": "-OX View" + } + } + }, + "#SetDirOY+": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "+OY", + "tooltip": "+OY View" + }, + "fr": { + "name": "+OY", + "tooltip": "Vue +OY" + }, + "ja": { + "name": "+OY", + "tooltip": "+OY View" + } + } + }, + "#SetDirOY-": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "-OY", + "tooltip": "-OY View" + }, + "fr": { + "name": "-OY", + "tooltip": "Vue -OY" + }, + "ja": { + "name": "-OY", + "tooltip": "-OY View" + } + } + }, + "#SetDirOZ+": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "+OZ", + "tooltip": "+OZ View" + }, + "fr": { + "name": "+OZ", + "tooltip": "Vue +OZ" + }, + "ja": { + "name": "+OZ", + "tooltip": "+OZ View" + } + } + }, + "#SetDirOZ-": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "-OZ", + "tooltip": "-OZ View" + }, + "fr": { + "name": "-OZ", + "tooltip": "Vue -OZ" + }, + "ja": { + "name": "-OZ", + "tooltip": "-OZ View" + } + } + } + } + }, + "StatusBar_Toggle": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "Status Bar", + "tooltip": "Toggles status bar view on/off" + }, + "fr": { + "name": "Barre de status", + "tooltip": "Activer ou désactiver la barre de status" + }, + "ja": { + "name": "ステータス バー", + "tooltip": "ステータスバーの有効/無効" + } + } + }, + "FullScreen": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "Full screen", + "tooltip": "Switch to full screen mode" + }, + "fr": { + "name": "Plein écran", + "tooltip": "Basculer en mode plein écran" + }, + "ja": { + "name": "全画面表示", + "tooltip": "全画面表示モードに切り替え" + } + } + } + } + }, + + "Tools": { + "isAction": false, + "langDependentAssets": { + "en": { + "name": "Tools" + }, + "fr": { + "name": "Outils" + }, + "ja": { + "name": "ツール" + } + }, + "children": { + "CatalogGenerator": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "Catalog Generator", + "tooltip": "Generates XML catalog of a component's interface" + }, + "fr": { + "name": "Genérateur de catalogue", + "tooltip": "Génére un catalogue XML de l'interface du composant" + }, + "ja": { + "name": "カタログ ジェネレーター", + "tooltip": "コンポーネントインターフェイスのXMLカタログを生成" + } + } + }, + "FindAction": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "Find action", + "tooltip": "Opens action search dialog" + }, + "fr": { + "name": "Trouver une action", + "tooltip": "Ouvre la boîte de dialogue de recherche d'action" + }, + "ja": { + "name": "検索アクション", + "tooltip": "アクション検索ダイアログを開きます" + } + } + } + } + }, + + "Window": { + "isAction": false, + "langDependentAssets": { + "en": { + "name": "Window" + }, + "fr": { + "name": "Fenêtre" + }, + "ja": { + "name": "ウィンドウ" + } + }, + "children": { + "New": { + "isAction": false, + "langDependentAssets": { + "en": { + "name": "New Window" + }, + "fr": { + "name": "Nouvelle Fenêtre" + }, + "ja": { + "name": "新しいウィンドウ" + } + }, + "children": { + "ForViewer0": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "GL 2D view", + "tooltip": "Create new GL 2D view" + }, + "fr": { + "name": "Scène GL ", + "tooltip": "Créer une nouvelle Scène GL " + }, + "ja": { + "name": "GL 2D view", + "tooltip": "新しい GL 2D view を作成します。" + } + } + }, + "ForViewer1": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "Plot 2D view", + "tooltip": "Create new Plot 2D view" + }, + "fr": { + "name": "Scène Plot2d ", + "tooltip": "Créer une nouvelle Scène Plot2d " + }, + "ja": { + "name": "Plot 2D View", + "tooltip": "新しい Plot 2D View を作成します。" + } + } + }, + "ForViewer2": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "OCC 3D view", + "tooltip": "Create new OCC 3D view" + }, + "fr": { + "name": "Scène OCC", + "tooltip": "Créer une nouvelle Scène OCC" + }, + "ja": { + "name": "OCC 3D View", + "tooltip": "新しい OCC 3D View を作成します。" + } + } + }, + "ForViewer3": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "VTK 3D view", + "tooltip": "Create new VTK 3D view" + }, + "fr": { + "name": "Scène VTK", + "tooltip": "Créer une nouvelle Scène VTK" + }, + "ja": { + "name": "VTK 3D View", + "tooltip": "新しい VTK 3D View を作成します。" + } + } + }, + "ForViewer4": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "QxScene 2D view", + "tooltip": "Create new QxScene 2D view" + }, + "fr": { + "name": "Scène QxScene", + "tooltip": "Créer une nouvelle Scène QxScene" + }, + "ja": { + "name": "シーン QxScene", + "tooltip": "新しい シーン QxScene を作成します。" + } + } + }, + "ForViewer5": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "Graphics view", + "tooltip": "Create new Graphics view" + }, + "fr": { + "name": "Scène Graphiques", + "tooltip": "Créer une nouvelle Scène Graphiques" + }, + "ja": { + "name": "グラフィックの表示", + "tooltip": "新しい グラフィックの表示 を作成します。" + } + } + }, + "ForViewer6": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "ParaView view", + "tooltip": "Create new ParaView view" + }, + "fr": { + "name": "Scène ParaView", + "tooltip": "Créer une nouvelle Scène ParaView" + }, + "ja": { + "name": "ParaView 表示 ", + "tooltip": "新しい ParaView 表示 を作成します。" + } + } + }, + "ForViewer7": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "Python view", + "tooltip": "Create new Python view" + }, + "fr": { + "name": "Vue Python", + "tooltip": "Créer une nouvelle Vue Python" + }, + "ja": { + "name": "Python view", + "tooltip": "新しい Python view を作成します。" + } + } + }, + "ForViewer8": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "ParaView3D view", + "tooltip": "Create new ParaView3D view" + }, + "fr": { + "name": "ParaView3D view", + "tooltip": "Créer une nouvelle ParaView3D view" + }, + "ja": { + "name": "ParaView3D view", + "tooltip": "新しい ParaView3D view を作成します。" + } + } + }, + "ForViewer9": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "QtView view", + "tooltip": "Create new QtView view" + }, + "fr": { + "name": "QtView view", + "tooltip": "Créer une nouvelle QtView view" + }, + "ja": { + "name": "QtView view", + "tooltip": "新しい QtView view を作成します。" + } + } + } + } + }, + + "Close": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "Close", + "tooltip": "Close active window" + }, + "fr": { + "name": "Fermer", + "tooltip": "Fermer la fenêtre active" + }, + "ja": { + "name": "閉じる", + "tooltip": "アクティブ ウィンドウを閉じる" + } + } + }, + "SplitH": { + "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/htile.png", + "langDependentAssets": { + "en": { + "name": "Split Horizontally", + "tooltip": "Splits the active window on two horizontal parts" + }, + "fr": { + "name": "Séparation horizontale", + "tooltip": "Diviser la fenêtre actuelle en deux parties horizontales" + }, + "ja": { + "name": "水平分割", + "tooltip": "現在のウィンドウを 2つに水平分割" + } + } + }, + "SplitV": { + "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/vtile.png", + "langDependentAssets": { + "en": { + "name": "Split Vertically", + "tooltip": "Splits the active window on two vertical parts" + }, + "fr": { + "name": "Séparation verticale", + "tooltip": "Diviser la fenêtre actuelle en deux parties verticales" + }, + "ja": { + "name": "垂直分割", + "tooltip": "現在のウィンドウを2つに上下分割" + } + } + }, + "Rename": { + "iconPath": "", + "langDependentAssets": { + "en": { + "name": "Rename", + "tooltip": "Rename active window" + }, + "fr": { + "name": "Renommer", + "tooltip": "Renommer la fenêtre active" + }, + "ja": { + "name": "名前変更", + "tooltip": "アクティブなウィンドウの名前を変更" + } + } + } + } + }, + + "AboutDialog": { + "iconPath": "${GUI_ROOT_DIR}/share/salome/resources/gui/about.png", + "langDependentAssets": { + "en": { + "name": "About...", + "tooltip": "Shows 'About' dialog" + }, + "fr": { + "name": "A propos de...", + "tooltip": "Montre la boîte de dialogue 'A propos'" + }, + "ja": { + "name": "バージョン情報...", + "tooltip": "ソフト情報の表示" + } + } } } } -} +} \ No newline at end of file diff --git a/src/SUIT/resources/default_action_icon.svg b/src/SUIT/resources/default_action_icon.svg new file mode 100755 index 000000000..c3b3e7183 --- /dev/null +++ b/src/SUIT/resources/default_action_icon.svg @@ -0,0 +1,50 @@ + + + + + + + + + + diff --git a/src/SUIT/resources/default_folder_action_icon.svg b/src/SUIT/resources/default_folder_action_icon.svg new file mode 100755 index 000000000..f2e2da434 --- /dev/null +++ b/src/SUIT/resources/default_folder_action_icon.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + diff --git a/src/SUIT/resources/default_folder_icon.svg b/src/SUIT/resources/default_folder_icon.svg new file mode 100755 index 000000000..beea9874f --- /dev/null +++ b/src/SUIT/resources/default_folder_icon.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + diff --git a/src/SUIT/resources/find.svg b/src/SUIT/resources/find.svg new file mode 100644 index 000000000..67a05d405 --- /dev/null +++ b/src/SUIT/resources/find.svg @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/Qtx/images/shortcut_disable.svg b/src/SUIT/resources/shortcut_disable.svg similarity index 100% rename from src/Qtx/images/shortcut_disable.svg rename to src/SUIT/resources/shortcut_disable.svg diff --git a/src/Qtx/images/shortcut_restore.svg b/src/SUIT/resources/shortcut_restore.svg similarity index 100% rename from src/Qtx/images/shortcut_restore.svg rename to src/SUIT/resources/shortcut_restore.svg diff --git a/src/SUIT/resources/sort_ascending.svg b/src/SUIT/resources/sort_ascending.svg new file mode 100644 index 000000000..cb3916ee3 --- /dev/null +++ b/src/SUIT/resources/sort_ascending.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + diff --git a/src/SUIT/resources/sort_ascending_leading_key.svg b/src/SUIT/resources/sort_ascending_leading_key.svg new file mode 100644 index 000000000..4429329fa --- /dev/null +++ b/src/SUIT/resources/sort_ascending_leading_key.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + diff --git a/src/SUIT/resources/sort_descending.svg b/src/SUIT/resources/sort_descending.svg new file mode 100644 index 000000000..e698306bb --- /dev/null +++ b/src/SUIT/resources/sort_descending.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + diff --git a/src/SUIT/resources/sort_descending_leading_key.svg b/src/SUIT/resources/sort_descending_leading_key.svg new file mode 100644 index 000000000..bba9fb85e --- /dev/null +++ b/src/SUIT/resources/sort_descending_leading_key.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + diff --git a/src/SVTK/SVTK_ViewWindow.cxx b/src/SVTK/SVTK_ViewWindow.cxx index 74412fa3b..38f80aee7 100644 --- a/src/SVTK/SVTK_ViewWindow.cxx +++ b/src/SVTK/SVTK_ViewWindow.cxx @@ -2263,7 +2263,7 @@ void SVTK_ViewWindow::createActions(SUIT_ResourceMgr* theResourceMgr) // Projections anAction = new QtxAction(tr("MNU_FRONT_VIEW"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_FRONT" ) ), - tr( "MNU_FRONT_VIEW" ), 0, this, false, "/#Viewers/View/Set X-"); + tr( "MNU_FRONT_VIEW" ), 0, this, false, "/View/ViewPoint/#SetDirOX-"); anAction->setStatusTip(tr("DSC_FRONT_VIEW")); connect(anAction, SIGNAL(triggered()), this, SLOT(onFrontView())); this->addAction(anAction); @@ -2271,7 +2271,7 @@ void SVTK_ViewWindow::createActions(SUIT_ResourceMgr* theResourceMgr) anAction = new QtxAction(tr("MNU_BACK_VIEW"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_BACK" ) ), - tr( "MNU_BACK_VIEW" ), 0, this, false, "/#Viewers/View/Set X+"); + tr( "MNU_BACK_VIEW" ), 0, this, false, "/View/ViewPoint/#SetDirOX+"); anAction->setStatusTip(tr("DSC_BACK_VIEW")); connect(anAction, SIGNAL(triggered()), this, SLOT(onBackView())); this->addAction(anAction); @@ -2279,7 +2279,7 @@ void SVTK_ViewWindow::createActions(SUIT_ResourceMgr* theResourceMgr) anAction = new QtxAction(tr("MNU_TOP_VIEW"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_TOP" ) ), - tr( "MNU_TOP_VIEW" ), 0, this, false, "/#Viewers/View/Set Z-"); + tr( "MNU_TOP_VIEW" ), 0, this, false, "/View/ViewPoint/#SetDirOZ-"); anAction->setStatusTip(tr("DSC_TOP_VIEW")); connect(anAction, SIGNAL(triggered()), this, SLOT(onTopView())); this->addAction(anAction); @@ -2287,7 +2287,7 @@ void SVTK_ViewWindow::createActions(SUIT_ResourceMgr* theResourceMgr) anAction = new QtxAction(tr("MNU_BOTTOM_VIEW"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_BOTTOM" ) ), - tr( "MNU_BOTTOM_VIEW" ), 0, this, false, "/#Viewers/View/Set Z+"); + tr( "MNU_BOTTOM_VIEW" ), 0, this, false, "/View/ViewPoint/#SetDirOZ+"); anAction->setStatusTip(tr("DSC_BOTTOM_VIEW")); connect(anAction, SIGNAL(triggered()), this, SLOT(onBottomView())); this->addAction(anAction); @@ -2295,7 +2295,7 @@ void SVTK_ViewWindow::createActions(SUIT_ResourceMgr* theResourceMgr) anAction = new QtxAction(tr("MNU_LEFT_VIEW"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_LEFT" ) ), - tr( "MNU_LEFT_VIEW" ), 0, this, false, "/#Viewers/View/Set Y+"); + tr( "MNU_LEFT_VIEW" ), 0, this, false, "/View/ViewPoint/#SetDirOY+"); anAction->setStatusTip(tr("DSC_LEFT_VIEW")); connect(anAction, SIGNAL(triggered()), this, SLOT(onLeftView())); this->addAction(anAction); @@ -2303,7 +2303,7 @@ void SVTK_ViewWindow::createActions(SUIT_ResourceMgr* theResourceMgr) anAction = new QtxAction(tr("MNU_RIGHT_VIEW"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_RIGHT" ) ), - tr( "MNU_RIGHT_VIEW" ), 0, this, false, "/#Viewers/View/Set Y-"); + tr( "MNU_RIGHT_VIEW" ), 0, this, false, "/View/ViewPoint/#SetDirOY-"); anAction->setStatusTip(tr("DSC_RIGHT_VIEW")); connect(anAction, SIGNAL(triggered()), this, SLOT(onRightView())); this->addAction(anAction); @@ -2312,7 +2312,7 @@ void SVTK_ViewWindow::createActions(SUIT_ResourceMgr* theResourceMgr) // rotate anticlockwise anAction = new QtxAction(tr("MNU_ANTICLOCKWISE_VIEW"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_ANTICLOCKWISE" ) ), - tr( "MNU_ANTICLOCKWISE_VIEW" ), 0, this, false, "/#Viewers/View/Rotate anticlockwise"); + tr( "MNU_ANTICLOCKWISE_VIEW" ), 0, this, false, "/View/ViewPoint/#RotateAnticlockwise"); anAction->setStatusTip(tr("DSC_ANTICLOCKWISE_VIEW")); connect(anAction, SIGNAL(triggered()), this, SLOT(onAntiClockWiseView())); this->addAction(anAction); @@ -2321,7 +2321,7 @@ void SVTK_ViewWindow::createActions(SUIT_ResourceMgr* theResourceMgr) // rotate clockwise anAction = new QtxAction(tr("MNU_CLOCKWISE_VIEW"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_CLOCKWISE" ) ), - tr( "MNU_CLOCKWISE_VIEW" ), 0, this, false, "/#Viewers/View/Rotate clockwise"); + tr( "MNU_CLOCKWISE_VIEW" ), 0, this, false, "/View/ViewPoint/#RotateClockwise"); anAction->setStatusTip(tr("DSC_CLOCKWISE_VIEW")); connect(anAction, SIGNAL(triggered()), this, SLOT(onClockWiseView())); this->addAction(anAction); @@ -2330,7 +2330,7 @@ void SVTK_ViewWindow::createActions(SUIT_ResourceMgr* theResourceMgr) // Reset anAction = new QtxAction(tr("MNU_RESET_VIEW"), theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_RESET" ) ), - tr( "MNU_RESET_VIEW" ), 0, this, false, "/#Viewers/View/Reset"); + tr( "MNU_RESET_VIEW" ), 0, this, false, "/View/ViewPoint/#Reset"); anAction->setStatusTip(tr("DSC_RESET_VIEW")); connect(anAction, SIGNAL(triggered()), this, SLOT(onResetView())); this->addAction(anAction); diff --git a/src/SalomeApp/SalomeApp_Application.cxx b/src/SalomeApp/SalomeApp_Application.cxx index 6a5847fd4..ff57f77e0 100644 --- a/src/SalomeApp/SalomeApp_Application.cxx +++ b/src/SalomeApp/SalomeApp_Application.cxx @@ -344,12 +344,12 @@ void SalomeApp_Application::createActions() //! Dump study createAction( DumpStudyId, tr( "TOT_DESK_FILE_DUMP_STUDY" ), QIcon(), tr( "MEN_DESK_FILE_DUMP_STUDY" ), tr( "PRP_DESK_FILE_DUMP_STUDY" ), - QKeySequence::UnknownKey, desk, false, this, SLOT( onDumpStudy() ), "/PRP_DESK_FILE_DUMP_STUDY" ); + QKeySequence::UnknownKey, desk, false, this, SLOT( onDumpStudy() ), "/File/Study_ScriptPy_DumpTo" ); //! Load script createAction( LoadScriptId, tr( "TOT_DESK_FILE_LOAD_SCRIPT" ), QIcon(), tr( "MEN_DESK_FILE_LOAD_SCRIPT" ), tr( "PRP_DESK_FILE_LOAD_SCRIPT" ), - QKeySequence::UnknownKey, desk, false, this, SLOT( onLoadScript() ), "/PRP_DESK_FILE_LOAD_SCRIPT" ); + QKeySequence::UnknownKey, desk, false, this, SLOT( onLoadScript() ), "/File/Study_ScriptPy_LoadFrom" ); //! Properties createAction( PropertiesId, tr( "TOT_DESK_PROPERTIES" ), QIcon(), @@ -359,7 +359,7 @@ void SalomeApp_Application::createActions() //! Catalog Generator createAction( CatalogGenId, tr( "TOT_DESK_CATALOG_GENERATOR" ), QIcon(), tr( "MEN_DESK_CATALOG_GENERATOR" ), tr( "PRP_DESK_CATALOG_GENERATOR" ), - QKeySequence::UnknownKey, desk, false, this, SLOT( onCatalogGen() ), "/PRP_DESK_CATALOG_GENERATOR" ); + QKeySequence::UnknownKey, desk, false, this, SLOT( onCatalogGen() ), "/Tools/CatalogGenerator" ); //! Registry Display createAction( RegDisplayId, tr( "TOT_DESK_REGISTRY_DISPLAY" ), QIcon(), @@ -369,17 +369,17 @@ void SalomeApp_Application::createActions() //! Find action dialog createAction( FindActionId, tr( "TOT_DESK_FIND_ACTION" ), QIcon(), tr( "MEN_DESK_FIND_ACTION" ), tr( "PRP_DESK_FIND_ACTION" ), - QKeySequence::UnknownKey, desk, false, this, SLOT( onFindAction() ), "/PRP_DESK_FIND_ACTION" ); + QKeySequence::UnknownKey, desk, false, this, SLOT( onFindAction() ), "/Tools/FindAction" ); createAction( ConnectId, tr( "TOT_DESK_CONNECT_STUDY" ), QIcon(), - tr( "MEN_DESK_CONNECT" ), tr( "PRP_DESK_CONNECT" ), - QKeySequence::UnknownKey, desk, false, this, SLOT( onLoadDoc() ), "/PRP_DESK_CONNECT" ); + tr( "MEN_DESK_CONNECT" ), tr( "File/Study_Connection_Connect" ), + QKeySequence::UnknownKey, desk, false, this, SLOT( onLoadDoc() ), "/File/Study_Connection_Connect" ); //no need at this action for mono-study application because study is always exists action( ConnectId )->setVisible( false ); createAction( DisconnectId, tr( "TOT_DESK_DISCONNECT_STUDY" ), QIcon(), tr( "MEN_DESK_DISCONNECT" ), tr( "PRP_DESK_DISCONNECT" ), - QKeySequence::UnknownKey, desk, false, this, SLOT( onUnloadDoc() ), "/PRP_DESK_DISCONNECT" ); + QKeySequence::UnknownKey, desk, false, this, SLOT( onUnloadDoc() ), "/File/Study_Connection_Disconnect" ); //no need at this action for mono-study application because study is always exists action( DisconnectId )->setVisible( false ); diff --git a/tools/DevTools/ShortcutMgr/ShortcutMgr. Resource generator.xlsx b/tools/DevTools/ShortcutMgr/ShortcutMgr. Resource generator.xlsx deleted file mode 100644 index bfc86f94a8274bccf4d771067fabf5554ef6eb85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 901981 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 z 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
  • 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 z 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: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

    l+0NEd42wqP98^{>GojQooQ|x++1Scl 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

    #)z8h1Z5OWW|-)iF*m&g%4fQ~ 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

    v)3fGi$Tp9`RFm) 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 ?fjQIQZ*t{8R;=#|1Llu2lG9L7gOvfS<|I6QSxV zBD(B9Khq45`5m$93fMbPC6}ck1yY#_N(kYWlcQV`zVDroc^)Izli)ij3iQ{z%r0!J ziv|^2%k+}#@$%Jv7KWF+L!#LyB9{a@85^7jNF)l)K47Jg07-J7qe)Kid)b0`Qa>I; zLiWiDsUNd_YA{YXoZm_ownmvLWCP+YXlmkSkoYR!Sq5H?73Ef6@tB3TQM&!c`Qp z8BA(7GgD2us`##qHxgNdN6H)NP5Ki!K&mUq4FFQoKC&J_O4|2o0h_MRCc_Cb2t!L6 zVD5Uzj0C@{KvtB5oxE#C4z6njjlju-fXOnBCyY)+tGA<7XO-zVt$5Ri6&}wcg1-10 zVS~yIo5HmO<@Sk1UUanBS8WwG_1BaU>HVHEW06|P$;R7^=^4MvT6*R&8)rHCxioYs z5uIjxyj*ql+x~HqGpux1yRhW-(4ooA(A=0-{wX==zHbJ0_XmiCWwK&nW!|c~$tSI! z(`Rz&d{1l6c`SvW8w%W#mS{7%?XIwtCTYu;(34EB~RCD9Re~;VijBjBZ{~jOkEkRir zS1{a~zQa$Vpsc8rQ4fu7w${IBB#2eT>CMNFQI%KSHIdc-OYQ1;?am- z@DH0G3LgE&A>=mAVBR6*F`Z^!Gsk#7yp7pkAJ4r=ZEWLAd^5Ax7XIX3(?)hZIVjs! z)FD@rp{E9�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 H_SXLZ3@Q