Maintenance october

* Hide contour plot collection when empty
* Update the project tree when a linked view is removed
* Make sure the window title is in sync with link state
* Do not use link state to find window tile ordering
This commit is contained in:
Magne Sjaastad
2022-10-31 10:41:50 +01:00
committed by GitHub
parent ed8fa08b13
commit 9b61ebcac2
11 changed files with 95 additions and 48 deletions

View File

@@ -58,7 +58,7 @@ public:
//--------------------------------------------------------------------------------------------------
bool RicDeleteAllLinkedViewsFeature::isCommandEnabled()
{
return caf::SelectionManager::instance()->selectedItemAncestorOfType<RimViewLinkerCollection>() != nullptr;
return caf::SelectionManager::instance()->selectedItemOfType<RimViewLinker>() != nullptr;
}
//--------------------------------------------------------------------------------------------------
@@ -66,7 +66,21 @@ bool RicDeleteAllLinkedViewsFeature::isCommandEnabled()
//--------------------------------------------------------------------------------------------------
void RicDeleteAllLinkedViewsFeature::onActionTriggered( bool isChecked )
{
DeleteAllLinkedViewsImpl::execute();
RimProject* proj = RimProject::current();
RimViewLinker* viewLinker = proj->viewLinkerCollection()->viewLinker();
if ( viewLinker )
{
// Remove the view linker object from the view linker collection
// viewLinkerCollection->viewLinker is a PdmChildField containing one RimViewLinker child object
proj->viewLinkerCollection->viewLinker.removeChild( viewLinker );
viewLinker->applyCellFilterCollectionByUserChoice();
delete viewLinker;
proj->uiCapability()->updateConnectedEditors();
}
}
//--------------------------------------------------------------------------------------------------
@@ -76,4 +90,5 @@ void RicDeleteAllLinkedViewsFeature::setupActionLook( QAction* actionToSetup )
{
actionToSetup->setText( "Unlink All Views" );
actionToSetup->setIcon( QIcon( ":/UnLinkView.svg" ) );
actionToSetup->setShortcut( Qt::Key_Delete );
}

View File

@@ -379,8 +379,18 @@ void Rim3dView::updateMdiWindowTitle()
{
if ( m_viewer )
{
m_viewer->layoutWidget()->setWindowTitle(
autoName() + ( isMasterView() ? " (Primary)" : viewController() ? " (Controlled)" : "" ) );
auto title = autoName();
if ( isMasterView() && assosiatedViewLinker() && assosiatedViewLinker()->isActive() )
{
title += " (Primary)";
}
else if ( viewController() && viewController()->isActive() )
{
title += " (Controlled)";
}
m_viewer->layoutWidget()->setWindowTitle( title );
}
}

View File

@@ -178,6 +178,7 @@ public:
Rim3dView* activeComparisonView() const;
void setComparisonView( Rim3dView* compView );
std::set<Rim3dView*> viewsUsingThisAsComparisonView();
void updateMdiWindowTitle() override;
protected:
static void removeModelByName( cvf::Scene* scene, const cvf::String& modelName );
@@ -263,7 +264,6 @@ private:
void setId( int id );
void assignIdIfNecessary() final;
void updateMdiWindowTitle() override;
void deleteViewWidget() override;
QWidget* viewWidget() override;

View File

