First implementation of Headless (#4392)

* Revert "#4377 Octave : Use RiaLogging for error messages instead of QErrorMessage "

This reverts commit f758a8edb2.

* Revert "#4380 Preferences : Changing scene font size when geo mech view is open causes crash"

This reverts commit df62a41397.

* Revert "#4379 Documentation : Update command line parser for import of summary files"

This reverts commit d0b5357ed4.

* Unfinished WIP

* Builds but crashes

* Refactored code now builds and runs

* ResInsight can now run the unittests headless

* Can run some command files successfully

* Build on Linux

* Extra headless hack header

* Moved PdmUiItem hack to cpp file

* Fix headless crash in RimWellAllocationPlot

* Handle error gracefully if ExportSnapshots command is executed from console

* Add caf::QIconProvider and remove some hacks

* Also made the greying out of disabled icons work for a couple of cases where it didn't.

* Linux build fix

* #4380 Reimplement fix df62a41397 by @magnesj on top of Headless code changes

* #4379 Reintroduce kode from d0b5357ed4 by @magnesj

* #4377 Restore f758a8edb2 in new Headless code
This commit is contained in:
Gaute Lindkvist
2019-05-06 10:36:05 +02:00
committed by GitHub
parent 4c46573fc9
commit 57b33b0d4c
150 changed files with 4001 additions and 2804 deletions

View File

@@ -83,6 +83,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RiuQwtPlotTools.h
${CMAKE_CURRENT_LIST_DIR}/RiuWellPathComponentPlotItem.h
${CMAKE_CURRENT_LIST_DIR}/RiuMeasurementViewEventFilter.h
${CMAKE_CURRENT_LIST_DIR}/RiuDraggableOverlayFrame.h
${CMAKE_CURRENT_LIST_DIR}/RiuMdiMaximizeWindowGuard.h
)
set (SOURCE_GROUP_SOURCE_FILES
@@ -165,6 +166,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RiuQwtPlotItemGroup.cpp
${CMAKE_CURRENT_LIST_DIR}/RiuQwtPlotTools.cpp
${CMAKE_CURRENT_LIST_DIR}/RiuWellPathComponentPlotItem.cpp
${CMAKE_CURRENT_LIST_DIR}/RiuDraggableOverlayFrame.cpp
${CMAKE_CURRENT_LIST_DIR}/RiuMdiMaximizeWindowGuard.cpp
)
list(APPEND CODE_HEADER_FILES

View File

@@ -18,7 +18,7 @@
#include "RiuCvfOverlayItemWidget.h"
#include "RiaApplication.h"
#include "RiaGuiApplication.h"
#include "cafTitledOverlayFrame.h"
#include "cafViewer.h"
@@ -66,7 +66,7 @@ void RiuCvfOverlayItemWidget::updateFromOverlayItem( caf::TitledOverlayFrame * i
unsigned int height = item->renderSize().y();
QGLFormat glFormat;
glFormat.setDirectRendering(RiaApplication::instance()->useShaders());
glFormat.setDirectRendering(RiaGuiApplication::instance()->useShaders());
// Enforce no border to avoid
item->setBackgroundFrameColor(cvf::Color4f(0, 0, 0, 0));
@@ -88,7 +88,7 @@ void RiuCvfOverlayItemWidget::updateFromOverlayItem( caf::TitledOverlayFrame * i
cvf::ref<cvf::RenderSequence> renderingSequence = new cvf::RenderSequence;
renderingSequence->addRendering(rendering.p());
if (RiaApplication::instance()->useShaders())
if (RiaGuiApplication::instance()->useShaders())
{
// Set up frame and render buffers

View File

@@ -20,7 +20,7 @@
#include "RiuMainWindow.h"
#include "RiaApplication.h"
#include "RiaGuiApplication.h"
#include "RiaBaseDefs.h"
#include "RiaPreferences.h"
#include "RiaRegressionTest.h"
@@ -159,7 +159,11 @@ RiuMainWindow::RiuMainWindow()
//--------------------------------------------------------------------------------------------------
RiuMainWindow* RiuMainWindow::instance()
{
return RiaApplication::instance()->mainWindow();
if (RiaGuiApplication::isRunning())
{
return RiaGuiApplication::instance()->mainWindow();
}
return nullptr;
}
//--------------------------------------------------------------------------------------------------
@@ -266,7 +270,7 @@ void RiuMainWindow::cleanupGuiBeforeProjectClose()
//--------------------------------------------------------------------------------------------------
void RiuMainWindow::closeEvent(QCloseEvent* event)
{
RiaApplication* app = RiaApplication::instance();
RiaGuiApplication* app = RiaGuiApplication::instance();
app->saveMainWinGeoAndDockToolBarLayout();
@@ -461,7 +465,7 @@ void RiuMainWindow::createMenus()
fileMenu->addAction(cmdFeatureMgr->action("RicSaveProjectFeature"));
fileMenu->addAction(cmdFeatureMgr->action("RicSaveProjectAsFeature"));
std::vector<QAction*> recentFileActions = RiaApplication::instance()->recentFileActions();
std::vector<QAction*> recentFileActions = RiaGuiApplication::instance()->recentFileActions();
for (auto act : recentFileActions)
{
fileMenu->addAction(act);

View File

@@ -0,0 +1,49 @@
#include "RiuMdiMaximizeWindowGuard.h"
#include "RiaGuiApplication.h"
#include "RiuMainWindow.h"
#include "RiuPlotMainWindow.h"
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiuMdiMaximizeWindowGuard::RiuMdiMaximizeWindowGuard()
{
{
RiuMainWindow* mainWindow = RiaGuiApplication::instance()->mainWindow();
if (mainWindow)
{
mainWindow->enableShowFirstVisibleMdiWindowMaximized(false);
}
}
{
RiuPlotMainWindow* plotMainWindow = RiaGuiApplication::instance()->mainPlotWindow();
if (plotMainWindow)
{
plotMainWindow->enableShowFirstVisibleMdiWindowMaximized(false);
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiuMdiMaximizeWindowGuard::~RiuMdiMaximizeWindowGuard()
{
{
RiuMainWindow* mainWindow = RiaGuiApplication::instance()->mainWindow();
if (mainWindow)
{
mainWindow->enableShowFirstVisibleMdiWindowMaximized(true);
}
}
{
RiuPlotMainWindow* plotMainWindow = RiaGuiApplication::instance()->mainPlotWindow();
if (plotMainWindow)
{
plotMainWindow->enableShowFirstVisibleMdiWindowMaximized(true);
}
}
}

View File

@@ -0,0 +1,32 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2011- Statoil ASA
// Copyright (C) 2013- Ceetron Solutions AS
// Copyright (C) 2011-2012 Ceetron AS
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#pragma once
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
class RiuMdiMaximizeWindowGuard
{
public:
RiuMdiMaximizeWindowGuard();
~RiuMdiMaximizeWindowGuard();
};

View File

@@ -18,7 +18,7 @@
#include "RiuMdiSubWindow.h"
#include "RiaApplication.h"
#include "RiaGuiApplication.h"
#include "Rim3dView.h"
#include "RimSummaryPlot.h"
@@ -59,7 +59,7 @@ RimMdiWindowGeometry RiuMdiSubWindow::windowGeometry() const
RimMdiWindowGeometry geo;
int mainWinID = 0;
if (window() == RiaApplication::instance()->mainPlotWindow())
if (window() == RiaGuiApplication::instance()->mainPlotWindow())
{
mainWinID = 1;
}
@@ -132,13 +132,13 @@ void RiuMdiSubWindow::resizeEvent(QResizeEvent* resizeEvent)
if (!m_blockTilingChanges)
{
if (window() == RiaApplication::instance()->mainWindow())
if (window() == RiaGuiApplication::instance()->mainWindow())
{
RiaApplication::instance()->mainWindow()->storeSubWindowTiling(false);
RiaGuiApplication::instance()->mainWindow()->storeSubWindowTiling(false);
}
else if (window() == RiaApplication::instance()->mainPlotWindow())
else if (window() == RiaGuiApplication::instance()->mainPlotWindow())
{
RiaApplication::instance()->mainPlotWindow()->storeSubWindowTiling(false);
RiaGuiApplication::instance()->mainPlotWindow()->storeSubWindowTiling(false);
}
}
@@ -157,13 +157,13 @@ void RiuMdiSubWindow::moveEvent(QMoveEvent* moveEvent)
if (!m_blockTilingChanges)
{
if (window() == RiaApplication::instance()->mainWindow())
if (window() == RiaGuiApplication::instance()->mainWindow())
{
RiaApplication::instance()->mainWindow()->storeSubWindowTiling(false);
RiaGuiApplication::instance()->mainWindow()->storeSubWindowTiling(false);
}
else if (window() == RiaApplication::instance()->mainPlotWindow())
else if (window() == RiaGuiApplication::instance()->mainPlotWindow())
{
RiaApplication::instance()->mainPlotWindow()->storeSubWindowTiling(false);
RiaGuiApplication::instance()->mainPlotWindow()->storeSubWindowTiling(false);
}
}

View File

@@ -178,7 +178,7 @@ void RiuPlotMainWindow::cleanUpTemporaryWidgets()
//--------------------------------------------------------------------------------------------------
void RiuPlotMainWindow::closeEvent(QCloseEvent* event)
{
RiaApplication* app = RiaApplication::instance();
RiaGuiApplication* app = RiaGuiApplication::instance();
app->savePlotWinGeoAndDockToolBarLayout();
@@ -260,7 +260,7 @@ void RiuPlotMainWindow::createMenus()
fileMenu->addAction(cmdFeatureMgr->action("RicSaveProjectFeature"));
fileMenu->addAction(cmdFeatureMgr->action("RicSaveProjectAsFeature"));
std::vector<QAction*> recentFileActions = RiaApplication::instance()->recentFileActions();
std::vector<QAction*> recentFileActions = RiaGuiApplication::instance()->recentFileActions();
for (auto act : recentFileActions)
{
fileMenu->addAction(act);

View File

@@ -17,7 +17,7 @@
/////////////////////////////////////////////////////////////////////////////////
#include "RiuPlotMainWindowTools.h"
#include "RiaApplication.h"
#include "RiaGuiApplication.h"
#include "RiuPlotMainWindow.h"
//--------------------------------------------------------------------------------------------------
@@ -25,7 +25,7 @@
//--------------------------------------------------------------------------------------------------
void RiuPlotMainWindowTools::showPlotMainWindow()
{
RiaApplication::instance()->getOrCreateAndShowMainPlotWindow();
RiaGuiApplication::instance()->getOrCreateAndShowMainPlotWindow();
}
//--------------------------------------------------------------------------------------------------
@@ -33,7 +33,7 @@ void RiuPlotMainWindowTools::showPlotMainWindow()
//--------------------------------------------------------------------------------------------------
void RiuPlotMainWindowTools::setActiveViewer(QWidget* subWindow)
{
RiuPlotMainWindow* mpw = RiaApplication::instance()->mainPlotWindow();
RiuPlotMainWindow* mpw = RiaGuiApplication::instance()->mainPlotWindow();
if (mpw) mpw->setActiveViewer(subWindow);
}
@@ -43,7 +43,7 @@ void RiuPlotMainWindowTools::setActiveViewer(QWidget* subWindow)
//--------------------------------------------------------------------------------------------------
void RiuPlotMainWindowTools::setExpanded(const caf::PdmUiItem* uiItem, bool expanded /*= true*/)
{
RiuPlotMainWindow* mpw = RiaApplication::instance()->mainPlotWindow();
RiuPlotMainWindow* mpw = RiaGuiApplication::instance()->mainPlotWindow();
if (mpw) mpw->setExpanded(uiItem, expanded);
}
@@ -53,7 +53,7 @@ void RiuPlotMainWindowTools::setExpanded(const caf::PdmUiItem* uiItem, bool expa
//--------------------------------------------------------------------------------------------------
void RiuPlotMainWindowTools::selectAsCurrentItem(const caf::PdmObject* object, bool allowActiveViewChange /*= true*/)
{
RiuPlotMainWindow* mpw = RiaApplication::instance()->mainPlotWindow();
RiuPlotMainWindow* mpw = RiaGuiApplication::instance()->mainPlotWindow();
if (mpw) mpw->selectAsCurrentItem(object, allowActiveViewChange);
}
@@ -63,7 +63,7 @@ void RiuPlotMainWindowTools::selectAsCurrentItem(const caf::PdmObject* object, b
//--------------------------------------------------------------------------------------------------
void RiuPlotMainWindowTools::refreshToolbars()
{
RiuPlotMainWindow* mpw = RiaApplication::instance()->mainPlotWindow();
RiuPlotMainWindow* mpw = RiaGuiApplication::instance()->mainPlotWindow();
if (mpw)
{

View File

@@ -18,7 +18,7 @@
#include "RiuPlotObjectPicker.h"
#include "RiaApplication.h"
#include "RiaGuiApplication.h"
#include "RiuPlotMainWindow.h"
#include <QMouseEvent>
@@ -39,7 +39,7 @@ RiuPlotObjectPicker::RiuPlotObjectPicker(QWidget* widget, caf::PdmObject* associ
//--------------------------------------------------------------------------------------------------
bool RiuPlotObjectPicker::eventFilter(QObject* watchedObject, QEvent* event)
{
RiuPlotMainWindow* mainPlotWindow = RiaApplication::instance()->mainPlotWindow();
RiuPlotMainWindow* mainPlotWindow = RiaGuiApplication::instance()->mainPlotWindow();
if (mainPlotWindow && m_associatedObject.notNull())
{
if (event->type() == QEvent::MouseButtonPress)

View File

@@ -18,7 +18,7 @@
#include "RiuRecentFileActionProvider.h"
#include "RiaApplication.h"
#include "RiaGuiApplication.h"
#include "RiaFilePathTools.h"
#include <QAction>
@@ -125,7 +125,7 @@ void RiuRecentFileActionProvider::slotOpenRecentFile()
{
QString fileName = RiaFilePathTools::toInternalSeparator(action->data().toString());
RiaApplication* app = RiaApplication::instance();
RiaGuiApplication* app = RiaGuiApplication::instance();
if (RiaApplication::hasValidProjectFileExtension(fileName))
{
if (!app->askUserToSaveModifiedProject()) return;

View File

@@ -21,7 +21,7 @@
#include "ToggleCommands/RicToggleItemsFeatureImpl.h"
#include "RiaApplication.h"
#include "RiaGuiApplication.h"
#include "RimCaseCollection.h"
#include "RimEclipseCase.h"
@@ -104,9 +104,9 @@ bool RiuTreeViewEventFilter::eventFilter(QObject *obj, QEvent *event)
{
toggleStateForSelection = false;
}
else if (RiaApplication::instance()->mainPlotWindow() &&
RiaApplication::instance()->mainPlotWindow()->projectTreeView() &&
RiaApplication::instance()->mainPlotWindow()->projectTreeView()->isTreeItemEditWidgetActive())
else if (RiaGuiApplication::instance()->mainPlotWindow() &&
RiaGuiApplication::instance()->mainPlotWindow()->projectTreeView() &&
RiaGuiApplication::instance()->mainPlotWindow()->projectTreeView()->isTreeItemEditWidgetActive())
{
toggleStateForSelection = false;
}

View File

@@ -93,9 +93,9 @@ RiuViewer::RiuViewer(const QGLFormat& format, QWidget* parent)
: caf::Viewer(format, parent)
, m_isNavigationRotationEnabled(true)
{
cvf::Font* standardFont = RiaApplication::instance()->defaultSceneFont();
QFont font = QApplication::font();
font.setPointSize(RiaFontCache::pointSizeFromFontSizeEnum(RiaApplication::instance()->preferences()->defaultSceneFontSize()));
cvf::Font* standardFont = RiaGuiApplication::instance()->defaultSceneFont();
QFont font = RiaGuiApplication::instance()->font();
font.setPointSize(RiaFontCache::pointSizeFromFontSizeEnum(RiaGuiApplication::instance()->preferences()->defaultSceneFontSize()));
m_axisCross = new cvf::OverlayAxisCross(m_mainCamera.p(), standardFont);
m_axisCross->setAxisLabels("X", "Y", "Z");
@@ -559,7 +559,7 @@ void RiuViewer::removeAllColorLegends()
//--------------------------------------------------------------------------------------------------
void RiuViewer::addColorLegendToBottomLeftCorner(caf::TitledOverlayFrame* addedLegend)
{
RiaApplication* app = RiaApplication::instance();
RiaGuiApplication* app = RiaGuiApplication::instance();
CVF_ASSERT(app);
RiaPreferences* preferences = app->preferences();
cvf::Rendering* firstRendering = m_mainRendering.p();
@@ -689,21 +689,21 @@ void RiuViewer::enableNavigationRotation(bool enable)
//--------------------------------------------------------------------------------------------------
void RiuViewer::updateNavigationPolicy()
{
switch (RiaApplication::instance()->navigationPolicy())
switch (RiaGuiApplication::instance()->navigationPolicy())
{
case RiaApplication::NAVIGATION_POLICY_CAD:
case RiaGuiApplication::NAVIGATION_POLICY_CAD:
setNavigationPolicy(new RiuCadNavigation);
break;
case RiaApplication::NAVIGATION_POLICY_CEETRON:
case RiaGuiApplication::NAVIGATION_POLICY_CEETRON:
setNavigationPolicy(new caf::CeetronPlusNavigation);
break;
case RiaApplication::NAVIGATION_POLICY_GEOQUEST:
case RiaGuiApplication::NAVIGATION_POLICY_GEOQUEST:
setNavigationPolicy(new RiuGeoQuestNavigation);
break;
case RiaApplication::NAVIGATION_POLICY_RMS:
case RiaGuiApplication::NAVIGATION_POLICY_RMS:
setNavigationPolicy(new RiuRmsNavigation);
break;
@@ -1062,7 +1062,7 @@ void RiuViewer::clearHoverCursor()
//--------------------------------------------------------------------------------------------------
void RiuViewer::updateFonts()
{
cvf::Font* standardFont = RiaApplication::instance()->defaultSceneFont();
cvf::Font* standardFont = RiaGuiApplication::instance()->defaultSceneFont();
m_mainRendering->removeOverlayItem(m_axisCross.p());
m_axisCross = new cvf::OverlayAxisCross(m_mainCamera.p(), standardFont);