Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion framework/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,11 @@ if (MUSE_MODULE_RCONTROL)
endif()

if (MUSE_MODULE_SHORTCUTS)
add_subdirectory(shortcuts)
if (MUSE_MODULE_SHORTCUTS_V2)
add_subdirectory(shortcuts_v2)
else()
add_subdirectory(shortcuts)
endif()
endif()

if (MUSE_MODULE_TOURS)
Expand Down
2 changes: 2 additions & 0 deletions framework/cmake/MuseDeclareOptions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ declare_muse_module_opt(RCOMMAND ON)
declare_muse_module_opt(RCONTROL ON)

declare_muse_module_opt(SHORTCUTS ON)
option(MUSE_MODULE_SHORTCUTS_V2 "Use shortcuts v2" OFF)

declare_muse_module_opt(TESTFLOW ON)
declare_muse_module_opt(TOURS ON)

Expand Down
1 change: 1 addition & 0 deletions framework/cmake/muse_framework_config.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@
#cmakedefine MUSE_MODULE_SHORTCUTS 1
#cmakedefine MUSE_MODULE_SHORTCUTS_TESTS 1
#cmakedefine MUSE_MODULE_SHORTCUTS_API 1
#cmakedefine MUSE_MODULE_SHORTCUTS_V2 1

#cmakedefine MUSE_MODULE_TOURS 1
#cmakedefine MUSE_MODULE_TOURS_TESTS 1
Expand Down
4 changes: 0 additions & 4 deletions framework/shortcuts/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,14 @@ target_sources(muse_shortcuts PRIVATE
shortcutstypes.h
shortcutcontext.h
ishortcutsregister.h
icommandshortcutsregister.h
ishortcutscontroller.h
ishortcutsconfiguration.h
ishortcutsresolver.h

api/shortcutsapi.cpp
api/shortcutsapi.h

internal/shortcutsregister.cpp
internal/shortcutsregister.h
internal/commandshortcutsregister.cpp
internal/commandshortcutsregister.h
internal/shortcutscontroller.cpp
internal/shortcutscontroller.h
internal/shortcutsconfiguration.cpp
Expand Down
16 changes: 1 addition & 15 deletions framework/shortcuts/internal/shortcutsconfiguration.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,21 +58,7 @@ io::path_t ShortcutsConfiguration::shortcutsAppDataPath() const
{
#if defined(Q_OS_MACOS)
return m_config.value("shortcuts_mac").toPath();
#else
return m_config.value("shortcuts").toPath();
#endif
}

io::path_t ShortcutsConfiguration::commandShortcutsUserAppDataPath() const
{
return globalConfiguration()->userAppDataPath() + "/shortcuts.json";
}

io::path_t ShortcutsConfiguration::commandShortcutsAppDataPath() const
{
#if defined(Q_OS_MACOS)
return m_config.value("command_shortcuts_mac").toPath();
#else
return m_config.value("command_shortcuts").toPath();
#endif
return m_config.value("shortcuts").toPath();
}
3 changes: 0 additions & 3 deletions framework/shortcuts/internal/shortcutsconfiguration.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,6 @@ class ShortcutsConfiguration : public IShortcutsConfiguration, public Contextabl
io::path_t shortcutsUserAppDataPath() const override;
io::path_t shortcutsAppDataPath() const override;

io::path_t commandShortcutsUserAppDataPath() const override;
io::path_t commandShortcutsAppDataPath() const override;

private:
Config m_config;
};
Expand Down
52 changes: 4 additions & 48 deletions framework/shortcuts/internal/shortcutscontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,21 +21,10 @@
*/
#include "shortcutscontroller.h"

#include "actions/actiontypes.h"
#include "log.h"

#define SHORTCUTS_DEBUG 1

#if SHORTCUTS_DEBUG
#define SC_LOG() LOGDA() << "[SC] "
#else
#define SC_LOG() LOGN()
#endif

using namespace muse::shortcuts;
using namespace muse::actions;
using namespace muse::rcommand;
using namespace muse::ui;

