Clean up delete 3d views and project close/open

Update to latest qtadv docking
This commit is contained in:
Jon Jenssen authored and JJ committed 2026-06-17 13:55:32 +02:00
1 parent 52df6fd283
commit 255576d53d
7 files changed
+45 -20

No files matched your search

@@ -420,14 +420,29 @@ void RiaGuiApplication::storeDockState()
//--------------------------------------------------------------------------------------------------
void RiaGuiApplication::restoreDockState()
{
if ( m_mainWindow && !project()->mainWindowDockState().isEmpty() )
if ( m_mainWindow )
{
m_mainWindow->restoreDockWidgetState( project()->mainWindowDockState );
bool useDefault = true;
if ( !project()->mainWindowDockState().isEmpty() )
{
useDefault = !m_mainWindow->restoreDockWidgetState( project()->mainWindowDockState );
}
if ( useDefault )
{
RiuDockWidgetTools::setDockLayout( m_mainWindow, RiuDockWidgetTools::dockState3DEclipseName() );
}
}
if ( m_mainPlotWindow && !project()->plotWindowDockState().isEmpty() )
if ( m_mainPlotWindow )
{
m_mainPlotWindow->restoreDockWidgetState( project()->plotWindowDockState );
bool useDefault = true;
if ( !project()->plotWindowDockState().isEmpty() )
{
useDefault = !m_mainPlotWindow->restoreDockWidgetState( project()->plotWindowDockState );
}
if ( useDefault )
{
RiuDockWidgetTools::setDockLayout( m_mainPlotWindow, RiuDockWidgetTools::dockStatePlotWindowName() );
}
}
}
@@ -206,6 +206,8 @@ Rim3dView::~Rim3dView()
RiaApplication::instance()->setActiveReservoirView( nullptr );
}
removeWindowFromDock();
if ( m_viewer )
{
m_viewer->clearRimView();
@@ -214,8 +216,6 @@ Rim3dView::~Rim3dView()
// Make sure the object is disconnected from other objects before delete
prepareForDelete();
removeWindowFromDock();
if ( m_viewer )
{
m_viewer->deleteLater();
@@ -463,9 +463,12 @@ void Rim3dView::deleteViewWidget()
// Earlier implementations has used m_viewer->deleteLater(). This caused issues triggered by 3D editors and
// interaction with the event processing. deleteLater() will not be handled by processEvents() if we are in the
// state of processing UI events, ie in the process of handling a QAction
delete m_viewer;
m_viewer = nullptr;
if ( m_viewer )
{
m_viewer->setParent( nullptr );
delete m_viewer;
m_viewer = nullptr;
}
}
//--------------------------------------------------------------------------------------------------
@@ -497,6 +500,8 @@ void Rim3dView::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOr
m_annotationCountHint.uiCapability()->setUiReadOnly(
!m_useCustomAnnotationStrategy || ( m_annotationStrategy() != RivAnnotationTools::LabelPositionStrategy::COUNT_HINT ) );
uiOrdering.add( &m_dockWindowId );
uiOrdering.skipRemainingFields( true );
}
@@ -62,7 +62,6 @@ void RimDockWindowController::handleViewerDeletion()
viewPdmObject()->updateUiIconFromToggleField();
uiCapability()->updateUiIconFromToggleField();
removeWindowFromDock();
updateConnectedEditors();
}
@@ -72,7 +71,7 @@ void RimDockWindowController::handleViewerDeletion()
void RimDockWindowController::removeWindowFromDock()
{
RiuMainWindowBase* mainWin = getMainWindow();
if ( mainWin && viewWidget() && viewPdmObject() )
if ( mainWin && viewPdmObject() )
{
viewPdmObject()->deleteDockWidget();
viewPdmObject()->deleteViewWidget();
@@ -124,7 +123,7 @@ void RimDockWindowController::updateViewerWidget()
if ( !viewWidget() )
{
ads::CDockWidget* dockWidget = viewPdmObject()->createDockWidget();
QWidget* viewWidget = viewPdmObject()->createViewWidget( dockWidget );
QWidget* viewWidget = viewPdmObject()->createViewWidget();
dockWidget->setWidget( viewWidget );
dockWidget->setObjectName( viewPdmObject()->dockWindowName() );
viewWidget->setObjectName( viewPdmObject()->dockWindowName() );
@@ -140,9 +139,9 @@ void RimDockWindowController::updateViewerWidget()
}
else
{
viewPdmObject()->deleteDockWidget();
if ( viewWidget() )
{
viewPdmObject()->deleteDockWidget();
viewPdmObject()->deleteViewWidget();
mainWindow->onViewerRemoved();
}
@@ -34,6 +34,7 @@
#include "cafPdmUiTreeAttributes.h"
#include "cafPdmUiTreeViewEditor.h"
#include "DockManager.h"
#include "DockWidget.h"
#include <QDebug>
@@ -68,6 +69,7 @@ RimViewWindow::RimViewWindow()
//--------------------------------------------------------------------------------------------------
RimViewWindow::~RimViewWindow()
{
if ( m_windowController ) delete m_windowController;
}
//--------------------------------------------------------------------------------------------------
@@ -158,8 +160,12 @@ QString RimViewWindow::windowTitle()
//--------------------------------------------------------------------------------------------------
void RimViewWindow::deleteDockWidget()
{
m_dockWidget->deleteDockWidget();
m_dockWidget = nullptr;
if ( m_dockWidget && m_dockWidget->dockManager() )
{
m_dockWidget->dockManager()->removeDockWidget( m_dockWidget );
m_dockWidget->deleteLater();
m_dockWidget = nullptr;
}
}
//--------------------------------------------------------------------------------------------------
@@ -128,10 +128,10 @@ QString RiuMainWindowBase::dockWidgetStateString() const
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuMainWindowBase::restoreDockWidgetState( QString dockStateString )
bool RiuMainWindowBase::restoreDockWidgetState( QString dockStateString )
{
QByteArray dockState = QByteArray::fromBase64( dockStateString.toLatin1() );
m_dockManager->restoreState( dockState, DOCKSTATE_VERSION );
return m_dockManager->restoreState( dockState, DOCKSTATE_VERSION );
}
//--------------------------------------------------------------------------------------------------
@@ -94,7 +94,7 @@ public:
ads::CDockManager* dockManager() const;
QString dockWidgetStateString() const;
void restoreDockWidgetState( QString dockStateString );
bool restoreDockWidgetState( QString dockStateString );
protected:
void createTreeViews( int numberOfTrees );