From b37fa76b4d872202d6fc63c84e77815d9787ec9a Mon Sep 17 00:00:00 2001 From: John Tapsell Date: Sun, 13 Oct 2013 23:12:53 +0100 Subject: [PATCH] Allow custom widget to be deleted --- src/ui/MainWindow.cc | 14 ++++++++++++-- src/ui/MainWindow.h | 4 ++++ src/ui/designer/QGCToolWidget.cc | 9 +++++---- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/ui/MainWindow.cc b/src/ui/MainWindow.cc index 454c44d9d..57827bb68 100644 --- a/src/ui/MainWindow.cc +++ b/src/ui/MainWindow.cc @@ -753,6 +753,7 @@ void MainWindow::addTool(SubMainWindow *parent,VIEW_SECTIONS view,QDockWidget* w centralWidgetToDockWidgetsMap[view][widget->objectName()]= widget; connect(tempAction,SIGNAL(triggered(bool)),this, SLOT(showTool(bool))); connect(widget, SIGNAL(visibilityChanged(bool)), tempAction, SLOT(setChecked(bool))); + connect(widget, SIGNAL(destroyed()), tempAction, SLOT(deleteLater())); tempAction->setChecked(widget->isVisible()); } else @@ -786,9 +787,20 @@ QDockWidget* MainWindow::createDockWidget(QWidget *parent,QWidget *child,QString widget->setMinimumWidth(minwidth); } addTool(qobject_cast(parent),view,widget,title,area); + connect(child, SIGNAL(destroyed()), widget, SLOT(deleteLater())); + connect(widget, SIGNAL(destroyed()), this, SLOT(dockWidgetDestroyed())); return widget; } +void MainWindow::dockWidgetDestroyed() +{ + QDockWidget *dock = dynamic_cast(QObject::sender()); + Q_ASSERT(dock); + if(!dock) return; + + dockWidgets.removeAll(dock); +} + void MainWindow::loadDockWidget(QString name) { if (centralWidgetToDockWidgetsMap[currentView].contains(name)) @@ -1039,8 +1051,6 @@ void MainWindow::createCustomWidget() settings.setValue(QString("TOOL_PARENT_") + tool->objectName(),currentView); settings.endGroup(); - - //connect(tool, SIGNAL(destroyed()), dock, SLOT(deleteLater())); //dock->setWidget(tool); diff --git a/src/ui/MainWindow.h b/src/ui/MainWindow.h index c5db0bc26..b5a5b5030 100644 --- a/src/ui/MainWindow.h +++ b/src/ui/MainWindow.h @@ -307,6 +307,10 @@ public slots: void commsWidgetDestroyed(QObject *obj); +protected slots: + /** @brief Called by a dock widget when it is has been deleted */ + void dockWidgetDestroyed(); + signals: void styleChanged(MainWindow::QGC_MAINWINDOW_STYLE newTheme); void styleChanged(); diff --git a/src/ui/designer/QGCToolWidget.cc b/src/ui/designer/QGCToolWidget.cc index 52072e8df..73eae34c9 100644 --- a/src/ui/designer/QGCToolWidget.cc +++ b/src/ui/designer/QGCToolWidget.cc @@ -668,11 +668,12 @@ void QGCToolWidget::deleteWidget() // Hide this->hide(); instances()->remove(getTitle()); - /*QSettings settings; - settings.beginGroup(getTitle()); - settings.remove(""); + + QSettings settings; + settings.beginGroup("QGC_MAINWINDOW"); + settings.remove(QString("TOOL_PARENT_") + objectName()); settings.endGroup(); - storeWidgetsToSettings();*/ + storeWidgetsToSettings(); // Delete -- 2.22.0