Skip to content

Commit ae037a2

Browse files
committed
Clean up delete 3d views and project close/open
Update to latest qtadv docking
1 parent 0444b20 commit ae037a2

7 files changed

Lines changed: 45 additions & 20 deletions

File tree

ApplicationLibCode/Application/RiaGuiApplication.cpp

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -420,14 +420,29 @@ void RiaGuiApplication::storeDockState()
420420
//--------------------------------------------------------------------------------------------------
421421
void RiaGuiApplication::restoreDockState()
422422
{
423-
if ( m_mainWindow && !project()->mainWindowDockState().isEmpty() )
423+
if ( m_mainWindow )
424424
{
425-
m_mainWindow->restoreDockWidgetState( project()->mainWindowDockState );
425+
bool useDefault = true;
426+
if ( !project()->mainWindowDockState().isEmpty() )
427+
{
428+
useDefault = !m_mainWindow->restoreDockWidgetState( project()->mainWindowDockState );
429+
}
430+
if ( useDefault )
431+
{
432+
RiuDockWidgetTools::setDockLayout( m_mainWindow, RiuDockWidgetTools::dockState3DEclipseName() );
433+
}
426434
}
427-
428-
if ( m_mainPlotWindow && !project()->plotWindowDockState().isEmpty() )
435+
if ( m_mainPlotWindow )
429436
{
430-
m_mainPlotWindow->restoreDockWidgetState( project()->plotWindowDockState );
437+
bool useDefault = true;
438+
if ( !project()->plotWindowDockState().isEmpty() )
439+
{
440+
useDefault = !m_mainPlotWindow->restoreDockWidgetState( project()->plotWindowDockState );
441+
}
442+
if ( useDefault )
443+
{
444+
RiuDockWidgetTools::setDockLayout( m_mainPlotWindow, RiuDockWidgetTools::dockStatePlotWindowName() );
445+
}
431446
}
432447
}
433448

ApplicationLibCode/ProjectDataModel/Rim3dView.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,8 @@ Rim3dView::~Rim3dView()
206206
RiaApplication::instance()->setActiveReservoirView( nullptr );
207207
}
208208

209+
removeWindowFromDock();
210+
209211
if ( m_viewer )
210212
{
211213
m_viewer->clearRimView();
@@ -214,8 +216,6 @@ Rim3dView::~Rim3dView()
214216
// Make sure the object is disconnected from other objects before delete
215217
prepareForDelete();
216218

217-
removeWindowFromDock();
218-
219219
if ( m_viewer )
220220
{
221221
m_viewer->deleteLater();
@@ -463,9 +463,12 @@ void Rim3dView::deleteViewWidget()
463463
// Earlier implementations has used m_viewer->deleteLater(). This caused issues triggered by 3D editors and
464464
// interaction with the event processing. deleteLater() will not be handled by processEvents() if we are in the
465465
// state of processing UI events, ie in the process of handling a QAction
466-
467-
delete m_viewer;
468-
m_viewer = nullptr;
466+
if ( m_viewer )
467+
{
468+
m_viewer->setParent( nullptr );
469+
delete m_viewer;
470+
m_viewer = nullptr;
471+
}
469472
}
470473

471474
//--------------------------------------------------------------------------------------------------
@@ -497,6 +500,8 @@ void Rim3dView::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOr
497500
m_annotationCountHint.uiCapability()->setUiReadOnly(
498501
!m_useCustomAnnotationStrategy || ( m_annotationStrategy() != RivAnnotationTools::LabelPositionStrategy::COUNT_HINT ) );
499502

503+
uiOrdering.add( &m_dockWindowId );
504+
500505
uiOrdering.skipRemainingFields( true );
501506
}
502507

ApplicationLibCode/ProjectDataModel/RimDockWindowController.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ void RimDockWindowController::handleViewerDeletion()
6262
viewPdmObject()->updateUiIconFromToggleField();
6363
uiCapability()->updateUiIconFromToggleField();
6464
removeWindowFromDock();
65-
6665
updateConnectedEditors();
6766
}
6867

