diff --git a/ApplicationLibCode/Commands/Histogram/RicNewDefaultHistogramPlotFeature.cpp b/ApplicationLibCode/Commands/Histogram/RicNewDefaultHistogramPlotFeature.cpp index e73fe696a7..b40b6f2fd5 100644 --- a/ApplicationLibCode/Commands/Histogram/RicNewDefaultHistogramPlotFeature.cpp +++ b/ApplicationLibCode/Commands/Histogram/RicNewDefaultHistogramPlotFeature.cpp @@ -45,7 +45,9 @@ void RicNewDefaultHistogramPlotFeature::onActionTriggered( bool isChecked ) RimHistogramMultiPlot* multiPlot = dynamic_cast( caf::SelectionManager::instance()->selectedItem() ); if ( multiPlot ) { - RicHistogramPlotTools::addNewHistogramPlot( multiPlot ); + auto dataSourceType = caf::AppEnum::fromText( userData().toString() ); + auto plot = RicHistogramPlotTools::addNewHistogramPlot( multiPlot ); + RicHistogramPlotTools::createDefaultHistogramCurve( plot, dataSourceType ); } } diff --git a/ApplicationLibCode/Commands/Histogram/RicNewHistogramCurveFeature.cpp b/ApplicationLibCode/Commands/Histogram/RicNewHistogramCurveFeature.cpp index f31e4d5c1d..c025b7fc7c 100644 --- a/ApplicationLibCode/Commands/Histogram/RicNewHistogramCurveFeature.cpp +++ b/ApplicationLibCode/Commands/Histogram/RicNewHistogramCurveFeature.cpp @@ -52,25 +52,11 @@ bool RicNewHistogramCurveFeature::isCommandEnabled() const //-------------------------------------------------------------------------------------------------- void RicNewHistogramCurveFeature::onActionTriggered( bool isChecked ) { - auto getDataSourceFromString = []( const QString& dataSourceType ) -> RimHistogramDataSource* - { - if ( dataSourceType == "Ensemble Parameter" ) - return new RimEnsembleParameterHistogramDataSource(); - else if ( dataSourceType == "Grid Statistics" ) - return new RimGridStatisticsHistogramDataSource(); - else if ( dataSourceType == "Summary Vector" ) - return new RimEnsembleSummaryVectorHistogramDataSource(); - else if ( dataSourceType == "Ensemble Fracture Statistics" ) - return new RimEnsembleFractureHistogramDataSource(); - return nullptr; - }; - RimHistogramPlot* plot = selectedHistogramPlot(); if ( plot ) { - RimHistogramDataSource* dataSource = getDataSourceFromString( userData().toString() ); - dataSource->setDefaults(); - RicHistogramPlotTools::createHistogramCurve( plot, dataSource ); + auto dataSourceType = caf::AppEnum::fromText( userData().toString() ); + RicHistogramPlotTools::createDefaultHistogramCurve( plot, dataSourceType ); } } diff --git a/ApplicationLibCode/Commands/Histogram/RicNewHistogramMultiPlotFeature.cpp b/ApplicationLibCode/Commands/Histogram/RicNewHistogramMultiPlotFeature.cpp index bba5d04380..9d4a49c6ff 100644 --- a/ApplicationLibCode/Commands/Histogram/RicNewHistogramMultiPlotFeature.cpp +++ b/ApplicationLibCode/Commands/Histogram/RicNewHistogramMultiPlotFeature.cpp @@ -50,7 +50,10 @@ void RicNewHistogramMultiPlotFeature::onActionTriggered( bool isChecked ) if ( RimHistogramMultiPlotCollection* coll = selectedItems[0] ) { - RicHistogramPlotTools::addNewHistogramMultiplot( coll ); + auto dataSourceType = caf::AppEnum::fromText( userData().toString() ); + auto multiplot = RicHistogramPlotTools::addNewHistogramMultiplot( coll ); + auto plot = RicHistogramPlotTools::addNewHistogramPlot( multiplot ); + RicHistogramPlotTools::createDefaultHistogramCurve( plot, dataSourceType ); } } diff --git a/ApplicationLibCode/Commands/RicHistogramPlotTools.cpp b/ApplicationLibCode/Commands/RicHistogramPlotTools.cpp index dfc2568d87..a2ab87a03c 100644 --- a/ApplicationLibCode/Commands/RicHistogramPlotTools.cpp +++ b/ApplicationLibCode/Commands/RicHistogramPlotTools.cpp @@ -18,6 +18,10 @@ #include "RicHistogramPlotTools.h" +#include "Histogram/RimEnsembleFractureHistogramDataSource.h" +#include "Histogram/RimEnsembleParameterHistogramDataSource.h" +#include "Histogram/RimEnsembleSummaryVectorHistogramDataSource.h" +#include "Histogram/RimGridStatisticsHistogramDataSource.h" #include "Histogram/RimHistogramCurve.h" #include "Histogram/RimHistogramDataSource.h" #include "Histogram/RimHistogramMultiPlot.h" @@ -32,6 +36,53 @@ #include "RiuPlotMainWindow.h" #include "RiuPlotMainWindowTools.h" +namespace caf +{ +template <> +void caf::AppEnum::setUp() +{ + addItem( RicHistogramPlotTools::DataSourceType::ENSEMBLE_PARAMETER, "ENSEMBLE_PARAMETER", "Ensemble Parameter" ); + addItem( RicHistogramPlotTools::DataSourceType::GRID_STATISTICS, "GRID_STATISTICS", "Grid Statistics" ); + addItem( RicHistogramPlotTools::DataSourceType::SUMMARY_VECTOR, "SUMMARY_VECTOR", "Summary Vector" ); + addItem( RicHistogramPlotTools::DataSourceType::ENSEMBLE_FRACTURE_STATISTICS, "ENSEMBLE_FRACTURE_STATISTICS", "Ensemble Fracture Statistics" ); + setDefault( RicHistogramPlotTools::DataSourceType::SUMMARY_VECTOR ); +} +}; // namespace caf + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RicHistogramPlotTools::allDataSourceTypes() +{ + return { RicHistogramPlotTools::DataSourceType::ENSEMBLE_PARAMETER, + RicHistogramPlotTools::DataSourceType::GRID_STATISTICS, + RicHistogramPlotTools::DataSourceType::SUMMARY_VECTOR, + RicHistogramPlotTools::DataSourceType::ENSEMBLE_FRACTURE_STATISTICS }; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicHistogramPlotTools::createDefaultHistogramCurve( RimHistogramPlot* plot, RicHistogramPlotTools::DataSourceType dataSourceType ) +{ + auto getDataSourceFromType = []( DataSourceType dataSourceType ) -> RimHistogramDataSource* + { + if ( dataSourceType == DataSourceType::ENSEMBLE_PARAMETER ) + return new RimEnsembleParameterHistogramDataSource(); + else if ( dataSourceType == DataSourceType::GRID_STATISTICS ) + return new RimGridStatisticsHistogramDataSource(); + else if ( dataSourceType == DataSourceType::SUMMARY_VECTOR ) + return new RimEnsembleSummaryVectorHistogramDataSource(); + else if ( dataSourceType == DataSourceType::ENSEMBLE_FRACTURE_STATISTICS ) + return new RimEnsembleFractureHistogramDataSource(); + return nullptr; + }; + + RimHistogramDataSource* dataSource = getDataSourceFromType( dataSourceType ); + dataSource->setDefaults(); + return createHistogramCurve( plot, dataSource ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/RicHistogramPlotTools.h b/ApplicationLibCode/Commands/RicHistogramPlotTools.h index 806985d7ca..a30215c364 100644 --- a/ApplicationLibCode/Commands/RicHistogramPlotTools.h +++ b/ApplicationLibCode/Commands/RicHistogramPlotTools.h @@ -18,6 +18,8 @@ #pragma once +#include + class RimHistogramDataSource; class RimHistogramPlot; class RimHistogramMultiPlot; @@ -29,6 +31,17 @@ class RimHistogramMultiPlotCollection; class RicHistogramPlotTools { public: + enum class DataSourceType + { + ENSEMBLE_PARAMETER, + GRID_STATISTICS, + SUMMARY_VECTOR, + ENSEMBLE_FRACTURE_STATISTICS + }; + + static std::vector allDataSourceTypes(); + + static void createDefaultHistogramCurve( RimHistogramPlot* plot, DataSourceType dataSourceType ); static void createHistogramCurve( RimHistogramPlot* plot, RimHistogramDataSource* dataSource ); static RimHistogramMultiPlot* addNewHistogramMultiplot(); diff --git a/ApplicationLibCode/ProjectDataModel/Histogram/RimHistogramMultiPlotCollection.cpp b/ApplicationLibCode/ProjectDataModel/Histogram/RimHistogramMultiPlotCollection.cpp index da9b4d2d83..38172b2702 100644 --- a/ApplicationLibCode/ProjectDataModel/Histogram/RimHistogramMultiPlotCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Histogram/RimHistogramMultiPlotCollection.cpp @@ -18,6 +18,7 @@ #include "RimHistogramMultiPlotCollection.h" +#include "RicHistogramPlotTools.h" #include "RimHistogramMultiPlot.h" #include "RimMainPlotCollection.h" #include "RimProject.h" @@ -94,5 +95,12 @@ size_t RimHistogramMultiPlotCollection::plotCount() const //-------------------------------------------------------------------------------------------------- void RimHistogramMultiPlotCollection::appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const { - menuBuilder.addCmdFeature( "RicNewHistogramMultiPlotFeature", "New Histogram Plot" ); + menuBuilder.subMenuStart( "New Histogram Plot" ); + + for ( RicHistogramPlotTools::DataSourceType dataSourceType : RicHistogramPlotTools::allDataSourceTypes() ) + { + caf::AppEnum dstEnum( dataSourceType ); + menuBuilder.addCmdFeatureWithUserData( "RicNewHistogramMultiPlotFeature", dstEnum.uiText(), QVariant( dstEnum.text() ) ); + } + menuBuilder.subMenuEnd(); } diff --git a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp index 0bf60e71c2..f5873b1bb9 100644 --- a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp @@ -163,6 +163,7 @@ #include "RiuMainWindow.h" #include "OctaveScriptCommands/RicExecuteScriptForCasesFeature.h" +#include "RicHistogramPlotTools.h" #include "ToggleCommands/RicToggleItemsFeatureImpl.h" #include "cafCmdFeature.h" @@ -979,19 +980,24 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection() } else if ( dynamic_cast( firstUiItem ) ) { - menuBuilder << "RicNewDefaultHistogramPlotFeature"; + menuBuilder.subMenuStart( "New Histogram Plot" ); + + for ( RicHistogramPlotTools::DataSourceType dataSourceType : RicHistogramPlotTools::allDataSourceTypes() ) + { + caf::AppEnum dstEnum( dataSourceType ); + menuBuilder.addCmdFeatureWithUserData( "RicNewDefaultHistogramPlotFeature", dstEnum.uiText(), QVariant( dstEnum.text() ) ); + } + + menuBuilder.subMenuEnd(); } else if ( dynamic_cast( firstUiItem ) ) { menuBuilder.subMenuStart( "New Histogram Curve" ); - // TODO: make an enum of these? - std::vector curveTypes = { "Ensemble Parameter", "Grid Statistics", "Summary Vector", "Ensemble Fracture Statistics" }; - - for ( const QString& curveType : curveTypes ) + for ( RicHistogramPlotTools::DataSourceType dataSourceType : RicHistogramPlotTools::allDataSourceTypes() ) { - QString menuText = curveType; - menuBuilder.addCmdFeatureWithUserData( "RicNewHistogramCurveFeature", menuText, QVariant( curveType ) ); + caf::AppEnum dstEnum( dataSourceType ); + menuBuilder.addCmdFeatureWithUserData( "RicNewHistogramCurveFeature", dstEnum.uiText(), QVariant( dstEnum.text() ) ); } menuBuilder.subMenuEnd();