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:
@@ -23,8 +23,9 @@
|
|||||||
#include "cafPdmField.h"
|
#include "cafPdmField.h"
|
||||||
|
|
||||||
|
|
||||||
class RimViewWindow;
|
|
||||||
class RiuMainWindowBase;
|
class RiuMainWindowBase;
|
||||||
|
class RiuMdiSubWindow;
|
||||||
|
class RimViewWindow;
|
||||||
struct RimMdiWindowGeometry;
|
struct RimMdiWindowGeometry;
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
@@ -50,6 +51,7 @@ protected:
|
|||||||
|
|
||||||
RimViewWindow* viewPdmObject();
|
RimViewWindow* viewPdmObject();
|
||||||
QWidget* viewWidget();
|
QWidget* viewWidget();
|
||||||
|
RiuMdiSubWindow* viewSubWindow();
|
||||||
RiuMainWindowBase* getMainWindow();
|
RiuMainWindowBase* getMainWindow();
|
||||||
|
|
||||||
// Overridden PDM methods
|
// 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);
|
void setExpanded(const caf::PdmUiItem* uiItem, bool expanded = true);
|
||||||
|
|
||||||
RimMdiWindowGeometry windowGeometryForViewer(QWidget* viewer) override;
|
|
||||||
|
|
||||||
void tileWindows();
|
void tileWindows();
|
||||||
bool isAnyMdiSubWindowVisible();
|
bool isAnyMdiSubWindowVisible();
|
||||||
QMdiSubWindow* findMdiSubWindow(QWidget* viewer);
|
QMdiSubWindow* findMdiSubWindow(QWidget* viewer) override;
|
||||||
RimViewWindow* findViewWindowFromSubWindow(QMdiSubWindow* lhs);
|
RimViewWindow* findViewWindowFromSubWindow(QMdiSubWindow* lhs);
|
||||||
QList<QMdiSubWindow*> subWindowList(QMdiArea::WindowOrder order);
|
QList<QMdiSubWindow*> subWindowList(QMdiArea::WindowOrder order);
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,21 @@ RiuMainWindowBase::RiuMainWindowBase()
|
|||||||
setDockNestingEnabled(true);
|
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 QMdiArea;
|
||||||
|
class QMdiSubWindow;
|
||||||
|
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
@@ -48,8 +49,9 @@ public:
|
|||||||
virtual void addViewer(QWidget* viewer, const RimMdiWindowGeometry& windowsGeometry)= 0;
|
virtual void addViewer(QWidget* viewer, const RimMdiWindowGeometry& windowsGeometry)= 0;
|
||||||
virtual void setActiveViewer(QWidget* subWindow) = 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 loadWinGeoAndDockToolBarLayout();
|
||||||
void saveWinGeoAndDockToolBarLayout();
|
void saveWinGeoAndDockToolBarLayout();
|
||||||
void showWindow();
|
void showWindow();
|
||||||
|
|||||||
@@ -29,11 +29,16 @@
|
|||||||
#include "RiuViewer.h"
|
#include "RiuViewer.h"
|
||||||
#include "RiuWellLogPlot.h"
|
#include "RiuWellLogPlot.h"
|
||||||
|
|
||||||
|
#include <QWindowStateChangeEvent>
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
RiuMdiSubWindow::RiuMdiSubWindow(QWidget* parent /*= 0*/, Qt::WindowFlags flags /*= 0*/)
|
RiuMdiSubWindow::RiuMdiSubWindow(QWidget* parent /*= 0*/, Qt::WindowFlags flags /*= 0*/)
|
||||||
: QMdiSubWindow(parent, flags)
|
: QMdiSubWindow(parent, flags)
|
||||||
|
, m_normalWindowGeometry(QRect())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,6 +50,38 @@ RiuMdiSubWindow::~RiuMdiSubWindow()
|
|||||||
RiuMainWindow::instance()->slotRefreshViewActions();
|
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);
|
RimViewWindow* viewWindow = RiuInterfaceToViewWindow::viewWindowFromWidget(mainWidget);
|
||||||
if (viewWindow)
|
if (viewWindow)
|
||||||
{
|
{
|
||||||
viewWindow->setMdiWindowGeometry(windowGeometryForWidget(this));
|
viewWindow->setMdiWindowGeometry(windowGeometry());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
RiuViewer* viewer = mainWidget->findChild<RiuViewer*>();
|
RiuViewer* viewer = mainWidget->findChild<RiuViewer*>();
|
||||||
if (viewer)
|
if (viewer)
|
||||||
{
|
{
|
||||||
viewer->ownerReservoirView()->setMdiWindowGeometry(windowGeometryForWidget(this));
|
viewer->ownerReservoirView()->setMdiWindowGeometry(windowGeometry());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
QMdiSubWindow::closeEvent(event);
|
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 (!isMaximized())
|
||||||
|
|
||||||
if (widget)
|
|
||||||
{
|
{
|
||||||
// Find topmost parent
|
m_normalWindowGeometry = frameGeometry();
|
||||||
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
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;
|
~RiuMdiSubWindow() override;
|
||||||
|
|
||||||
static RimMdiWindowGeometry windowGeometryForWidget(QWidget* widget);
|
RimMdiWindowGeometry windowGeometry() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void closeEvent(QCloseEvent* event) override;
|
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();
|
void setDefaultWindowSize();
|
||||||
|
|
||||||
|
|
||||||
RimMdiWindowGeometry windowGeometryForViewer(QWidget* viewer) override;
|
|
||||||
|
|
||||||
void tileWindows();
|
void tileWindows();
|
||||||
bool isAnyMdiSubWindowVisible();
|
bool isAnyMdiSubWindowVisible();
|
||||||
QMdiSubWindow* findMdiSubWindow(QWidget* viewer);
|
QMdiSubWindow* findMdiSubWindow(QWidget* viewer) override;
|
||||||
QList<QMdiSubWindow*> subWindowList(QMdiArea::WindowOrder order);
|
QList<QMdiSubWindow*> subWindowList(QMdiArea::WindowOrder order);
|
||||||
|
|
||||||
void setWidthOfMdiWindow(QWidget* mdiWindowWidget, int newWidth);
|
void setWidthOfMdiWindow(QWidget* mdiWindowWidget, int newWidth);
|
||||||
|
|||||||
Reference in New Issue
Block a user