diff --git a/ApplicationCode/Application/RiaGuiApplication.cpp b/ApplicationCode/Application/RiaGuiApplication.cpp index 16097110a4..947e7d34ad 100644 --- a/ApplicationCode/Application/RiaGuiApplication.cpp +++ b/ApplicationCode/Application/RiaGuiApplication.cpp @@ -566,7 +566,9 @@ void RiaGuiApplication::initialize() // Create main windows // The plot window is created to be able to set expanded state on created objects, but hidden by default getOrCreateAndShowMainWindow(); - getOrCreateMainPlotWindow(); + RiuPlotMainWindow* plotMainWindow = getOrCreateMainPlotWindow(); + plotMainWindow->hideAllDockWindows(); + RiaLogging::setLoggerInstance(new RiuMessagePanelLogger(m_mainWindow->messagePanel())); RiaLogging::loggerInstance()->setLevel(RI_LL_DEBUG); @@ -959,6 +961,11 @@ RiuMainWindow* RiaGuiApplication::getOrCreateAndShowMainWindow() { createMainWindow(); } + else + { + m_mainWindow->loadWinGeoAndDockToolBarLayout(); + } + return m_mainWindow; } @@ -1023,6 +1030,7 @@ void RiaGuiApplication::createMainPlotWindow() m_mainPlotWindow->setWindowTitle("Plots - ResInsight"); m_mainPlotWindow->setDefaultWindowSize(); m_mainPlotWindow->loadWinGeoAndDockToolBarLayout(); + m_mainPlotWindow->hideAllDockWindows(); } //-------------------------------------------------------------------------------------------------- @@ -1042,12 +1050,18 @@ void RiaGuiApplication::deleteMainPlotWindow() //-------------------------------------------------------------------------------------------------- RiuPlotMainWindow* RiaGuiApplication::getOrCreateAndShowMainPlotWindow() { + bool triggerReloadOfDockWidgetVisibilities = false; + if (!m_mainPlotWindow) { createMainPlotWindow(); m_mainPlotWindow->initializeGuiNewProjectLoaded(); loadAndUpdatePlotData(); } + else + { + triggerReloadOfDockWidgetVisibilities = !m_mainPlotWindow->isVisible(); + } if (m_mainPlotWindow->isMinimized()) { @@ -1061,6 +1075,12 @@ RiuPlotMainWindow* RiaGuiApplication::getOrCreateAndShowMainPlotWindow() m_mainPlotWindow->raise(); m_mainPlotWindow->activateWindow(); + + if (triggerReloadOfDockWidgetVisibilities) + { + m_mainPlotWindow->restoreDockWidgetVisibilities(); + } + return m_mainPlotWindow; } diff --git a/ApplicationCode/Commands/ApplicationCommands/RicShowMainWindowFeature.cpp b/ApplicationCode/Commands/ApplicationCommands/RicShowMainWindowFeature.cpp index d397c3f775..211f9e322e 100644 --- a/ApplicationCode/Commands/ApplicationCommands/RicShowMainWindowFeature.cpp +++ b/ApplicationCode/Commands/ApplicationCommands/RicShowMainWindowFeature.cpp @@ -43,6 +43,8 @@ void RicShowMainWindowFeature::onActionTriggered(bool isChecked) RiuMainWindow* mainWnd = RiuMainWindow::instance(); + bool triggerReloadOfDockWindowVisibilities = !mainWnd->isVisible(); + if (mainWnd->isMinimized()) { mainWnd->showNormal(); @@ -54,6 +56,11 @@ void RicShowMainWindowFeature::onActionTriggered(bool isChecked) } mainWnd->raise(); + + if (triggerReloadOfDockWindowVisibilities) + { + mainWnd->restoreDockWidgetVisibilities(); + } } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/UserInterface/RiuDockWidgetTools.cpp b/ApplicationCode/UserInterface/RiuDockWidgetTools.cpp index 6b3c9795ba..3a7264aa2f 100644 --- a/ApplicationCode/UserInterface/RiuDockWidgetTools.cpp +++ b/ApplicationCode/UserInterface/RiuDockWidgetTools.cpp @@ -31,25 +31,7 @@ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RiuDockWidgetTools::RiuDockWidgetTools() -{ - loadDockWidgetsState(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -RiuDockWidgetTools* RiuDockWidgetTools::instance() -{ - static RiuDockWidgetTools staticInstance; - - return &staticInstance; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -QString RiuDockWidgetTools::projectTreeName() const +QString RiuDockWidgetTools::projectTreeName() { return "dockProjectTree"; } @@ -57,7 +39,7 @@ QString RiuDockWidgetTools::projectTreeName() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RiuDockWidgetTools::propertyEditorName() const +QString RiuDockWidgetTools::propertyEditorName() { return "dockpropertyEditor"; } @@ -65,7 +47,7 @@ QString RiuDockWidgetTools::propertyEditorName() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RiuDockWidgetTools::resultInfoName() const +QString RiuDockWidgetTools::resultInfoName() { return "dockResultInfo"; } @@ -73,7 +55,7 @@ QString RiuDockWidgetTools::resultInfoName() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RiuDockWidgetTools::processMonitorName() const +QString RiuDockWidgetTools::processMonitorName() { return "dockProcessMonitor"; } @@ -81,7 +63,7 @@ QString RiuDockWidgetTools::processMonitorName() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RiuDockWidgetTools::resultPlotName() const +QString RiuDockWidgetTools::resultPlotName() { return "dockResultPlot"; } @@ -89,7 +71,7 @@ QString RiuDockWidgetTools::resultPlotName() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RiuDockWidgetTools::relPermPlotName() const +QString RiuDockWidgetTools::relPermPlotName() { return "dockRelPermPlot"; } @@ -97,7 +79,7 @@ QString RiuDockWidgetTools::relPermPlotName() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RiuDockWidgetTools::pvtPlotName() const +QString RiuDockWidgetTools::pvtPlotName() { return "dockPvtPlot"; } @@ -105,7 +87,7 @@ QString RiuDockWidgetTools::pvtPlotName() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RiuDockWidgetTools::mohrsCirclePlotName() const +QString RiuDockWidgetTools::mohrsCirclePlotName() { return "dockMohrsCirclePlot"; } @@ -113,7 +95,7 @@ QString RiuDockWidgetTools::mohrsCirclePlotName() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RiuDockWidgetTools::messagesName() const +QString RiuDockWidgetTools::messagesName() { return "dockMessages"; } @@ -165,8 +147,8 @@ void RiuDockWidgetTools::setVisibleDockingWindowsForEclipse() } } - RiuDockWidgetTools::instance()->trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::relPermPlotName(), true); - RiuDockWidgetTools::instance()->trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::pvtPlotName(), true); + RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::relPermPlotName(), true); + RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::pvtPlotName(), true); } //-------------------------------------------------------------------------------------------------- @@ -176,7 +158,7 @@ void RiuDockWidgetTools::setVisibleDockingWindowsForGeoMech() { RiuMainWindow* mainWindow = RiuMainWindow::instance(); - RiuDockWidgetTools::instance()->trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::mohrsCirclePlotName(), false); + RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::mohrsCirclePlotName(), false); { QDockWidget* dockWidget = findDockWidget(mainWindow, RiuDockWidgetTools::relPermPlotName()); @@ -203,78 +185,57 @@ void RiuDockWidgetTools::trySetDockWidgetVisibility(const QObject* parent, const QDockWidget* dockWidget = findDockWidget(parent, dockWidgetName); if (dockWidget) { - bool unifiedIsVisible = isVisible; - - auto state = visibilityForWidget(dockWidgetName); - if (state != RiuDockWidgetTools::USER_DEFINED_UNKNOWN) - { - if (state == RiuDockWidgetTools::USER_DEFINED_ON) - { - unifiedIsVisible = true; - } - else if (state == RiuDockWidgetTools::USER_DEFINED_OFF) - { - unifiedIsVisible = false; - } - } - - dockWidget->setVisible(unifiedIsVisible); + dockWidget->setVisible(isVisible); } } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RiuDockWidgetTools::UserDefinedVisibility RiuDockWidgetTools::visibilityForWidget(const QString& objectName) +QVariant RiuDockWidgetTools::storeDockWidgetsVisibility(const QObject* parent) { - RiuDockWidgetTools::UserDefinedVisibility visibility = USER_DEFINED_UNKNOWN; + QMap widgetVisibility; - auto windowStateIt = m_userDefinedDockWidgetVisibility.find(objectName); - if (windowStateIt != m_userDefinedDockWidgetVisibility.end()) + QList dockWidgets = parent->findChildren(); + + for (QDockWidget* dock : dockWidgets) { - bool isVisible = windowStateIt.value().toBool(); - if (isVisible) + if (dock) { - visibility = USER_DEFINED_ON; - } - else - { - visibility = USER_DEFINED_OFF; + bool isVisible = dock->isVisible(); + widgetVisibility[dock->objectName()] = isVisible; + + // qDebug() << "Store " << dock->objectName() << " : " << (isVisible ? "visible" : "not visible"); } } - return visibility; + return QVariant(widgetVisibility); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuDockWidgetTools::setDockWidgetVisibility(const QString& dockingWindowName, bool isVisible) +void RiuDockWidgetTools::restoreDockWidgetsVisibility(const QObject* parent, QVariant widgetVisibilities) { - m_userDefinedDockWidgetVisibility[dockingWindowName] = isVisible; -} + QMap widgetVisibilityMap = widgetVisibilities.toMap(); -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RiuDockWidgetTools::loadDockWidgetsState() -{ - // Company and appname set through QCoreApplication - QSettings settings; + QList dockWidgets = parent->findChildren(); - m_userDefinedDockWidgetVisibility = settings.value("dockWindowStates").toMap(); -} + for (QDockWidget* dock : dockWidgets) + { + if (dock) + { + auto widgetVisibility = widgetVisibilityMap.find(dock->objectName()); -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RiuDockWidgetTools::saveDockWidgetsState() -{ - // Company and appname set through QCoreApplication - QSettings settings; + if (widgetVisibility != widgetVisibilityMap.end()) + { + bool isVisible = widgetVisibility.value().toBool(); + dock->setVisible(isVisible); - QVariant v(m_userDefinedDockWidgetVisibility); - settings.setValue("dockWindowStates", v); + // qDebug() << "Restore " << dock->objectName() << " : " << (isVisible ? "visible" : "not visible"); + } + } + } } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/UserInterface/RiuDockWidgetTools.h b/ApplicationCode/UserInterface/RiuDockWidgetTools.h index 7e59b3f798..7a53c34d0e 100644 --- a/ApplicationCode/UserInterface/RiuDockWidgetTools.h +++ b/ApplicationCode/UserInterface/RiuDockWidgetTools.h @@ -30,45 +30,32 @@ class Rim3dView; //================================================================================================== // -// +// // //================================================================================================== class RiuDockWidgetTools { public: - static RiuDockWidgetTools* instance(); + static QString projectTreeName(); + static QString propertyEditorName(); + static QString resultInfoName(); + static QString processMonitorName(); + static QString resultPlotName(); + static QString relPermPlotName(); + static QString pvtPlotName(); + static QString messagesName(); + static QString mohrsCirclePlotName(); - QString projectTreeName() const; - QString propertyEditorName() const; - QString resultInfoName() const; - QString processMonitorName() const; - QString resultPlotName() const; - QString relPermPlotName() const; - QString pvtPlotName() const; - QString messagesName() const; - QString mohrsCirclePlotName() const; + static QAction* toggleActionForWidget(const QObject* parent, const QString& dockWidgetName); - QAction* toggleActionForWidget(const QObject* parent, const QString& dockWidgetName); - void setDockWidgetVisibility(const QString& dockWidgetName, bool isVisible); - void changeDockWidgetVisibilityBasedOnView(Rim3dView* view); - void saveDockWidgetsState(); + static QVariant storeDockWidgetsVisibility(const QObject* parent); + static void restoreDockWidgetsVisibility(const QObject* parent, QVariant widgetVisibilities); private: - enum UserDefinedVisibility - { - USER_DEFINED_ON, - USER_DEFINED_OFF, - USER_DEFINED_UNKNOWN - }; + static void changeDockWidgetVisibilityBasedOnView(Rim3dView* view); - RiuDockWidgetTools(); - void setVisibleDockingWindowsForEclipse(); - void setVisibleDockingWindowsForGeoMech(); - void loadDockWidgetsState(); - UserDefinedVisibility visibilityForWidget(const QString& dockWidgetName); - static QDockWidget* findDockWidget(const QObject* parent, const QString& dockWidgetName); - void trySetDockWidgetVisibility(const QObject* parent, const QString& dockWidgetName, bool isVisible); - -private: - QMap m_userDefinedDockWidgetVisibility; + static void setVisibleDockingWindowsForEclipse(); + static void setVisibleDockingWindowsForGeoMech(); + static QDockWidget* findDockWidget(const QObject* parent, const QString& dockWidgetName); + static void trySetDockWidgetVisibility(const QObject* parent, const QString& dockWidgetName, bool isVisible); }; diff --git a/ApplicationCode/UserInterface/RiuMainWindow.cpp b/ApplicationCode/UserInterface/RiuMainWindow.cpp index 73f113e19a..2d8b5959e9 100644 --- a/ApplicationCode/UserInterface/RiuMainWindow.cpp +++ b/ApplicationCode/UserInterface/RiuMainWindow.cpp @@ -270,10 +270,10 @@ void RiuMainWindow::cleanupGuiBeforeProjectClose() //-------------------------------------------------------------------------------------------------- void RiuMainWindow::closeEvent(QCloseEvent* event) { - RiaGuiApplication* app = RiaGuiApplication::instance(); - this->saveWinGeoAndDockToolBarLayout(); + this->hideAllDockWindows(); + RiaGuiApplication* app = RiaGuiApplication::instance(); if (app->isMainPlotWindowVisible()) { event->ignore(); // Make Qt think we don't do anything, otherwise it closes the window. @@ -666,11 +666,9 @@ void RiuMainWindow::createToolBars() //-------------------------------------------------------------------------------------------------- void RiuMainWindow::createDockPanels() { - auto dwt = RiuDockWidgetTools::instance(); - { QDockWidget* dockWidget = new QDockWidget("Project Tree", this); - dockWidget->setObjectName(dwt->projectTreeName()); + dockWidget->setObjectName(RiuDockWidgetTools::projectTreeName()); dockWidget->setAllowedAreas(Qt::AllDockWidgetAreas); m_projectTreeView = new caf::PdmUiTreeView(this); @@ -712,7 +710,7 @@ void RiuMainWindow::createDockPanels() { QDockWidget* dockWidget = new QDockWidget("Property Editor", this); - dockWidget->setObjectName(dwt->propertyEditorName()); + dockWidget->setObjectName(RiuDockWidgetTools::propertyEditorName()); dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); m_pdmUiPropertyView = new caf::PdmUiPropertyView(dockWidget); @@ -723,7 +721,7 @@ void RiuMainWindow::createDockPanels() { QDockWidget* dockWidget = new QDockWidget("Result Info", this); - dockWidget->setObjectName(dwt->resultInfoName()); + dockWidget->setObjectName(RiuDockWidgetTools::resultInfoName()); dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); m_resultInfoPanel = new RiuResultInfoPanel(dockWidget); dockWidget->setWidget(m_resultInfoPanel); @@ -733,7 +731,7 @@ void RiuMainWindow::createDockPanels() { QDockWidget* dockWidget = new QDockWidget("Process Monitor", this); - dockWidget->setObjectName(dwt->processMonitorName()); + dockWidget->setObjectName(RiuDockWidgetTools::processMonitorName()); dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); m_processMonitor = new RiuProcessMonitor(dockWidget); dockWidget->setWidget(m_processMonitor); @@ -744,7 +742,7 @@ void RiuMainWindow::createDockPanels() { QDockWidget* dockWidget = new QDockWidget("Result Plot", this); - dockWidget->setObjectName(dwt->resultPlotName()); + dockWidget->setObjectName(RiuDockWidgetTools::resultPlotName()); dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); m_resultQwtPlot = new RiuResultQwtPlot(dockWidget); dockWidget->setWidget(m_resultQwtPlot); @@ -756,7 +754,7 @@ void RiuMainWindow::createDockPanels() #ifdef USE_ODB_API { QDockWidget* dockWidget = new QDockWidget("Mohr's Circle Plot", this); - dockWidget->setObjectName(dwt->mohrsCirclePlotName()); + dockWidget->setObjectName(RiuDockWidgetTools::mohrsCirclePlotName()); dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); m_mohrsCirclePlot = new RiuMohrsCirclePlot(dockWidget); dockWidget->setWidget(m_mohrsCirclePlot); @@ -770,7 +768,7 @@ void RiuMainWindow::createDockPanels() { QDockWidget* dockWidget = new QDockWidget("Relative Permeability Plot", this); - dockWidget->setObjectName(dwt->relPermPlotName()); + dockWidget->setObjectName(RiuDockWidgetTools::relPermPlotName()); dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); m_relPermPlotPanel = new RiuRelativePermeabilityPlotPanel(dockWidget); dockWidget->setWidget(m_relPermPlotPanel); @@ -781,7 +779,7 @@ void RiuMainWindow::createDockPanels() { QDockWidget* dockWidget = new QDockWidget("PVT Plot", this); - dockWidget->setObjectName(dwt->pvtPlotName()); + dockWidget->setObjectName(RiuDockWidgetTools::pvtPlotName()); dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); m_pvtPlotPanel = new RiuPvtPlotPanel(dockWidget); dockWidget->setWidget(m_pvtPlotPanel); @@ -792,7 +790,7 @@ void RiuMainWindow::createDockPanels() { QDockWidget* dockWidget = new QDockWidget("Messages", this); - dockWidget->setObjectName(dwt->messagesName()); + dockWidget->setObjectName(RiuDockWidgetTools::messagesName()); m_messagePanel = new RiuMessagePanel(dockWidget); dockWidget->setWidget(m_messagePanel); addDockWidget(Qt::BottomDockWidgetArea, dockWidget); @@ -1349,8 +1347,7 @@ void appendToggleActionForDockingWidget(QMenu* menu, QWidget* parent, const QStr { if (menu) { - auto dwt = RiuDockWidgetTools::instance(); - QAction* action = dwt->toggleActionForWidget(parent, dockWidgetName); + QAction* action = RiuDockWidgetTools::toggleActionForWidget(parent, dockWidgetName); if (action) { // Some dock windows are depending on configuration (mohrs circle plot), so do not assert they exist @@ -1372,20 +1369,18 @@ void RiuMainWindow::slotBuildWindowActions() m_windowMenu->addSeparator(); } - auto dwt = RiuDockWidgetTools::instance(); - - appendToggleActionForDockingWidget(m_windowMenu, this, dwt->projectTreeName()); - appendToggleActionForDockingWidget(m_windowMenu, this, dwt->propertyEditorName()); - appendToggleActionForDockingWidget(m_windowMenu, this, dwt->messagesName()); - appendToggleActionForDockingWidget(m_windowMenu, this, dwt->processMonitorName()); + appendToggleActionForDockingWidget(m_windowMenu, this, RiuDockWidgetTools::projectTreeName()); + appendToggleActionForDockingWidget(m_windowMenu, this, RiuDockWidgetTools::propertyEditorName()); + appendToggleActionForDockingWidget(m_windowMenu, this, RiuDockWidgetTools::messagesName()); + appendToggleActionForDockingWidget(m_windowMenu, this, RiuDockWidgetTools::processMonitorName()); m_windowMenu->addSeparator(); - appendToggleActionForDockingWidget(m_windowMenu, this, dwt->resultInfoName()); - appendToggleActionForDockingWidget(m_windowMenu, this, dwt->resultPlotName()); - appendToggleActionForDockingWidget(m_windowMenu, this, dwt->relPermPlotName()); - appendToggleActionForDockingWidget(m_windowMenu, this, dwt->pvtPlotName()); - appendToggleActionForDockingWidget(m_windowMenu, this, dwt->mohrsCirclePlotName()); + appendToggleActionForDockingWidget(m_windowMenu, this, RiuDockWidgetTools::resultInfoName()); + appendToggleActionForDockingWidget(m_windowMenu, this, RiuDockWidgetTools::resultPlotName()); + appendToggleActionForDockingWidget(m_windowMenu, this, RiuDockWidgetTools::relPermPlotName()); + appendToggleActionForDockingWidget(m_windowMenu, this, RiuDockWidgetTools::pvtPlotName()); + appendToggleActionForDockingWidget(m_windowMenu, this, RiuDockWidgetTools::mohrsCirclePlotName()); m_windowMenu->addSeparator(); QAction* cascadeWindowsAction = new QAction("Cascade Windows", this); @@ -1780,7 +1775,7 @@ void RiuMainWindow::updateMemoryUsage() //-------------------------------------------------------------------------------------------------- void RiuMainWindow::showProcessMonitorDockPanel() { - showDockPanel(RiuDockWidgetTools::instance()->processMonitorName()); + showDockPanel(RiuDockWidgetTools::processMonitorName()); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/UserInterface/RiuMainWindowBase.cpp b/ApplicationCode/UserInterface/RiuMainWindowBase.cpp index 2e6004f59f..efa988bc1e 100644 --- a/ApplicationCode/UserInterface/RiuMainWindowBase.cpp +++ b/ApplicationCode/UserInterface/RiuMainWindowBase.cpp @@ -83,6 +83,8 @@ void RiuMainWindowBase::loadWinGeoAndDockToolBarLayout() } } } + + restoreDockWidgetVisibilities(); } //-------------------------------------------------------------------------------------------------- @@ -100,6 +102,24 @@ void RiuMainWindowBase::saveWinGeoAndDockToolBarLayout() settings.setValue(QString("%1/dockAndToolBarLayout").arg(registryFolderName()), layout); settings.setValue(QString("%1/isMaximized").arg(registryFolderName()), isMaximized()); + + if (this->isVisible()) + { + QVariant dockWindowVisibilities = RiuDockWidgetTools::storeDockWidgetsVisibility(this); + settings.setValue(QString("%1/dockWindowVisibilies").arg(registryFolderName()), dockWindowVisibilities); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMainWindowBase::restoreDockWidgetVisibilities() +{ + // Company and appname set through QCoreApplication + QSettings settings; + + QVariant dockWindowVisibilities = settings.value(QString("%1/dockWindowVisibilies").arg(registryFolderName())); + RiuDockWidgetTools::restoreDockWidgetsVisibility(this, dockWindowVisibilities); } //-------------------------------------------------------------------------------------------------- @@ -119,6 +139,22 @@ void RiuMainWindowBase::showWindow() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMainWindowBase::closeAllDockWidgets() +{ + QList dockWidgets = findChildren(); + + for (QDockWidget* dock : dockWidgets) + { + if (dock) + { + dock->hide(); + } + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -225,8 +261,6 @@ void RiuMainWindowBase::slotDockWidgetToggleViewActionTriggered() // Raise the dock widget to make it visible if the widget is part of a tab widget dockWidget->raise(); } - - RiuDockWidgetTools::instance()->setDockWidgetVisibility(dockWidget->objectName(), dockWidget->isVisible()); } } diff --git a/ApplicationCode/UserInterface/RiuMainWindowBase.h b/ApplicationCode/UserInterface/RiuMainWindowBase.h index 1e41360426..9acb072ab4 100644 --- a/ApplicationCode/UserInterface/RiuMainWindowBase.h +++ b/ApplicationCode/UserInterface/RiuMainWindowBase.h @@ -56,8 +56,11 @@ public: RimMdiWindowGeometry windowGeometryForViewer(QWidget* viewer); void loadWinGeoAndDockToolBarLayout(); void saveWinGeoAndDockToolBarLayout(); + void restoreDockWidgetVisibilities(); void showWindow(); + void closeAllDockWidgets(); + caf::PdmUiTreeView* projectTreeView() { return m_projectTreeView;} void setExpanded(const caf::PdmUiItem* uiItem, bool expanded = true); diff --git a/ApplicationCode/UserInterface/RiuPlotMainWindow.cpp b/ApplicationCode/UserInterface/RiuPlotMainWindow.cpp index 3653bb29f2..1c3bd73ff5 100644 --- a/ApplicationCode/UserInterface/RiuPlotMainWindow.cpp +++ b/ApplicationCode/UserInterface/RiuPlotMainWindow.cpp @@ -180,6 +180,8 @@ void RiuPlotMainWindow::closeEvent(QCloseEvent* event) { this->saveWinGeoAndDockToolBarLayout(); + this->hideAllDockWindows(); + RiaGuiApplication* app = RiaGuiApplication::instance(); if (app->isMain3dWindowVisible())