From 55ef7fc02ab3af668440a79fefa41f8edbadb228 Mon Sep 17 00:00:00 2001 From: Gaute Lindkvist Date: Wed, 7 Oct 2020 15:00:26 +0200 Subject: [PATCH] Fix MDI Subwindow creation --- .../RimMdiWindowController.cpp | 8 ++-- .../UserInterface/RiuMainWindow.cpp | 5 ++- ApplicationCode/UserInterface/RiuMainWindow.h | 2 +- .../UserInterface/RiuMainWindowBase.cpp | 38 +++++++++++-------- .../UserInterface/RiuMainWindowBase.h | 15 ++++++-- .../UserInterface/RiuPlotMainWindow.cpp | 5 ++- .../UserInterface/RiuPlotMainWindow.h | 2 +- 7 files changed, 46 insertions(+), 29 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimMdiWindowController.cpp b/ApplicationCode/ProjectDataModel/RimMdiWindowController.cpp index 8eb5414260..1f17416736 100644 --- a/ApplicationCode/ProjectDataModel/RimMdiWindowController.cpp +++ b/ApplicationCode/ProjectDataModel/RimMdiWindowController.cpp @@ -23,6 +23,8 @@ #include "RimViewWindow.h" #include "RiuMainWindowBase.h" +#include + CAF_PDM_XML_SOURCE_INIT( RimMdiWindowController, "MdiWindowController" ); //-------------------------------------------------------------------------------------------------- @@ -154,9 +156,9 @@ void RimMdiWindowController::updateViewerWidget() { if ( !viewWidget() ) { - QWidget* viewWidget = viewPdmObject()->createViewWidget( mainWindow ); - - mainWindow->addViewer( viewWidget, this->mdiWindowGeometry() ); + QMdiSubWindow* viewWindow = mainWindow->createViewWindow(); + QWidget* viewWidget = viewPdmObject()->createViewWidget( viewWindow ); + mainWindow->initializeViewer( viewWindow, viewWidget, this->mdiWindowGeometry() ); viewPdmObject()->updateViewWidgetAfterCreation(); } diff --git a/ApplicationCode/UserInterface/RiuMainWindow.cpp b/ApplicationCode/UserInterface/RiuMainWindow.cpp index 063d79e332..3c45251616 100644 --- a/ApplicationCode/UserInterface/RiuMainWindow.cpp +++ b/ApplicationCode/UserInterface/RiuMainWindow.cpp @@ -1118,7 +1118,7 @@ void RiuMainWindow::removeViewer( QWidget* viewer ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuMainWindow::addViewer( QWidget* viewer, const RimMdiWindowGeometry& windowsGeometry ) +void RiuMainWindow::initializeViewer( QMdiSubWindow* subWindow, QWidget* viewer, const RimMdiWindowGeometry& windowsGeometry ) { QSize subWindowSize; QPoint subWindowPos( -1, -1 ); @@ -1133,7 +1133,8 @@ void RiuMainWindow::addViewer( QWidget* viewer, const RimMdiWindowGeometry& wind subWindowSize = QSize( 400, 400 ); } - addViewerToMdiArea( m_mdiArea, viewer, subWindowPos, subWindowSize ); + initializeSubWindow( m_mdiArea, subWindow, subWindowPos, subWindowSize ); + subWindow->setWidget( viewer ); slotRefreshViewActions(); } diff --git a/ApplicationCode/UserInterface/RiuMainWindow.h b/ApplicationCode/UserInterface/RiuMainWindow.h index e624a064a0..c6938aad75 100644 --- a/ApplicationCode/UserInterface/RiuMainWindow.h +++ b/ApplicationCode/UserInterface/RiuMainWindow.h @@ -89,7 +89,7 @@ public: void cleanupGuiBeforeProjectClose(); void removeViewer( QWidget* viewer ) override; - void addViewer( QWidget* viewer, const RimMdiWindowGeometry& windowsGeometry ) override; + void initializeViewer( QMdiSubWindow* subWindow, QWidget* viewer, const RimMdiWindowGeometry& windowsGeometry ) override; void setActiveViewer( QWidget* subWindow ) override; void setResultInfo( const QString& info ) const; diff --git a/ApplicationCode/UserInterface/RiuMainWindowBase.cpp b/ApplicationCode/UserInterface/RiuMainWindowBase.cpp index 7286b985d6..990730bb7d 100644 --- a/ApplicationCode/UserInterface/RiuMainWindowBase.cpp +++ b/ApplicationCode/UserInterface/RiuMainWindowBase.cpp @@ -48,6 +48,19 @@ RiuMainWindowBase::RiuMainWindowBase() setDockNestingEnabled( true ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QMdiSubWindow* RiuMainWindowBase::createViewWindow() +{ + RiuMdiSubWindow* subWin = + new RiuMdiSubWindow( nullptr, Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint | Qt::WindowMaximizeButtonHint ); + subWin->setAttribute( Qt::WA_DeleteOnClose ); // Make sure the contained widget is destroyed when the MDI window is + // closed + + return subWin; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -349,16 +362,11 @@ void RiuMainWindowBase::slotDockWidgetToggleViewActionTriggered() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuMainWindowBase::addViewerToMdiArea( QMdiArea* mdiArea, - QWidget* viewer, - const QPoint& subWindowPos, - const QSize& subWindowSize ) +void RiuMainWindowBase::initializeSubWindow( QMdiArea* mdiArea, + QMdiSubWindow* mdiSubWindow, + const QPoint& subWindowPos, + const QSize& subWindowSize ) { - RiuMdiSubWindow* subWin = - new RiuMdiSubWindow( nullptr, Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint | Qt::WindowMaximizeButtonHint ); - subWin->setAttribute( Qt::WA_DeleteOnClose ); // Make sure the contained widget is destroyed when the MDI window is - // closed - bool initialStateTiled = subWindowsAreTiled(); bool initialStateMaximized = false; @@ -373,28 +381,26 @@ void RiuMainWindowBase::addViewerToMdiArea( QMdiArea* mdiArea, initialStateMaximized = true; } - mdiArea->addSubWindow( subWin ); + mdiArea->addSubWindow( mdiSubWindow ); if ( subWindowPos.x() > -1 ) { - subWin->move( subWindowPos ); + mdiSubWindow->move( subWindowPos ); } - subWin->resize( subWindowSize ); + mdiSubWindow->resize( subWindowSize ); if ( initialStateMaximized ) { - subWin->showMaximized(); + mdiSubWindow->showMaximized(); } else { - subWin->showNormal(); + mdiSubWindow->showNormal(); if ( initialStateTiled ) { tileSubWindows(); } } - - subWin->setWidget( viewer ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/UserInterface/RiuMainWindowBase.h b/ApplicationCode/UserInterface/RiuMainWindowBase.h index 7100d15da8..42f2c2e55e 100644 --- a/ApplicationCode/UserInterface/RiuMainWindowBase.h +++ b/ApplicationCode/UserInterface/RiuMainWindowBase.h @@ -45,9 +45,13 @@ public: 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; + QMdiSubWindow* createViewWindow(); + + virtual void removeViewer( QWidget* viewer ) = 0; + virtual void initializeViewer( QMdiSubWindow* viewWindow, + QWidget* viewWidget, + const RimMdiWindowGeometry& windowsGeometry ) = 0; + virtual void setActiveViewer( QWidget* subWindow ) = 0; virtual QMdiSubWindow* findMdiSubWindow( QWidget* viewer ) = 0; @@ -81,10 +85,13 @@ public: protected: void removeViewerFromMdiArea( QMdiArea* mdiArea, QWidget* viewer ); + void initializeSubWindow( QMdiArea* mdiArea, + QMdiSubWindow* mdiSubWindow, + const QPoint& subWindowPos, + const QSize& subWindowSize ); protected slots: void slotDockWidgetToggleViewActionTriggered(); - void addViewerToMdiArea( QMdiArea* mdiArea, QWidget* viewer, const QPoint& subWindowPos, const QSize& subWindowSize ); void slotRefreshHelpActions(); protected: diff --git a/ApplicationCode/UserInterface/RiuPlotMainWindow.cpp b/ApplicationCode/UserInterface/RiuPlotMainWindow.cpp index c06dd903b1..0027b478f2 100644 --- a/ApplicationCode/UserInterface/RiuPlotMainWindow.cpp +++ b/ApplicationCode/UserInterface/RiuPlotMainWindow.cpp @@ -707,7 +707,7 @@ void RiuPlotMainWindow::removeViewer( QWidget* viewer ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuPlotMainWindow::addViewer( QWidget* viewer, const RimMdiWindowGeometry& windowsGeometry ) +void RiuPlotMainWindow::initializeViewer( QMdiSubWindow* subWindow, QWidget* viewer, const RimMdiWindowGeometry& windowsGeometry ) { QSize subWindowSize; QPoint subWindowPos( -1, -1 ); @@ -722,7 +722,8 @@ void RiuPlotMainWindow::addViewer( QWidget* viewer, const RimMdiWindowGeometry& subWindowSize = QSize( 400, 400 ); } - addViewerToMdiArea( m_mdiArea, viewer, subWindowPos, subWindowSize ); + initializeSubWindow( m_mdiArea, subWindow, subWindowPos, subWindowSize ); + subWindow->setWidget( viewer ); refreshToolbars(); } diff --git a/ApplicationCode/UserInterface/RiuPlotMainWindow.h b/ApplicationCode/UserInterface/RiuPlotMainWindow.h index a6b0ac3637..11ed6e9c94 100644 --- a/ApplicationCode/UserInterface/RiuPlotMainWindow.h +++ b/ApplicationCode/UserInterface/RiuPlotMainWindow.h @@ -65,7 +65,7 @@ public: void cleanUpTemporaryWidgets(); void removeViewer( QWidget* viewer ) override; - void addViewer( QWidget* viewer, const RimMdiWindowGeometry& windowsGeometry ) override; + void initializeViewer( QMdiSubWindow* subWindow, QWidget* viewer, const RimMdiWindowGeometry& windowsGeometry ) override; void setActiveViewer( QWidget* subWindow ) override; void setDefaultWindowSize();