From 28dcd47d73fb5b9eb95d264bd69b2afdb6e0b5c5 Mon Sep 17 00:00:00 2001 From: jonjenssen Date: Sun, 27 Mar 2022 20:25:03 +0200 Subject: [PATCH] Hide summary multiplot tree node if only one summary plot --- .../Summary/RimSummaryMultiPlot.cpp | 14 ++++++-- .../Summary/RimSummaryMultiPlot.h | 8 +++-- .../Summary/RimSummaryMultiPlotCollection.cpp | 33 +++++++++++++++++++ .../Summary/RimSummaryMultiPlotCollection.h | 3 ++ 4 files changed, 52 insertions(+), 6 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp index f89cfa52e4..ef9dd41c54 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp @@ -52,6 +52,7 @@ CAF_PDM_SOURCE_INIT( RimSummaryMultiPlot, "MultiSummaryPlot" ); //-------------------------------------------------------------------------------------------------- RimSummaryMultiPlot::RimSummaryMultiPlot() : duplicatePlot( this ) + , refreshTree( this ) { CAF_PDM_InitObject( "Multi Summary Plot" ); this->setDeletable( true ); @@ -101,9 +102,6 @@ void RimSummaryMultiPlot::addPlot( RimPlot* plot ) CVF_ASSERT( sumPlot != nullptr ); if ( sumPlot ) { - // Not required to connect signal here, as RimSummaryMultiPlot::insertPlot() will always be called from - // RimMultiPlot::addPlot() - RimMultiPlot::addPlot( plot ); } } @@ -119,6 +117,7 @@ void RimSummaryMultiPlot::insertPlot( RimPlot* plot, size_t index ) { sumPlot->curvesChanged.connect( this, &RimSummaryMultiPlot::onSubPlotChanged ); RimMultiPlot::insertPlot( plot, index ); + signalRefresh(); } } @@ -151,6 +150,7 @@ void RimSummaryMultiPlot::removePlot( RimPlot* plot ) if ( sumPlot ) { RimMultiPlot::removePlot( plot ); + signalRefresh(); } } @@ -535,6 +535,14 @@ void RimSummaryMultiPlot::duplicate() duplicatePlot.send( this ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryMultiPlot::signalRefresh() +{ + refreshTree.send( this ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h index b7d11d8b44..364d4b1c73 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h @@ -46,6 +46,7 @@ class RimSummaryMultiPlot : public RimMultiPlot, public RimSummaryDataSourceStep public: caf::Signal duplicatePlot; + caf::Signal refreshTree; public: RimSummaryMultiPlot(); @@ -73,11 +74,12 @@ public: void summaryPlotItemInfos( QList* optionInfos ) const; + std::vector summaryPlots() const; + protected: bool handleGlobalKeyEvent( QKeyEvent* keyEvent ) override; bool handleGlobalWheelEvent( QWheelEvent* wheelEvent ) override; - void initAfterRead() override; private: @@ -88,11 +90,11 @@ private: QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; - std::vector summaryPlots() const; - void updatePlotWindowTitle() override; void duplicate(); + void signalRefresh(); + void onSubPlotChanged( const caf::SignalEmitter* emitter ); private: diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlotCollection.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlotCollection.cpp index 8e99af0080..a1ed1abe75 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlotCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlotCollection.cpp @@ -19,10 +19,12 @@ #include "RimProject.h" #include "RimSummaryMultiPlot.h" +#include "RimSummaryPlot.h" #include "RiuPlotMainWindowTools.h" #include "cafPdmFieldReorderCapability.h" +#include "cafPdmUiTreeOrdering.h" CAF_PDM_SOURCE_INIT( RimSummaryMultiPlotCollection, "RimSummaryMultiPlotCollection" ); @@ -53,6 +55,7 @@ void RimSummaryMultiPlotCollection::initAfterRead() for ( auto& plot : m_summaryMultiPlots ) { plot->duplicatePlot.connect( this, &RimSummaryMultiPlotCollection::onDuplicatePlot ); + plot->refreshTree.connect( this, &RimSummaryMultiPlotCollection::onRefreshTree ); } } @@ -79,6 +82,7 @@ void RimSummaryMultiPlotCollection::addSummaryMultiPlot( RimSummaryMultiPlot* pl { m_summaryMultiPlots().push_back( plot ); plot->duplicatePlot.connect( this, &RimSummaryMultiPlotCollection::onDuplicatePlot ); + plot->refreshTree.connect( this, &RimSummaryMultiPlotCollection::onRefreshTree ); } //-------------------------------------------------------------------------------------------------- @@ -119,3 +123,32 @@ void RimSummaryMultiPlotCollection::onDuplicatePlot( const caf::SignalEmitter* e RiuPlotMainWindowTools::selectAsCurrentItem( plotCopy, true ); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryMultiPlotCollection::onRefreshTree( const caf::SignalEmitter* emitter, RimSummaryMultiPlot* plotRequesting ) +{ + if ( !plotRequesting ) return; + updateConnectedEditors(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryMultiPlotCollection::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, + QString uiConfigName /*= ""*/ ) +{ + for ( auto& plot : m_summaryMultiPlots() ) + { + if ( plot->summaryPlots().size() == 1 ) + { + uiTreeOrdering.add( plot->summaryPlots()[0] ); + } + else + { + uiTreeOrdering.add( plot ); + } + } + uiTreeOrdering.skipRemainingChildren( true ); +} diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlotCollection.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlotCollection.h index d0b612cfe6..81fafd2f45 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlotCollection.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlotCollection.h @@ -45,7 +45,10 @@ public: void addSummaryMultiPlot( RimSummaryMultiPlot* plot ); protected: + void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override; + void onDuplicatePlot( const caf::SignalEmitter* emitter, RimSummaryMultiPlot* plotToDuplicate ); + void onRefreshTree( const caf::SignalEmitter* emitter, RimSummaryMultiPlot* plotRequesting ); void initAfterRead() override;