mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-26 07:00:17 -05:00
Create a menu for each ensemble in the plot
Create a QVariant using caf::PdmPointer, and send this variant to the feature. The feature converts the QVariant to an ensemble curve set. Make sure the right-click menu in the summary plot shows the Create from filtered cases independent to the selection in project tree.
This commit is contained in:
1 parent
a93d717e1c
commit
9b613ba4f0
3 files changed
+42
-3
No files matched your search
+27
-1
@@ -30,6 +30,7 @@
|
||||
#include "RimSummaryCase.h"
|
||||
#include "RimSummaryEnsemble.h"
|
||||
|
||||
#include "cafPdmPointer.h"
|
||||
#include "cafSelectionManager.h"
|
||||
#include "cafSelectionManagerTools.h"
|
||||
|
||||
@@ -54,7 +55,17 @@ RimParameterResultCrossPlot* selectedCrossPlot()
|
||||
|
||||
RimEnsembleCurveSet* ensembleCurveSet()
|
||||
{
|
||||
return caf::firstAncestorOfTypeFromSelectedObject<RimEnsembleCurveSet>();
|
||||
auto ancestor = caf::firstAncestorOfTypeFromSelectedObject<RimEnsembleCurveSet>();
|
||||
if ( ancestor != nullptr ) return ancestor;
|
||||
|
||||
auto selectedObject = caf::SelectionManager::instance()->selectedItemOfType<caf::PdmObject>();
|
||||
if ( selectedObject != nullptr )
|
||||
{
|
||||
auto ensembleCurveSet = selectedObject->descendantsIncludingThisOfType<RimEnsembleCurveSet>();
|
||||
if ( !ensembleCurveSet.empty() ) return ensembleCurveSet.front();
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
} // namespace internal
|
||||
|
||||
@@ -92,6 +103,21 @@ void RicCreateEnsembleFromFilteredCasesFeature::onActionTriggered( bool isChecke
|
||||
}
|
||||
}
|
||||
|
||||
if ( casesForNewEnsemble.empty() )
|
||||
{
|
||||
QVariant userData = this->userData();
|
||||
if ( !userData.isNull() && userData.canConvert<caf::PdmPointer<RimEnsembleCurveSet>>() )
|
||||
{
|
||||
if ( auto ensembleCurveSet = userData.value<caf::PdmPointer<RimEnsembleCurveSet>>() )
|
||||
{
|
||||
if ( auto ensemble = ensembleCurveSet->summaryEnsemble() )
|
||||
{
|
||||
casesForNewEnsemble = ensembleCurveSet->filterEnsembleCases( ensemble->allSummaryCases() );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( casesForNewEnsemble.empty() )
|
||||
{
|
||||
if ( auto curveSet = internal::ensembleCurveSet() )
|
||||
|
||||
@@ -328,7 +328,11 @@ void RimEnsembleCurveSetCollection::onChildDeleted( caf::PdmChildArrayFieldHandl
|
||||
std::vector<caf::PdmObjectHandle*>& referringObjects )
|
||||
{
|
||||
auto plot = firstAncestorOrThisOfType<RimSummaryPlot>();
|
||||
if ( plot ) plot->updateConnectedEditors();
|
||||
if ( plot )
|
||||
{
|
||||
plot->updateConnectedEditors();
|
||||
plot->updateAndRedrawTimeAnnotations();
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -72,7 +72,16 @@ void RiuSummaryPlot::showContextMenu( QPoint pos )
|
||||
menuBuilder.addSeparator();
|
||||
menuBuilder.addCmdFeatureWithUserData( "RicDeleteSubPlotCtxFeature", "Delete Plot", plotVariant );
|
||||
menuBuilder.addSeparator();
|
||||
menuBuilder.addCmdFeature( "RicCreateEnsembleFromFilteredCasesFeature" );
|
||||
|
||||
for ( auto curveSet : plot->curveSets() )
|
||||
{
|
||||
if ( curveSet->isFiltered() )
|
||||
{
|
||||
auto curveSetVariant = QVariant::fromValue( caf::PdmPointer<RimEnsembleCurveSet>( curveSet ) );
|
||||
auto name = "Create Ensemble from Filtered Cases: " + curveSet->name();
|
||||
menuBuilder.addCmdFeatureWithUserData( "RicCreateEnsembleFromFilteredCasesFeature", name, curveSetVariant );
|
||||
}
|
||||
}
|
||||
}
|
||||
menuBuilder.addSeparator();
|
||||
|
||||
|
||||
Reference in new issue
Block a user