Work in progress

This commit is contained in:
jonjenssen authored and JJ committed 2026-06-17 13:55:32 +02:00
1 parent aa9edc43bb
commit 2c9e148fc6
9 files changed
+285 -5

No files matched your search

@@ -63,6 +63,7 @@ set(SOURCE_GROUP_SOURCE_FILES
${CMAKE_CURRENT_LIST_DIR}/RimStackablePlotCurve.cpp
${CMAKE_CURRENT_LIST_DIR}/RimAdvancedSnapshotExportDefinition.cpp
${CMAKE_CURRENT_LIST_DIR}/RimMdiWindowController.cpp
${CMAKE_CURRENT_LIST_DIR}/RimDockWindowController.cpp
${CMAKE_CURRENT_LIST_DIR}/RimNamedObject.cpp
${CMAKE_CURRENT_LIST_DIR}/RimCheckableNamedObject.cpp
${CMAKE_CURRENT_LIST_DIR}/RimCheckableObject.cpp
@@ -0,0 +1,179 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2026 Equinor 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 "RimDockWindowController.h"
#include "RiaGuiApplication.h"
#include "RimProject.h"
#include "RimViewWindow.h"
#include "RiuMainWindowBase.h"
#include "DockManager.h"
#include "DockWidget.h"
CAF_PDM_XML_SOURCE_INIT( RimDockWindowController, "DockWindowController" );
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimDockWindowController::RimDockWindowController()
{
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, "" );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimDockWindowController::~RimDockWindowController()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimDockWindowController::setWindowGeometry( 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 RimDockWindowController::windowGeometry()
{
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 RimDockWindowController::handleViewerDeletion()
{
viewPdmObject()->m_showWindow = false;
viewPdmObject()->updateConnectedEditors();
viewPdmObject()->updateUiIconFromToggleField();
uiCapability()->updateUiIconFromToggleField();
removeWindowFromDock();
updateConnectedEditors();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimDockWindowController::removeWindowFromDock()
{
RiuMainWindowBase* mainWin = getMainWindow();
if ( mainWin && viewWidget() )
{
mainWin->removeViewer( viewWidget() );
viewPdmObject()->deleteViewWidget();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimViewWindow* RimDockWindowController::viewPdmObject()
{
return firstAncestorOrThisOfType<RimViewWindow>();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QWidget* RimDockWindowController::viewWidget()
{
return viewPdmObject()->viewWidget();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiuMainWindowBase* RimDockWindowController::getMainWindow()
{
if ( RiaGuiApplication::isRunning() )
{
return RiaGuiApplication::instance()->mainWindowByID( m_mainWindowID );
}
return nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimDockWindowController::setupBeforeSave()
{
if ( viewWidget() && getMainWindow() )
{
setWindowGeometry( getMainWindow()->windowGeometryForViewer( viewWidget() ) );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimDockWindowController::updateViewerWidget()
{
RiuMainWindowBase* mainWindow = getMainWindow();
if ( !mainWindow ) return;
if ( viewPdmObject()->isWindowVisible() )
{
if ( !viewWidget() )
{
ads::CDockWidget* viewWindow = mainWindow->createDockViewWindow();
QWidget* viewWidget = viewPdmObject()->createViewWidget( viewWindow );
mainWindow->initializeViewer( viewWindow, viewWidget, windowGeometry() );
viewPdmObject()->updateViewWidgetAfterCreation();
}
viewPdmObject()->updateMdiWindowTitle();
}
else
{
if ( viewWidget() )
{
setWindowGeometry( mainWindow->windowGeometryForViewer( viewWidget() ) );
mainWindow->removeViewer( viewWidget() );
viewPdmObject()->deleteViewWidget();
}
}
}
@@ -0,0 +1,65 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2026 Equinor 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.
//
/////////////////////////////////////////////////////////////////////////////////
#pragma once
#include "cafPdmChildField.h"
#include "cafPdmField.h"
#include "cafPdmObject.h"
class RiuMainWindowBase;
// class RiuMdiSubWindow;
class RimViewWindow;
struct RimMdiWindowGeometry;
//==================================================================================================
///
///
//==================================================================================================
class RimDockWindowController : public caf::PdmObject
{
CAF_PDM_HEADER_INIT;
public:
RimDockWindowController();
~RimDockWindowController() override;
void setWindowGeometry( const RimMdiWindowGeometry& windowGeometry );
RimMdiWindowGeometry windowGeometry();
void updateViewerWidget();
void handleViewerDeletion();
void removeWindowFromDock();
protected:
RimViewWindow* viewPdmObject();
QWidget* viewWidget();
RiuMainWindowBase* getMainWindow();
// Overridden PDM methods
void setupBeforeSave() override;
private:
caf::PdmField<int> m_mainWindowID;
caf::PdmField<int> m_x;
caf::PdmField<int> m_y;
caf::PdmField<int> m_width;
caf::PdmField<int> m_height;
caf::PdmField<bool> m_isMaximized;
};
@@ -91,6 +91,7 @@ protected:
///////// Interface for the Window controller
friend class RimMdiWindowController;
friend class RimDockWindowController;
QString windowTitle();
virtual QWidget* createViewWidget( QWidget* mainWindowParent = nullptr ) = 0;
@@ -107,6 +107,7 @@
#include <QMimeData>
#include <QSpinBox>
#include <QStatusBar>
#include <QTextEdit>
#include <QThread>
#include <QTimer>
#include <QToolBar>
@@ -148,6 +149,14 @@ RiuMainWindow::RiuMainWindow()
// cWidget->setWidget( m_mdiArea );
// dockManager()->setCentralWidget( cWidget );
m_centralDockWidget = RiuDockWidgetTools::createDockWidget( "Welcome", "Welcome", this );
QTextEdit* welcome = new QTextEdit();
welcome->setReadOnly( true );
welcome->setPlainText( "Welcome to ResInsight!\n\n"
"To get started, open a project from the File menu or drag and drop a project file into this window." );
m_centralDockWidget->setWidget( welcome );
dockManager()->setCentralWidget( m_centralDockWidget );
createActions();
createMenus();
createToolBars();
@@ -1275,6 +1284,16 @@ void RiuMainWindow::initializeViewer( QMdiSubWindow* subWindow, QWidget* viewer,
slotRefreshViewActions();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuMainWindow::initializeViewer( ads::CDockWidget* dockWidget, QWidget* viewer, const RimMdiWindowGeometry& windowsGeometry )
{
dockManager()->centralWidget()->dockContainer()->addDockWidget( ads::DockWidgetArea::CenterDockWidgetArea, dockWidget );
slotRefreshViewActions();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -99,6 +99,7 @@ public:
void removeViewer( QWidget* viewer ) override;
void initializeViewer( QMdiSubWindow* subWindow, QWidget* viewer, const RimMdiWindowGeometry& windowsGeometry ) override;
void initializeViewer( ads::CDockWidget* dockWidget, QWidget* viewer, const RimMdiWindowGeometry& windowsGeometry ) override;
void setActiveViewer( QWidget* subWindow ) override;
ads::CDockWidget* initializeDockingViewer( QWidget* viewer ) override;
@@ -290,5 +291,7 @@ private:
QToolBar* m_holoLensToolBar;
QPointer<ads::CDockWidget> m_centralDockWidget;
std::vector<QPointer<ads::CDockWidget>> m_additionalProjectViews;
};
@@ -140,6 +140,16 @@ QMdiSubWindow* RiuMainWindowBase::createViewWindow()
return subWin;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
ads::CDockWidget* RiuMainWindowBase::createDockViewWindow()
{
auto widget = RiuDockWidgetTools::createDockWidget( "3D view", "3dview", this );
return widget;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -66,11 +66,13 @@ public:
virtual QString mainWindowName() = 0;
QMdiSubWindow* createViewWindow();
QMdiSubWindow* createViewWindow();
ads::CDockWidget* createDockViewWindow();
virtual void removeViewer( QWidget* viewer ) = 0;
virtual void initializeViewer( QMdiSubWindow* viewWindow, QWidget* viewWidget, const RimMdiWindowGeometry& windowsGeometry ) = 0;
virtual void setActiveViewer( QWidget* subWindow ) = 0;
virtual void initializeViewer( ads::CDockWidget* dockWidget, QWidget* viewer, const RimMdiWindowGeometry& windowsGeometry ) {};
virtual void setActiveViewer( QWidget* subWindow ) = 0;
virtual ads::CDockWidget* initializeDockingViewer( QWidget* viewer ) = 0;
@@ -106,11 +106,11 @@ RiuPlotMainWindow::RiuPlotMainWindow()
// menuForMdiArea << "RicOpenSummaryPlotEditorFromMdiAreaFeature";
// new RiuContextMenuLauncher( m_mdiArea, menuForMdiArea );
// ads::CDockWidget* cWidget = RiuDockWidgetTools::createDockWidget( "Plot Window", RiuDockWidgetTools::mainPlotWindowName(), this );
ads::CDockWidget* cWidget = RiuDockWidgetTools::createDockWidget( "Plot Window", RiuDockWidgetTools::mainPlotWindowName(), this );
// cWidget->setWidget( m_mdiArea );
// auto dockArea = dockManager()->setCentralWidget( cWidget );
// dockArea->setVisible( true );
auto dockArea = dockManager()->setCentralWidget( cWidget );
dockArea->setVisible( true );
m_toggleSelectionLinkAction = new QAction( QIcon( ":/Link3DandPlots.png" ), tr( "Link With Selection in 3D" ), this );
m_toggleSelectionLinkAction->setToolTip( "Update wells used in plots from well selections in 3D view." );