#4263 Fix saving of MDI window geometry without unmaximizing the window before saving

This commit is contained in:
Gaute Lindkvist 2019-03-29 12:00:29 +01:00
parent 22e0ab853b
commit 5695b8ada7
9 changed files with 84 additions and 84 deletions

View File

@ -23,8 +23,9 @@
#include "cafPdmField.h"
class RimViewWindow;
class RiuMainWindowBase;
class RiuMdiSubWindow;
class RimViewWindow;
struct RimMdiWindowGeometry;
//==================================================================================================
@ -50,6 +51,7 @@ protected:
RimViewWindow* viewPdmObject();
QWidget* viewWidget();
RiuMdiSubWindow* viewSubWindow();
RiuMainWindowBase* getMainWindow();
// Overridden PDM methods

View File

@ -1982,21 +1982,6 @@ void RiuMainWindow::customMenuRequested(const QPoint& pos)
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimMdiWindowGeometry RiuMainWindow::windowGeometryForViewer(QWidget* viewer)
{
QMdiSubWindow* mdiWindow = findMdiSubWindow(viewer);
if (mdiWindow)
{
return RiuMdiSubWindow::windowGeometryForWidget(mdiWindow);
}
RimMdiWindowGeometry geo;
return geo;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -110,11 +110,9 @@ public:
void setExpanded(const caf::PdmUiItem* uiItem, bool expanded = true);
RimMdiWindowGeometry windowGeometryForViewer(QWidget* viewer) override;
void tileWindows();
bool isAnyMdiSubWindowVisible();
QMdiSubWindow* findMdiSubWindow(QWidget* viewer);
QMdiSubWindow* findMdiSubWindow(QWidget* viewer) override;
RimViewWindow* findViewWindowFromSubWindow(QMdiSubWindow* lhs);
QList<QMdiSubWindow*> subWindowList(QMdiArea::WindowOrder order);

View File

@ -41,6 +41,21 @@ RiuMainWindowBase::RiuMainWindowBase()
setDockNestingEnabled(true);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimMdiWindowGeometry RiuMainWindowBase::windowGeometryForViewer(QWidget* viewer)
{
RiuMdiSubWindow* mdiWindow = dynamic_cast<RiuMdiSubWindow*>(findMdiSubWindow(viewer));
if (mdiWindow)
{
return mdiWindow->windowGeometry();
}
RimMdiWindowGeometry geo;
return geo;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -30,6 +30,7 @@ namespace caf
}
class QMdiArea;
class QMdiSubWindow;
//==================================================================================================
@ -48,8 +49,9 @@ public:
virtual void addViewer(QWidget* viewer, const RimMdiWindowGeometry& windowsGeometry)= 0;
virtual void setActiveViewer(QWidget* subWindow) = 0;
virtual RimMdiWindowGeometry windowGeometryForViewer(QWidget* viewer) = 0;
virtual QMdiSubWindow* findMdiSubWindow(QWidget* viewer) = 0;
RimMdiWindowGeometry windowGeometryForViewer(QWidget* viewer);
void loadWinGeoAndDockToolBarLayout();
void saveWinGeoAndDockToolBarLayout();
void showWindow();

View File

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

View File

@ -29,9 +29,14 @@ public:
~RiuMdiSubWindow() override;
static RimMdiWindowGeometry windowGeometryForWidget(QWidget* widget);
RimMdiWindowGeometry windowGeometry() const;
protected:
void closeEvent(QCloseEvent* event) override;
void resizeEvent(QResizeEvent* resizeEvent) override;
void moveEvent(QMoveEvent *moveEvent) override;
private:
QRect m_normalWindowGeometry;
};

View File

@ -839,20 +839,6 @@ void RiuPlotMainWindow::customMenuRequested(const QPoint& pos)
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimMdiWindowGeometry RiuPlotMainWindow::windowGeometryForViewer(QWidget* viewer)
{
QMdiSubWindow* mdiWindow = findMdiSubWindow(viewer);
if (mdiWindow)
{
return RiuMdiSubWindow::windowGeometryForWidget(mdiWindow);
}
RimMdiWindowGeometry geo;
return geo;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -69,12 +69,9 @@ public:
void setDefaultWindowSize();
RimMdiWindowGeometry windowGeometryForViewer(QWidget* viewer) override;
void tileWindows();
bool isAnyMdiSubWindowVisible();
QMdiSubWindow* findMdiSubWindow(QWidget* viewer);
QMdiSubWindow* findMdiSubWindow(QWidget* viewer) override;
QList<QMdiSubWindow*> subWindowList(QMdiArea::WindowOrder order);
void setWidthOfMdiWindow(QWidget* mdiWindowWidget, int newWidth);