aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Ui/qsui/dockwidgetlist.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2020-10-19 20:36:51 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2020-10-19 20:36:51 +0000
commit6baa843a2a0bdf143617df269129d81dae0a3a38 (patch)
tree9a650b4349c1129c8c20b4536228bb838eb9ee67 /src/plugins/Ui/qsui/dockwidgetlist.cpp
parentb0ab8e75df1bb8c5752ebf3ed60334f1134b04f3 (diff)
downloadqmmp-6baa843a2a0bdf143617df269129d81dae0a3a38.tar.gz
qmmp-6baa843a2a0bdf143617df269129d81dae0a3a38.tar.bz2
qmmp-6baa843a2a0bdf143617df269129d81dae0a3a38.zip
qsui: added feature to add dock widgets from plugins
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@9509 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Ui/qsui/dockwidgetlist.cpp')
-rw-r--r--src/plugins/Ui/qsui/dockwidgetlist.cpp114
1 files changed, 114 insertions, 0 deletions
diff --git a/src/plugins/Ui/qsui/dockwidgetlist.cpp b/src/plugins/Ui/qsui/dockwidgetlist.cpp
new file mode 100644
index 000000000..66f72df61
--- /dev/null
+++ b/src/plugins/Ui/qsui/dockwidgetlist.cpp
@@ -0,0 +1,114 @@
+#include <QDockWidget>
+#include <QMenu>
+#include <QAction>
+#include <QDebug>
+#include <qmmpui/general.h>
+#include <qmmpui/uihelper.h>
+#include "dockwidgetlist.h"
+
+DockWidgetList::DockWidgetList(QMainWindow *parent) : QObject(parent), m_mw(parent)
+{
+ connect(UiHelper::instance(), SIGNAL(widgetAdded(QString)), SLOT(onWidgetAdded(QString)));
+ connect(UiHelper::instance(), SIGNAL(widgetRemoved(QString)), SLOT(onWidgetRemoved(QString)));
+ connect(UiHelper::instance(), SIGNAL(widgetUpdated(QString)), SLOT(onWidgetUpdated(QString)));
+
+ for(const QString &id : General::enabledWidgets())
+ {
+ WidgetDescription desc = General::widgetDescription(id);
+ QDockWidget *dockWidget = new QDockWidget(desc.name, m_mw);
+ dockWidget->setObjectName(id);
+ dockWidget->setAllowedAreas(desc.allowedAreas);
+ m_mw->addDockWidget(Qt::LeftDockWidgetArea, dockWidget, Qt::Vertical);
+ connect(dockWidget->toggleViewAction(), SIGNAL(toggled(bool)), SLOT(onViewActionToggled(bool)));
+ m_dockWidgetList << dockWidget;
+ }
+}
+
+void DockWidgetList::registerMenu(QMenu *menu, QAction *before)
+{
+ m_menu = menu;
+ m_beforeAction = before;
+
+ for(QDockWidget *dock : qAsConst(m_dockWidgetList))
+ menu->insertAction(m_beforeAction, dock->toggleViewAction());
+}
+
+void DockWidgetList::onViewActionToggled(bool checked)
+{
+ if(!sender() || !sender()->parent())
+ return;
+
+ QString id = sender()->parent()->objectName();
+ QDockWidget *dockWidget = qobject_cast<QDockWidget *>(sender()->parent());
+ if(!dockWidget)
+ return;
+
+ if(checked)
+ {
+ QWidget *w = General::createWidget(id, m_mw);
+ if(w)
+ {
+ dockWidget->setWidget(w);
+ w->show();
+ }
+ }
+ else if(dockWidget->widget())
+ {
+ dockWidget->widget()->deleteLater();
+ }
+}
+
+void DockWidgetList::onWidgetAdded(const QString &id)
+{
+ for(QDockWidget *dockWidget : m_dockWidgetList)
+ {
+ if(dockWidget->objectName() == id)
+ return;
+ }
+
+ WidgetDescription desc = General::widgetDescription(id);
+ QDockWidget *dockWidget = new QDockWidget(desc.name, m_mw);
+ dockWidget->setObjectName(id);
+ dockWidget->setAllowedAreas(desc.allowedAreas);
+ if(m_menu && m_beforeAction)
+ m_menu->insertAction(m_beforeAction, dockWidget->toggleViewAction());
+ m_mw->addDockWidget(Qt::LeftDockWidgetArea, dockWidget, Qt::Vertical);
+ connect(dockWidget->toggleViewAction(), SIGNAL(toggled(bool)), SLOT(onViewActionToggled(bool)));
+ m_dockWidgetList << dockWidget;
+
+ QWidget *w = General::createWidget(id, m_mw);
+ dockWidget->setWidget(w);
+ w->show();
+}
+
+void DockWidgetList::onWidgetRemoved(const QString &id)
+{
+ for(QDockWidget *dockWidget : m_dockWidgetList)
+ {
+ if(dockWidget->objectName() == id)
+ {
+ m_dockWidgetList.removeAll(dockWidget);
+ if(dockWidget->widget())
+ dockWidget->widget()->deleteLater();
+ dockWidget->deleteLater();
+ }
+ }
+}
+
+void DockWidgetList::onWidgetUpdated(const QString &id)
+{
+ for(QDockWidget *dockWidget : m_dockWidgetList)
+ {
+ if(dockWidget->objectName() == id && dockWidget->widget())
+ {
+ dockWidget->widget()->deleteLater();
+ QWidget *w = General::createWidget(id, m_mw);
+ if(w)
+ {
+ dockWidget->setWidget(w);
+ w->show();
+ }
+ break;
+ }
+ }
+}