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:
parent
22e0ab853b
commit
5695b8ada7
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user