Skip to content

Commit

Permalink
#4410 Dock Window State : Create static functions instead of singleton
Browse files Browse the repository at this point in the history
  • Loading branch information
magnesj committed May 15, 2019
1 parent a68650e commit f43edf3
Show file tree
Hide file tree
Showing 8 changed files with 149 additions and 140 deletions.
22 changes: 21 additions & 1 deletion ApplicationCode/Application/RiaGuiApplication.cpp
Expand Up @@ -566,7 +566,9 @@ void RiaGuiApplication::initialize()
// Create main windows
// The plot window is created to be able to set expanded state on created objects, but hidden by default
getOrCreateAndShowMainWindow();
getOrCreateMainPlotWindow();
RiuPlotMainWindow* plotMainWindow = getOrCreateMainPlotWindow();
plotMainWindow->hideAllDockWindows();

RiaLogging::setLoggerInstance(new RiuMessagePanelLogger(m_mainWindow->messagePanel()));
RiaLogging::loggerInstance()->setLevel(RI_LL_DEBUG);

Expand Down Expand Up @@ -959,6 +961,11 @@ RiuMainWindow* RiaGuiApplication::getOrCreateAndShowMainWindow()
{
createMainWindow();
}
else
{
m_mainWindow->loadWinGeoAndDockToolBarLayout();
}

return m_mainWindow;
}

Expand Down Expand Up @@ -1023,6 +1030,7 @@ void RiaGuiApplication::createMainPlotWindow()
m_mainPlotWindow->setWindowTitle("Plots - ResInsight");
m_mainPlotWindow->setDefaultWindowSize();
m_mainPlotWindow->loadWinGeoAndDockToolBarLayout();
m_mainPlotWindow->hideAllDockWindows();
}

//--------------------------------------------------------------------------------------------------
Expand All @@ -1042,12 +1050,18 @@ void RiaGuiApplication::deleteMainPlotWindow()
//--------------------------------------------------------------------------------------------------
RiuPlotMainWindow* RiaGuiApplication::getOrCreateAndShowMainPlotWindow()
{
bool triggerReloadOfDockWidgetVisibilities = false;

if (!m_mainPlotWindow)
{
createMainPlotWindow();
m_mainPlotWindow->initializeGuiNewProjectLoaded();
loadAndUpdatePlotData();
}
else
{
triggerReloadOfDockWidgetVisibilities = !m_mainPlotWindow->isVisible();
}

if (m_mainPlotWindow->isMinimized())
{
Expand All @@ -1061,6 +1075,12 @@ RiuPlotMainWindow* RiaGuiApplication::getOrCreateAndShowMainPlotWindow()

m_mainPlotWindow->raise();
m_mainPlotWindow->activateWindow();

if (triggerReloadOfDockWidgetVisibilities)
{
m_mainPlotWindow->restoreDockWidgetVisibilities();
}

return m_mainPlotWindow;
}

Expand Down
Expand Up @@ -43,6 +43,8 @@ void RicShowMainWindowFeature::onActionTriggered(bool isChecked)

RiuMainWindow* mainWnd = RiuMainWindow::instance();

bool triggerReloadOfDockWindowVisibilities = !mainWnd->isVisible();

if (mainWnd->isMinimized())
{
mainWnd->showNormal();
Expand All @@ -54,6 +56,11 @@ void RicShowMainWindowFeature::onActionTriggered(bool isChecked)
}

mainWnd->raise();

if (triggerReloadOfDockWindowVisibilities)
{
mainWnd->restoreDockWidgetVisibilities();
}
}

