mirror of
https://github.com/OPM/ResInsight.git
synced 2026-08-27 13:47:12 -05:00
Store dock state in project
This commit is contained in:
@@ -227,11 +227,6 @@ RiaGuiApplication::~RiaGuiApplication()
|
||||
}
|
||||
|
||||
processEvents();
|
||||
|
||||
delete m_mainWindow.data();
|
||||
m_mainWindow.clear();
|
||||
|
||||
m_mainPlotWindow.reset();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -404,6 +399,37 @@ void RiaGuiApplication::storeTreeViewState()
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiaGuiApplication::storeDockState()
|
||||
{
|
||||
if ( m_mainWindow )
|
||||
{
|
||||
project()->mainWindowDockState = m_mainWindow->dockWidgetStateString();
|
||||
}
|
||||
|
||||
if ( m_mainPlotWindow )
|
||||
{
|
||||
project()->plotWindowDockState = m_mainPlotWindow->dockWidgetStateString();
|
||||
}
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiaGuiApplication::restoreDockState()
|
||||
{
|
||||
if ( m_mainWindow && !project()->mainWindowDockState().isEmpty() )
|
||||
{
|
||||
m_mainWindow->restoreDockWidgetState( project()->mainWindowDockState );
|
||||
}
|
||||
|
||||
if ( m_mainPlotWindow && !project()->plotWindowDockState().isEmpty() )
|
||||
{
|
||||
m_mainPlotWindow->restoreDockWidgetState( project()->plotWindowDockState );
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -1074,7 +1100,7 @@ void RiaGuiApplication::createMainPlotWindow()
|
||||
// Always enable undo/redo framework, as multi-select operations perform significantly better with it enabled
|
||||
caf::CmdExecCommandManager::instance()->enableUndoCommandSystem( true );
|
||||
|
||||
m_mainPlotWindow = std::make_unique<RiuPlotMainWindow>();
|
||||
m_mainPlotWindow = new RiuPlotMainWindow();
|
||||
m_mainPlotWindow->setWindowTitle( "Plots - ResInsight" );
|
||||
m_mainPlotWindow->setDefaultWindowSize();
|
||||
m_mainPlotWindow->loadWinGeoAndDockToolBarLayout();
|
||||
@@ -1376,6 +1402,8 @@ void RiaGuiApplication::onProjectOpened()
|
||||
m_mainPlotWindow->raise();
|
||||
m_mainPlotWindow->activateWindow();
|
||||
}
|
||||
|
||||
restoreDockState();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -1417,6 +1445,7 @@ void RiaGuiApplication::onProjectBeingSaved()
|
||||
{
|
||||
setLastUsedDialogDirectory( "BINARY_GRID", QFileInfo( m_project->fileName() ).absolutePath() );
|
||||
storeTreeViewState();
|
||||
storeDockState();
|
||||
|
||||
if ( auto sumCaseMainColl = RiaSummaryTools::summaryCaseMainCollection() )
|
||||
{
|
||||
|
||||
@@ -156,14 +156,16 @@ private:
|
||||
void createMainPlotWindow();
|
||||
|
||||
void storeTreeViewState();
|
||||
void storeDockState();
|
||||
void restoreDockState();
|
||||
|
||||
private slots:
|
||||
void slotWorkerProcessFinished( int exitCode, QProcess::ExitStatus exitStatus );
|
||||
void onLastWindowClosed();
|
||||
|
||||
private:
|
||||
QPointer<RiuMainWindow> m_mainWindow;
|
||||
std::unique_ptr<RiuPlotMainWindow> m_mainPlotWindow;
|
||||
QPointer<RiuMainWindow> m_mainWindow;
|
||||
QPointer<RiuPlotMainWindow> m_mainPlotWindow;
|
||||
|
||||
std::unique_ptr<RiuRecentFileActionProvider> m_recentFileActionProvider;
|
||||
};
|
||||
|
||||
@@ -171,11 +171,11 @@ RimProject::RimProject()
|
||||
CAF_PDM_InitField( &m_showPlotWindowOnTopOf3DWindow, "showPlotWindowOnTopOf3DWindow", false, "Show Plot On Top" );
|
||||
m_showPlotWindowOnTopOf3DWindow.uiCapability()->setUiHidden( true );
|
||||
|
||||
CAF_PDM_InitField( &m_subWindowsTiled3DWindow_OBSOLETE, "tiled3DWindow", false, "Tile 3D Window" );
|
||||
m_subWindowsTiled3DWindow_OBSOLETE.uiCapability()->setUiHidden( true );
|
||||
CAF_PDM_InitField( &mainWindowDockState, "MainWindowDockState", QString(), "Dock State 3D Window" );
|
||||
mainWindowDockState.uiCapability()->setUiHidden( true );
|
||||
|
||||
CAF_PDM_InitField( &m_subWindowsTiledPlotWindow_OBSOLETE, "tiledPlotWindow", false, "Tile Plot Window" );
|
||||
m_subWindowsTiledPlotWindow_OBSOLETE.uiCapability()->setUiHidden( true );
|
||||
CAF_PDM_InitField( &plotWindowDockState, "PlotWindowDockState", QString(), "Dock State Plot Window" );
|
||||
plotWindowDockState.uiCapability()->setUiHidden( true );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_dialogData, "DialogData", "DialogData" );
|
||||
m_dialogData = new RimDialogData();
|
||||
@@ -188,11 +188,6 @@ RimProject::RimProject()
|
||||
CAF_PDM_InitFieldNoDefault( &caseGroupsObsolete, "CaseGroups", "" );
|
||||
RiaFieldHandleTools::disableWriteAndSetFieldHidden( &caseGroupsObsolete );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_subWindowsTileMode3DWindow, "TileMode3DWindow", "TileMode3DWindow" );
|
||||
m_subWindowsTileMode3DWindow.uiCapability()->setUiHidden( true );
|
||||
CAF_PDM_InitFieldNoDefault( &m_subWindowsTileModePlotWindow, "TileModePlotWindow", "TileModePlotWindow" );
|
||||
m_subWindowsTileModePlotWindow.uiCapability()->setUiHidden( true );
|
||||
|
||||
// Initialization
|
||||
|
||||
scriptCollection = new RimScriptCollection();
|
||||
@@ -329,9 +324,6 @@ void RimProject::updatesAfterProjectFileIsRead()
|
||||
RimOilField* oilField = oilFields[oilFieldIdx];
|
||||
if ( oilField == nullptr || oilField->wellPathCollection == nullptr ) continue;
|
||||
}
|
||||
|
||||
if ( m_subWindowsTiled3DWindow_OBSOLETE ) m_subWindowsTileMode3DWindow = RiaDefines::WindowTileMode::DEFAULT;
|
||||
if ( m_subWindowsTiledPlotWindow_OBSOLETE ) m_subWindowsTileModePlotWindow = RiaDefines::WindowTileMode::DEFAULT;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -1012,38 +1004,6 @@ bool RimProject::showPlotWindowOnTop() const
|
||||
return m_showPlotWindowOnTopOf3DWindow();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RiaDefines::WindowTileMode RimProject::subWindowsTileMode3DWindow() const
|
||||
{
|
||||
return m_subWindowsTileMode3DWindow();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RiaDefines::WindowTileMode RimProject::subWindowsTileModePlotWindow() const
|
||||
{
|
||||
return m_subWindowsTileModePlotWindow();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimProject::setSubWindowsTileMode3DWindow( RiaDefines::WindowTileMode tileMode )
|
||||
{
|
||||
m_subWindowsTileMode3DWindow = tileMode;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimProject::setSubWindowsTileModePlotWindow( RiaDefines::WindowTileMode tileMode )
|
||||
{
|
||||
m_subWindowsTileModePlotWindow = tileMode;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -113,6 +113,9 @@ public:
|
||||
caf::PdmField<QString> plotWindowTreeViewStates;
|
||||
caf::PdmField<QString> plotWindowCurrentModelIndexPaths;
|
||||
|
||||
caf::PdmField<QString> mainWindowDockState;
|
||||
caf::PdmField<QString> plotWindowDockState;
|
||||
|
||||
bool writeProjectFile();
|
||||
|
||||
void setScriptDirectories( const QString& scriptDirectories, int maxFolderDepth );
|
||||
@@ -154,11 +157,6 @@ public:
|
||||
bool showPlotWindow() const;
|
||||
bool showPlotWindowOnTop() const;
|
||||
|
||||
RiaDefines::WindowTileMode subWindowsTileMode3DWindow() const;
|
||||
RiaDefines::WindowTileMode subWindowsTileModePlotWindow() const;
|
||||
void setSubWindowsTileMode3DWindow( RiaDefines::WindowTileMode tileMode );
|
||||
void setSubWindowsTileModePlotWindow( RiaDefines::WindowTileMode tileMode );
|
||||
|
||||
void reloadCompletionTypeResultsInAllViews();
|
||||
void reloadCompletionTypeResultsForEclipseCase( RimEclipseCase* eclipseCase );
|
||||
|
||||
@@ -222,12 +220,6 @@ private:
|
||||
caf::PdmField<bool> m_showPlotWindow;
|
||||
caf::PdmField<bool> m_showPlotWindowOnTopOf3DWindow;
|
||||
|
||||
caf::PdmField<bool> m_subWindowsTiled3DWindow_OBSOLETE;
|
||||
caf::PdmField<bool> m_subWindowsTiledPlotWindow_OBSOLETE;
|
||||
|
||||
caf::PdmField<caf::AppEnum<RiaDefines::WindowTileMode>> m_subWindowsTileMode3DWindow;
|
||||
caf::PdmField<caf::AppEnum<RiaDefines::WindowTileMode>> m_subWindowsTileModePlotWindow;
|
||||
|
||||
caf::PdmChildArrayField<RimEclipseCase*> casesObsolete; // obsolete
|
||||
caf::PdmChildArrayField<RimIdenticalGridCaseGroup*> caseGroupsObsolete; // obsolete
|
||||
};
|
||||
|
||||
@@ -18,6 +18,11 @@
|
||||
|
||||
#include "RiuDockWidgetTools.h"
|
||||
|
||||
#include "RiaGuiApplication.h"
|
||||
|
||||
#include "Rim3dView.h"
|
||||
#include "RimViewWindow.h"
|
||||
|
||||
#include "RiuMainWindow.h"
|
||||
#include "RiuPlotMainWindow.h"
|
||||
|
||||
@@ -350,6 +355,40 @@ QAction* RiuDockWidgetTools::toggleActionForWidget( const ads::CDockManager* doc
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiuDockWidgetTools::setDockLayout( RiuMainWindowBase* mainWindow, const QString& layoutName )
|
||||
{
|
||||
if ( mainWindow == nullptr ) return;
|
||||
|
||||
QString activeViewerName;
|
||||
if ( auto activeViewer = RiaGuiApplication::instance()->activeReservoirView() )
|
||||
{
|
||||
activeViewerName = activeViewer->dockWindowName();
|
||||
}
|
||||
|
||||
if ( auto dm = mainWindow->dockManager() )
|
||||
{
|
||||
QByteArray state = RiuDockWidgetTools::defaultDockState( layoutName );
|
||||
if ( dm->restoreState( state, RiuMainWindowBase::DOCKSTATE_VERSION ) )
|
||||
{
|
||||
for ( auto view : mainWindow->viewWindows() )
|
||||
{
|
||||
if ( view->showWindow() && view->dockWidget() )
|
||||
{
|
||||
dm->addDockWidget( ads::DockWidgetArea::CenterDockWidgetArea, view->dockWidget(), dm->centralWidget()->dockAreaWidget() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( auto dw = dm->findDockWidget( activeViewerName ) )
|
||||
{
|
||||
dw->setAsCurrentTab();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
class QObject;
|
||||
class QAction;
|
||||
|
||||
class Rim3dView;
|
||||
class RiuMainWindowBase;
|
||||
|
||||
namespace ads
|
||||
{
|
||||
@@ -93,6 +93,8 @@ public:
|
||||
|
||||
static QString viewWindowPrefix();
|
||||
|
||||
static void setDockLayout( RiuMainWindowBase* mainWindow, const QString& layoutName );
|
||||
|
||||
static QAction* toggleActionForWidget( const ads::CDockManager* dockManager, const QString& dockWidgetName );
|
||||
|
||||
static ads::CDockWidget* findDockWidget( const ads::CDockManager* dockManager, const QString& dockWidgetName );
|
||||
|
||||
@@ -117,6 +117,23 @@ ads::CDockManager* RiuMainWindowBase::dockManager() const
|
||||
return m_dockManager;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString RiuMainWindowBase::dockWidgetStateString() const
|
||||
{
|
||||
return QString::fromUtf8( m_dockManager->saveState( DOCKSTATE_VERSION ).toBase64() );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiuMainWindowBase::restoreDockWidgetState( QString dockStateString )
|
||||
{
|
||||
QByteArray dockState = QByteArray::fromBase64( dockStateString.toUtf8() );
|
||||
m_dockManager->restoreState( dockState, DOCKSTATE_VERSION );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -585,10 +602,7 @@ void RiuMainWindowBase::setDefaultDockLayout()
|
||||
if ( action )
|
||||
{
|
||||
QString layoutName = action->text();
|
||||
|
||||
QByteArray state = RiuDockWidgetTools::defaultDockState( layoutName );
|
||||
|
||||
dockManager()->restoreState( state, DOCKSTATE_VERSION );
|
||||
RiuDockWidgetTools::setDockLayout( this, layoutName );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -601,7 +615,7 @@ void RiuMainWindowBase::setDockLayout()
|
||||
if ( action )
|
||||
{
|
||||
QString layoutName = action->text();
|
||||
dockManager()->openPerspective( layoutName );
|
||||
RiuDockWidgetTools::setDockLayout( this, layoutName );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -729,13 +743,6 @@ void RiuMainWindowBase::addDefaultEntriesToWindowsMenu()
|
||||
connect( exportLayoutAction, SIGNAL( triggered() ), this, SLOT( exportDockLayout() ) );
|
||||
}
|
||||
|
||||
// m_windowMenu->addSeparator();
|
||||
// QAction* cascadeWindowsAction = new QAction( "Cascade Windows", this );
|
||||
// connect( cascadeWindowsAction, SIGNAL( triggered() ), m_mdiArea, SLOT( cascadeSubWindows() ) );
|
||||
|
||||
// QAction* closeAllSubWindowsAction = new QAction( "Close All Windows", this );
|
||||
// connect( closeAllSubWindowsAction, SIGNAL( triggered() ), m_mdiArea, SLOT( closeAllSubWindows() ) );
|
||||
|
||||
caf::CmdFeatureManager* cmdFeatureMgr = caf::CmdFeatureManager::instance();
|
||||
|
||||
auto featureNames = windowsMenuFeatureNames();
|
||||
@@ -743,9 +750,6 @@ void RiuMainWindowBase::addDefaultEntriesToWindowsMenu()
|
||||
{
|
||||
m_windowMenu->addAction( cmdFeatureMgr->action( name ) );
|
||||
}
|
||||
|
||||
// m_windowMenu->addAction( cascadeWindowsAction );
|
||||
// m_windowMenu->addAction( closeAllSubWindowsAction );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -59,6 +59,8 @@ class RiuMainWindowBase : public QMainWindow
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
static const int DOCKSTATE_VERSION = 4;
|
||||
|
||||
RiuMainWindowBase();
|
||||
~RiuMainWindowBase() override;
|
||||
|
||||
@@ -91,6 +93,9 @@ public:
|
||||
|
||||
ads::CDockManager* dockManager() const;
|
||||
|
||||
QString dockWidgetStateString() const;
|
||||
void restoreDockWidgetState( QString dockStateString );
|
||||
|
||||
protected:
|
||||
void createTreeViews( int numberOfTrees );
|
||||
void setUpCentralDockWidget();
|
||||
@@ -137,8 +142,6 @@ protected:
|
||||
|
||||
QMenu* m_windowMenu;
|
||||
|
||||
const int DOCKSTATE_VERSION = 4;
|
||||
|
||||
QByteArray m_lastDockState;
|
||||
|
||||
std::vector<caf::PdmUiTreeView*> m_projectTreeViews;
|
||||
|
||||
Reference in New Issue
Block a user