aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/Ui/qsui/actionmanager.cpp47
-rw-r--r--src/plugins/Ui/qsui/actionmanager.h11
-rw-r--r--src/plugins/Ui/qsui/dockwidgetlist.cpp3
-rw-r--r--src/plugins/Ui/qsui/hotkeyeditor.cpp9
-rw-r--r--src/plugins/Ui/qsui/shortcutitem.cpp8
-rw-r--r--src/plugins/Ui/qsui/shortcutitem.h4
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();