#4410 Dock Window State : Set default visibility of dock widgets

This commit is contained in:
Magne Sjaastad
2019-05-15 13:37:23 +02:00
parent 699870c8c7
commit a52afd7b34
6 changed files with 115 additions and 46 deletions

View File

@@ -95,7 +95,7 @@ QString RiuDockWidgetTools::mohrsCirclePlotName()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RiuDockWidgetTools::plotMainWindowProjectTreeName()
QString RiuDockWidgetTools::plotMainWindowProjectTreeName()
{
return "plotMainWindow_dockProjectTree";
}
@@ -103,7 +103,7 @@ QString RiuDockWidgetTools::plotMainWindowProjectTreeName()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RiuDockWidgetTools::plotMainWindowPropertyEditorName()
QString RiuDockWidgetTools::plotMainWindowPropertyEditorName()
{
return "plotMainWindow_dockPropertyEditor";
}
@@ -116,6 +116,48 @@ QString RiuDockWidgetTools::messagesName()
return "dockMessages";
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QMap<QString, QVariant> RiuDockWidgetTools::widgetVisibilitiesForEclipse()
{
QMap<QString, QVariant> widgetVisibility;
widgetVisibility[RiuDockWidgetTools::projectTreeName()] = true;
widgetVisibility[RiuDockWidgetTools::propertyEditorName()] = true;
widgetVisibility[RiuDockWidgetTools::resultInfoName()] = true;
widgetVisibility[RiuDockWidgetTools::processMonitorName()] = true;
widgetVisibility[RiuDockWidgetTools::resultPlotName()] = true;
widgetVisibility[RiuDockWidgetTools::relPermPlotName()] = true;
widgetVisibility[RiuDockWidgetTools::pvtPlotName()] = true;
widgetVisibility[RiuDockWidgetTools::messagesName()] = true;
widgetVisibility[RiuDockWidgetTools::mohrsCirclePlotName()] = false;
return widgetVisibility;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QMap<QString, QVariant> RiuDockWidgetTools::widgetVisibilitiesForGeoMech()
{
QMap<QString, QVariant> widgetVisibility;
widgetVisibility[RiuDockWidgetTools::projectTreeName()] = true;
widgetVisibility[RiuDockWidgetTools::propertyEditorName()] = true;
widgetVisibility[RiuDockWidgetTools::resultInfoName()] = true;
widgetVisibility[RiuDockWidgetTools::processMonitorName()] = true;
widgetVisibility[RiuDockWidgetTools::resultPlotName()] = true;
widgetVisibility[RiuDockWidgetTools::relPermPlotName()] = false;
widgetVisibility[RiuDockWidgetTools::pvtPlotName()] = false;
widgetVisibility[RiuDockWidgetTools::messagesName()] = true;
widgetVisibility[RiuDockWidgetTools::mohrsCirclePlotName()] = true;
return widgetVisibility;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -153,19 +195,10 @@ QAction* RiuDockWidgetTools::toggleActionForWidget(const QObject* parent, const
//--------------------------------------------------------------------------------------------------
void RiuDockWidgetTools::setVisibleDockingWindowsForEclipse()
{
RiuMainWindow* mainWindow = RiuMainWindow::instance();
RiuMainWindow* mainWindow = RiuMainWindow::instance();
auto widgetVisibilities = widgetVisibilitiesForEclipse();
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::projectTreeName(), true);
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::propertyEditorName(), true);
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::resultInfoName(), true);
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::processMonitorName(), true);
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::resultPlotName(), true);
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::relPermPlotName(), true);
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::pvtPlotName(), true);
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::messagesName(), true);
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::mohrsCirclePlotName(), false);
applyDockWidgetVisibilities(mainWindow, widgetVisibilities);
}
//--------------------------------------------------------------------------------------------------
@@ -173,24 +206,16 @@ void RiuDockWidgetTools::setVisibleDockingWindowsForEclipse()
//--------------------------------------------------------------------------------------------------
void RiuDockWidgetTools::setVisibleDockingWindowsForGeoMech()
{
RiuMainWindow* mainWindow = RiuMainWindow::instance();
RiuMainWindow* mainWindow = RiuMainWindow::instance();
auto widgetVisibilities = widgetVisibilitiesForGeoMech();
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::projectTreeName(), true);
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::propertyEditorName(), true);
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::resultInfoName(), true);
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::processMonitorName(), true);
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::resultPlotName(), true);
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::relPermPlotName(), false);
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::pvtPlotName(), false);
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::messagesName(), true);
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::mohrsCirclePlotName(), true);
applyDockWidgetVisibilities(mainWindow, widgetVisibilities);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuDockWidgetTools::trySetDockWidgetVisibility(const QObject* parent, const QString& dockWidgetName, bool isVisible)
void RiuDockWidgetTools::setDockWidgetVisibility(const QObject* parent, const QString& dockWidgetName, bool isVisible)
{
QDockWidget* dockWidget = findDockWidget(parent, dockWidgetName);
if (dockWidget)
@@ -202,7 +227,7 @@ void RiuDockWidgetTools::trySetDockWidgetVisibility(const QObject* parent, const
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QVariant RiuDockWidgetTools::storeDockWidgetsVisibility(const QObject* parent)
QVariant RiuDockWidgetTools::dockWidgetsVisibility(const QObject* parent)
{
QMap<QString, QVariant> widgetVisibility;
@@ -212,7 +237,7 @@ QVariant RiuDockWidgetTools::storeDockWidgetsVisibility(const QObject* parent)
{
if (dock)
{
bool isVisible = dock->isVisible();
bool isVisible = dock->isVisible();
widgetVisibility[dock->objectName()] = isVisible;
// qDebug() << "Store " << dock->objectName() << " : " << (isVisible ? "visible" : "not visible");
@@ -225,10 +250,16 @@ QVariant RiuDockWidgetTools::storeDockWidgetsVisibility(const QObject* parent)
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuDockWidgetTools::restoreDockWidgetsVisibility(const QObject* parent, QVariant widgetVisibilities)
QVariant RiuDockWidgetTools::defaultDockWidgetVisibilities()
{
QMap<QString, QVariant> widgetVisibilityMap = widgetVisibilities.toMap();
return QVariant(widgetVisibilitiesForEclipse());
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuDockWidgetTools::applyDockWidgetVisibilities(const QObject* parent, const QMap<QString, QVariant>& widgetVisibilities)
{
QList<QDockWidget*> dockWidgets = parent->findChildren<QDockWidget*>();
for (QDockWidget* dock : dockWidgets)
@@ -237,8 +268,8 @@ void RiuDockWidgetTools::restoreDockWidgetsVisibility(const QObject* parent, QVa
{
bool isVisible = true;
auto widgetVisibility = widgetVisibilityMap.find(dock->objectName());
if (widgetVisibility != widgetVisibilityMap.end())
auto widgetVisibility = widgetVisibilities.find(dock->objectName());
if (widgetVisibility != widgetVisibilities.end())
{
isVisible = widgetVisibility.value().toBool();
}
@@ -249,4 +280,3 @@ void RiuDockWidgetTools::restoreDockWidgetsVisibility(const QObject* parent, QVa
}
}
}

View File

@@ -51,13 +51,19 @@ public:
static QAction* toggleActionForWidget(const QObject* parent, const QString& dockWidgetName);
static QVariant storeDockWidgetsVisibility(const QObject* parent);
static void restoreDockWidgetsVisibility(const QObject* parent, QVariant widgetVisibilities);
static QVariant dockWidgetsVisibility(const QObject* parent);
static QVariant defaultDockWidgetVisibilities();
static void setVisibleDockingWindowsForEclipse();
static void setVisibleDockingWindowsForGeoMech();
static void trySetDockWidgetVisibility(const QObject* parent, const QString& dockWidgetName, bool isVisible);
static void setDockWidgetVisibility(const QObject* parent, const QString& dockWidgetName, bool isVisible);
static void applyDockWidgetVisibilities(const QObject* parent, const QMap<QString, QVariant>& visibilityMap);
private:
static QMap<QString, QVariant> widgetVisibilitiesForEclipse();
static QMap<QString, QVariant> widgetVisibilitiesForGeoMech();
static QDockWidget* findDockWidget(const QObject* parent, const QString& dockWidgetName);
};

View File

@@ -1749,7 +1749,7 @@ void RiuMainWindow::updateMemoryUsage()
//--------------------------------------------------------------------------------------------------
void RiuMainWindow::showProcessMonitorDockPanel()
{
RiuDockWidgetTools::trySetDockWidgetVisibility(this, RiuDockWidgetTools::processMonitorName(), true);
RiuDockWidgetTools::setDockWidgetVisibility(this, RiuDockWidgetTools::processMonitorName(), true);
}
//--------------------------------------------------------------------------------------------------

View File

@@ -24,8 +24,8 @@
#include "RiuDockWidgetTools.h"
#include "RiuMdiSubWindow.h"
#include "RimViewWindow.h"
#include "RimProject.h"
#include "RimViewWindow.h"
#include "cafPdmObject.h"
#include "cafPdmUiTreeView.h"
@@ -87,6 +87,16 @@ void RiuMainWindowBase::loadWinGeoAndDockToolBarLayout()
restoreDockWidgetVisibilities();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString mainWindowDockWidgetSettingsKey(const QString& settingsFolderName)
{
QString key = settingsFolderName + "/dockWindowVisibilies";
return key;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -102,24 +112,44 @@ void RiuMainWindowBase::saveWinGeoAndDockToolBarLayout()
settings.setValue(QString("%1/dockAndToolBarLayout").arg(registryFolderName()), layout);
settings.setValue(QString("%1/isMaximized").arg(registryFolderName()), isMaximized());
if (this->isVisible())
{
QVariant dockWindowVisibilities = RiuDockWidgetTools::storeDockWidgetsVisibility(this);
settings.setValue(QString("%1/dockWindowVisibilies").arg(registryFolderName()), dockWindowVisibilities);
QVariant dockWindowVisibilities = RiuDockWidgetTools::dockWidgetsVisibility(this);
QString key = mainWindowDockWidgetSettingsKey(registryFolderName());
settings.setValue(key, dockWindowVisibilities);
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuMainWindowBase::restoreDockWidgetVisibilities()
void RiuMainWindowBase::storeDefaultDockWidgetVisibilitiesIfRequired()
{
QSettings settings;
QString key = mainWindowDockWidgetSettingsKey(registryFolderName());
if (!settings.contains(key))
{
QVariant dockWidgetVisibilities = RiuDockWidgetTools::defaultDockWidgetVisibilities();
settings.setValue(key, dockWidgetVisibilities);
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuMainWindowBase::restoreDockWidgetVisibilities()
{
// Company and appname set through QCoreApplication
QSettings settings;
QVariant dockWindowVisibilities = settings.value(QString("%1/dockWindowVisibilies").arg(registryFolderName()));
RiuDockWidgetTools::restoreDockWidgetsVisibility(this, dockWindowVisibilities);
QString key = mainWindowDockWidgetSettingsKey(registryFolderName());
QVariant dockWindowVisibilities = settings.value(key);
RiuDockWidgetTools::applyDockWidgetVisibilities(this, dockWindowVisibilities.toMap());
}
//--------------------------------------------------------------------------------------------------
@@ -142,7 +172,7 @@ void RiuMainWindowBase::showWindow()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuMainWindowBase::hideAllDockWidgets()
void RiuMainWindowBase::hideAllDockWidgets()
{
QList<QDockWidget*> dockWidgets = findChildren<QDockWidget*>();
@@ -272,7 +302,8 @@ void RiuMainWindowBase::addViewerToMdiArea(QMdiArea* mdiArea,
const QPoint& subWindowPos,
const QSize& subWindowSize)
{
RiuMdiSubWindow* subWin = new RiuMdiSubWindow(nullptr, Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint | Qt::WindowMaximizeButtonHint);
RiuMdiSubWindow* subWin =
new RiuMdiSubWindow(nullptr, Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint | Qt::WindowMaximizeButtonHint);
subWin->setAttribute(Qt::WA_DeleteOnClose); // Make sure the contained widget is destroyed when the MDI window is closed
subWin->setWidget(viewer);

View File

@@ -56,6 +56,7 @@ public:
RimMdiWindowGeometry windowGeometryForViewer(QWidget* viewer);
void loadWinGeoAndDockToolBarLayout();
void saveWinGeoAndDockToolBarLayout();
void storeDefaultDockWidgetVisibilitiesIfRequired();
void restoreDockWidgetVisibilities();
void showWindow();