Default summaryplot improvements (#8950)

* Add summary default plot type selection in preferences
* Create plots as set in preferences when loading summary cases. Allow selecting default plot templates from templates explorer tree
* Do not create plot if data vector setting is empty
This commit is contained in:
jonjenssen
2022-05-25 11:01:45 +02:00
committed by GitHub
parent f91fe41f1d
commit 8e3289a432
16 changed files with 456 additions and 47 deletions

View File

@@ -357,7 +357,7 @@ void RiaPreferences::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering&
otherGroup->add( &holoLensDisableCertificateVerification ); otherGroup->add( &holoLensDisableCertificateVerification );
otherGroup->add( &m_useUndoRedo ); otherGroup->add( &m_useUndoRedo );
} }
else if ( uiConfigName == RiaPreferences::tabNameEclipseGrid() ) else if ( uiConfigName == RiaPreferences::tabNameGrid() )
{ {
caf::PdmUiGroup* newCaseBehaviourGroup = uiOrdering.addNewGroup( "Behavior When Loading Data" ); caf::PdmUiGroup* newCaseBehaviourGroup = uiOrdering.addNewGroup( "Behavior When Loading Data" );
newCaseBehaviourGroup->add( &autocomputeDepthRelatedProperties ); newCaseBehaviourGroup->add( &autocomputeDepthRelatedProperties );
@@ -365,7 +365,7 @@ void RiaPreferences::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering&
m_readerSettings->uiOrdering( uiConfigName, *newCaseBehaviourGroup ); m_readerSettings->uiOrdering( uiConfigName, *newCaseBehaviourGroup );
} }
else if ( uiConfigName == RiaPreferences::tabNameEclipseSummary() ) else if ( uiConfigName == RiaPreferences::tabNameSummary() )
{ {
m_summaryPreferences->appendRestartFileGroup( uiOrdering ); m_summaryPreferences->appendRestartFileGroup( uiOrdering );
@@ -377,16 +377,20 @@ void RiaPreferences::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering&
} }
else if ( uiConfigName == RiaPreferences::tabNamePlotting() ) else if ( uiConfigName == RiaPreferences::tabNamePlotting() )
{ {
uiOrdering.add( &m_dateFormat ); caf::PdmUiGroup* summaryGrp = uiOrdering.addNewGroup( "Summary Plots" );
uiOrdering.add( &m_timeFormat );
summaryPreferences()->appendItemsToPlottingGroup( uiOrdering ); summaryPreferences()->appendItemsToPlottingGroup( *summaryGrp );
caf::PdmUiGroup* group = uiOrdering.addNewGroup( "Plot Templates" ); caf::PdmUiGroup* group = summaryGrp->addNewGroup( "Plot Templates" );
group->add( &m_plotTemplateFolders ); group->add( &m_plotTemplateFolders );
group->add( &m_searchPlotTemplateFoldersRecursively ); group->add( &m_searchPlotTemplateFoldersRecursively );
caf::PdmUiGroup* pageSetup = uiOrdering.addNewGroup( "Page Setup" ); caf::PdmUiGroup* generalGrp = uiOrdering.addNewGroup( "General" );
generalGrp->add( &m_dateFormat );
generalGrp->add( &m_timeFormat );
caf::PdmUiGroup* pageSetup = generalGrp->addNewGroup( "Page Setup" );
pageSetup->add( &m_pageSize ); pageSetup->add( &m_pageSize );
pageSetup->add( &m_pageOrientation, false ); pageSetup->add( &m_pageOrientation, false );
pageSetup->add( &m_pageLeftMargin ); pageSetup->add( &m_pageLeftMargin );
@@ -394,7 +398,7 @@ void RiaPreferences::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering&
pageSetup->add( &m_pageTopMargin ); pageSetup->add( &m_pageTopMargin );
pageSetup->add( &m_pageBottomMargin, false ); pageSetup->add( &m_pageBottomMargin, false );
uiOrdering.add( &m_useQtChartsPlotByDefault ); generalGrp->add( &m_useQtChartsPlotByDefault );
m_useQtChartsPlotByDefault.uiCapability()->setUiHidden( true ); m_useQtChartsPlotByDefault.uiCapability()->setUiHidden( true );
QString unitLabel = " [mm]"; QString unitLabel = " [mm]";
@@ -431,15 +435,15 @@ void RiaPreferences::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering&
m_geoMechPreferences()->appendItems( uiOrdering ); m_geoMechPreferences()->appendItems( uiOrdering );
} }
#endif #endif
else if ( uiConfigName == RiaPreferences::tabNameExport() ) else if ( uiConfigName == RiaPreferences::tabNameImportExport() )
{ {
uiOrdering.add( &csvTextExportFieldSeparator ); caf::PdmUiGroup* importGroup = uiOrdering.addNewGroup( "Import" );
uiOrdering.add( &m_openExportedPdfInViewer ); importGroup->add( &m_surfaceImportResamplingDistance );
} importGroup->add( &m_multiLateralWellPattern );
else if ( uiConfigName == RiaPreferences::tabNameImport() )
{ caf::PdmUiGroup* exportGroup = uiOrdering.addNewGroup( "Export" );
uiOrdering.add( &m_surfaceImportResamplingDistance ); exportGroup->add( &csvTextExportFieldSeparator );
uiOrdering.add( &m_multiLateralWellPattern ); exportGroup->add( &m_openExportedPdfInViewer );
} }
else if ( RiaApplication::enableDevelopmentFeatures() && uiConfigName == RiaPreferences::tabNameSystem() ) else if ( RiaApplication::enableDevelopmentFeatures() && uiConfigName == RiaPreferences::tabNameSystem() )
{ {
@@ -509,11 +513,14 @@ void RiaPreferences::fieldChangedByUi( const caf::PdmFieldHandle* changedField,
m_pageTopMargin = defaultMarginSize( m_pageSize() ); m_pageTopMargin = defaultMarginSize( m_pageSize() );
m_pageBottomMargin = defaultMarginSize( m_pageSize() ); m_pageBottomMargin = defaultMarginSize( m_pageSize() );
} }
else if ( changedField == &m_guiTheme )
if ( changedField == &m_guiTheme )
{ {
RiuGuiTheme::updateGuiTheme( m_guiTheme() ); RiuGuiTheme::updateGuiTheme( m_guiTheme() );
} }
else
{
m_summaryPreferences->fieldChangedByUi( changedField, oldValue, newValue );
}
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
@@ -526,17 +533,17 @@ QString RiaPreferences::tabNameGeneral()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
QString RiaPreferences::tabNameEclipseGrid() QString RiaPreferences::tabNameGrid()
{ {
return "Eclipse Grid"; return "Grid";
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
QString RiaPreferences::tabNameEclipseSummary() QString RiaPreferences::tabNameSummary()
{ {
return "Eclipse Summary"; return "Summary";
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -563,14 +570,6 @@ QString RiaPreferences::tabNameScripting()
return "Scripting"; return "Scripting";
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RiaPreferences::tabNameExport()
{
return "Export";
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -582,9 +581,9 @@ QString RiaPreferences::tabNameSystem()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
QString RiaPreferences::tabNameImport() QString RiaPreferences::tabNameImportExport()
{ {
return "Import"; return "Import/Export";
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -611,15 +610,14 @@ QStringList RiaPreferences::tabNames()
QStringList names; QStringList names;
names << tabNameGeneral(); names << tabNameGeneral();
names << tabNameEclipseGrid(); names << tabNameGrid();
names << tabNameEclipseSummary(); names << tabNameSummary();
names << tabNamePlotting(); names << tabNamePlotting();
names << tabNameScripting(); names << tabNameScripting();
#ifdef USE_ODB_API #ifdef USE_ODB_API
names << tabNameGeomech(); names << tabNameGeomech();
#endif #endif
names << tabNameExport(); names << tabNameImportExport();
names << tabNameImport();
if ( RiaApplication::enableDevelopmentFeatures() ) if ( RiaApplication::enableDevelopmentFeatures() )
{ {

View File

@@ -154,14 +154,13 @@ protected:
private: private:
static QString tabNameGeneral(); static QString tabNameGeneral();
static QString tabNameEclipseGrid(); static QString tabNameGrid();
static QString tabNameEclipseSummary(); static QString tabNameSummary();
static QString tabNameGeomech(); static QString tabNameGeomech();
static QString tabNamePlotting(); static QString tabNamePlotting();
static QString tabNameScripting(); static QString tabNameScripting();
static QString tabNameExport();
static QString tabNameSystem(); static QString tabNameSystem();
static QString tabNameImport(); static QString tabNameImportExport();
static double defaultMarginSize( QPageSize::PageSizeId pageSizeId ); static double defaultMarginSize( QPageSize::PageSizeId pageSizeId );

View File

@@ -18,11 +18,17 @@
#include "RiaPreferencesSummary.h" #include "RiaPreferencesSummary.h"
#include "PlotTemplateCommands/RicSummaryPlotTemplateTools.h"
#include "RiaApplication.h" #include "RiaApplication.h"
#include "RiaPreferences.h" #include "RiaPreferences.h"
#include "PlotTemplates/RimPlotTemplateFileItem.h"
#include "cafPdmUiCheckBoxEditor.h" #include "cafPdmUiCheckBoxEditor.h"
#include "cafPdmUiComboBoxEditor.h" #include "cafPdmUiComboBoxEditor.h"
#include "cafPdmUiListEditor.h"
#include "cafPdmUiPushButtonEditor.h"
#include <algorithm> #include <algorithm>
@@ -57,6 +63,15 @@ void RiaPreferencesSummary::SummaryReaderModeType::setUp()
setDefault( RiaPreferencesSummary::SummaryReaderMode::HDF5_OPM_COMMON ); setDefault( RiaPreferencesSummary::SummaryReaderMode::HDF5_OPM_COMMON );
} }
template <>
void RiaPreferencesSummary::DefaultSummaryPlotEnum::setUp()
{
addItem( RiaPreferencesSummary::DefaultSummaryPlotType::NONE, "NONE", "No Plots" );
addItem( RiaPreferencesSummary::DefaultSummaryPlotType::DATA_VECTORS, "DATA_VECTORS", "Use Data Vector Names" );
addItem( RiaPreferencesSummary::DefaultSummaryPlotType::PLOT_TEMPLATES, "PLOT_TEMPLATES", "Use Plot Templates" );
setDefault( RiaPreferencesSummary::DefaultSummaryPlotType::DATA_VECTORS );
}
} // namespace caf } // namespace caf
CAF_PDM_SOURCE_INIT( RiaPreferencesSummary, "RiaPreferencesSummary" ); CAF_PDM_SOURCE_INIT( RiaPreferencesSummary, "RiaPreferencesSummary" );
@@ -96,6 +111,16 @@ RiaPreferencesSummary::RiaPreferencesSummary()
"", "",
"Semicolon separated list of filters used to create curves in new summary plots", "Semicolon separated list of filters used to create curves in new summary plots",
"" ); "" );
CAF_PDM_InitFieldNoDefault( &m_defaultSummaryPlot, "defaultSummaryPlot", "Create Plot On Summary Data Import" );
CAF_PDM_InitField( &m_selectDefaultTemplates, "selectDefaultTemplate", false, "", "", "Select Default Templates" );
m_selectDefaultTemplates.xmlCapability()->disableIO();
m_selectDefaultTemplates.uiCapability()->setUiEditorTypeName( caf::PdmUiPushButtonEditor::uiEditorTypeName() );
CAF_PDM_InitFieldNoDefault( &m_selectedDefaultTemplates, "defaultSummaryTemplates", "Select Summary Plot Templates" );
m_selectedDefaultTemplates.uiCapability()->setUiReadOnly( true );
m_selectedDefaultTemplates.uiCapability()->setUiEditorTypeName( caf::PdmUiListEditor::uiEditorTypeName() );
m_selectedDefaultTemplates.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN );
CAF_PDM_InitField( &m_createEnhancedSummaryDataFile, CAF_PDM_InitField( &m_createEnhancedSummaryDataFile,
"createEnhancedSummaryDataFile_v01", "createEnhancedSummaryDataFile_v01",
@@ -228,7 +253,23 @@ void RiaPreferencesSummary::appendRestartFileGroup( caf::PdmUiOrdering& uiOrderi
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RiaPreferencesSummary::appendItemsToPlottingGroup( caf::PdmUiOrdering& uiOrdering ) const void RiaPreferencesSummary::appendItemsToPlottingGroup( caf::PdmUiOrdering& uiOrdering ) const
{ {
uiOrdering.add( &m_defaultSummaryCurvesTextFilter ); uiOrdering.add( &m_defaultSummaryPlot );
switch ( m_defaultSummaryPlot() )
{
case RiaPreferencesSummary::DefaultSummaryPlotType::DATA_VECTORS:
uiOrdering.add( &m_defaultSummaryCurvesTextFilter );
break;
case RiaPreferencesSummary::DefaultSummaryPlotType::PLOT_TEMPLATES:
uiOrdering.add( &m_selectedDefaultTemplates );
uiOrdering.add( &m_selectDefaultTemplates );
break;
default:
break;
}
uiOrdering.add( &m_defaultSummaryHistoryCurveStyle ); uiOrdering.add( &m_defaultSummaryHistoryCurveStyle );
uiOrdering.add( &m_curveColorByPhase ); uiOrdering.add( &m_curveColorByPhase );
@@ -356,6 +397,22 @@ void RiaPreferencesSummary::defineEditorAttribute( const caf::PdmFieldHandle* fi
myattr->iconSize = QSize( 24, 16 ); myattr->iconSize = QSize( 24, 16 );
} }
} }
else if ( field == &m_selectDefaultTemplates )
{
auto attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute );
if ( attrib )
{
attrib->m_buttonText = "Select Default Templates";
}
}
else if ( field == &m_selectedDefaultTemplates )
{
auto attrib = dynamic_cast<caf::PdmUiListEditorAttribute*>( attribute );
if ( attrib )
{
attrib->m_heightHint = 30;
}
}
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -450,3 +507,79 @@ RiaDefines::RowCount RiaPreferencesSummary::defaultMultiPlotRowCount() const
{ {
return m_defaultRowsPerPage(); return m_defaultRowsPerPage();
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiaPreferencesSummary::fieldChangedByUi( const caf::PdmFieldHandle* changedField,
const QVariant& oldValue,
const QVariant& newValue )
{
if ( changedField == &m_selectDefaultTemplates )
{
m_selectDefaultTemplates = false;
auto selection = RicSummaryPlotTemplateTools::selectDefaultPlotTemplates( m_selectedDefaultTemplates() );
if ( selection.empty() ) return;
m_selectedDefaultTemplates = selection;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiaPreferencesSummary::DefaultSummaryPlotType RiaPreferencesSummary::defaultSummaryPlotType() const
{
return m_defaultSummaryPlot();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<QString> RiaPreferencesSummary::defaultSummaryPlotTemplates() const
{
return m_selectedDefaultTemplates();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiaPreferencesSummary::isDefaultSummaryPlotTemplate( QString filename ) const
{
int count = std::count( m_selectedDefaultTemplates().begin(), m_selectedDefaultTemplates().end(), filename );
return ( count > 0 );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiaPreferencesSummary::addToDefaultPlotTemplates( QString filename )
{
if ( isDefaultSummaryPlotTemplate( filename ) ) return;
std::vector<QString> newlist;
newlist.insert( newlist.end(), m_selectedDefaultTemplates().begin(), m_selectedDefaultTemplates().end() );
newlist.push_back( filename );
m_selectedDefaultTemplates = newlist;
RiaPreferences::current()->writePreferencesToApplicationStore();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiaPreferencesSummary::removeFromDefaultPlotTemplates( QString filename )
{
if ( !isDefaultSummaryPlotTemplate( filename ) ) return;
std::vector<QString> newlist;
for ( auto& item : m_selectedDefaultTemplates() )
{
if ( item != filename ) newlist.push_back( item );
}
m_selectedDefaultTemplates = newlist;
RiaPreferences::current()->writePreferencesToApplicationStore();
}

View File

@@ -19,11 +19,15 @@
#pragma once #pragma once
#include "cafAppEnum.h" #include "cafAppEnum.h"
#include "cafPdmChildArrayField.h"
#include "cafPdmField.h" #include "cafPdmField.h"
#include "cafPdmObject.h" #include "cafPdmObject.h"
#include "RiaDefines.h" #include "RiaDefines.h"
#include <QString>
#include <vector>
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -56,6 +60,14 @@ public:
}; };
using SummaryHistoryCurveStyleModeType = caf::AppEnum<SummaryHistoryCurveStyleMode>; using SummaryHistoryCurveStyleModeType = caf::AppEnum<SummaryHistoryCurveStyleMode>;
enum class DefaultSummaryPlotType
{
NONE,
DATA_VECTORS,
PLOT_TEMPLATES
};
using DefaultSummaryPlotEnum = caf::AppEnum<DefaultSummaryPlotType>;
using ColumnCountEnum = caf::AppEnum<RiaDefines::ColumnCount>; using ColumnCountEnum = caf::AppEnum<RiaDefines::ColumnCount>;
using RowCountEnum = caf::AppEnum<RiaDefines::RowCount>; using RowCountEnum = caf::AppEnum<RiaDefines::RowCount>;
@@ -71,6 +83,12 @@ public:
bool createH5SummaryDataFiles() const; bool createH5SummaryDataFiles() const;
int createH5SummaryDataThreadCount() const; int createH5SummaryDataThreadCount() const;
DefaultSummaryPlotType defaultSummaryPlotType() const;
std::vector<QString> defaultSummaryPlotTemplates() const;
bool isDefaultSummaryPlotTemplate( QString filename ) const;
void addToDefaultPlotTemplates( QString filename );
void removeFromDefaultPlotTemplates( QString filename );
void appendRestartFileGroup( caf::PdmUiOrdering& uiOrdering ) const; void appendRestartFileGroup( caf::PdmUiOrdering& uiOrdering ) const;
void appendItemsToPlottingGroup( caf::PdmUiOrdering& uiOrdering ) const; void appendItemsToPlottingGroup( caf::PdmUiOrdering& uiOrdering ) const;
@@ -92,6 +110,7 @@ public:
void defineEditorAttribute( const caf::PdmFieldHandle* field, void defineEditorAttribute( const caf::PdmFieldHandle* field,
QString uiConfigName, QString uiConfigName,
caf::PdmUiEditorAttribute* attribute ) override; caf::PdmUiEditorAttribute* attribute ) override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
protected: protected:
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
@@ -99,6 +118,10 @@ protected:
bool* useOptionsOnly ) override; bool* useOptionsOnly ) override;
private: private:
caf::PdmField<DefaultSummaryPlotEnum> m_defaultSummaryPlot;
caf::PdmField<bool> m_selectDefaultTemplates;
caf::PdmField<std::vector<QString>> m_selectedDefaultTemplates;
caf::PdmField<bool> m_summaryRestartFilesShowImportDialog; caf::PdmField<bool> m_summaryRestartFilesShowImportDialog;
caf::PdmField<SummaryRestartFilesImportModeType> m_summaryImportMode; caf::PdmField<SummaryRestartFilesImportModeType> m_summaryImportMode;
caf::PdmField<SummaryRestartFilesImportModeType> m_gridImportMode; caf::PdmField<SummaryRestartFilesImportModeType> m_gridImportMode;

View File

@@ -18,6 +18,7 @@
#include "RicSummaryPlotBuilder.h" #include "RicSummaryPlotBuilder.h"
#include "PlotTemplateCommands/RicSummaryPlotTemplateTools.h"
#include "SummaryPlotCommands/RicNewSummaryEnsembleCurveSetFeature.h" #include "SummaryPlotCommands/RicNewSummaryEnsembleCurveSetFeature.h"
#include "SummaryPlotCommands/RicSummaryPlotFeatureImpl.h" #include "SummaryPlotCommands/RicSummaryPlotFeatureImpl.h"
@@ -28,6 +29,7 @@
#include "RifReaderEclipseSummary.h" #include "RifReaderEclipseSummary.h"
#include "RifSummaryReaderInterface.h" #include "RifSummaryReaderInterface.h"
#include "RiaPreferencesSummary.h"
#include "RimEnsembleCurveSet.h" #include "RimEnsembleCurveSet.h"
#include "RimEnsembleCurveSetCollection.h" #include "RimEnsembleCurveSetCollection.h"
#include "RimMainPlotCollection.h" #include "RimMainPlotCollection.h"
@@ -408,6 +410,22 @@ RimSummaryMultiPlot*
RicSummaryPlotBuilder::createAndAppendDefaultSummaryMultiPlot( const std::vector<RimSummaryCase*>& cases, RicSummaryPlotBuilder::createAndAppendDefaultSummaryMultiPlot( const std::vector<RimSummaryCase*>& cases,
const std::vector<RimSummaryCaseCollection*>& ensembles ) const std::vector<RimSummaryCaseCollection*>& ensembles )
{ {
RiaPreferencesSummary* prefs = RiaPreferencesSummary::current();
if ( prefs->defaultSummaryPlotType() == RiaPreferencesSummary::DefaultSummaryPlotType::NONE ) return nullptr;
if ( prefs->defaultSummaryPlotType() == RiaPreferencesSummary::DefaultSummaryPlotType::PLOT_TEMPLATES )
{
RimSummaryMultiPlot* plotToSelect = nullptr;
for ( auto& filename : prefs->defaultSummaryPlotTemplates() )
{
plotToSelect = RicSummaryPlotTemplateTools::create( filename, cases, ensembles );
}
return plotToSelect;
}
if ( prefs->defaultSummaryCurvesTextFilter().trimmed().isEmpty() ) return nullptr;
RimProject* project = RimProject::current(); RimProject* project = RimProject::current();
auto* plotCollection = project->mainPlotCollection()->summaryMultiPlotCollection(); auto* plotCollection = project->mainPlotCollection()->summaryMultiPlotCollection();

View File

@@ -9,6 +9,7 @@ set(SOURCE_GROUP_HEADER_FILES
${CMAKE_CURRENT_LIST_DIR}/RicRenamePlotTemplateFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicRenamePlotTemplateFeature.h
${CMAKE_CURRENT_LIST_DIR}/RicEditPlotTemplateFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicEditPlotTemplateFeature.h
${CMAKE_CURRENT_LIST_DIR}/RicDeletePlotTemplateFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicDeletePlotTemplateFeature.h
${CMAKE_CURRENT_LIST_DIR}/RicSetAsDefaultTemplateFeature.h
) )
set(SOURCE_GROUP_SOURCE_FILES set(SOURCE_GROUP_SOURCE_FILES
@@ -22,6 +23,7 @@ set(SOURCE_GROUP_SOURCE_FILES
${CMAKE_CURRENT_LIST_DIR}/RicRenamePlotTemplateFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicRenamePlotTemplateFeature.cpp
${CMAKE_CURRENT_LIST_DIR}/RicEditPlotTemplateFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicEditPlotTemplateFeature.cpp
${CMAKE_CURRENT_LIST_DIR}/RicDeletePlotTemplateFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicDeletePlotTemplateFeature.cpp
${CMAKE_CURRENT_LIST_DIR}/RicSetAsDefaultTemplateFeature.cpp
) )
list(APPEND COMMAND_CODE_HEADER_FILES ${SOURCE_GROUP_HEADER_FILES}) list(APPEND COMMAND_CODE_HEADER_FILES ${SOURCE_GROUP_HEADER_FILES})

View File

@@ -36,7 +36,7 @@ void RicReloadPlotTemplatesFeature::rebuildFromDisc()
RiaPreferences* prefs = RiaPreferences::current(); RiaPreferences* prefs = RiaPreferences::current();
proj->setPlotTemplateFolders( prefs->plotTemplateFolders() ); proj->setPlotTemplateFolders( prefs->plotTemplateFolders() );
proj->rootPlotTemlateItem()->updateConnectedEditors(); proj->rootPlotTemplateItem()->updateConnectedEditors();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@@ -36,6 +36,7 @@ CAF_PDM_SOURCE_INIT( RicSelectPlotTemplateUi, "RicSelectPlotTemplateUi" );
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RicSelectPlotTemplateUi::RicSelectPlotTemplateUi() RicSelectPlotTemplateUi::RicSelectPlotTemplateUi()
: m_useMultiSelect( false )
{ {
CAF_PDM_InitObject( "RicSelectPlotTemplateUi" ); CAF_PDM_InitObject( "RicSelectPlotTemplateUi" );
@@ -44,6 +45,21 @@ RicSelectPlotTemplateUi::RicSelectPlotTemplateUi()
m_selectedPlotTemplates.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN ); m_selectedPlotTemplates.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN );
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicSelectPlotTemplateUi::setMultiSelectMode( bool multiSelect )
{
m_useMultiSelect = multiSelect;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicSelectPlotTemplateUi::setInitialSelection( std::vector<QString> selectedTemplates )
{
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -72,7 +88,7 @@ QList<caf::PdmOptionItemInfo>
if ( fieldNeedingOptions == &m_selectedPlotTemplates ) if ( fieldNeedingOptions == &m_selectedPlotTemplates )
{ {
auto plotTemplateRoot = RimProject::current()->rootPlotTemlateItem(); auto plotTemplateRoot = RimProject::current()->rootPlotTemplateItem();
RimPlotTemplateFolderItem::appendOptionItemsForPlotTemplates( options, plotTemplateRoot ); RimPlotTemplateFolderItem::appendOptionItemsForPlotTemplates( options, plotTemplateRoot );
} }
@@ -92,7 +108,7 @@ void RicSelectPlotTemplateUi::defineEditorAttribute( const caf::PdmFieldHandle*
auto a = dynamic_cast<caf::PdmUiTreeSelectionEditorAttribute*>( attribute ); auto a = dynamic_cast<caf::PdmUiTreeSelectionEditorAttribute*>( attribute );
if ( a ) if ( a )
{ {
a->singleSelectionMode = true; a->singleSelectionMode = !m_useMultiSelect;
} }
} }
} }

View File

@@ -22,6 +22,9 @@
#include "cafPdmObject.h" #include "cafPdmObject.h"
#include "cafPdmPtrArrayField.h" #include "cafPdmPtrArrayField.h"
#include <QString>
#include <vector>
class RimPlotTemplateFileItem; class RimPlotTemplateFileItem;
class RimPlotTemplateFolderItem; class RimPlotTemplateFolderItem;
@@ -35,6 +38,9 @@ class RicSelectPlotTemplateUi : public caf::PdmObject
public: public:
RicSelectPlotTemplateUi(); RicSelectPlotTemplateUi();
void setMultiSelectMode( bool multiSelect );
void setInitialSelection( std::vector<QString> selectedTemplates );
std::vector<RimPlotTemplateFileItem*> selectedPlotTemplates(); std::vector<RimPlotTemplateFileItem*> selectedPlotTemplates();
private: private:
@@ -47,4 +53,5 @@ private:
private: private:
caf::PdmPtrArrayField<RimPlotTemplateFileItem*> m_selectedPlotTemplates; caf::PdmPtrArrayField<RimPlotTemplateFileItem*> m_selectedPlotTemplates;
bool m_useMultiSelect;
}; };

View File

@@ -0,0 +1,86 @@
////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2022 Equinor ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#include "RicSetAsDefaultTemplateFeature.h"
#include "PlotTemplates/RimPlotTemplateFileItem.h"
#include "RiaPreferencesSummary.h"
#include "cafSelectionManager.h"
#include <QAction>
#include <QFile>
#include <QFileInfo>
#include <QInputDialog>
#include <QMessageBox>
#include <QString>
CAF_CMD_SOURCE_INIT( RicSetAsDefaultTemplateFeature, "RicSetAsDefaultTemplateFeature" );
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RicSetAsDefaultTemplateFeature::isCommandEnabled()
{
return selectedTemplate() != nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicSetAsDefaultTemplateFeature::onActionTriggered( bool isChecked )
{
RimPlotTemplateFileItem* file = selectedTemplate();
if ( file == nullptr ) return;
if ( isChecked )
RiaPreferencesSummary::current()->addToDefaultPlotTemplates( file->absoluteFilePath() );
else
RiaPreferencesSummary::current()->removeFromDefaultPlotTemplates( file->absoluteFilePath() );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicSetAsDefaultTemplateFeature::setupActionLook( QAction* actionToSetup )
{
actionToSetup->setText( "Default Template" );
// actionToSetup->setIcon( QIcon( ":/SummaryTemplate16x16.png" ) );
RimPlotTemplateFileItem* file = selectedTemplate();
if ( file != nullptr )
{
actionToSetup->setCheckable( true );
actionToSetup->setChecked(
RiaPreferencesSummary::current()->isDefaultSummaryPlotTemplate( file->absoluteFilePath() ) );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimPlotTemplateFileItem* RicSetAsDefaultTemplateFeature::selectedTemplate()
{
std::vector<caf::PdmUiItem*> uiItems;
caf::SelectionManager::instance()->selectedItems( uiItems );
if ( uiItems.size() != 1 ) return nullptr;
RimPlotTemplateFileItem* file = dynamic_cast<RimPlotTemplateFileItem*>( uiItems[0] );
return file;
}

View File

@@ -0,0 +1,39 @@
////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2022 Equinor ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#pragma once
#include "cafCmdFeature.h"
class RimPlotTemplateFileItem;
//==================================================================================================
///
//==================================================================================================
class RicSetAsDefaultTemplateFeature : public caf::CmdFeature
{
CAF_CMD_HEADER_INIT;
protected:
bool isCommandEnabled() override;
void onActionTriggered( bool isChecked ) override;
void setupActionLook( QAction* actionToSetup ) override;
private:
RimPlotTemplateFileItem* selectedTemplate();
};

View File

@@ -175,6 +175,60 @@ RimSummaryMultiPlot* RicSummaryPlotTemplateTools::create( const QString& fileNam
return newSummaryPlot; return newSummaryPlot;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimSummaryMultiPlot* RicSummaryPlotTemplateTools::create( const QString& fileName,
const std::vector<RimSummaryCase*>& sumCases,
const std::vector<RimSummaryCaseCollection*>& ensembles )
{
std::vector<QString> wellNames;
std::vector<QString> groupNames;
std::vector<QString> regions;
RiaSummaryAddressAnalyzer analyzer;
if ( !sumCases.empty() )
{
auto firstCase = sumCases.front();
analyzer.appendAddresses( firstCase->summaryReader()->allResultAddresses() );
}
else if ( !ensembles.empty() )
{
auto caseCollection = ensembles.front();
auto firstCase = caseCollection->firstSummaryCase();
if ( firstCase != nullptr )
{
analyzer.appendAddresses( firstCase->summaryReader()->allResultAddresses() );
}
}
if ( !analyzer.wellNames().empty() )
wellNames.push_back( QString::fromStdString( *( analyzer.wellNames().begin() ) ) );
if ( !analyzer.groupNames().empty() )
groupNames.push_back( QString::fromStdString( *( analyzer.groupNames().begin() ) ) );
if ( !analyzer.regionNumbers().empty() )
regions.push_back( QString::number( *( analyzer.regionNumbers().begin() ) ) );
auto proj = RimProject::current();
auto collections = proj->mainPlotCollection()->summaryMultiPlotCollection();
auto newSummaryPlot = RicSummaryPlotTemplateTools::createMultiPlotFromTemplateFile( fileName );
if ( !newSummaryPlot ) return nullptr;
collections->addSummaryMultiPlot( newSummaryPlot );
newSummaryPlot->resolveReferencesRecursively();
RicSummaryPlotTemplateTools::setValuesForPlaceholders( newSummaryPlot, sumCases, ensembles, wellNames, groupNames, regions );
newSummaryPlot->initAfterReadRecursively();
newSummaryPlot->loadDataAndUpdate();
collections->updateConnectedEditors();
return newSummaryPlot;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -399,6 +453,32 @@ QString RicSummaryPlotTemplateTools::selectPlotTemplatePath()
return {}; return {};
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<QString> RicSummaryPlotTemplateTools::selectDefaultPlotTemplates( std::vector<QString> currentSelection )
{
RiuPlotMainWindow* plotwindow = RiaGuiApplication::instance()->mainPlotWindow();
RicSelectPlotTemplateUi ui;
ui.setMultiSelectMode( true );
ui.setInitialSelection( currentSelection );
caf::PdmUiPropertyViewDialog propertyDialog( plotwindow, &ui, "Select Default Plot Templates", "" );
propertyDialog.resize( QSize( 500, 600 ) );
std::vector<QString> selection;
if ( propertyDialog.exec() == QDialog::Accepted && !ui.selectedPlotTemplates().empty() )
{
for ( auto item : ui.selectedPlotTemplates() )
{
selection.push_back( item->absoluteFilePath() );
}
}
return selection;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@@ -34,6 +34,7 @@ class RimSummaryCaseCollection;
class RifEclipseSummaryAddress; class RifEclipseSummaryAddress;
class RimSummaryMultiPlot; class RimSummaryMultiPlot;
class RimSummaryAddressCollection; class RimSummaryAddressCollection;
class RimPlotTemplateFileItem;
//================================================================================================== //==================================================================================================
/// ///
@@ -43,7 +44,12 @@ class RicSummaryPlotTemplateTools
public: public:
static RimSummaryMultiPlot* create( const QString& fileName ); static RimSummaryMultiPlot* create( const QString& fileName );
static QString selectPlotTemplatePath(); static RimSummaryMultiPlot* create( const QString& fileName,
const std::vector<RimSummaryCase*>& cases,
const std::vector<RimSummaryCaseCollection*>& ensembles );
static QString selectPlotTemplatePath();
static std::vector<QString> selectDefaultPlotTemplates( std::vector<QString> currentSelection );
static QString summaryCaseFieldKeyword(); static QString summaryCaseFieldKeyword();
static QString summaryGroupFieldKeyword(); static QString summaryGroupFieldKeyword();

View File

@@ -1028,6 +1028,8 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection()
menuBuilder << "RicDeletePlotTemplateFeature"; menuBuilder << "RicDeletePlotTemplateFeature";
menuBuilder << "RicEditPlotTemplateFeature"; menuBuilder << "RicEditPlotTemplateFeature";
menuBuilder << "Separator"; menuBuilder << "Separator";
menuBuilder << "RicSetAsDefaultTemplateFeature";
menuBuilder << "Separator";
menuBuilder << "RicReloadPlotTemplatesFeature"; menuBuilder << "RicReloadPlotTemplatesFeature";
} }
else if ( dynamic_cast<RimSummaryMultiPlot*>( firstUiItem ) ) else if ( dynamic_cast<RimSummaryMultiPlot*>( firstUiItem ) )

View File

@@ -1320,7 +1320,7 @@ RimMeasurement* RimProject::measurement() const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RimPlotTemplateFolderItem* RimProject::rootPlotTemlateItem() const RimPlotTemplateFolderItem* RimProject::rootPlotTemplateItem() const
{ {
return m_plotTemplateTopFolder; return m_plotTemplateTopFolder;
} }

View File

@@ -189,7 +189,7 @@ public:
caf::AppEnum<RiaDefines::EclipseUnitSystem> commonUnitSystemForAllCases() const; caf::AppEnum<RiaDefines::EclipseUnitSystem> commonUnitSystemForAllCases() const;
RimMeasurement* measurement() const; RimMeasurement* measurement() const;
RimPlotTemplateFolderItem* rootPlotTemlateItem() const; RimPlotTemplateFolderItem* rootPlotTemplateItem() const;
std::vector<caf::FilePath*> allFilePaths() const; std::vector<caf::FilePath*> allFilePaths() const;