//--------------------------------------------------------------------------------------------------
Expand Down
119 changes: 40 additions & 79 deletions ApplicationCode/UserInterface/RiuDockWidgetTools.cpp
Expand Up @@ -31,89 +31,71 @@
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiuDockWidgetTools::RiuDockWidgetTools()
{
loadDockWidgetsState();
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiuDockWidgetTools* RiuDockWidgetTools::instance()
{
static RiuDockWidgetTools staticInstance;

return &staticInstance;
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RiuDockWidgetTools::projectTreeName() const
QString RiuDockWidgetTools::projectTreeName()
{
return "dockProjectTree";
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RiuDockWidgetTools::propertyEditorName() const
QString RiuDockWidgetTools::propertyEditorName()
{
return "dockpropertyEditor";
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RiuDockWidgetTools::resultInfoName() const
QString RiuDockWidgetTools::resultInfoName()
{
return "dockResultInfo";
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RiuDockWidgetTools::processMonitorName() const
QString RiuDockWidgetTools::processMonitorName()
{
return "dockProcessMonitor";
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RiuDockWidgetTools::resultPlotName() const
QString RiuDockWidgetTools::resultPlotName()
{
return "dockResultPlot";
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RiuDockWidgetTools::relPermPlotName() const
QString RiuDockWidgetTools::relPermPlotName()
{
return "dockRelPermPlot";
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RiuDockWidgetTools::pvtPlotName() const
QString RiuDockWidgetTools::pvtPlotName()
{
return "dockPvtPlot";
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RiuDockWidgetTools::mohrsCirclePlotName() const
QString RiuDockWidgetTools::mohrsCirclePlotName()
{
return "dockMohrsCirclePlot";
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RiuDockWidgetTools::messagesName() const
QString RiuDockWidgetTools::messagesName()
{
return "dockMessages";
}
Expand Down Expand Up @@ -165,8 +147,8 @@ void RiuDockWidgetTools::setVisibleDockingWindowsForEclipse()
}
}

RiuDockWidgetTools::instance()->trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::relPermPlotName(), true);
RiuDockWidgetTools::instance()->trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::pvtPlotName(), true);
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::relPermPlotName(), true);
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::pvtPlotName(), true);
}

//--------------------------------------------------------------------------------------------------
Expand All @@ -176,7 +158,7 @@ void RiuDockWidgetTools::setVisibleDockingWindowsForGeoMech()
{
RiuMainWindow* mainWindow = RiuMainWindow::instance();

RiuDockWidgetTools::instance()->trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::mohrsCirclePlotName(), false);
RiuDockWidgetTools::trySetDockWidgetVisibility(mainWindow, RiuDockWidgetTools::mohrsCirclePlotName(), false);

{
QDockWidget* dockWidget = findDockWidget(mainWindow, RiuDockWidgetTools::relPermPlotName());
Expand All @@ -203,78 +185,57 @@ void RiuDockWidgetTools::trySetDockWidgetVisibility(const QObject* parent, const
QDockWidget* dockWidget = findDockWidget(parent, dockWidgetName);
if (dockWidget)
{
bool unifiedIsVisible = isVisible;

auto state = visibilityForWidget(dockWidgetName);
if (state != RiuDockWidgetTools::USER_DEFINED_UNKNOWN)
{
if (state == RiuDockWidgetTools::USER_DEFINED_ON)
{
unifiedIsVisible = true;
}
else if (state == RiuDockWidgetTools::USER_DEFINED_OFF)
{
unifiedIsVisible = false;
}
}

dockWidget->setVisible(unifiedIsVisible);
dockWidget->setVisible(isVisible);
}
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiuDockWidgetTools::UserDefinedVisibility RiuDockWidgetTools::visibilityForWidget(const QString& objectName)
QVariant RiuDockWidgetTools::storeDockWidgetsVisibility(const QObject* parent)
{
RiuDockWidgetTools::UserDefinedVisibility visibility = USER_DEFINED_UNKNOWN;
QMap<QString, QVariant> widgetVisibility;

QList<QDockWidget*> dockWidgets = parent->findChildren<QDockWidget*>();

auto windowStateIt = m_userDefinedDockWidgetVisibility.find(objectName);
if (windowStateIt != m_userDefinedDockWidgetVisibility.end())
for (QDockWidget* dock : dockWidgets)
{
bool isVisible = windowStateIt.value().toBool();
if (isVisible)
{
visibility = USER_DEFINED_ON;
}
else
if (dock)
{
visibility = USER_DEFINED_OFF;
bool isVisible = dock->isVisible();
widgetVisibility[dock->objectName()] = isVisible;

// qDebug() << "Store " << dock->objectName() << " : " << (isVisible ? "visible" : "not visible");
}
}

return visibility;
return QVariant(widgetVisibility);
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuDockWidgetTools::setDockWidgetVisibility(const QString& dockingWindowName, bool isVisible)
void RiuDockWidgetTools::restoreDockWidgetsVisibility(const QObject* parent, QVariant widgetVisibilities)
{
m_userDefinedDockWidgetVisibility[dockingWindowName] = isVisible;
}
QMap<QString, QVariant> widgetVisibilityMap = widgetVisibilities.toMap();

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuDockWidgetTools::loadDockWidgetsState()
{
// Company and appname set through QCoreApplication
QSettings settings;
QList<QDockWidget*> dockWidgets = parent->findChildren<QDockWidget*>();

m_userDefinedDockWidgetVisibility = settings.value("dockWindowStates").toMap();
}
for (QDockWidget* dock : dockWidgets)
{
if (dock)
{
auto widgetVisibility = widgetVisibilityMap.find(dock->objectName());

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuDockWidgetTools::saveDockWidgetsState()
{
// Company and appname set through QCoreApplication
QSettings settings;
if (widgetVisibility != widgetVisibilityMap.end())
{
bool isVisible = widgetVisibility.value().toBool();
dock->setVisible(isVisible);

QVariant v(m_userDefinedDockWidgetVisibility);
settings.setValue("dockWindowStates", v);
// qDebug() << "Restore " << dock->objectName() << " : " << (isVisible ? "visible" : "not visible");
}
}
}
}

//--------------------------------------------------------------------------------------------------
Expand Down
49 changes: 18 additions & 31 deletions ApplicationCode/UserInterface/RiuDockWidgetTools.h
Expand Up @@ -30,45 +30,32 @@ class Rim3dView;

//==================================================================================================
//
//
//
//
//==================================================================================================
class RiuDockWidgetTools
{
public:
static RiuDockWidgetTools* instance();
static QString projectTreeName();
static QString propertyEditorName();
static QString resultInfoName();
static QString processMonitorName();
static QString resultPlotName();
static QString relPermPlotName();
static QString pvtPlotName();
static QString messagesName();
static QString mohrsCirclePlotName();

QString projectTreeName() const;
QString propertyEditorName() const;
QString resultInfoName() const;
QString processMonitorName() const;
QString resultPlotName() const;
QString relPermPlotName() const;
QString pvtPlotName() const;
QString messagesName() const;
QString mohrsCirclePlotName() const;
static QAction* toggleActionForWidget(const QObject* parent, const QString& dockWidgetName);

QAction* toggleActionForWidget(const QObject* parent, const QString& dockWidgetName);
void setDockWidgetVisibility(const QString& dockWidgetName, bool isVisible);
void changeDockWidgetVisibilityBasedOnView(Rim3dView* view);
void saveDockWidgetsState();
static QVariant storeDockWidgetsVisibility(const QObject* parent);
static void restoreDockWidgetsVisibility(const QObject* parent, QVariant widgetVisibilities);

private:
enum UserDefinedVisibility
{
USER_DEFINED_ON,
USER_DEFINED_OFF,
USER_DEFINED_UNKNOWN
};

RiuDockWidgetTools();
void setVisibleDockingWindowsForEclipse();
void setVisibleDockingWindowsForGeoMech();
void loadDockWidgetsState();
UserDefinedVisibility visibilityForWidget(const QString& dockWidgetName);
static QDockWidget* findDockWidget(const QObject* parent, const QString& dockWidgetName);
void trySetDockWidgetVisibility(const QObject* parent, const QString& dockWidgetName, bool isVisible);
static void changeDockWidgetVisibilityBasedOnView(Rim3dView* view);

private:
QMap<QString, QVariant> m_userDefinedDockWidgetVisibility;
static void setVisibleDockingWindowsForEclipse();
static void setVisibleDockingWindowsForGeoMech();
static QDockWidget* findDockWidget(const QObject* parent, const QString& dockWidgetName);
static void trySetDockWidgetVisibility(const QObject* parent, const QString& dockWidgetName, bool isVisible);
};

0 comments on commit f43edf3

Please sign in to comment.