(#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_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; m_previousGridModeMeshLinesWasFaults = false;
} }
@@ -141,7 +144,7 @@ void RimView::updateViewerWidget()
m_viewer = new RiuViewer(glFormat, NULL); m_viewer = new RiuViewer(glFormat, NULL);
m_viewer->setOwnerReservoirView(this); m_viewer->setOwnerReservoirView(this);
RiuMainWindow::instance()->addViewer(m_viewer); RiuMainWindow::instance()->addViewer(m_viewer, windowGeometry());
m_viewer->setMinNearPlaneDistance(10); m_viewer->setMinNearPlaneDistance(10);
this->resetLegendsInViewer(); 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... 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(); 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(); void notifyCameraHasChanged();
caf::PdmField< std::vector<int> > windowGeometry;
// Draw style // Draw style
enum MeshModeType 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 #if 0
m_CentralFrame->layout()->addWidget(viewer->layoutWidget()); m_CentralFrame->layout()->addWidget(viewer->layoutWidget());
#else #else
QMdiSubWindow * subWin = m_mdiArea->addSubWindow(viewer->layoutWidget()); 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->move(QPoint(windowsGeometry[0], windowsGeometry[1]));
subWin->showMaximized(); subWin->resize(QSize(windowsGeometry[2], windowsGeometry[3]));
if (windowsGeometry[4] > 0)
{
subWin->showMaximized();
}
else
{
subWin->show();
}
} }
else else
{ {
subWin->show(); subWin->resize(400, 400);
if (m_mdiArea->subWindowList().size() == 1)
{
// Show first view maximized
subWin->showMaximized();
}
else
{
subWin->show();
}
} }
#endif #endif
@@ -2148,3 +2165,24 @@ void RiuMainWindow::customMenuRequested(const QPoint& pos)
menu.exec(globalPos); 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 cleanupGuiBeforeProjectClose();
void removeViewer( RiuViewer* viewer ); void removeViewer( RiuViewer* viewer );
void addViewer(RiuViewer* viewer); void addViewer(RiuViewer* viewer, const std::vector<int>& windowsGeometry);
void setActiveViewer(RiuViewer* subWindow); void setActiveViewer(RiuViewer* subWindow);
void addWellLogViewer(RiuWellLogPlot* viewer); void addWellLogViewer(RiuWellLogPlot* viewer);
@@ -113,6 +113,8 @@ public:
void addRecentFiles(const QString& file); void addRecentFiles(const QString& file);
void removeRecentFiles(const QString& file); void removeRecentFiles(const QString& file);
std::vector<int> windowGeometryForViewer(RiuViewer* viewer);
protected: protected:
virtual void closeEvent(QCloseEvent* event); virtual void closeEvent(QCloseEvent* event);