(#408) Save and restore MDI window size and position

This commit is contained in:
Magne Sjaastad
2015-09-01 22:11:39 +02:00
parent 107d3ff65a
commit b29ad69673
4 changed files with 58 additions and 9 deletions

View File

@@ -99,6 +99,9 @@ RimView::RimView(void)
CAF_PDM_InitField(&m_disableLighting, "DisableLighting", false, "Disable Results Lighting", "", "Disable light model for scalar result colors", "");
CAF_PDM_InitFieldNoDefault(&windowGeometry, "WindowGeometry", "", "", "", "");
windowGeometry.uiCapability()->setUiHidden(true);
m_previousGridModeMeshLinesWasFaults = false;
}
@@ -141,7 +144,7 @@ void RimView::updateViewerWidget()
m_viewer = new RiuViewer(glFormat, NULL);
m_viewer->setOwnerReservoirView(this);
RiuMainWindow::instance()->addViewer(m_viewer);
RiuMainWindow::instance()->addViewer(m_viewer, windowGeometry());
m_viewer->setMinNearPlaneDistance(10);
this->resetLegendsInViewer();
@@ -255,7 +258,9 @@ void RimView::setupBeforeSave()
{
hasUserRequestedAnimation = m_viewer->isAnimationActive(); // JJS: This is not conceptually correct. The variable is updated as we go, and store the user intentions. But I guess that in practice...
cameraPosition = m_viewer->mainCamera()->viewMatrix();
}
windowGeometry = RiuMainWindow::instance()->windowGeometryForViewer(m_viewer);
}
}
//--------------------------------------------------------------------------------------------------
@@ -588,3 +593,4 @@ void RimView::notifyCameraHasChanged()
}
}
}

View File

@@ -74,6 +74,9 @@ public:
void notifyCameraHasChanged();
caf::PdmField< std::vector<int> > windowGeometry;
// Draw style
enum MeshModeType

View File

@@ -1194,22 +1194,39 @@ void RiuMainWindow::removeViewer(RiuViewer* viewer)
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuMainWindow::addViewer(RiuViewer* viewer)
void RiuMainWindow::addViewer(RiuViewer* viewer, const std::vector<int>& windowsGeometry)
{
#if 0
m_CentralFrame->layout()->addWidget(viewer->layoutWidget());
#else
QMdiSubWindow * subWin = m_mdiArea->addSubWindow(viewer->layoutWidget());
subWin->resize(400, 400);
if (m_mdiArea->subWindowList().size() == 1)
if (windowsGeometry.size() == 5)
{
// Show first view maximized
subWin->showMaximized();
subWin->move(QPoint(windowsGeometry[0], windowsGeometry[1]));
subWin->resize(QSize(windowsGeometry[2], windowsGeometry[3]));
if (windowsGeometry[4] > 0)
{
subWin->showMaximized();
}
else
{
subWin->show();
}
}
else
{
subWin->show();
subWin->resize(400, 400);
if (m_mdiArea->subWindowList().size() == 1)
{
// Show first view maximized
subWin->showMaximized();
}
else
{
subWin->show();
}
}
#endif
@@ -2148,3 +2165,24 @@ void RiuMainWindow::customMenuRequested(const QPoint& pos)
menu.exec(globalPos);
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<int> RiuMainWindow::windowGeometryForViewer(RiuViewer* viewer)
{
std::vector<int> geo;
QMdiSubWindow* mdiWindow = findMdiSubWindow(viewer);
if (mdiWindow)
{
geo.push_back(mdiWindow->pos().x());
geo.push_back(mdiWindow->pos().y());
geo.push_back(mdiWindow->size().width());
geo.push_back(mdiWindow->size().height());
geo.push_back(mdiWindow->isMaximized());
}
return geo;
}

View File

@@ -80,7 +80,7 @@ public:
void cleanupGuiBeforeProjectClose();
void removeViewer( RiuViewer* viewer );
void addViewer(RiuViewer* viewer);
void addViewer(RiuViewer* viewer, const std::vector<int>& windowsGeometry);
void setActiveViewer(RiuViewer* subWindow);
void addWellLogViewer(RiuWellLogPlot* viewer);
@@ -113,6 +113,8 @@ public:
void addRecentFiles(const QString& file);
void removeRecentFiles(const QString& file);
std::vector<int> windowGeometryForViewer(RiuViewer* viewer);
protected:
virtual void closeEvent(QCloseEvent* event);