SUMO: Improve user interface

- set fields read only
- make sure custom case name is used in other UI items
- use two buttons to create data source and ensemble for selected cloud ensembles
This commit is contained in:
Magne Sjaastad 2024-09-12 13:40:50 +02:00
parent a4159cd11e
commit d8b8c86b8f
3 changed files with 73 additions and 23 deletions

View File

@ -19,12 +19,10 @@
#include "RicCreateSumoEnsembleFeature.h"
#include "RiaDefines.h"
#include "RiaSummaryTools.h"
#include "PlotBuilderCommands/RicSummaryPlotBuilder.h"
#include "RimSummaryCaseMainCollection.h"
#include "Sumo/RimSummaryEnsembleSumo.h"
#include "Cloud/RimCloudDataSourceCollection.h"
#include "Sumo/RimSummarySumoDataSource.h"
#include "cafSelectionManagerTools.h"
@ -39,18 +37,8 @@ CAF_CMD_SOURCE_INIT( RicCreateSumoEnsembleFeature, "RicCreateSumoEnsembleFeature
void RicCreateSumoEnsembleFeature::onActionTriggered( bool isChecked )
{
auto dataSources = caf::selectedObjectsByType<RimSummarySumoDataSource*>();
for ( auto dataSource : dataSources )
{
RimSummaryEnsembleSumo* ensemble = new RimSummaryEnsembleSumo();
ensemble->setSumoDataSource( dataSource );
ensemble->updateName();
RiaSummaryTools::summaryCaseMainCollection()->addEnsemble( ensemble );
ensemble->loadDataAndUpdate();
RicSummaryPlotBuilder::createAndAppendDefaultSummaryMultiPlot( {}, { ensemble } );
}
RiaSummaryTools::summaryCaseMainCollection()->updateAllRequiredEditors();
RimCloudDataSourceCollection::createEnsemblesFromSelectedDataSources( dataSources );
}
//--------------------------------------------------------------------------------------------------
@ -58,6 +46,6 @@ void RicCreateSumoEnsembleFeature::onActionTriggered( bool isChecked )
//--------------------------------------------------------------------------------------------------
void RicCreateSumoEnsembleFeature::setupActionLook( QAction* actionToSetup )
{
actionToSetup->setText( "Create Sumo Ensemble" + RiaDefines::betaFeaturePostfix() );
actionToSetup->setText( "Create Ensemble Plot" + RiaDefines::betaFeaturePostfix() );
actionToSetup->setIcon( QIcon( ":/SummaryEnsemble.svg" ) );
}

View File

@ -19,9 +19,14 @@
#include "RimCloudDataSourceCollection.h"
#include "RiaApplication.h"
#include "RiaSummaryTools.h"
#include "PlotBuilderCommands/RicSummaryPlotBuilder.h"
#include "RimOilField.h"
#include "RimProject.h"
#include "RimSummaryCaseMainCollection.h"
#include "Sumo/RimSummaryEnsembleSumo.h"
#include "Sumo/RimSummarySumoDataSource.h"
#include "RiuPlotMainWindowTools.h"
@ -44,7 +49,10 @@ RimCloudDataSourceCollection::RimCloudDataSourceCollection()
CAF_PDM_InitFieldNoDefault( &m_sumoEnsembleNames, "SumoEnsembleNames", "Ensembles" );
m_sumoEnsembleNames.uiCapability()->setUiEditorTypeName( caf::PdmUiTreeSelectionEditor::uiEditorTypeName() );
CAF_PDM_InitFieldNoDefault( &m_addEnsembles, "AddEnsembles", "" );
CAF_PDM_InitFieldNoDefault( &m_addDataSources, "AddDataSources", "", "", "Add Data Sources without Ensembles" );
caf::PdmUiPushButtonEditor::configureEditorLabelLeft( &m_addDataSources );
CAF_PDM_InitFieldNoDefault( &m_addEnsembles, "AddEnsembles", "", "", "Add Data Sources and Create Summary Ensemble Plots" );
caf::PdmUiPushButtonEditor::configureEditorLabelLeft( &m_addEnsembles );
CAF_PDM_InitFieldNoDefault( &m_sumoDataSources, "SumoDataSources", "Sumo Data Sources" );
@ -68,6 +76,25 @@ std::vector<RimSummarySumoDataSource*> RimCloudDataSourceCollection::sumoDataSou
return m_sumoDataSources.childrenByType();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimCloudDataSourceCollection::createEnsemblesFromSelectedDataSources( const std::vector<RimSummarySumoDataSource*>& dataSources )
{
for ( auto dataSource : dataSources )
{
RimSummaryEnsembleSumo* ensemble = new RimSummaryEnsembleSumo();
ensemble->setSumoDataSource( dataSource );
ensemble->updateName();
RiaSummaryTools::summaryCaseMainCollection()->addEnsemble( ensemble );
ensemble->loadDataAndUpdate();
RicSummaryPlotBuilder::createAndAppendDefaultSummaryMultiPlot( {}, { ensemble } );
}
RiaSummaryTools::summaryCaseMainCollection()->updateAllRequiredEditors();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -88,10 +115,16 @@ void RimCloudDataSourceCollection::fieldChangedByUi( const caf::PdmFieldHandle*
}
if ( changedField == &m_addEnsembles )
{
addEnsemble();
addEnsembles();
m_addEnsembles = false;
}
if ( changedField == &m_addDataSources )
{
addDataSources();
m_addDataSources = false;
}
}
//--------------------------------------------------------------------------------------------------
@ -152,9 +185,13 @@ QList<caf::PdmOptionItemInfo> RimCloudDataSourceCollection::calculateValueOption
//--------------------------------------------------------------------------------------------------
void RimCloudDataSourceCollection::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
{
uiOrdering.add( &m_sumoFieldName );
uiOrdering.add( &m_sumoCaseId );
uiOrdering.add( &m_sumoEnsembleNames );
caf::PdmUiOrdering::LayoutOptions layout = { .newRow = true, .totalColumnSpan = 3, .leftLabelColumnSpan = 1 };
uiOrdering.add( &m_sumoFieldName, layout );
uiOrdering.add( &m_sumoCaseId, layout );
uiOrdering.add( &m_sumoEnsembleNames, layout );
uiOrdering.add( &m_addDataSources, { .totalColumnSpan = 2, .leftLabelColumnSpan = 1 } );
uiOrdering.add( &m_addEnsembles, { .newRow = false, .totalColumnSpan = 1, .leftLabelColumnSpan = 0 } );
}
//--------------------------------------------------------------------------------------------------
@ -164,6 +201,13 @@ void RimCloudDataSourceCollection::defineEditorAttribute( const caf::PdmFieldHan
QString uiConfigName,
caf::PdmUiEditorAttribute* attribute )
{
if ( field == &m_addDataSources )
{
if ( auto attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute ) )
{
attrib->m_buttonText = "Add Data Sources(s)";
}
}
if ( field == &m_addEnsembles )
{
if ( auto attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute ) )
@ -176,9 +220,11 @@ void RimCloudDataSourceCollection::defineEditorAttribute( const caf::PdmFieldHan
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimCloudDataSourceCollection::addEnsemble()
std::vector<RimSummarySumoDataSource*> RimCloudDataSourceCollection::addDataSources()
{
if ( !m_sumoConnector ) return;
if ( !m_sumoConnector ) return {};
std::vector<RimSummarySumoDataSource*> dataSources;
RimSummarySumoDataSource* objectToSelect = nullptr;
auto sumoCaseId = SumoCaseId( m_sumoCaseId );
@ -227,6 +273,7 @@ void RimCloudDataSourceCollection::addEnsemble()
objectToSelect = dataSource;
m_sumoDataSources.push_back( dataSource );
dataSources.push_back( dataSource );
}
uiCapability()->updateAllRequiredEditors();
@ -236,4 +283,15 @@ void RimCloudDataSourceCollection::addEnsemble()
RiuPlotMainWindowTools::setExpanded( objectToSelect );
RiuPlotMainWindowTools::selectAsCurrentItem( objectToSelect );
}
return dataSources;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimCloudDataSourceCollection::addEnsembles()
{
auto dataSources = addDataSources();
createEnsemblesFromSelectedDataSources( dataSources );
}

View File

@ -44,6 +44,8 @@ public:
std::vector<RimSummarySumoDataSource*> sumoDataSources() const;
static void createEnsemblesFromSelectedDataSources( const std::vector<RimSummarySumoDataSource*>& dataSources );
private:
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
@ -51,13 +53,15 @@ private:
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override;
void addEnsemble();
std::vector<RimSummarySumoDataSource*> addDataSources();
void addEnsembles();
private:
caf::PdmField<QString> m_sumoFieldName;
caf::PdmField<QString> m_sumoCaseId;
caf::PdmField<std::vector<QString>> m_sumoEnsembleNames;
caf::PdmField<bool> m_addDataSources;
caf::PdmField<bool> m_addEnsembles;
caf::PdmChildArrayField<RimSummarySumoDataSource*> m_sumoDataSources;