ResInsight/ApplicationCode/ProjectDataModel/RimMdiWindowController.cpp
Gaute Lindkvist 57b33b0d4c
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
2019-05-06 10:36:05 +02:00

182 lines
6.6 KiB
C++

/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2017 Statoil ASA
//
// 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.
//
/////////////////////////////////////////////////////////////////////////////////
#include "RimMdiWindowController.h"
#include "RiaGuiApplication.h"
#include "RimProject.h"
#include "RimViewWindow.h"
#include "RiuMainWindowBase.h"
CAF_PDM_XML_SOURCE_INIT(RimMdiWindowController, "MdiWindowController");
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimMdiWindowController::RimMdiWindowController()
{
CAF_PDM_InitField(&m_mainWindowID, "MainWindowID", -1, "", "", "", "" );
CAF_PDM_InitField(& m_x , "xPos", -1, "", "", "", "" );
CAF_PDM_InitField(& m_y , "yPos", -1, "", "", "", "" );
CAF_PDM_InitField(& m_width , "Width", -1, "", "", "", "" );
CAF_PDM_InitField(& m_height , "Height", -1, "", "", "", "" );
CAF_PDM_InitField(& m_isMaximized, "IsMaximized", false, "", "", "", "" );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimMdiWindowController::~RimMdiWindowController()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimMdiWindowController::setMdiWindowGeometry(const RimMdiWindowGeometry& windowGeometry)
{
m_mainWindowID = windowGeometry.mainWindowID;
m_x = windowGeometry.x;
m_y = windowGeometry.y;
m_width = windowGeometry.width;
m_height = windowGeometry.height;
m_isMaximized = windowGeometry.isMaximized;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimMdiWindowGeometry RimMdiWindowController::mdiWindowGeometry()
{
RimMdiWindowGeometry windowGeometry;
windowGeometry.mainWindowID = m_mainWindowID;
windowGeometry.x = m_x ;
windowGeometry.y = m_y ;
windowGeometry.width = m_width ;
windowGeometry.height = m_height ;
windowGeometry.isMaximized = m_isMaximized ;
return windowGeometry;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimMdiWindowController::handleViewerDeletion()
{
viewPdmObject()->m_showWindow = false;
viewPdmObject()->updateConnectedEditors();
viewPdmObject()->updateUiIconFromToggleField();
uiCapability()->updateUiIconFromToggleField();
removeWindowFromMDI();
updateConnectedEditors();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimMdiWindowController::removeWindowFromMDI()
{
RiuMainWindowBase* mainWin = getMainWindow();
if (mainWin && viewWidget()) mainWin->removeViewer(viewWidget());
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimViewWindow* RimMdiWindowController::viewPdmObject()
{
RimViewWindow * viewWindowObj;
this->firstAncestorOrThisOfType(viewWindowObj);
return viewWindowObj;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QWidget* RimMdiWindowController::viewWidget()
{
return viewPdmObject()->viewWidget();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiuMainWindowBase* RimMdiWindowController::getMainWindow()
{
if (RiaGuiApplication::isRunning())
{
return RiaGuiApplication::instance()->mainWindowByID(m_mainWindowID);
}
return nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimMdiWindowController::setupBeforeSave()
{
if ( viewWidget() && getMainWindow() )
{
this->setMdiWindowGeometry(getMainWindow()->windowGeometryForViewer(viewWidget()));
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimMdiWindowController::updateViewerWidget()
{
RiuMainWindowBase* mainWindow = getMainWindow();
if ( !mainWindow ) return;
if ( viewPdmObject()->isWindowVisible() )
{
if ( !viewWidget() )
{
QWidget * viewWidget = viewPdmObject()->createViewWidget(mainWindow);
mainWindow->addViewer(viewWidget, this->mdiWindowGeometry());
mainWindow->setActiveViewer(viewWidget);
viewPdmObject()->updateViewWidgetAfterCreation();
}
else
{
mainWindow->setActiveViewer(viewWidget());
}
viewPdmObject()->updateMdiWindowTitle();
}
else
{
if ( viewWidget() )
{
this->setMdiWindowGeometry(mainWindow->windowGeometryForViewer(viewWidget()));
mainWindow->removeViewer(viewWidget());
viewPdmObject()->deleteViewWidget();
}
}
}