diff --git a/src/DockAreaWidget.cpp b/src/DockAreaWidget.cpp index b681ede..292d54b 100644 --- a/src/DockAreaWidget.cpp +++ b/src/DockAreaWidget.cpp @@ -414,14 +414,15 @@ void CDockAreaWidget::removeDockWidget(CDockWidget* DockWidget) auto TabWidget = DockWidget->tabWidget(); TabWidget->hide(); d->tabBar()->removeTab(TabWidget); + CDockContainerWidget* DockContainer = dockContainer(); if (NextOpenDockWidget) { setCurrentDockWidget(NextOpenDockWidget); } - else if (d->ContentsLayout->isEmpty()) + else if (d->ContentsLayout->isEmpty() && DockContainer->dockAreaCount() > 1) { qDebug() << "Dock Area empty"; - dockContainer()->removeDockArea(this); + DockContainer->removeDockArea(this); this->deleteLater(); } else @@ -434,14 +435,13 @@ void CDockAreaWidget::removeDockWidget(CDockWidget* DockWidget) d->updateCloseButtonState(); updateTitleBarVisibility(); - auto TopLevelDockWidget = dockContainer()->topLevelDockWidget(); + auto TopLevelDockWidget = DockContainer->topLevelDockWidget(); if (TopLevelDockWidget) { TopLevelDockWidget->emitTopLevelChanged(true); } #if (ADS_DEBUG_LEVEL > 0) - CDockContainerWidget* DockContainer = dockContainer(); DockContainer->dumpLayout(); #endif } diff --git a/src/DockContainerWidget.cpp b/src/DockContainerWidget.cpp index 6cc3a13..4985fc3 100644 --- a/src/DockContainerWidget.cpp +++ b/src/DockContainerWidget.cpp @@ -998,6 +998,15 @@ CDockAreaWidget* CDockContainerWidget::addDockWidget(DockWidgetArea area, CDockW } } +//============================================================================ +void CDockContainerWidget::removeDockWidget(CDockWidget* Dockwidget) +{ + CDockAreaWidget* Area = Dockwidget->dockAreaWidget(); + if (Area) + { + Area->removeDockWidget(Dockwidget); + } +} //============================================================================ unsigned int CDockContainerWidget::zOrderIndex() const diff --git a/src/DockContainerWidget.h b/src/DockContainerWidget.h index 0483137..c923ecc 100644 --- a/src/DockContainerWidget.h +++ b/src/DockContainerWidget.h @@ -166,6 +166,11 @@ public: CDockAreaWidget* addDockWidget(DockWidgetArea area, CDockWidget* Dockwidget, CDockAreaWidget* DockAreaWidget = nullptr); + /** + * Removes dockwidget + */ + void removeDockWidget(CDockWidget* Dockwidget); + /** * Returns the current zOrderIndex */ diff --git a/src/DockManager.cpp b/src/DockManager.cpp index 44a0a2b..1ce3d22 100644 --- a/src/DockManager.cpp +++ b/src/DockManager.cpp @@ -586,6 +586,12 @@ CDockWidget* CDockManager::findDockWidget(const QString& ObjectName) const return d->DockWidgetsMap.value(ObjectName, nullptr); } +//============================================================================ +void CDockManager::removeDockWidget(CDockWidget* Dockwidget) +{ + d->DockWidgetsMap.remove(Dockwidget->objectName()); + CDockContainerWidget::removeDockWidget(Dockwidget); +} //============================================================================ QMap CDockManager::dockWidgetsMap() const diff --git a/src/DockManager.h b/src/DockManager.h index a7c088c..72ab026 100644 --- a/src/DockManager.h +++ b/src/DockManager.h @@ -192,6 +192,11 @@ public: */ CDockWidget* findDockWidget(const QString& ObjectName) const; + /** + * Remove the given Dock from the dock manager + */ + void removeDockWidget(CDockWidget* Dockwidget); + /** * This function returns a readable reference to the internal dock * widgets map so that it is possible to iterate over all dock widgets