mirror of
https://github.com/OPM/ResInsight.git
synced 2026-11-02 20:30:46 -06:00
Work in progress
This commit is contained in:
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}/RimStackablePlotCurve.cpp
|
||||||
${CMAKE_CURRENT_LIST_DIR}/RimAdvancedSnapshotExportDefinition.cpp
|
${CMAKE_CURRENT_LIST_DIR}/RimAdvancedSnapshotExportDefinition.cpp
|
||||||
${CMAKE_CURRENT_LIST_DIR}/RimMdiWindowController.cpp
|
${CMAKE_CURRENT_LIST_DIR}/RimMdiWindowController.cpp
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/RimDockWindowController.cpp
|
||||||
${CMAKE_CURRENT_LIST_DIR}/RimNamedObject.cpp
|
${CMAKE_CURRENT_LIST_DIR}/RimNamedObject.cpp
|
||||||
${CMAKE_CURRENT_LIST_DIR}/RimCheckableNamedObject.cpp
|
${CMAKE_CURRENT_LIST_DIR}/RimCheckableNamedObject.cpp
|
||||||
${CMAKE_CURRENT_LIST_DIR}/RimCheckableObject.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
|
///////// Interface for the Window controller
|
||||||
friend class RimMdiWindowController;
|
friend class RimMdiWindowController;
|
||||||
|
friend class RimDockWindowController;
|
||||||
|
|
||||||
QString windowTitle();
|
QString windowTitle();
|
||||||
virtual QWidget* createViewWidget( QWidget* mainWindowParent = nullptr ) = 0;
|
virtual QWidget* createViewWidget( QWidget* mainWindowParent = nullptr ) = 0;
|
||||||
|
|||||||
@@ -107,6 +107,7 @@
|
|||||||
#include <QMimeData>
|
#include <QMimeData>
|
||||||
#include <QSpinBox>
|
#include <QSpinBox>
|
||||||
#include <QStatusBar>
|
#include <QStatusBar>
|
||||||
|
#include <QTextEdit>
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QToolBar>
|
#include <QToolBar>
|
||||||
@@ -148,6 +149,14 @@ RiuMainWindow::RiuMainWindow()
|
|||||||
// cWidget->setWidget( m_mdiArea );
|
// cWidget->setWidget( m_mdiArea );
|
||||||
// dockManager()->setCentralWidget( cWidget );
|
// 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();
|
createActions();
|
||||||
createMenus();
|
createMenus();
|
||||||
createToolBars();
|
createToolBars();
|
||||||
@@ -1275,6 +1284,16 @@ void RiuMainWindow::initializeViewer( QMdiSubWindow* subWindow, QWidget* viewer,
|
|||||||
slotRefreshViewActions();
|
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 removeViewer( QWidget* viewer ) override;
|
||||||
void initializeViewer( QMdiSubWindow* subWindow, QWidget* viewer, const RimMdiWindowGeometry& windowsGeometry ) 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;
|
void setActiveViewer( QWidget* subWindow ) override;
|
||||||
|
|
||||||
ads::CDockWidget* initializeDockingViewer( QWidget* viewer ) override;
|
ads::CDockWidget* initializeDockingViewer( QWidget* viewer ) override;
|
||||||
@@ -290,5 +291,7 @@ private:
|
|||||||
|
|
||||||
QToolBar* m_holoLensToolBar;
|
QToolBar* m_holoLensToolBar;
|
||||||
|
|
||||||
|
QPointer<ads::CDockWidget> m_centralDockWidget;
|
||||||
|
|
||||||
std::vector<QPointer<ads::CDockWidget>> m_additionalProjectViews;
|
std::vector<QPointer<ads::CDockWidget>> m_additionalProjectViews;
|
||||||
};
|
};
|
||||||
@@ -140,6 +140,16 @@ QMdiSubWindow* RiuMainWindowBase::createViewWindow()
|
|||||||
return subWin;
|
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;
|
virtual QString mainWindowName() = 0;
|
||||||
|
|
||||||
QMdiSubWindow* createViewWindow();
|
QMdiSubWindow* createViewWindow();
|
||||||
|
ads::CDockWidget* createDockViewWindow();
|
||||||
|
|
||||||
virtual void removeViewer( QWidget* viewer ) = 0;
|
virtual void removeViewer( QWidget* viewer ) = 0;
|
||||||
virtual void initializeViewer( QMdiSubWindow* viewWindow, QWidget* viewWidget, const RimMdiWindowGeometry& windowsGeometry ) = 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;
|
virtual ads::CDockWidget* initializeDockingViewer( QWidget* viewer ) = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -106,11 +106,11 @@ RiuPlotMainWindow::RiuPlotMainWindow()
|
|||||||
// menuForMdiArea << "RicOpenSummaryPlotEditorFromMdiAreaFeature";
|
// menuForMdiArea << "RicOpenSummaryPlotEditorFromMdiAreaFeature";
|
||||||
// new RiuContextMenuLauncher( m_mdiArea, menuForMdiArea );
|
// 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 );
|
// cWidget->setWidget( m_mdiArea );
|
||||||
// auto dockArea = dockManager()->setCentralWidget( cWidget );
|
auto dockArea = dockManager()->setCentralWidget( cWidget );
|
||||||
// dockArea->setVisible( true );
|
dockArea->setVisible( true );
|
||||||
|
|
||||||
m_toggleSelectionLinkAction = new QAction( QIcon( ":/Link3DandPlots.png" ), tr( "Link With Selection in 3D" ), this );
|
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." );
|
m_toggleSelectionLinkAction->setToolTip( "Update wells used in plots from well selections in 3D view." );
|
||||||
|
|||||||
Reference in new issue
Block a user