mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-25 22:50:25 -05: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}/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." );
|
||||
|
||||
Reference in new issue
Block a user