diff options
Diffstat (limited to 'src/plugins')
| -rw-r--r-- | src/plugins/Ui/qsui/dockwidgetlist.cpp | 35 | ||||
| -rw-r--r-- | src/plugins/Ui/qsui/dockwidgetlist.h | 3 |
2 files changed, 31 insertions, 7 deletions
diff --git a/src/plugins/Ui/qsui/dockwidgetlist.cpp b/src/plugins/Ui/qsui/dockwidgetlist.cpp index f1a1a9cea..6e7eff54e 100644 --- a/src/plugins/Ui/qsui/dockwidgetlist.cpp +++ b/src/plugins/Ui/qsui/dockwidgetlist.cpp @@ -19,7 +19,8 @@ DockWidgetList::DockWidgetList(QMainWindow *parent) : QObject(parent), m_mw(pare dockWidget->setObjectName(id); dockWidget->setAllowedAreas(desc.allowedAreas); m_mw->addDockWidget(desc.area, dockWidget); - connect(dockWidget->toggleViewAction(), SIGNAL(toggled(bool)), SLOT(onViewActionToggled(bool))); + connect(dockWidget->toggleViewAction(), SIGNAL(triggered(bool)), SLOT(onViewActionTriggered(bool))); + connect(dockWidget, SIGNAL(visibilityChanged(bool)), SLOT(onVisibilityChanged(bool))); m_dockWidgetList << dockWidget; } } @@ -59,17 +60,19 @@ void DockWidgetList::setTitleBarsVisible(bool visible) } } -void DockWidgetList::onViewActionToggled(bool checked) +void DockWidgetList::onViewActionTriggered(bool checked) { if(!sender() || !sender()->parent()) return; - QString id = sender()->parent()->objectName(); QDockWidget *dockWidget = qobject_cast<QDockWidget *>(sender()->parent()); + if(!dockWidget) return; - if(checked) + QString id = dockWidget->objectName(); + + if(checked && !dockWidget->widget()) { QWidget *w = General::createWidget(id, m_mw); if(w) @@ -78,12 +81,32 @@ void DockWidgetList::onViewActionToggled(bool checked) w->show(); } } - else if(dockWidget->widget()) + else if(!checked && dockWidget->widget()) { dockWidget->widget()->deleteLater(); } } +void DockWidgetList::onVisibilityChanged(bool visible) +{ + QDockWidget *dockWidget = qobject_cast<QDockWidget *>(sender()); + + if(!dockWidget) + return; + + QString id = dockWidget->objectName(); + + if(visible && !dockWidget->widget()) + { + QWidget *w = General::createWidget(id, m_mw); + if(w) + { + dockWidget->setWidget(w); + w->show(); + } + } +} + void DockWidgetList::onWidgetAdded(const QString &id) { for(QDockWidget *dockWidget : m_dockWidgetList) @@ -99,7 +122,7 @@ void DockWidgetList::onWidgetAdded(const QString &id) if(m_menu && m_beforeAction) m_menu->insertAction(m_beforeAction, dockWidget->toggleViewAction()); m_mw->addDockWidget(desc.area, dockWidget); - connect(dockWidget->toggleViewAction(), SIGNAL(toggled(bool)), SLOT(onViewActionToggled(bool))); + connect(dockWidget->toggleViewAction(), SIGNAL(toggled(bool)), SLOT(onViewActionTriggered(bool))); m_dockWidgetList << dockWidget; setTitleBarsVisible(m_titleBarsVisible); diff --git a/src/plugins/Ui/qsui/dockwidgetlist.h b/src/plugins/Ui/qsui/dockwidgetlist.h index 366e49b3c..c4ac1f0d8 100644 --- a/src/plugins/Ui/qsui/dockwidgetlist.h +++ b/src/plugins/Ui/qsui/dockwidgetlist.h @@ -18,7 +18,8 @@ public: void setTitleBarsVisible(bool visible); private slots: - void onViewActionToggled(bool visible); + void onViewActionTriggered(bool checked); + void onVisibilityChanged(bool visible); void onWidgetAdded(const QString &id); void onWidgetRemoved(const QString &id); void onWidgetUpdated(const QString &id); |
