diff --git a/ApplicationCode/Application/RiaApplication.cpp b/ApplicationCode/Application/RiaApplication.cpp index 7907a8b94f..13dc8cd302 100644 --- a/ApplicationCode/Application/RiaApplication.cpp +++ b/ApplicationCode/Application/RiaApplication.cpp @@ -72,6 +72,7 @@ #include "RimWellPltPlot.h" #include "RimWellRftPlot.h" +#include "RiuDockWidgetTools.h" #include "RiuMainPlotWindow.h" #include "RiuMainWindow.h" #include "RiuProcessMonitor.h" @@ -195,12 +196,13 @@ RiaApplication::RiaApplication(int& argc, char** argv) //-------------------------------------------------------------------------------------------------- RiaApplication::~RiaApplication() { + RiuDockWidgetTools::instance()->saveDockWidgetsState(); + deleteMainPlotWindow(); delete m_preferences; } - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -209,7 +211,6 @@ RiaApplication* RiaApplication::instance() return static_castqApp; } - //-------------------------------------------------------------------------------------------------- /// Return -1 if unit test is not executed, returns 0 if test passed, returns 1 if tests failed //-------------------------------------------------------------------------------------------------- @@ -1074,8 +1075,6 @@ bool RiaApplication::openOdbCaseFromFile(const QString& fileName) return true; } - - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -1167,6 +1166,8 @@ RimViewWindow* RiaApplication::activePlotWindow() const void RiaApplication::setActiveReservoirView(Rim3dView* rv) { m_activeReservoirView = rv; + + RiuDockWidgetTools::instance()->changeDockWidgetVisibilityBasedOnView(rv); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/UserInterface/RiuMainPlotWindow.cpp b/ApplicationCode/UserInterface/RiuMainPlotWindow.cpp index 8d0af790e6..ef2c97a978 100644 --- a/ApplicationCode/UserInterface/RiuMainPlotWindow.cpp +++ b/ApplicationCode/UserInterface/RiuMainPlotWindow.cpp @@ -394,6 +394,12 @@ void RiuMainPlotWindow::createDockPanels() setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::BottomRightCorner, Qt::BottomDockWidgetArea); + + QList dockWidgets = findChildren(); + for (QDockWidget* dock : dockWidgets) + { + connect(dock->toggleViewAction(), SIGNAL(triggered()), SLOT(slotDockWidgetToggleViewActionTriggered())); + } } //-------------------------------------------------------------------------------------------------- @@ -596,17 +602,9 @@ void RiuMainPlotWindow::slotBuildWindowActions() m_windowMenu->clear(); QList dockWidgets = findChildren(); - - int i = 0; - foreach (QDockWidget* dock, dockWidgets) + for (QDockWidget* dock : dockWidgets) { - if (dock) - { - if (i == 4) - m_windowMenu->addSeparator(); - m_windowMenu->addAction(dock->toggleViewAction()); - ++i; - } + m_windowMenu->addAction(dock->toggleViewAction()); } m_windowMenu->addSeparator(); diff --git a/ApplicationCode/UserInterface/RiuMainWindow.cpp b/ApplicationCode/UserInterface/RiuMainWindow.cpp index e5a2152cc3..9e722848a3 100644 --- a/ApplicationCode/UserInterface/RiuMainWindow.cpp +++ b/ApplicationCode/UserInterface/RiuMainWindow.cpp @@ -84,10 +84,7 @@ #include #include #include - - -#define DOCK_PANEL_NAME_PROCESS_MONITOR "dockProcessMonitor" - +#include "RiuDockWidgetTools.h" //================================================================================================== @@ -367,39 +364,30 @@ void RiuMainWindow::createMenus() QMenu* importMenu = fileMenu->addMenu("&Import"); - - QMenu* importEclipseMenu = importMenu->addMenu(QIcon(":/Case48x48.png"), "Eclipse Cases"); - importEclipseMenu->addAction(cmdFeatureMgr->action("RicImportEclipseCaseFeature")); - importEclipseMenu->addAction(cmdFeatureMgr->action("RicImportEclipseCasesFeature")); - importEclipseMenu->addAction(cmdFeatureMgr->action("RicImportEclipseCaseTimeStepFilterFeature")); - importEclipseMenu->addAction(cmdFeatureMgr->action("RicImportInputEclipseCaseFeature")); - importEclipseMenu->addAction(cmdFeatureMgr->action("RicCreateGridCaseGroupFeature")); - importEclipseMenu->addAction(cmdFeatureMgr->action("RicCreateGridCaseGroupFromFilesFeature")); - + importMenu->addAction(cmdFeatureMgr->action("RicImportEclipseCaseFeature")); + importMenu->addAction(cmdFeatureMgr->action("RicImportEclipseCasesFeature")); + importMenu->addAction(cmdFeatureMgr->action("RicImportEclipseCaseTimeStepFilterFeature")); + importMenu->addAction(cmdFeatureMgr->action("RicImportInputEclipseCaseFeature")); + importMenu->addAction(cmdFeatureMgr->action("RicCreateGridCaseGroupFeature")); + importMenu->addAction(cmdFeatureMgr->action("RicCreateGridCaseGroupFromFilesFeature")); + importMenu->addSeparator(); #ifdef USE_ODB_API + importMenu->addAction(cmdFeatureMgr->action("RicImportGeoMechCaseFeature")); + importMenu->addAction(cmdFeatureMgr->action("RicImportElementPropertyFeature")); importMenu->addSeparator(); - QMenu* importGeoMechMenu = importMenu->addMenu(QIcon(":/GeoMechCase48x48.png"), "Geo Mechanical Cases"); - importGeoMechMenu->addAction(cmdFeatureMgr->action("RicImportGeoMechCaseFeature")); - importGeoMechMenu->addAction(cmdFeatureMgr->action("RicImportElementPropertyFeature")); #endif + importMenu->addAction(cmdFeatureMgr->action("RicImportSummaryCaseFeature")); + importMenu->addAction(cmdFeatureMgr->action("RicImportSummaryCasesFeature")); + importMenu->addAction(cmdFeatureMgr->action("RicImportEnsembleFeature")); + importMenu->addAction(cmdFeatureMgr->action("RicImportObservedDataInMenuFeature")); importMenu->addSeparator(); - QMenu* importSummaryMenu = importMenu->addMenu(QIcon(":/SummaryCase48x48.png"), "Summary Cases"); - importSummaryMenu->addAction(cmdFeatureMgr->action("RicImportSummaryCaseFeature")); - importSummaryMenu->addAction(cmdFeatureMgr->action("RicImportSummaryCasesFeature")); - importSummaryMenu->addAction(cmdFeatureMgr->action("RicImportEnsembleFeature")); - importSummaryMenu->addAction(cmdFeatureMgr->action("RicImportObservedDataInMenuFeature")); - + importMenu->addAction(cmdFeatureMgr->action("RicWellPathsImportFileFeature")); + importMenu->addAction(cmdFeatureMgr->action("RicWellPathsImportSsihubFeature")); + importMenu->addAction(cmdFeatureMgr->action("RicWellLogsImportFileFeature")); importMenu->addSeparator(); - QMenu* importWellMenu = importMenu->addMenu(QIcon(":/Well.png"), "Wells"); - importWellMenu->addAction(cmdFeatureMgr->action("RicWellPathsImportFileFeature")); - importWellMenu->addAction(cmdFeatureMgr->action("RicWellPathsImportSsihubFeature")); - importWellMenu->addAction(cmdFeatureMgr->action("RicWellLogsImportFileFeature")); - - importMenu->addSeparator(); - QMenu* importFormationsMenu = importMenu->addMenu(QIcon(":/FormationCollection16x16.png"), "Formations"); - importFormationsMenu->addAction(cmdFeatureMgr->action("RicImportFormationNamesFeature")); - importFormationsMenu->addAction(cmdFeatureMgr->action("RicWellPathFormationsImportFileFeature")); + importMenu->addAction(cmdFeatureMgr->action("RicImportFormationNamesFeature")); + importMenu->addAction(cmdFeatureMgr->action("RicWellPathFormationsImportFileFeature")); QMenu* exportMenu = fileMenu->addMenu("&Export"); exportMenu->addAction(cmdFeatureMgr->action("RicSnapshotViewToFileFeature")); @@ -575,9 +563,11 @@ void RiuMainWindow::createToolBars() void RiuMainWindow::createDockPanels() { + auto dwt = RiuDockWidgetTools::instance(); + { QDockWidget* dockWidget = new QDockWidget("Project Tree", this); - dockWidget->setObjectName("dockWidget"); + dockWidget->setObjectName(dwt->projectTreeName()); dockWidget->setAllowedAreas(Qt::AllDockWidgetAreas); m_projectTreeView = new caf::PdmUiTreeView(this); @@ -615,7 +605,7 @@ void RiuMainWindow::createDockPanels() { QDockWidget* dockWidget = new QDockWidget("Property Editor", this); - dockWidget->setObjectName("dockWidget"); + dockWidget->setObjectName(dwt->propertyEditorName()); dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); m_pdmUiPropertyView = new caf::PdmUiPropertyView(dockWidget); @@ -625,84 +615,84 @@ void RiuMainWindow::createDockPanels() } { - QDockWidget* dockPanel = new QDockWidget("Result Info", this); - dockPanel->setObjectName("dockResultInfoPanel"); - dockPanel->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); - m_resultInfoPanel = new RiuResultInfoPanel(dockPanel); - dockPanel->setWidget(m_resultInfoPanel); + QDockWidget* dockWidget = new QDockWidget("Result Info", this); + dockWidget->setObjectName(dwt->resultInfoName()); + dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); + m_resultInfoPanel = new RiuResultInfoPanel(dockWidget); + dockWidget->setWidget(m_resultInfoPanel); - addDockWidget(Qt::BottomDockWidgetArea, dockPanel); + addDockWidget(Qt::BottomDockWidgetArea, dockWidget); } { - QDockWidget* dockPanel = new QDockWidget("Process Monitor", this); - dockPanel->setObjectName(DOCK_PANEL_NAME_PROCESS_MONITOR); - dockPanel->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); - m_processMonitor = new RiuProcessMonitor(dockPanel); - dockPanel->setWidget(m_processMonitor); + QDockWidget* dockWidget = new QDockWidget("Process Monitor", this); + dockWidget->setObjectName(dwt->processMonitorName()); + dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); + m_processMonitor = new RiuProcessMonitor(dockWidget); + dockWidget->setWidget(m_processMonitor); - addDockWidget(Qt::BottomDockWidgetArea, dockPanel); - dockPanel->hide(); + addDockWidget(Qt::BottomDockWidgetArea, dockWidget); + dockWidget->hide(); } { - QDockWidget* dockPanel = new QDockWidget("Result Plot", this); - dockPanel->setObjectName("dockTimeHistoryPanel"); - dockPanel->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); - m_resultQwtPlot = new RiuResultQwtPlot(dockPanel); - dockPanel->setWidget(m_resultQwtPlot); + QDockWidget* dockWidget = new QDockWidget("Result Plot", this); + dockWidget->setObjectName(dwt->resultPlotName()); + dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); + m_resultQwtPlot = new RiuResultQwtPlot(dockWidget); + dockWidget->setWidget(m_resultQwtPlot); - addDockWidget(Qt::BottomDockWidgetArea, dockPanel); - resultPlotDock = dockPanel; + addDockWidget(Qt::BottomDockWidgetArea, dockWidget); + resultPlotDock = dockWidget; } #ifdef USE_ODB_API { - QDockWidget* dockPanel = new QDockWidget("Mohr's Circle Plot", this); - dockPanel->setObjectName("dockTimeHistoryPanel"); - dockPanel->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); - m_mohrsCirclePlot = new RiuMohrsCirclePlot(dockPanel); - dockPanel->setWidget(m_mohrsCirclePlot); + QDockWidget* dockWidget = new QDockWidget("Mohr's Circle Plot", this); + dockWidget->setObjectName(dwt->mohrsCirclePlotName()); + dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); + m_mohrsCirclePlot = new RiuMohrsCirclePlot(dockWidget); + dockWidget->setWidget(m_mohrsCirclePlot); - addDockWidget(Qt::BottomDockWidgetArea, dockPanel); - mohrsCirclePlotDock = dockPanel; + addDockWidget(Qt::BottomDockWidgetArea, dockWidget); + mohrsCirclePlotDock = dockWidget; - dockPanel->hide(); + dockWidget->hide(); } #endif { - QDockWidget* dockPanel = new QDockWidget("Relative Permeability Plot", this); - dockPanel->setObjectName("dockRelativePermeabilityPlotPanel"); - dockPanel->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); - m_relPermPlotPanel = new RiuRelativePermeabilityPlotPanel(dockPanel); - dockPanel->setWidget(m_relPermPlotPanel); + QDockWidget* dockWidget = new QDockWidget("Relative Permeability Plot", this); + dockWidget->setObjectName(dwt->relPermPlotName()); + dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); + m_relPermPlotPanel = new RiuRelativePermeabilityPlotPanel(dockWidget); + dockWidget->setWidget(m_relPermPlotPanel); - addDockWidget(Qt::BottomDockWidgetArea, dockPanel); - relPermPlotDock = dockPanel; + addDockWidget(Qt::BottomDockWidgetArea, dockWidget); + relPermPlotDock = dockWidget; } { - QDockWidget* dockPanel = new QDockWidget("PVT Plot", this); - dockPanel->setObjectName("dockPvtPlotPanel"); - dockPanel->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); - m_pvtPlotPanel = new RiuPvtPlotPanel(dockPanel); - dockPanel->setWidget(m_pvtPlotPanel); + QDockWidget* dockWidget = new QDockWidget("PVT Plot", this); + dockWidget->setObjectName(dwt->pvtPlotName()); + dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); + m_pvtPlotPanel = new RiuPvtPlotPanel(dockWidget); + dockWidget->setWidget(m_pvtPlotPanel); - addDockWidget(Qt::BottomDockWidgetArea, dockPanel); - pvtPlotDock = dockPanel; + addDockWidget(Qt::BottomDockWidgetArea, dockWidget); + pvtPlotDock = dockWidget; } { QDockWidget* dockWidget = new QDockWidget("Messages", this); - dockWidget->setObjectName("dockMessages"); + dockWidget->setObjectName(dwt->messagesName()); m_messagePanel = new RiuMessagePanel(dockWidget); dockWidget->setWidget(m_messagePanel); addDockWidget(Qt::BottomDockWidgetArea, dockWidget); dockWidget->hide(); } - setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); + setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::BottomRightCorner, Qt::BottomDockWidgetArea); // Tabify docks @@ -714,6 +704,11 @@ void RiuMainWindow::createDockPanels() tabifyDockWidget(relPermPlotDock, resultPlotDock); #endif + QList dockWidgets = findChildren(); + for (QDockWidget* dock : dockWidgets) + { + connect(dock->toggleViewAction(), SIGNAL(triggered()), SLOT(slotDockWidgetToggleViewActionTriggered())); + } } //-------------------------------------------------------------------------------------------------- @@ -1270,18 +1265,20 @@ void RiuMainWindow::slotBuildWindowActions() m_windowMenu->addAction(m_newPropertyView); m_windowMenu->addSeparator(); - QList dockWidgets = findChildren(); + auto dwt = RiuDockWidgetTools::instance(); - int i = 0; - foreach (QDockWidget* dock, dockWidgets) - { - if (dock) - { - if (i == 4) m_windowMenu->addSeparator(); - m_windowMenu->addAction(dock->toggleViewAction()); - ++i; - } - } + m_windowMenu->addAction(dwt->toggleActionForWidget(this, dwt->projectTreeName())); + m_windowMenu->addAction(dwt->toggleActionForWidget(this, dwt->propertyEditorName())); + m_windowMenu->addAction(dwt->toggleActionForWidget(this, dwt->messagesName())); + m_windowMenu->addAction(dwt->toggleActionForWidget(this, dwt->processMonitorName())); + + m_windowMenu->addSeparator(); + + m_windowMenu->addAction(dwt->toggleActionForWidget(this, dwt->resultInfoName())); + m_windowMenu->addAction(dwt->toggleActionForWidget(this, dwt->resultPlotName())); + m_windowMenu->addAction(dwt->toggleActionForWidget(this, dwt->relPermPlotName())); + m_windowMenu->addAction(dwt->toggleActionForWidget(this, dwt->pvtPlotName())); + m_windowMenu->addAction(dwt->toggleActionForWidget(this, dwt->mohrsCirclePlotName())); m_windowMenu->addSeparator(); QAction* cascadeWindowsAction = new QAction("Cascade Windows", this); @@ -1406,42 +1403,6 @@ void RiuMainWindow::hideAllDockWindows() } } - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -/*void RiuMainWindow::slotOpenMultipleCases() -{ -#if 1 - QAction* action = caf::CmdFeatureManager::instance()->action("RicCreateGridCaseGroupFeature"); - CVF_ASSERT(action); - - action->trigger(); - -#else // Code to fast generate a test project - RiaApplication* app = RiaApplication::instance(); - - QStringList gridFileNames; - - if (1) - { - gridFileNames += RiaDefines::mockModelBasicWithResults(); - gridFileNames += RiaDefines::mockModelBasicWithResults(); - gridFileNames += RiaDefines::mockModelBasicWithResults(); - } - else - { - gridFileNames += "d:/Models/Statoil/MultipleRealisations/Case_with_10_timesteps/Real0/BRUGGE_0000.EGRID"; - gridFileNames += "d:/Models/Statoil/MultipleRealisations/Case_with_10_timesteps/Real10/BRUGGE_0010.EGRID"; - gridFileNames += "d:/Models/Statoil/MultipleRealisations/Case_with_10_timesteps/Real30/BRUGGE_0030.EGRID"; - gridFileNames += "d:/Models/Statoil/MultipleRealisations/Case_with_10_timesteps/Real40/BRUGGE_0040.EGRID"; - } - - app->addEclipseCases(gridFileNames); -#endif - -} -*/ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -1635,7 +1596,7 @@ void RiuMainWindow::updateUiFieldsFromActiveResult(caf::PdmObjectHandle* objectT //-------------------------------------------------------------------------------------------------- void RiuMainWindow::showProcessMonitorDockPanel() { - showDockPanel(DOCK_PANEL_NAME_PROCESS_MONITOR); + showDockPanel(RiuDockWidgetTools::instance()->processMonitorName()); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/UserInterface/RiuMainWindowBase.cpp b/ApplicationCode/UserInterface/RiuMainWindowBase.cpp index 709e68234c..93e4ac482b 100644 --- a/ApplicationCode/UserInterface/RiuMainWindowBase.cpp +++ b/ApplicationCode/UserInterface/RiuMainWindowBase.cpp @@ -20,9 +20,13 @@ #include "RiaVersionInfo.h" -#include -#include "cafPdmUiTreeView.h" +#include "RiuDockWidgetTools.h" + #include "cafPdmObject.h" +#include "cafPdmUiTreeView.h" + +#include +#include //-------------------------------------------------------------------------------------------------- /// @@ -118,3 +122,24 @@ void RiuMainWindowBase::setExpanded(const caf::PdmUiItem* uiItem, bool expanded) { m_projectTreeView->setExpanded(uiItem, expanded); } + +//-------------------------------------------------------------------------------------------------- +/// +/// +//-------------------------------------------------------------------------------------------------- +void RiuMainWindowBase::slotDockWidgetToggleViewActionTriggered() +{ + if (!sender()) return; + + auto dockWidget = dynamic_cast(sender()->parent()); + if (dockWidget) + { + if (dockWidget->isVisible()) + { + // 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 5ac3f39663..bef70f453a 100644 --- a/ApplicationCode/UserInterface/RiuMainWindowBase.h +++ b/ApplicationCode/UserInterface/RiuMainWindowBase.h @@ -39,28 +39,32 @@ class RiuMainWindowBase : public QMainWindow public: RiuMainWindowBase(); - virtual QString mainWindowName() = 0; + virtual QString mainWindowName() = 0; - virtual void removeViewer( QWidget* viewer ) = 0; - virtual void addViewer(QWidget* viewer, const RimMdiWindowGeometry& windowsGeometry)= 0; - virtual void setActiveViewer(QWidget* subWindow) = 0; + virtual void removeViewer( QWidget* viewer ) = 0; + virtual void addViewer(QWidget* viewer, const RimMdiWindowGeometry& windowsGeometry)= 0; + virtual void setActiveViewer(QWidget* subWindow) = 0; virtual RimMdiWindowGeometry windowGeometryForViewer(QWidget* viewer) = 0; - void loadWinGeoAndDockToolBarLayout(); - void saveWinGeoAndDockToolBarLayout(); - void showWindow(); + void loadWinGeoAndDockToolBarLayout(); + void saveWinGeoAndDockToolBarLayout(); + void showWindow(); caf::PdmUiTreeView* projectTreeView() { return m_projectTreeView;} void setExpanded(const caf::PdmUiItem* uiItem, bool expanded = true); - void selectAsCurrentItem(const caf::PdmObject* object, bool allowActiveViewChange = true); + void selectAsCurrentItem(const caf::PdmObject* object, bool allowActiveViewChange = true); + +protected slots: + void slotDockWidgetToggleViewActionTriggered(); protected: - caf::PdmUiTreeView* m_projectTreeView; - bool m_allowActiveViewChangeFromSelection; // To be used in selectedObjectsChanged() to control + caf::PdmUiTreeView* m_projectTreeView; + bool m_allowActiveViewChangeFromSelection; // To be used in selectedObjectsChanged() to control // whether to select the corresponding active view or not + private: - QString registryFolderName(); + QString registryFolderName(); };