diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2021-04-29 20:20:25 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2021-04-29 20:20:25 +0000 |
| commit | d99670565b2c12994d0e4382b19498ee85be6aad (patch) | |
| tree | 0eb53a1616fc6ecb618b5fd88e84471a96fff918 | |
| parent | 691b4aa68e88082d00d53b3201707ad08c490471 (diff) | |
| download | qmmp-d99670565b2c12994d0e4382b19498ee85be6aad.tar.gz qmmp-d99670565b2c12994d0e4382b19498ee85be6aad.tar.bz2 qmmp-d99670565b2c12994d0e4382b19498ee85be6aad.zip | |
qsui: added feature to change dock widget shortcuts
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@9868 90c681e8-e032-0410-971d-27865f9a5e38
| -rw-r--r-- | src/plugins/Ui/qsui/actionmanager.cpp | 47 | ||||
| -rw-r--r-- | src/plugins/Ui/qsui/actionmanager.h | 11 | ||||
| -rw-r--r-- | src/plugins/Ui/qsui/dockwidgetlist.cpp | 3 | ||||
| -rw-r--r-- | src/plugins/Ui/qsui/hotkeyeditor.cpp | 9 | ||||
| -rw-r--r-- | src/plugins/Ui/qsui/shortcutitem.cpp | 8 | ||||
| -rw-r--r-- | src/plugins/Ui/qsui/shortcutitem.h | 4 |
6 files changed, 77 insertions, 5 deletions
diff --git a/src/plugins/Ui/qsui/actionmanager.cpp b/src/plugins/Ui/qsui/actionmanager.cpp index dedbd11f1..bedccf3b5 100644 --- a/src/plugins/Ui/qsui/actionmanager.cpp +++ b/src/plugins/Ui/qsui/actionmanager.cpp @@ -25,6 +25,7 @@ #include <QApplication> #include <QStyle> #include <QWidgetAction> +#include <QDockWidget> #include <qmmp/qmmp.h> #include "actionmanager.h" @@ -127,11 +128,21 @@ QAction *ActionManager::use(int type, const QObject *receiver, const char *membe return act; } -QList<QAction *> ActionManager::actions() +QList<QAction *> ActionManager::actions() const { return m_actions.values(); } +QList<QDockWidget *> ActionManager::dockWidgtes() const +{ + return m_dockWidgets.keys(); +} + +bool ActionManager::hasDockWidgets() const +{ + return !m_dockWidgets.isEmpty(); +} + ActionManager* ActionManager::instance() { return m_instance; @@ -191,10 +202,21 @@ void ActionManager::saveStates() void ActionManager::saveActions() { QSettings settings(Qmmp::configFile(), QSettings::IniFormat); + settings.beginGroup("SimpleUiShortcuts"); + for(const QAction *action : m_actions.values()) { - settings.setValue(QString("SimpleUiShortcuts/")+action->objectName(), action->shortcut()); + settings.setValue(action->objectName(), action->shortcut()); + } + + auto it = m_dockWidgets.cbegin(); + while(it != m_dockWidgets.cend()) + { + settings.setValue(it.value().first, it.key()->toggleViewAction()->shortcut()); + ++it; } + + settings.endGroup(); } void ActionManager::resetShortcuts() @@ -203,6 +225,13 @@ void ActionManager::resetShortcuts() { action->setShortcut(action->property("defaultShortcut").toString()); } + + auto it = m_dockWidgets.cbegin(); + while(it != m_dockWidgets.cend()) + { + it.key()->toggleViewAction()->setShortcut(it.value().second); + ++it; + } } void ActionManager::registerAction(int id, QAction *action, const QString &confKey, const QString &key) @@ -233,6 +262,20 @@ void ActionManager::registerWidget(int id, QWidget *w, const QString &text, cons m_actions[id] = action; } +void ActionManager::registerDockWidget(QDockWidget *w, const QString &confKey, const QString &key) +{ + QSettings settings(Qmmp::configFile(), QSettings::IniFormat); + settings.beginGroup("SimpleUiShortcuts"); + w->toggleViewAction()->setShortcut(settings.value(confKey, key).toString()); + settings.endGroup(); + m_dockWidgets.insert(w, qMakePair<QString, QString>(confKey, key)); +} + +void ActionManager::removeDockWidget(QDockWidget *w) +{ + m_dockWidgets.remove(w); +} + QToolBar *ActionManager::createToolBar(const ToolBarInfo &info, QWidget *parent) { QToolBar *toolBar = new QToolBar(info.title, parent); diff --git a/src/plugins/Ui/qsui/actionmanager.h b/src/plugins/Ui/qsui/actionmanager.h index b9028db0b..5689ba190 100644 --- a/src/plugins/Ui/qsui/actionmanager.h +++ b/src/plugins/Ui/qsui/actionmanager.h @@ -26,9 +26,11 @@ #include <QHash> #include <QList> #include <QToolBar> +#include <QPair> class QAction; class QSettings; +class QDockWidget; #define SET_ACTION(type, receiver, member) ActionManager::instance()->use(type, receiver, member) #define ACTION(type) ActionManager::instance()->action(type) @@ -126,11 +128,15 @@ public: QAction *action(int type); QAction *use(int type, const QObject *receiver, const char *member); - QList<QAction *> actions(); + QList<QAction *> actions() const; + QList<QDockWidget *> dockWidgtes() const; + bool hasDockWidgets() const; void saveActions(); void resetShortcuts(); void registerAction(int id, QAction *action, const QString &confKey, const QString &key); void registerWidget(int id, QWidget *w, const QString &text, const QString &name); + void registerDockWidget(QDockWidget *w, const QString &confKey, const QString &key); + void removeDockWidget(QDockWidget *w); QToolBar *createToolBar(const ToolBarInfo &info, QWidget *parent); void updateToolBar(QToolBar *toolBar, const ToolBarInfo &info); ActionManager::ToolBarInfo defaultToolBar() const; @@ -148,7 +154,8 @@ private: void saveStates(); QSettings *m_settings; - QHash <int, QAction *> m_actions; + QHash<int, QAction *> m_actions; + QHash<QDockWidget *, QPair<QString, QString>> m_dockWidgets; //widget, key, default shortcut static ActionManager *m_instance; }; diff --git a/src/plugins/Ui/qsui/dockwidgetlist.cpp b/src/plugins/Ui/qsui/dockwidgetlist.cpp index 0e089a651..511b17f1c 100644 --- a/src/plugins/Ui/qsui/dockwidgetlist.cpp +++ b/src/plugins/Ui/qsui/dockwidgetlist.cpp @@ -4,6 +4,7 @@ #include <QDebug> #include <qmmpui/general.h> #include <qmmpui/uihelper.h> +#include "actionmanager.h" #include "dockwidgetlist.h" DockWidgetList::DockWidgetList(QMainWindow *parent) : QObject(parent), m_mw(parent) @@ -23,6 +24,7 @@ DockWidgetList::DockWidgetList(QMainWindow *parent) : QObject(parent), m_mw(pare connect(dockWidget->toggleViewAction(), SIGNAL(triggered(bool)), SLOT(onViewActionTriggered(bool))); connect(dockWidget, SIGNAL(visibilityChanged(bool)), SLOT(onVisibilityChanged(bool))); m_dockWidgetList << dockWidget; + ActionManager::instance()->registerDockWidget(dockWidget, id, desc.shortcut); } } @@ -139,6 +141,7 @@ void DockWidgetList::onWidgetRemoved(const QString &id) if(dockWidget->objectName() == id) { m_dockWidgetList.removeAll(dockWidget); + ActionManager::instance()->removeDockWidget(dockWidget); if(dockWidget->widget()) dockWidget->widget()->deleteLater(); dockWidget->deleteLater(); diff --git a/src/plugins/Ui/qsui/hotkeyeditor.cpp b/src/plugins/Ui/qsui/hotkeyeditor.cpp index a58bfcc03..4eeda30b5 100644 --- a/src/plugins/Ui/qsui/hotkeyeditor.cpp +++ b/src/plugins/Ui/qsui/hotkeyeditor.cpp @@ -94,6 +94,15 @@ void HotkeyEditor::loadShortcuts() new ShortcutItem(item, i); item->setExpanded(true); m_ui->shortcutTreeWidget->addTopLevelItem(item); + //tools + if(ActionManager::instance()->hasDockWidgets()) + { + item = new QTreeWidgetItem (m_ui->shortcutTreeWidget, QStringList() << tr("Tools")); + for(QDockWidget *w : ActionManager::instance()->dockWidgtes()) + new ShortcutItem(item, w); + item->setExpanded(true); + m_ui->shortcutTreeWidget->addTopLevelItem(item); + } m_ui->shortcutTreeWidget->resizeColumnToContents(0); m_ui->shortcutTreeWidget->resizeColumnToContents(1); diff --git a/src/plugins/Ui/qsui/shortcutitem.cpp b/src/plugins/Ui/qsui/shortcutitem.cpp index 2502b8bd0..38cfc1a40 100644 --- a/src/plugins/Ui/qsui/shortcutitem.cpp +++ b/src/plugins/Ui/qsui/shortcutitem.cpp @@ -19,6 +19,7 @@ ***************************************************************************/ #include <QAction> +#include <QDockWidget> #include "actionmanager.h" #include "shortcutitem.h" @@ -30,6 +31,13 @@ ShortcutItem::ShortcutItem(QTreeWidgetItem *parent, int type) : QTreeWidgetItem( setIcon(0, m_action->icon()); } +ShortcutItem::ShortcutItem(QTreeWidgetItem *parent, QDockWidget *w) : QTreeWidgetItem(parent, QStringList() + << w->toggleViewAction()->text().remove("&") + << w->toggleViewAction()->shortcut().toString()) +{ + m_action = w->toggleViewAction(); +} + ShortcutItem::~ShortcutItem() {} diff --git a/src/plugins/Ui/qsui/shortcutitem.h b/src/plugins/Ui/qsui/shortcutitem.h index cafb0e825..c1f9ba6d9 100644 --- a/src/plugins/Ui/qsui/shortcutitem.h +++ b/src/plugins/Ui/qsui/shortcutitem.h @@ -24,6 +24,7 @@ class QWidget; class QAction; +class QDockWidget; /** @author Ilya Kotov <forkotov02@ya.ru> @@ -31,8 +32,9 @@ class QAction; class ShortcutItem : public QTreeWidgetItem { public: - ShortcutItem(QTreeWidgetItem *parent, int type); + ShortcutItem(QTreeWidgetItem *parent, QDockWidget *w); + ~ShortcutItem(); QAction *action(); |
