diff --git a/ApplicationCode/Commands/RicImportEnsembleFeature.cpp b/ApplicationCode/Commands/RicImportEnsembleFeature.cpp index 09e08efd58..9b15c7ad21 100644 --- a/ApplicationCode/Commands/RicImportEnsembleFeature.cpp +++ b/ApplicationCode/Commands/RicImportEnsembleFeature.cpp @@ -83,7 +83,7 @@ void RicImportEnsembleFeature::onActionTriggered( bool isChecked ) if ( ensemble ) { - RicNewSummaryEnsembleCurveSetFeature::createPlotForCurveSetAndUpdate( ensemble ); + RicNewSummaryEnsembleCurveSetFeature::createPlotForCurveSetsAndUpdate( {ensemble} ); } std::vector allCases; diff --git a/ApplicationCode/Commands/SummaryPlotCommands/RicNewSummaryEnsembleCurveSetFeature.cpp b/ApplicationCode/Commands/SummaryPlotCommands/RicNewSummaryEnsembleCurveSetFeature.cpp index 2dbbb32212..629b73004a 100644 --- a/ApplicationCode/Commands/SummaryPlotCommands/RicNewSummaryEnsembleCurveSetFeature.cpp +++ b/ApplicationCode/Commands/SummaryPlotCommands/RicNewSummaryEnsembleCurveSetFeature.cpp @@ -75,7 +75,7 @@ RimEnsembleCurveSet* RicNewSummaryEnsembleCurveSetFeature::addDefaultCurveSet( R //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RicNewSummaryEnsembleCurveSetFeature::createPlotForCurveSetAndUpdate( RimSummaryCaseCollection* ensemble ) +void RicNewSummaryEnsembleCurveSetFeature::createPlotForCurveSetsAndUpdate( std::vector ensembles ) { RiaGuiApplication* app = RiaGuiApplication::instance(); RimProject* proj = app->project(); @@ -83,14 +83,20 @@ void RicNewSummaryEnsembleCurveSetFeature::createPlotForCurveSetAndUpdate( RimSu RimSummaryPlotCollection* summaryPlotCollection = proj->mainPlotCollection->summaryPlotCollection(); RimSummaryPlot* plot = summaryPlotCollection->createSummaryPlotWithAutoTitle(); - RimEnsembleCurveSet* curveSet = RicNewSummaryEnsembleCurveSetFeature::addDefaultCurveSet( plot, ensemble ); + RimEnsembleCurveSet* firstCurveSetCreated = nullptr; + for ( RimSummaryCaseCollection* ensemble : ensembles ) + { + RimEnsembleCurveSet* curveSet = RicNewSummaryEnsembleCurveSetFeature::addDefaultCurveSet( plot, ensemble ); + if ( !firstCurveSetCreated ) firstCurveSetCreated = curveSet; + } + plot->loadDataAndUpdate(); summaryPlotCollection->updateConnectedEditors(); RiuPlotMainWindow* mainPlotWindow = app->getOrCreateAndShowMainPlotWindow(); if ( mainPlotWindow ) { - mainPlotWindow->selectAsCurrentItem( curveSet ); + mainPlotWindow->selectAsCurrentItem( firstCurveSetCreated ); mainPlotWindow->updateSummaryPlotToolBar(); } } diff --git a/ApplicationCode/Commands/SummaryPlotCommands/RicNewSummaryEnsembleCurveSetFeature.h b/ApplicationCode/Commands/SummaryPlotCommands/RicNewSummaryEnsembleCurveSetFeature.h index ca89a07d92..e79dda2370 100644 --- a/ApplicationCode/Commands/SummaryPlotCommands/RicNewSummaryEnsembleCurveSetFeature.h +++ b/ApplicationCode/Commands/SummaryPlotCommands/RicNewSummaryEnsembleCurveSetFeature.h @@ -34,7 +34,7 @@ class RicNewSummaryEnsembleCurveSetFeature : public caf::CmdFeature CAF_CMD_HEADER_INIT; public: - static void createPlotForCurveSetAndUpdate( RimSummaryCaseCollection* ensemble ); + static void createPlotForCurveSetsAndUpdate( std::vector ensembles ); protected: // Overrides diff --git a/ApplicationCode/Commands/SummaryPlotCommands/RicNewSummaryPlotFeature.cpp b/ApplicationCode/Commands/SummaryPlotCommands/RicNewSummaryPlotFeature.cpp index 81d6371426..e4fb57a145 100644 --- a/ApplicationCode/Commands/SummaryPlotCommands/RicNewSummaryPlotFeature.cpp +++ b/ApplicationCode/Commands/SummaryPlotCommands/RicNewSummaryPlotFeature.cpp @@ -23,6 +23,7 @@ #include "RiaSummaryTools.h" #include "RicEditSummaryPlotFeature.h" +#include "RicNewSummaryEnsembleCurveSetFeature.h" #include "RicSummaryCurveCreator.h" #include "RicSummaryCurveCreatorDialog.h" @@ -155,26 +156,56 @@ void RicNewSummaryPlotFeature::setupActionLook( QAction* actionToSetup ) CAF_CMD_SOURCE_INIT( RicNewDefaultSummaryPlotFeature, "RicNewDefaultSummaryPlotFeature" ); -std::pair> extractSumPlotCollectionOrSelectedSumCasesFromSelection() +void extractPlotObjectsFromSelection( std::vector* selectedIndividualSummaryCases, + std::vector* selectedEnsembles ) { - std::vector selectedSumCases; - RimSummaryPlotCollection* sumPlotColl = nullptr; + CAF_ASSERT( selectedIndividualSummaryCases && selectedEnsembles ); - std::vector selectedItems; - caf::SelectionManager::instance()->selectedItems( selectedItems ); - - if ( selectedItems.size() ) + // First try selected ensembles + caf::SelectionManager::instance()->objectsByTypeStrict( selectedEnsembles ); + if ( !selectedEnsembles->empty() ) { - caf::PdmObject* selObj = dynamic_cast( selectedItems[0] ); - sumPlotColl = RiaSummaryTools::parentSummaryPlotCollection( selObj ); + return; + } + // Second try selected summary cases + caf::SelectionManager::instance()->objectsByTypeStrict( selectedIndividualSummaryCases ); + if ( !selectedIndividualSummaryCases->empty() ) + { + return; } - if ( !sumPlotColl ) - { - caf::SelectionManager::instance()->objectsByTypeStrict( &selectedSumCases ); - } + RimSummaryPlotCollection* sumPlotColl = + caf::SelectionManager::instance()->selectedItemAncestorOfType(); - return std::make_pair( sumPlotColl, selectedSumCases ); + if ( sumPlotColl ) + { + RimSummaryCase* firstIndividualSummaryCase = nullptr; + RimSummaryCaseCollection* firstEnsemble = nullptr; + + auto sumCaseVector = RiaApplication::instance()->project()->allSummaryCases(); + for ( RimSummaryCase* summaryCase : sumCaseVector ) + { + RimSummaryCaseCollection* parentEnsemble = nullptr; + summaryCase->firstAncestorOrThisOfType( parentEnsemble ); + if ( !parentEnsemble && !firstIndividualSummaryCase ) + { + firstIndividualSummaryCase = summaryCase; + break; + } + else if ( parentEnsemble && !firstEnsemble ) + { + firstEnsemble = parentEnsemble; + } + } + if ( firstIndividualSummaryCase ) + { + selectedIndividualSummaryCases->push_back( firstIndividualSummaryCase ); + } + else if ( firstEnsemble ) + { + selectedEnsembles->push_back( firstEnsemble ); + } + } } //-------------------------------------------------------------------------------------------------- @@ -182,9 +213,12 @@ std::pair> extractSumPlo //-------------------------------------------------------------------------------------------------- bool RicNewDefaultSummaryPlotFeature::isCommandEnabled() { - auto sumPlotSumCasesPair = extractSumPlotCollectionOrSelectedSumCasesFromSelection(); + std::vector selectedIndividualSummaryCases; + std::vector selectedEnsembles; - return sumPlotSumCasesPair.first || sumPlotSumCasesPair.second.size(); + extractPlotObjectsFromSelection( &selectedIndividualSummaryCases, &selectedEnsembles ); + + return !( selectedIndividualSummaryCases.empty() && selectedEnsembles.empty() ); } //-------------------------------------------------------------------------------------------------- @@ -192,31 +226,17 @@ bool RicNewDefaultSummaryPlotFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicNewDefaultSummaryPlotFeature::onActionTriggered( bool isChecked ) { - auto sumPlotSumCasesPair = extractSumPlotCollectionOrSelectedSumCasesFromSelection(); + std::vector selectedIndividualSummaryCases; + std::vector selectedEnsembles; + extractPlotObjectsFromSelection( &selectedIndividualSummaryCases, &selectedEnsembles ); - std::vector summaryCasesToUse; - - if ( sumPlotSumCasesPair.first ) - { - auto sumCaseVector = RiaApplication::instance()->project()->allSummaryCases(); - - if ( sumCaseVector.size() ) - { - summaryCasesToUse.push_back( sumCaseVector[0] ); - } - } - else if ( sumPlotSumCasesPair.second.size() ) - { - summaryCasesToUse = sumPlotSumCasesPair.second; - } - - if ( summaryCasesToUse.size() ) + if ( !selectedIndividualSummaryCases.empty() ) { RimSummaryPlotCollection* sumPlotColl = RiaApplication::instance()->project()->mainPlotCollection()->summaryPlotCollection(); RimSummaryPlot* newPlot = sumPlotColl->createSummaryPlotWithAutoTitle(); - for ( RimSummaryCase* sumCase : summaryCasesToUse ) + for ( RimSummaryCase* sumCase : selectedIndividualSummaryCases ) { RicSummaryPlotFeatureImpl::addDefaultCurvesToPlot( newPlot, sumCase ); } @@ -229,6 +249,11 @@ void RicNewDefaultSummaryPlotFeature::onActionTriggered( bool isChecked ) RiuPlotMainWindowTools::setExpanded( newPlot ); RiuPlotMainWindowTools::selectAsCurrentItem( newPlot ); } + else + { + CAF_ASSERT( !selectedEnsembles.empty() ); + RicNewSummaryEnsembleCurveSetFeature::createPlotForCurveSetsAndUpdate( selectedEnsembles ); + } } //-------------------------------------------------------------------------------------------------- @@ -236,6 +261,18 @@ void RicNewDefaultSummaryPlotFeature::onActionTriggered( bool isChecked ) //-------------------------------------------------------------------------------------------------- void RicNewDefaultSummaryPlotFeature::setupActionLook( QAction* actionToSetup ) { - actionToSetup->setText( "New Summary Plot" ); + std::vector selectedIndividualSummaryCases; + std::vector selectedEnsembles; + + extractPlotObjectsFromSelection( &selectedIndividualSummaryCases, &selectedEnsembles ); + + if ( !selectedIndividualSummaryCases.empty() ) + { + actionToSetup->setText( "New Summary Plot" ); + } + else + { + actionToSetup->setText( "New Ensemble Summary Plot" ); + } actionToSetup->setIcon( QIcon( ":/SummaryPlotLight16x16.png" ) ); }