diff --git a/framework/actions/internal/actionsdispatcher.cpp b/framework/actions/internal/actionsdispatcher.cpp index e8de252e3d..90a813c76c 100644 --- a/framework/actions/internal/actionsdispatcher.cpp +++ b/framework/actions/internal/actionsdispatcher.cpp @@ -78,7 +78,7 @@ void ActionsDispatcher::dispatch(const ActionCode& actionCode, const ActionData& void ActionsDispatcher::dispatch(const ActionQuery& actionQuery) { - if (actionQuery.uri().scheme() == rcommand::COMMAND_SCHEME) { + if (muse::strings::startsWith(actionQuery.uri().scheme(), rcommand::COMMAND_SCHEME)) { commandDispatcher()->dispatch(actionQuery); return; } diff --git a/framework/diagnostics/qml/Muse/Diagnostics/DiagnosticActionsPanel.qml b/framework/diagnostics/qml/Muse/Diagnostics/DiagnosticActionsPanel.qml index ddb35499c3..333d20420a 100644 --- a/framework/diagnostics/qml/Muse/Diagnostics/DiagnosticActionsPanel.qml +++ b/framework/diagnostics/qml/Muse/Diagnostics/DiagnosticActionsPanel.qml @@ -69,7 +69,7 @@ Rectangle { FlatButton { anchors.verticalCenter: parent.verticalCenter - text: "Print" + text: "Print this" onClicked: actionsModel.print() } } diff --git a/framework/rcommand/commandtypes.h b/framework/rcommand/commandtypes.h index bafad07462..c9dc3958e6 100644 --- a/framework/rcommand/commandtypes.h +++ b/framework/rcommand/commandtypes.h @@ -33,7 +33,7 @@ #include "ui/uitypes.h" namespace muse::rcommand { -constexpr std::string_view COMMAND_SCHEME = "command://"; +constexpr std::string_view COMMAND_SCHEME = "command"; using Command = Uri; using CommandQuery = UriQuery; diff --git a/framework/shortcuts/internal/shortcutscontroller.cpp b/framework/shortcuts/internal/shortcutscontroller.cpp index bf157ed4dc..a842433d0d 100644 --- a/framework/shortcuts/internal/shortcutscontroller.cpp +++ b/framework/shortcuts/internal/shortcutscontroller.cpp @@ -21,6 +21,7 @@ */ #include "shortcutscontroller.h" +#include "actions/actiontypes.h" #include "log.h" #define SHORTCUTS_DEBUG 1 @@ -34,6 +35,7 @@ using namespace muse::shortcuts; using namespace muse::actions; using namespace muse::rcommand; +using namespace muse::ui; void ShortcutsController::init() { diff --git a/framework/shortcuts/internal/shortcutsregister.cpp b/framework/shortcuts/internal/shortcutsregister.cpp index d79c92cf8f..ec67c3d853 100644 --- a/framework/shortcuts/internal/shortcutsregister.cpp +++ b/framework/shortcuts/internal/shortcutsregister.cpp @@ -28,14 +28,17 @@ #include "global/io/file.h" #include "global/serialization/xmlstreamreader.h" #include "global/serialization/xmlstreamwriter.h" +#include "global/containers.h" #include "multiwindows/resourcelockguard.h" +#include "ui/navigationcommands.h" #include "log.h" using namespace muse; using namespace muse::shortcuts; using namespace muse::async; +using namespace muse::ui; static constexpr std::string_view SHORTCUTS_TAG("Shortcuts"); static constexpr std::string_view SHORTCUT_TAG("SC"); @@ -46,6 +49,25 @@ static constexpr std::string_view AUTOREPEAT_TAG("autorepeat"); static const std::string SHORTCUTS_RESOURCE_NAME("SHORTCUTS"); +static const std::map compatActionToCommand = { + { "nav-next-section", NEXT_SECTION_COMMAND }, + { "nav-prev-section", PREV_SECTION_COMMAND }, + { "nav-next-panel", NEXT_PANEL_COMMAND }, + { "nav-prev-panel", PREV_PANEL_COMMAND }, + { "nav-next-tab", NEXT_PANEL_COMMAND }, + { "nav-prev-tab", PREV_PANEL_COMMAND }, + { "nav-trigger-control", TRIGGER_CONTROL_COMMAND }, + { "nav-right", RIGHT_COMMAND }, + { "nav-left", LEFT_COMMAND }, + { "nav-up", UP_COMMAND }, + { "nav-down", DOWN_COMMAND }, + { "nav-escape", ESCAPE_COMMAND }, + { "nav-first-control", FIRST_CONTROL_COMMAND }, + { "nav-last-control", LAST_CONTROL_COMMAND }, + { "nav-nextrow-control", NEXTROW_CONTROL_COMMAND }, + { "nav-prevrow-control", PREVROW_CONTROL_COMMAND }, +}; + static const std::map SHORTCUTS_EXPAND_IGNORE_MAP = { { QKeySequence::StandardKey::HelpContents, Qt::Key_Help }, { QKeySequence::StandardKey::Open, Qt::Key_Open }, @@ -324,6 +346,10 @@ Shortcut ShortcutsRegister::readShortcut(XmlStreamReader& reader) const if (tag == ACTION_CODE_TAG) { shortcut.action = reader.readAsciiText(); + const rcommand::Command& command = muse::value(compatActionToCommand, shortcut.action); + if (command.isValid()) { + shortcut.action = command.toString(); + } } else if (tag == STANDARD_KEY_TAG) { shortcut.standardKey = QKeySequence::StandardKey(reader.readInt()); } else if (tag == SEQUENCE_TAG) { diff --git a/framework/ui/api/navigationapi.cpp b/framework/ui/api/navigationapi.cpp index 99ee7d9942..95be6ae204 100644 --- a/framework/ui/api/navigationapi.cpp +++ b/framework/ui/api/navigationapi.cpp @@ -21,6 +21,8 @@ */ #include "navigationapi.h" +#include "navigationcommands.h" + #include "log.h" using namespace muse::api; @@ -37,37 +39,37 @@ NavigationApi::~NavigationApi() void NavigationApi::nextPanel() { - dispatcher()->dispatch("nav-next-panel"); + dispatcher()->dispatch(NEXT_PANEL_COMMAND); } void NavigationApi::prevPanel() { - dispatcher()->dispatch("nav-prev-panel"); + dispatcher()->dispatch(PREV_PANEL_COMMAND); } void NavigationApi::right() { - dispatcher()->dispatch("nav-right"); + dispatcher()->dispatch(RIGHT_COMMAND); } void NavigationApi::left() { - dispatcher()->dispatch("nav-left"); + dispatcher()->dispatch(LEFT_COMMAND); } void NavigationApi::up() { - dispatcher()->dispatch("nav-up"); + dispatcher()->dispatch(UP_COMMAND); } void NavigationApi::down() { - dispatcher()->dispatch("nav-down"); + dispatcher()->dispatch(DOWN_COMMAND); } void NavigationApi::escape() { - dispatcher()->dispatch("nav-escape"); + dispatcher()->dispatch(ESCAPE_COMMAND); } bool NavigationApi::goToControl(const QString& section, const QString& panel, const QJSValue& controlNameOrIndex) @@ -95,7 +97,7 @@ bool NavigationApi::goToControl(const QString& section, const QString& panel, co void NavigationApi::trigger() { - dispatcher()->dispatch("nav-trigger-control"); + dispatcher()->dispatch(TRIGGER_CONTROL_COMMAND); } bool NavigationApi::triggerControl(const QString& section, const QString& panel, const QJSValue& controlNameOrIndex) diff --git a/framework/ui/api/navigationapi.h b/framework/ui/api/navigationapi.h index 862ecf3cb0..dc1f820e10 100644 --- a/framework/ui/api/navigationapi.h +++ b/framework/ui/api/navigationapi.h @@ -27,7 +27,7 @@ #include "api/apiobject.h" #include "modularity/ioc.h" -#include "actions/iactionsdispatcher.h" +#include "rcommand/icommanddispatcher.h" #include "ui/inavigationcontroller.h" namespace muse::api { @@ -35,7 +35,7 @@ class NavigationApi : public api::ApiObject { Q_OBJECT - ContextInject dispatcher = { this }; + ContextInject dispatcher = { this }; ContextInject navigation = { this }; public: