Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
915f059
Testing
jonjenssen Apr 7, 2026
2d98ed3
Work in progress
jonjenssen Apr 7, 2026
6a7b9a1
Work in progress
jonjenssen Apr 29, 2026
017b855
Work in progress
jonjenssen Apr 30, 2026
ceb3035
Work in progress
jonjenssen May 4, 2026
e195913
First non-MDI version. Still some missing links and features.
jonjenssen May 6, 2026
ef109f6
Update title in 3d window
jonjenssen May 8, 2026
763491b
Work in progress
jonjenssen May 12, 2026
51dffbc
Work in progress
jonjenssen May 15, 2026
400c01b
Work in progress
jonjenssen May 18, 2026
97ab3f6
Work in progress
jonjenssen May 19, 2026
dba1de8
Active view tracking for 3d window
jonjenssen May 19, 2026
d452e07
Minor fix
jonjenssen May 19, 2026
2189e49
Work in progress
jonjenssen May 20, 2026
a17511a
Minor updates
jonjenssen May 20, 2026
c89685d
Add default layouts for 3d window
jonjenssen May 21, 2026
64c3806
Work in progress
jonjenssen May 22, 2026
e0f43c3
Fix fullscreen in 3d window
jonjenssen May 22, 2026
e300889
Build fix
jonjenssen May 22, 2026
ac8ae56
Clean up main window ids
jonjenssen May 22, 2026
c27f6a0
Use global event handler for tracking active plot window
jonjenssen May 26, 2026
4aa9644
Remove last traces of MDI
jonjenssen May 26, 2026
e77145c
Work in progress
jonjenssen May 26, 2026
dfb6c0b
Plot window default dock states
jonjenssen May 27, 2026
7633564
Store dock state in project
jonjenssen May 28, 2026
cbd02da
Fix reading old projects and restore plot views
jonjenssen Jun 1, 2026
1eee0cf
Sync plot toolbars with active plot view
jonjenssen Jun 1, 2026
feb27d6
Build fix
jonjenssen Jun 1, 2026
829a19d
Some cleanup
jonjenssen Jun 1, 2026
8210d6f
Some fixes
jonjenssen Jun 1, 2026
10da443
Use unique id for all 3d and plot dock widgets.
jonjenssen Jun 2, 2026
2f14e10
Update test data
jonjenssen Jun 2, 2026
ec316c7
Update to latest qt adv docking version
jonjenssen Jun 2, 2026
e4d0e28
Minor fixes
jonjenssen Jun 2, 2026
0d83239
Work in progress: Support capturing snapshots with a given size.
jonjenssen Jun 4, 2026
0f99113
Snapshot work in progress
jonjenssen Jun 8, 2026
2c4e6cf
Clean up delete 3d views and project close/open
jonjenssen Jun 9, 2026
aedc30b
Whatever
jonjenssen Jun 9, 2026
fe3b220
Fix advanced snapshot export.
jonjenssen Jun 9, 2026
3a0a51c
Clean up PDF snapshots a bit
jonjenssen Jun 10, 2026
423998b
Some cleanup
jonjenssen Jun 11, 2026
c8e24d7
Whatever
jonjenssen Jun 11, 2026
4d2527d
Update python test and example
jonjenssen Jun 11, 2026
dbca88e
Update docking to latest version to support wayland
jonjenssen Jun 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions ApplicationExeCode/Resources/ActiveWindow.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 2 additions & 1 deletion ApplicationExeCode/Resources/ResInsight.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
<file>3DView16x16.png</file>
<file>3DViewGeoMech16x16.png</file>
<file>3DWindow.svg</file>
<file>AICDValve16x16.png</file>
<file>ActiveWindow.svg</file>
<file>AICDValve16x16.png</file>
<file>SICDValve16x16.png</file>
<file>Annotations16x16.png</file>
<file>AnalysisPlot16x16.png</file>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ void RiaCompletionTypeCalculationScheduler::performScheduledUpdates()
RiaApplication::instance()->setActiveReservoirView( activeView );
if ( RiuMainWindow::instance() )
{
RiuMainWindow::instance()->setActiveViewer( activeView->viewer()->layoutWidget() );
RiuMainWindow::instance()->setActiveViewer( activeView->dockWindowName() );
}
}
}
Expand Down
121 changes: 78 additions & 43 deletions ApplicationLibCode/Application/RiaGuiApplication.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
#include "RimAnnotationCollection.h"
#include "RimAnnotationInViewCollection.h"
#include "RimAnnotationTextAppearance.h"
#include "RimDockWindowController.h"
#include "RimEclipseCaseCollection.h"
#include "RimEclipseView.h"
#include "RimFlowPlotCollection.h"
Expand Down Expand Up @@ -103,7 +104,6 @@
#include "RiuGuiTheme.h"
#include "RiuMainWindow.h"
#include "RiuMainWindowTools.h"
#include "RiuMdiMaximizeWindowGuard.h"
#include "RiuMessagePanel.h"
#include "RiuPlotMainWindow.h"
#include "RiuPlotMainWindowTools.h"
Expand Down Expand Up @@ -134,7 +134,6 @@
#include <QErrorMessage>
#include <QGridLayout>
#include <QKeyEvent>
#include <QMdiSubWindow>
#include <QMessageBox>
#include <QProcessEnvironment>
#include <QPushButton>
Expand Down Expand Up @@ -229,11 +228,6 @@ RiaGuiApplication::~RiaGuiApplication()
}

processEvents();

delete m_mainWindow.data();
m_mainWindow.clear();

m_mainPlotWindow.reset();
}

//--------------------------------------------------------------------------------------------------
Expand Down Expand Up @@ -406,6 +400,52 @@ void RiaGuiApplication::storeTreeViewState()
}
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiaGuiApplication::storeDockState()
{
if ( m_mainWindow )
{
project()->mainWindowDockState = m_mainWindow->dockWidgetStateString();
}

if ( m_mainPlotWindow )
{
project()->plotWindowDockState = m_mainPlotWindow->dockWidgetStateString();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiaGuiApplication::restoreDockState()
{
if ( m_mainWindow )
{
bool useDefault = true;
if ( !project()->mainWindowDockState().isEmpty() )
{
useDefault = !m_mainWindow->restoreDockWidgetState( project()->mainWindowDockState );
}
if ( useDefault )
{
RiuDockWidgetTools::setDockLayout( m_mainWindow, RiuDockWidgetTools::dockState3DEclipseName() );
}
}
if ( m_mainPlotWindow )
{
bool useDefault = true;
if ( !project()->plotWindowDockState().isEmpty() )
{
useDefault = !m_mainPlotWindow->restoreDockWidgetState( project()->plotWindowDockState );
}
if ( useDefault )
{
RiuDockWidgetTools::setDockLayout( m_mainPlotWindow, RiuDockWidgetTools::dockStatePlotWindowName() );
}
}
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
Expand Down Expand Up @@ -447,11 +487,7 @@ RimViewWindow* RiaGuiApplication::activePlotWindow() const

if ( m_mainPlotWindow )
{
QList<QMdiSubWindow*> subwindows = m_mainPlotWindow->subWindowList( QMdiArea::StackingOrder );
if ( !subwindows.empty() )
{
viewWindow = RiuInterfaceToViewWindow::viewWindowFromWidget( subwindows.back()->widget() );
}
return m_mainPlotWindow->activePlotView();
}

return viewWindow;
Expand Down Expand Up @@ -866,14 +902,9 @@ RiaApplication::ApplicationStatus RiaGuiApplication::handleArguments( gsl::not_n
mainPlotWnd->show();
mainPlotWnd->raise();

if ( snapshotHeight > -1 && snapshotWidth > -1 )
{
RiuMainWindowTools::setWindowSizeOnWidgetsInMdiWindows( mainPlotWnd, snapshotWidth, snapshotHeight );
}

processEvents();

RicSnapshotAllPlotsToFileFeature::exportSnapshotOfPlotsIntoFolder( snapshotFolder );
RicSnapshotAllPlotsToFileFeature::exportSnapshotOfPlotsIntoFolder( snapshotFolder, snapshotWidth, snapshotHeight );
}
}

Expand All @@ -883,14 +914,9 @@ RiaApplication::ApplicationStatus RiaGuiApplication::handleArguments( gsl::not_n
mainWnd->show();
mainWnd->raise();

if ( snapshotHeight > -1 && snapshotWidth > -1 )
{
RiuMainWindowTools::setFixedWindowSizeFor3dViews( mainWnd, snapshotWidth, snapshotHeight );
}

processEvents();

RicSnapshotAllViewsToFileFeature::exportSnapshotOfViewsIntoFolder( snapshotFolder );
RicSnapshotAllViewsToFileFeature::exportSnapshotOfViewsIntoFolder( snapshotFolder, snapshotWidth, snapshotHeight );
}

auto mainPlotWnd = mainPlotWindow();
Expand Down Expand Up @@ -1078,7 +1104,7 @@ void RiaGuiApplication::createMainPlotWindow()
// Always enable undo/redo framework, as multi-select operations perform significantly better with it enabled
caf::CmdExecCommandManager::instance()->enableUndoCommandSystem( true );

m_mainPlotWindow = std::make_unique<RiuPlotMainWindow>();
m_mainPlotWindow = new RiuPlotMainWindow();
m_mainPlotWindow->setWindowTitle( "Plots - ResInsight" );
m_mainPlotWindow->setDefaultWindowSize();
m_mainPlotWindow->loadWinGeoAndDockToolBarLayout();
Expand Down Expand Up @@ -1125,9 +1151,9 @@ RiuPlotMainWindow* RiaGuiApplication::mainPlotWindow()
//--------------------------------------------------------------------------------------------------
RiuMainWindowBase* RiaGuiApplication::mainWindowByID( int mainWindowID )
{
if ( mainWindowID == 0 )
if ( mainWindowID == RimDockWindowController::MAIN_WINDOW_ID_3D )
return m_mainWindow;
else if ( mainWindowID == 1 )
else if ( mainWindowID == RimDockWindowController::MAIN_WINDOW_ID_PLOTS )
return m_mainPlotWindow.get();
else
return nullptr;
Expand All @@ -1146,15 +1172,9 @@ RimViewWindow* RiaGuiApplication::activeViewWindow()
{
viewWindow = RiaGuiApplication::instance()->activeReservoirView();
}
else if ( dynamic_cast<RiuPlotMainWindow*>( mainWindowWidget ) )
else if ( auto mainPlotWindow = dynamic_cast<RiuPlotMainWindow*>( mainWindowWidget ) )
{
RiuPlotMainWindow* mainPlotWindow = dynamic_cast<RiuPlotMainWindow*>( mainWindowWidget );

QList<QMdiSubWindow*> subwindows = mainPlotWindow->subWindowList( QMdiArea::StackingOrder );
if ( !subwindows.empty() )
{
viewWindow = RiuInterfaceToViewWindow::viewWindowFromWidget( subwindows.back()->widget() );
}
viewWindow = mainPlotWindow->activePlotView();
}

return viewWindow;
Expand Down Expand Up @@ -1315,9 +1335,6 @@ void RiaGuiApplication::onFileSuccessfullyLoaded( const QString& fileName, RiaDe
//--------------------------------------------------------------------------------------------------
void RiaGuiApplication::onProjectBeingOpened()
{
// When importing a project, do not maximize the first MDI window to be created
m_maximizeWindowGuard = std::make_unique<RiuMdiMaximizeWindowGuard>();

if ( m_mainWindow ) m_mainWindow->setBlockSubWindowActivatedSignal( true );
if ( mainPlotWindow() ) mainPlotWindow()->setBlockSubWindowActivatedSignal( true );
}
Expand Down Expand Up @@ -1376,8 +1393,6 @@ void RiaGuiApplication::onProjectOpened()

setWindowCaptionFromAppState();

m_maximizeWindowGuard.reset();

processEvents();

if ( m_mainWindow ) m_mainWindow->setBlockSubWindowActivatedSignal( false );
Expand All @@ -1391,6 +1406,8 @@ void RiaGuiApplication::onProjectOpened()
m_mainPlotWindow->raise();
m_mainPlotWindow->activateWindow();
}

restoreDockState();
}

//--------------------------------------------------------------------------------------------------
Expand Down Expand Up @@ -1432,6 +1449,7 @@ void RiaGuiApplication::onProjectBeingSaved()
{
setLastUsedDialogDirectory( "BINARY_GRID", QFileInfo( m_project->fileName() ).absolutePath() );
storeTreeViewState();
storeDockState();

if ( auto sumCaseMainColl = RiaSummaryTools::summaryCaseMainCollection() )
{
Expand Down Expand Up @@ -1817,13 +1835,30 @@ bool RiaGuiApplication::notify( QObject* receiver, QEvent* event )
if ( plot ) done = plot->handleGlobalKeyEvent( keyEvent );
}
}
else if ( event->type() == QEvent::MouseButtonPress )
{
if ( activeWindow() != mainWindow() )
{
if ( auto plotMain = mainPlotWindow() )
{
QMouseEvent* mouseEvent = static_cast<QMouseEvent*>( event );
for ( auto view : plotMain->viewWindows() )
{
RimPlotWindow* plot = dynamic_cast<RimPlotWindow*>( view );
if ( plot ) done = plot->handleGlobalMousePressEvent( mouseEvent );
}
}
}
}
else if ( event->type() == QEvent::Wheel )
{
if ( activeWindow() != mainWindow() )
{
QWheelEvent* wheelEvent = static_cast<QWheelEvent*>( event );
RimPlotWindow* plot = dynamic_cast<RimPlotWindow*>( activePlotWindow() );
if ( plot ) done = plot->handleGlobalWheelEvent( wheelEvent );
QWheelEvent* wheelEvent = static_cast<QWheelEvent*>( event );
if ( RimPlotWindow* plot = dynamic_cast<RimPlotWindow*>( activePlotWindow() ) )
{
done = plot->handleGlobalWheelEvent( wheelEvent );
}
}
}
if ( !done )
Expand Down
9 changes: 4 additions & 5 deletions ApplicationLibCode/Application/RiaGuiApplication.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ class RimWellAllocationPlot;

class RiuMainWindow;
class RiuMainWindowBase;
class RiuMdiMaximizeWindowGuard;
class RiuPlotMainWindow;
class RiuRecentFileActionProvider;
class RiaArgumentParser;
Expand Down Expand Up @@ -157,16 +156,16 @@ class RiaGuiApplication : public QApplication, public RiaApplication
void createMainPlotWindow();

void storeTreeViewState();
void storeDockState();
void restoreDockState();

private slots:
void slotWorkerProcessFinished( int exitCode, QProcess::ExitStatus exitStatus );
void onLastWindowClosed();

private:
QPointer<RiuMainWindow> m_mainWindow;
std::unique_ptr<RiuPlotMainWindow> m_mainPlotWindow;
QPointer<RiuMainWindow> m_mainWindow;
QPointer<RiuPlotMainWindow> m_mainPlotWindow;

std::unique_ptr<RiuRecentFileActionProvider> m_recentFileActionProvider;

std::unique_ptr<RiuMdiMaximizeWindowGuard> m_maximizeWindowGuard;
};
10 changes: 10 additions & 0 deletions ApplicationLibCode/Application/RiaPlotWindowRedrawScheduler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,14 @@

#include "RiaPlotWindowRedrawScheduler.h"

#include "RimViewWindow.h"

#include "RiuMultiPlotBook.h"
#include "RiuMultiPlotPage.h"
#include "RiuPlotWidget.h"

#include "DockWidget.h"

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
Expand Down Expand Up @@ -108,6 +112,12 @@ void RiaPlotWindowRedrawScheduler::performScheduledUpdates()
if ( pagesToUpdate.count( page ) > 0 ) pagesToUpdate.erase( page );
}
}

if ( auto pdmView = plotBook->ownerViewWindow() )
{
QSize s = pdmView->dockWidget()->size();
plotBook->resize( s );
}
plotBook->performUpdate( updateType );
}

Expand Down
Loading