Fix MDI Subwindow creation

This commit is contained in:
Gaute Lindkvist 2020-10-07 15:00:26 +02:00
parent 3d1378d4a2
commit 55ef7fc02a
7 changed files with 46 additions and 29 deletions

View File

@ -23,6 +23,8 @@
#include "RimViewWindow.h"
#include "RiuMainWindowBase.h"
#include <QMdiSubWindow>
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();
}

View File

@ -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();
}

View File

@ -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;

View File

@ -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 );
}
//--------------------------------------------------------------------------------------------------

View File

@ -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:

View File

@ -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();
}

View File

@ -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();