Refactor related to #1106, #1107, #1109, #1113. Refactored the MDI control

of windows. This might introduce problems.
This commit is contained in:
Jacob Støren
2017-01-17 13:06:57 +01:00
parent 2edc090c89
commit 43249f7af8
30 changed files with 695 additions and 403 deletions

View File

@@ -17,7 +17,9 @@
/////////////////////////////////////////////////////////////////////////////////
#include "RimViewWindow.h"
#include "RimMdiWindowController.h"
#include "cvfAssert.h"
#include <QWidget>
CAF_PDM_XML_ABSTRACT_SOURCE_INIT(RimViewWindow, "ViewWindow"); // Do not use. Abstract class
@@ -26,9 +28,14 @@ CAF_PDM_XML_ABSTRACT_SOURCE_INIT(RimViewWindow, "ViewWindow"); // Do not use. Ab
//--------------------------------------------------------------------------------------------------
RimViewWindow::RimViewWindow(void)
{
CAF_PDM_InitFieldNoDefault(&m_windowController, "WindowController", "", "", "", "");
m_windowController.uiCapability()->setUiHidden(true);
// Obsolete field
CAF_PDM_InitFieldNoDefault(&m_windowGeometry, "WindowGeometry", "", "", "", "");
m_windowGeometry.uiCapability()->setUiHidden(true);
m_windowGeometry.xmlCapability()->setIOWritable(false);
}
//--------------------------------------------------------------------------------------------------
@@ -36,7 +43,31 @@ RimViewWindow::RimViewWindow(void)
//--------------------------------------------------------------------------------------------------
RimViewWindow::~RimViewWindow(void)
{
if ( m_windowController() ) delete m_windowController() ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewWindow::removeWidgetFromMDI()
{
if ( m_windowController() ) m_windowController->removeWindowFromMDI();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewWindow::handleViewerDeletion()
{
if ( m_windowController() ) m_windowController->handleViewerDeletion();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewWindow::updateViewerWidgetBasic()
{
if ( m_windowController() ) m_windowController->updateViewerWidget();
}
//--------------------------------------------------------------------------------------------------
@@ -44,17 +75,10 @@ RimViewWindow::~RimViewWindow(void)
//--------------------------------------------------------------------------------------------------
void RimViewWindow::setMdiWindowGeometry(const RimMdiWindowGeometry& windowGeometry)
{
std::vector<int> geom;
geom.clear();
if (windowGeometry.isValid())
{
geom.push_back(windowGeometry.x);
geom.push_back(windowGeometry.y);
geom.push_back(windowGeometry.width);
geom.push_back(windowGeometry.height);
geom.push_back(windowGeometry.isMaximized);
}
m_windowGeometry.setValue(geom);
CVF_ASSERT(m_windowController());
if (m_windowController()) m_windowController()->setMdiWindowGeometry(windowGeometry);
}
//--------------------------------------------------------------------------------------------------
@@ -62,17 +86,84 @@ void RimViewWindow::setMdiWindowGeometry(const RimMdiWindowGeometry& windowGeome
//--------------------------------------------------------------------------------------------------
RimMdiWindowGeometry RimViewWindow::mdiWindowGeometry()
{
CVF_ASSERT(m_windowController());
RimMdiWindowGeometry wg;
if (m_windowGeometry.value().size() == 5)
{
wg.x = m_windowGeometry.value()[0];
wg.y = m_windowGeometry.value()[1];
wg.width = m_windowGeometry.value()[2];
wg.height = m_windowGeometry.value()[3];
wg.isMaximized = m_windowGeometry.value()[4];
}
if (m_windowController()) return m_windowController()->mdiWindowGeometry();
else return RimMdiWindowGeometry();
return wg;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewWindow::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
{
if ( m_windowController() )
{
if ( changedField == getShowWindowField() )
{
m_windowController()->showWindowFieldChangedByUi();
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewWindow::updateViewerWidgetWindowTitle()
{
if ( viewWidget() )
{
caf::PdmUiFieldHandle* uiFieldHandle = this->userDescriptionField()->uiCapability();
if ( uiFieldHandle )
{
QVariant v = uiFieldHandle->uiValue();
viewWidget()->setWindowTitle(v.toString());
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewWindow::setAsMDI(int mainWindowID)
{
if ( !m_windowController() )
{
m_windowController = new RimMdiWindowController;
RimMdiWindowGeometry mwg;
mwg.mainWindowID = mainWindowID;
setMdiWindowGeometry(mwg);
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
#include "RimView.h"
void RimViewWindow::initAfterRead()
{
if (m_windowGeometry.value().size() == 5)
{
RimMdiWindowGeometry wg;
int mainWindowID = -1;
if (dynamic_cast<RimView*> (this))
mainWindowID = 0;
else
mainWindowID = 1;
wg.mainWindowID = mainWindowID;
wg.x = m_windowGeometry.value()[0];
wg.y = m_windowGeometry.value()[1];
wg.width = m_windowGeometry.value()[2];
wg.height = m_windowGeometry.value()[3];
wg.isMaximized = m_windowGeometry.value()[4];
setAsMDI(mainWindowID);
setMdiWindowGeometry(wg);
}
}