void ShortcutsController::init()
{
Expand All @@ -49,42 +38,10 @@ void ShortcutsController::activate(const std::string& sequence)
{
LOGD() << sequence;

//! NOTE: command shortcuts first
bool commandShortcutsProcessed = false;
{
ShortcutList allowedShortcuts;
const ShortcutList& commandShortcuts = commandShortcutsRegister()->shortcutsForSequence(sequence);
SC_LOG() << "commandShortcuts: " << commandShortcuts.size();
for (const Shortcut& sc : commandShortcuts) {
const Command& command = Command(sc.command);
if (commandsState()->commandState(command).enabled) {
allowedShortcuts.push_back(sc);
}
}
SC_LOG() << "allowedShortcuts: " << allowedShortcuts.size();

Shortcut selectedShortcut;
if (allowedShortcuts.size() == 1) {
selectedShortcut = allowedShortcuts.front();
} else if (allowedShortcuts.size() > 1) {
if (shortcutsResolver()) {
selectedShortcut = shortcutsResolver()->selectOne(allowedShortcuts);
} else {
selectedShortcut = allowedShortcuts.front();
}
}
SC_LOG() << "selectedShortcut: " << selectedShortcut.command;
if (selectedShortcut.isValid()) {
commandDispatcher()->dispatch(Command(selectedShortcut.command));
commandShortcutsProcessed = true;
}
}
ActionCode actionCode = resolveAction(sequence);

if (!commandShortcutsProcessed) {
ActionCode actionCode = resolveAction(sequence);
if (!actionCode.empty()) {
dispatcher()->dispatch(actionCode);
}
if (!actionCode.empty()) {
dispatcher()->dispatch(actionCode);
}
}

Expand Down Expand Up @@ -112,8 +69,7 @@ static bool defaultHasLowerPriorityThan(const std::string& ctx1, const std::stri
ActionCode ShortcutsController::resolveAction(const std::string& sequence) const
{
ShortcutList shortcutsForSequence = shortcutsRegister()->shortcutsForSequence(sequence);
if (shortcutsForSequence.empty()) {
LOGD() << "No shortcuts found for sequence: " << sequence;
IF_ASSERT_FAILED(!shortcutsForSequence.empty()) {
return ActionCode();
}

Expand Down
8 changes: 0 additions & 8 deletions framework/shortcuts/internal/shortcutscontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,31 +27,23 @@
#include "async/asyncable.h"
#include "modularity/ioc.h"
#include "actions/iactionsdispatcher.h"
#include "rcommand/icommanddispatcher.h"
#include "rcommand/icommandsstate.h"
#include "interactive/iinteractive.h"
#include "ui/iuiactionsregister.h"
#include "ui/iuicontextresolver.h"
#include "ishortcutsregister.h"
#include "icommandshortcutsregister.h"
#include "shortcutcontext.h"
#include "../ishortcutsresolver.h"

namespace muse::shortcuts {
class ShortcutsController : public IShortcutsController, public Contextable, public async::Asyncable
{
GlobalInject<ICommandShortcutsRegister> commandShortcutsRegister;
ContextInject<muse::ui::IUiActionsRegister> aregister = { this };
ContextInject<IShortcutsRegister> shortcutsRegister = { this };
ContextInject<muse::actions::IActionsDispatcher> dispatcher = { this };
ContextInject<muse::rcommand::ICommandsState> commandsState = { this };
ContextInject<muse::rcommand::ICommandDispatcher> commandDispatcher = { this };
ContextInject<muse::IInteractive> interactive = { this };
ContextInject<muse::ui::IUiContextResolver> uiContextResolver = { this };

//! NOTE May be missing because it must be implemented outside the framework
ContextInject<IShortcutContextPriority> shortcutContextPriority = { this };
ContextInject<IShortcutsResolver> shortcutsResolver = { this };

public:
ShortcutsController(const modularity::ContextPtr& iocCtx)
Expand Down
26 changes: 0 additions & 26 deletions framework/shortcuts/internal/shortcutsregister.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,17 +28,14 @@
#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");
Expand All @@ -49,25 +46,6 @@ static constexpr std::string_view AUTOREPEAT_TAG("autorepeat");

static const std::string SHORTCUTS_RESOURCE_NAME("SHORTCUTS");

static const std::map<std::string, rcommand::Command> 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<QKeySequence::StandardKey, QKeyCombination> SHORTCUTS_EXPAND_IGNORE_MAP = {
{ QKeySequence::StandardKey::HelpContents, Qt::Key_Help },
{ QKeySequence::StandardKey::Open, Qt::Key_Open },
Expand Down Expand Up @@ -346,10 +324,6 @@ 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) {
Expand Down
3 changes: 0 additions & 3 deletions framework/shortcuts/ishortcutsconfiguration.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,5 @@ class IShortcutsConfiguration : MODULE_GLOBAL_INTERFACE

virtual io::path_t shortcutsUserAppDataPath() const = 0;
virtual io::path_t shortcutsAppDataPath() const = 0;

virtual io::path_t commandShortcutsUserAppDataPath() const = 0;
virtual io::path_t commandShortcutsAppDataPath() const = 0;
};
}
2 changes: 2 additions & 0 deletions framework/shortcuts/qml/Muse/Shortcuts/editshortcutmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ void EditShortcutModel::clearNewSequence()

void EditShortcutModel::inputKey(Qt::Key key, Qt::KeyboardModifiers modifiers)
{
std::tie(key, modifiers) = correctKeyInput(key, modifiers);

if (needIgnoreKey(key)) {
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ ValueList {
valueRoleName: "sequence"
valueTitle: qsTrc("shortcuts", "shortcut")
iconRoleName: "icon"
iconColorRoleName: "iconColor"
readOnly: true

property var sourceModel: null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,7 @@ void ShortcutsInstanceModel::doLoadShortcuts()
{
m_shortcuts.clear();

const ShortcutList& commandShortcuts = commandShortcutsRegister()->shortcuts();
ShortcutList shortcuts = commandShortcuts;
shortcuts.insert(shortcuts.end(), shortcutsRegister()->shortcuts().begin(), shortcutsRegister()->shortcuts().end());

const ShortcutList& shortcuts = shortcutsRegister()->shortcuts();
for (const Shortcut& sc : shortcuts) {
for (const std::string& seq : sc.sequences) {
QString seqStr = QString::fromStdString(seq);
Expand All @@ -82,8 +79,6 @@ void ShortcutsInstanceModel::doLoadShortcuts()
}
}

LOGD() << "shortcuts: " << m_shortcuts.size();

emit shortcutsChanged();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@

#include "modularity/ioc.h"
#include "ishortcutsregister.h"
#include "icommandshortcutsregister.h"
#include "ishortcutscontroller.h"

namespace muse::shortcuts {
Expand All @@ -49,7 +48,6 @@ class ShortcutsInstanceModel : public QObject, public Contextable, public async:
#endif

public:
GlobalInject<ICommandShortcutsRegister> commandShortcutsRegister;
ContextInject<IShortcutsRegister> shortcutsRegister = { this };
ContextInject<IShortcutsController> controller = { this };

Expand Down
Loading