@@ -72,7 +71,7 @@ void RimDockWindowController::handleViewerDeletion()
7271
void RimDockWindowController::removeWindowFromDock()
7372
{
7473
RiuMainWindowBase* mainWin = getMainWindow();
75-
if ( mainWin && viewWidget() && viewPdmObject() )
74+
if ( mainWin && viewPdmObject() )
7675
{
7776
viewPdmObject()->deleteDockWidget();
7877
viewPdmObject()->deleteViewWidget();
@@ -124,7 +123,7 @@ void RimDockWindowController::updateViewerWidget()
124123
if ( !viewWidget() )
125124
{
126125
ads::CDockWidget* dockWidget = viewPdmObject()->createDockWidget();
127-
QWidget* viewWidget = viewPdmObject()->createViewWidget( dockWidget );
126+
QWidget* viewWidget = viewPdmObject()->createViewWidget();
128127
dockWidget->setWidget( viewWidget );
129128
dockWidget->setObjectName( viewPdmObject()->dockWindowName() );
130129
viewWidget->setObjectName( viewPdmObject()->dockWindowName() );
@@ -140,9 +139,9 @@ void RimDockWindowController::updateViewerWidget()
140139
}
141140
else
142141
{
142+
viewPdmObject()->deleteDockWidget();
143143
if ( viewWidget() )
144144
{
145-
viewPdmObject()->deleteDockWidget();
146145
viewPdmObject()->deleteViewWidget();
147146
mainWindow->onViewerRemoved();
148147
}

ApplicationLibCode/ProjectDataModel/RimViewWindow.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include "cafPdmUiTreeAttributes.h"
3535
#include "cafPdmUiTreeViewEditor.h"
3636

37+
#include "DockManager.h"
3738
#include "DockWidget.h"
3839

3940
#include <QDebug>
@@ -68,6 +69,7 @@ RimViewWindow::RimViewWindow()
6869
//--------------------------------------------------------------------------------------------------
6970
RimViewWindow::~RimViewWindow()
7071
{
72+
if ( m_windowController ) delete m_windowController;
7173
}
7274

7375
//--------------------------------------------------------------------------------------------------
@@ -158,8 +160,12 @@ QString RimViewWindow::windowTitle()
158160
//--------------------------------------------------------------------------------------------------
159161
void RimViewWindow::deleteDockWidget()
160162
{
161-
m_dockWidget->deleteDockWidget();
162-
m_dockWidget = nullptr;
163+
if ( m_dockWidget && m_dockWidget->dockManager() )
164+
{
165+
m_dockWidget->dockManager()->removeDockWidget( m_dockWidget );
166+
m_dockWidget->deleteLater();
167+
m_dockWidget = nullptr;
168+
}
163169
}
164170

165171
//--------------------------------------------------------------------------------------------------

ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,10 @@ QString RiuMainWindowBase::dockWidgetStateString() const
128128
//--------------------------------------------------------------------------------------------------
129129
///
130130
//--------------------------------------------------------------------------------------------------
131-
void RiuMainWindowBase::restoreDockWidgetState( QString dockStateString )
131+
bool RiuMainWindowBase::restoreDockWidgetState( QString dockStateString )
132132
{
133133
QByteArray dockState = QByteArray::fromBase64( dockStateString.toLatin1() );
134-
m_dockManager->restoreState( dockState, DOCKSTATE_VERSION );
134+
return m_dockManager->restoreState( dockState, DOCKSTATE_VERSION );
135135
}
136136

137137
//--------------------------------------------------------------------------------------------------

ApplicationLibCode/UserInterface/RiuMainWindowBase.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ class RiuMainWindowBase : public QMainWindow
9494
ads::CDockManager* dockManager() const;
9595

9696
QString dockWidgetStateString() const;
97-
void restoreDockWidgetState( QString dockStateString );
97+
bool restoreDockWidgetState( QString dockStateString );
9898

9999
protected:
100100
void createTreeViews( int numberOfTrees );

0 commit comments

Comments
 (0)