diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2020-10-19 20:36:51 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2020-10-19 20:36:51 +0000 |
| commit | 6baa843a2a0bdf143617df269129d81dae0a3a38 (patch) | |
| tree | 9a650b4349c1129c8c20b4536228bb838eb9ee67 /src/plugins/Ui/qsui/dockwidgetlist.cpp | |
| parent | b0ab8e75df1bb8c5752ebf3ed60334f1134b04f3 (diff) | |
| download | qmmp-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.cpp | 114 |
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; + } + } +} |
