mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#4263 Fix saving of MDI window geometry without unmaximizing the window before saving
This commit is contained in:
@@ -29,11 +29,16 @@
|
||||
#include "RiuViewer.h"
|
||||
#include "RiuWellLogPlot.h"
|
||||
|
||||
#include <QWindowStateChangeEvent>
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RiuMdiSubWindow::RiuMdiSubWindow(QWidget* parent /*= 0*/, Qt::WindowFlags flags /*= 0*/)
|
||||
: QMdiSubWindow(parent, flags)
|
||||
, m_normalWindowGeometry(QRect())
|
||||
{
|
||||
}
|
||||
|
||||
@@ -45,6 +50,38 @@ RiuMdiSubWindow::~RiuMdiSubWindow()
|
||||
RiuMainWindow::instance()->slotRefreshViewActions();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimMdiWindowGeometry RiuMdiSubWindow::windowGeometry() const
|
||||
{
|
||||
RimMdiWindowGeometry geo;
|
||||
|
||||
int mainWinID = 0;
|
||||
if (window() == RiaApplication::instance()->mainPlotWindow())
|
||||
{
|
||||
mainWinID = 1;
|
||||
}
|
||||
|
||||
geo.mainWindowID = mainWinID;
|
||||
geo.isMaximized = isMaximized();
|
||||
|
||||
// Save normal/non-maximized size and position so this can be restored
|
||||
QRect currentGeometry = frameGeometry();
|
||||
if (isMaximized() && !m_normalWindowGeometry.isNull())
|
||||
{
|
||||
currentGeometry = m_normalWindowGeometry;
|
||||
}
|
||||
|
||||
geo.x = currentGeometry.topLeft().x();
|
||||
geo.y = currentGeometry.topLeft().y();
|
||||
geo.width = currentGeometry.width();
|
||||
geo.height = currentGeometry.height();
|
||||
|
||||
return geo;
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -55,14 +92,14 @@ void RiuMdiSubWindow::closeEvent(QCloseEvent* event)
|
||||
RimViewWindow* viewWindow = RiuInterfaceToViewWindow::viewWindowFromWidget(mainWidget);
|
||||
if (viewWindow)
|
||||
{
|
||||
viewWindow->setMdiWindowGeometry(windowGeometryForWidget(this));
|
||||
viewWindow->setMdiWindowGeometry(windowGeometry());
|
||||
}
|
||||
else
|
||||
{
|
||||
RiuViewer* viewer = mainWidget->findChild<RiuViewer*>();
|
||||
if (viewer)
|
||||
{
|
||||
viewer->ownerReservoirView()->setMdiWindowGeometry(windowGeometryForWidget(this));
|
||||
viewer->ownerReservoirView()->setMdiWindowGeometry(windowGeometry());
|
||||
}
|
||||
}
|
||||
QMdiSubWindow::closeEvent(event);
|
||||
@@ -71,50 +108,23 @@ void RiuMdiSubWindow::closeEvent(QCloseEvent* event)
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimMdiWindowGeometry RiuMdiSubWindow::windowGeometryForWidget(QWidget* widget)
|
||||
void RiuMdiSubWindow::resizeEvent(QResizeEvent* resizeEvent)
|
||||
{
|
||||
RimMdiWindowGeometry geo;
|
||||
|
||||
if (widget)
|
||||
if (!isMaximized())
|
||||
{
|
||||
// Find topmost parent
|
||||
|
||||
QWidget* nextParent = widget->parentWidget();
|
||||
QWidget* parent = nullptr;
|
||||
while (nextParent)
|
||||
{
|
||||
parent = nextParent;
|
||||
nextParent = nextParent->parentWidget();
|
||||
}
|
||||
|
||||
int mainWinID = 0;
|
||||
if (parent)
|
||||
{
|
||||
if (parent == RiaApplication::instance()->mainPlotWindow())
|
||||
{
|
||||
mainWinID = 1;
|
||||
}
|
||||
}
|
||||
|
||||
geo.mainWindowID = mainWinID;
|
||||
bool isMaximized = widget->isMaximized();
|
||||
|
||||
if (isMaximized)
|
||||
{
|
||||
// Temporarily set to normal to be able to store normal window size
|
||||
widget->showNormal();
|
||||
}
|
||||
|
||||
geo.x = widget->pos().x();
|
||||
geo.y = widget->pos().y();
|
||||
geo.width = widget->size().width();
|
||||
geo.height = widget->size().height();
|
||||
geo.isMaximized = isMaximized;
|
||||
|
||||
if (isMaximized)
|
||||
{
|
||||
widget->showMaximized();
|
||||
}
|
||||
m_normalWindowGeometry = frameGeometry();
|
||||
}
|
||||
return geo;
|
||||
QMdiSubWindow::resizeEvent(resizeEvent);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiuMdiSubWindow::moveEvent(QMoveEvent* moveEvent)
|
||||
{
|
||||
if (!isMaximized())
|
||||
{
|
||||
m_normalWindowGeometry = frameGeometry();
|
||||
}
|
||||
QMdiSubWindow::moveEvent(moveEvent);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user