@@ -1,6 +1,6 @@
#include "RimEclipseContourMapViewCollection.h"
#include "RimCase.h"
#include "RimEclipseCase.h"
#include "RimEclipseContourMapView.h"
CAF_PDM_SOURCE_INIT( RimEclipseContourMapViewCollection, "Eclipse2dViewCollection" );
@@ -38,3 +38,14 @@ void RimEclipseContourMapViewCollection::push_back( RimEclipseContourMapView* co
{
m_contourMapViews.push_back( contourMap );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEclipseContourMapViewCollection::onChildDeleted( caf::PdmChildArrayFieldHandle* childArray,
std::vector<caf::PdmObjectHandle*>& referringObjects )
{
RimEclipseCase* eclipseCase = nullptr;
this->firstAncestorOrThisOfType( eclipseCase );
if ( eclipseCase ) eclipseCase->updateConnectedEditors();
}

View File

@@ -35,6 +35,9 @@ public:
std::vector<RimEclipseContourMapView*> views();
void push_back( RimEclipseContourMapView* contourMap );
void onChildDeleted( caf::PdmChildArrayFieldHandle* childArray,
std::vector<caf::PdmObjectHandle*>& referringObjects ) override;
private:
caf::PdmChildArrayField<RimEclipseContourMapView*> m_contourMapViews;
};

View File

@@ -172,6 +172,8 @@ void RimViewController::fieldChangedByUi( const caf::PdmFieldHandle* changedFiel
updateCameraLink();
updateDisplayNameAndIcon();
updateTimeStepLink();
if ( m_managedView ) m_managedView->updateMdiWindowTitle();
}
else if ( changedField == &m_syncCamera )
{

View File

@@ -56,25 +56,24 @@ CAF_PDM_SOURCE_INIT( RimViewLinker, "ViewLinker" );
//--------------------------------------------------------------------------------------------------
RimViewLinker::RimViewLinker()
{
// clang-format off
CAF_PDM_InitObject("Linked Views");
CAF_PDM_InitObject( "Linked Views" );
CAF_PDM_InitField(&m_name, "Name", QString("View Group Name"), "View Group Name");
m_name.uiCapability()->setUiHidden(true);
CAF_PDM_InitField( &m_name, "Name", QString( "View Group Name" ), "View Group Name" );
m_name.uiCapability()->setUiHidden( true );
CAF_PDM_InitFieldNoDefault(&m_masterView, "MainView", "Main View");
m_masterView.uiCapability()->setUiTreeChildrenHidden(true);
m_masterView.uiCapability()->setUiTreeHidden(true);
m_masterView.uiCapability()->setUiHidden(true);
CAF_PDM_InitFieldNoDefault( &m_masterView, "MainView", "Main View" );
m_masterView.uiCapability()->setUiTreeChildrenHidden( true );
m_masterView.uiCapability()->setUiTreeHidden( true );
m_masterView.uiCapability()->setUiHidden( true );
CAF_PDM_InitFieldNoDefault(&m_viewControllers, "ManagedViews", "Managed Views");
m_viewControllers.uiCapability()->setUiTreeHidden(true);
m_viewControllers.uiCapability()->setUiTreeChildrenHidden(true);
CAF_PDM_InitFieldNoDefault( &m_viewControllers, "ManagedViews", "Managed Views" );
m_viewControllers.uiCapability()->setUiTreeHidden( true );
m_viewControllers.uiCapability()->setUiTreeChildrenHidden( true );
CAF_PDM_InitFieldNoDefault(&m_comparisonView, "LinkedComparisonView", "Comparison View");
CAF_PDM_InitFieldNoDefault( &m_comparisonView, "LinkedComparisonView", "Comparison View" );
m_comparisonView.xmlCapability()->disableIO();
// clang-format on
setDeletable( true );
}
//--------------------------------------------------------------------------------------------------
@@ -234,6 +233,22 @@ void RimViewLinker::updateOverrides()
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewLinker::updateWindowTitles()
{
if ( m_masterView ) m_masterView->updateMdiWindowTitle();
for ( RimViewController* viewLink : m_viewControllers )
{
if ( auto view = viewLink->managedView() )
{
view->updateMdiWindowTitle();
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -511,6 +526,17 @@ void RimViewLinker::notifyManagedViewChange( RimGridView* oldManagedView, RimGri
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewLinker::onChildDeleted( caf::PdmChildArrayFieldHandle* childArray,
std::vector<caf::PdmObjectHandle*>& referringObjects )
{
RimViewLinkerCollection* viewLinkerCollection = nullptr;
this->firstAncestorOrThisOfType( viewLinkerCollection );
if ( viewLinkerCollection ) viewLinkerCollection->updateConnectedEditors();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -67,6 +67,7 @@ public:
RimGridView* firstControlledView();
void updateOverrides();
void updateWindowTitles();
void updateCamera( RimGridView* sourceView );
void updateTimeStep( RimGridView* sourceView, int timeStep );
@@ -103,6 +104,8 @@ protected:
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override;
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void onChildDeleted( caf::PdmChildArrayFieldHandle* childArray,
std::vector<caf::PdmObjectHandle*>& referringObjects ) override;
private:
static QString displayNameForView( RimGridView* view );

View File

@@ -80,6 +80,7 @@ void RimViewLinkerCollection::fieldChangedByUi( const caf::PdmFieldHandle* chang
}
viewLinker()->updateDependentViews();
viewLinker()->updateWindowTitles();
}
}

View File

@@ -84,6 +84,8 @@ public:
void viewNavigationChanged();
virtual void updateMdiWindowTitle();
protected:
void removeMdiWindowFromMdiArea();
@@ -93,7 +95,6 @@ protected:
QString windowTitle();
virtual QWidget* createViewWidget( QWidget* mainWindowParent = nullptr ) = 0;
virtual void updateViewWidgetAfterCreation(){};
virtual void updateMdiWindowTitle(); // Has real default implementation
virtual void deleteViewWidget() = 0;
virtual void onLoadDataAndUpdate() = 0;
virtual void onViewNavigationChanged();

View File

@@ -1967,34 +1967,9 @@ void RiuMainWindow::tileSubWindows()
windowList.push_back( subWindow );
}
// Get the active view linker if there is one
RimProject* proj = RimProject::current();
RimViewLinkerCollection* viewLinkerCollection = proj->viewLinkerCollection();
RimViewLinker* viewLinker = nullptr;
if ( viewLinkerCollection && viewLinkerCollection->isActive() )
{
viewLinker = viewLinkerCollection->viewLinker();
}
// Perform stable sort of list so we first sort by window position but retain activation order
// for windows with the same position.
windowList.sort( [this, viewLinker]( QMdiSubWindow* lhs, QMdiSubWindow* rhs ) {
RimViewWindow* lhsViewWindow = findViewWindowFromSubWindow( lhs );
RimViewWindow* rhsViewWindow = findViewWindowFromSubWindow( rhs );
RimGridView* lhsGridView = dynamic_cast<RimGridView*>( lhsViewWindow );
RimGridView* rhsGridView = dynamic_cast<RimGridView*>( rhsViewWindow );
if ( viewLinker )
{
if ( viewLinker->isFirstViewDependentOnSecondView( lhsGridView, rhsGridView ) )
{
return true;
}
else if ( viewLinker->isFirstViewDependentOnSecondView( rhsGridView, lhsGridView ) )
{
return false;
}
}
windowList.sort( [this]( QMdiSubWindow* lhs, QMdiSubWindow* rhs ) {
if ( lhs->frameGeometry().topLeft().ry() == rhs->frameGeometry().topLeft().ry() )
{
return lhs->frameGeometry().topLeft().rx() < rhs->frameGeometry().topLeft().rx();
@@ -2007,7 +1982,7 @@ void RiuMainWindow::tileSubWindows()
bool prevActivationBlock = isBlockingSubWindowActivatedSignal();
QMdiSubWindow* a = m_mdiArea->activeSubWindow();
QMdiSubWindow* activeWindow = m_mdiArea->activeSubWindow();
// Force activation order so they end up in the order of the loop.
m_mdiArea->setActivationOrder( QMdiArea::ActivationHistoryOrder );
@@ -2023,7 +1998,7 @@ void RiuMainWindow::tileSubWindows()
m_mdiArea->tileSubWindows();
// Set back the original activation order to avoid messing with the standard ordering
m_mdiArea->setActivationOrder( currentActivationOrder );
m_mdiArea->setActiveSubWindow( a );
m_mdiArea->setActiveSubWindow( activeWindow );
setBlockSubWindowActivatedSignal( prevActivationBlock );
storeSubWindowTiling( true );