diff --git a/CMakeLists.txt b/CMakeLists.txt index 4076544b..7e90481b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -232,8 +232,6 @@ target_sources( lib/utils/resizing-text-edit.hpp lib/utils/resource-table.cpp lib/utils/resource-table.hpp - lib/utils/resource-table-hotkey-handler.cpp - lib/utils/resource-table-hotkey-handler.hpp lib/utils/scene-selection.cpp lib/utils/scene-selection.hpp lib/utils/scene-switch-helpers.cpp diff --git a/lib/utils/resource-table-hotkey-handler.cpp b/lib/utils/resource-table-hotkey-handler.cpp deleted file mode 100644 index edfd2e32..00000000 --- a/lib/utils/resource-table-hotkey-handler.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#include "resource-table-hotkey-handler.hpp" - -#include -#include -#include - -namespace advss { - -void RegisterHotkeyFunction(QWidget *widget, Qt::Key key, - std::function func) -{ - ResourceTabHotkeyHandler::Instance()->RegisterHandler(widget, key, - func); -} - -void DeregisterHotkeyFunctions(QWidget *widget) -{ - ResourceTabHotkeyHandler::Instance()->Deregister(widget); -} - -ResourceTabHotkeyHandler *ResourceTabHotkeyHandler::Instance() -{ - static ResourceTabHotkeyHandler handler; - return &handler; -} - -void ResourceTabHotkeyHandler::RegisterHandler(QWidget *widget, Qt::Key key, - std::function func) -{ - std::lock_guard lock(_mutex); - _callbacks.emplace(widget, CallbackData{key, func}); - widget->installEventFilter(this); -} - -void ResourceTabHotkeyHandler::Deregister(QWidget *widget) -{ - std::lock_guard lock(_mutex); - _callbacks.erase(widget); -} - -bool ResourceTabHotkeyHandler::eventFilter(QObject *obj, QEvent *event) -{ - if (event->type() != QEvent::KeyPress) { - return QObject::eventFilter(obj, event); - } - QKeyEvent *keyEvent = static_cast(event); - auto pressedKey = keyEvent->key(); - - std::lock_guard lock(_mutex); - auto it = _callbacks.find(obj); - if (it == _callbacks.end()) { - return QObject::eventFilter(obj, event); - } - - auto current = it; - while (current != _callbacks.end() && current->first == it->first) { - auto &[_, cbData] = *current; - if (pressedKey != cbData.key) { - ++current; - continue; - } - cbData.func(); - ++current; - continue; - } - - return QObject::eventFilter(obj, event); -} - -} // namespace advss diff --git a/lib/utils/resource-table-hotkey-handler.hpp b/lib/utils/resource-table-hotkey-handler.hpp deleted file mode 100644 index 7aa2b18e..00000000 --- a/lib/utils/resource-table-hotkey-handler.hpp +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once -#include "export-symbol-helper.hpp" - -#include -#include -#include -#include - -namespace advss { - -EXPORT void RegisterHotkeyFunction(QWidget *, Qt::Key, - std::function func); -EXPORT void DeregisterHotkeyFunctions(QWidget *); - -class ResourceTabHotkeyHandler : public QObject { - Q_OBJECT -public: - static ResourceTabHotkeyHandler *Instance(); - void RegisterHandler(QWidget *, Qt::Key, std::function func); - void Deregister(QWidget *); - -protected: - bool eventFilter(QObject *obj, QEvent *event) override; - -private: - struct CallbackData { - Qt::Key key; - std::function func; - }; - - ResourceTabHotkeyHandler() : QObject(){}; - - std::multimap _callbacks; - std::mutex _mutex; -}; - -} // namespace advss diff --git a/lib/utils/resource-table.cpp b/lib/utils/resource-table.cpp index 68f55781..3f66cc0f 100644 --- a/lib/utils/resource-table.cpp +++ b/lib/utils/resource-table.cpp @@ -1,10 +1,10 @@ #include "resource-table.hpp" #include "plugin-state-helpers.hpp" -#include "resource-table-hotkey-handler.hpp" #include "ui-helpers.hpp" #include #include +#include namespace advss { @@ -64,13 +64,16 @@ ResourceTable::ResourceTable(QTabWidget *parent, const QString &help, QWidget::connect(_table, &QTableWidget::cellDoubleClicked, [openSettings]() { openSettings(); }); - RegisterHotkeyFunction(this, Qt::Key_F2, openSettings); - RegisterHotkeyFunction(this, Qt::Key_Delete, [this]() { Remove(); }); -} + auto settingsShortcut = new QShortcut(QKeySequence("F2"), this); + QWidget::connect(settingsShortcut, &QShortcut::activated, this, + openSettings); + auto removeShortcut = new QShortcut(QKeySequence("Del"), this); + QWidget::connect(removeShortcut, &QShortcut::activated, this, + [this]() { Remove(); }); -ResourceTable::~ResourceTable() -{ - DeregisterHotkeyFunctions(this); + auto newShortcut = new QShortcut(QKeySequence("Ctrl+N"), this); + QWidget::connect(newShortcut, &QShortcut::activated, this, + [this]() { Add(); }); } void ResourceTable::SetHelpVisible(bool visible) const diff --git a/lib/utils/resource-table.hpp b/lib/utils/resource-table.hpp index db19636b..a095bc15 100644 --- a/lib/utils/resource-table.hpp +++ b/lib/utils/resource-table.hpp @@ -18,7 +18,6 @@ public: const QString &addToolTip, const QString &removeToolTip, const QStringList &headers, const std::function &openSettings); - virtual ~ResourceTable(); QTableWidget *Table() const { return _table; } void SetHelpVisible(bool) const;