Use field auto values for summary plots

Use auto value concept in summary plot configuration. Default behavior is unchanged, but it is now possible to unlink a field to specify a custom value for this field.

Other changes:
* Add missing requirement for Svg in test application
* Use calculator icon and rename panel text
Use icon and relevant text to make it clear that the content in Calculator Data can be used for Grid Property Calculator and nothing else.
* Add example with scoped enum and auto value
* Use enum value starting av 10 to make sure enum values (not option item index) are working as expected
This commit is contained in:
Magne Sjaastad 2022-09-05 14:12:49 +02:00
parent 69cc36b3bc
commit 72c070c3a9
23 changed files with 250 additions and 139 deletions

View File

@ -28,6 +28,8 @@
#include "RiaGuiApplication.h"
#endif
#include "cafUiAppearanceSettings.h"
#include "cvfProgramOptions.h"
#include "cvfqtUtils.h"
@ -74,6 +76,9 @@ int main( int argc, char* argv[] )
// Create feature manager before the application object is created
RiaMainTools::initializeSingletons();
// https://www.w3.org/wiki/CSS/Properties/color/keywords
caf::UiAppearanceSettings::instance()->setAutoValueEditorColor( "moccasin" );
std::unique_ptr<RiaApplication> app( createApplication( argc, argv ) );
cvf::ProgramOptions progOpt;

View File

@ -83,6 +83,21 @@ std::set<std::string> RiaSummaryAddressAnalyzer::quantityNamesNoHistory() const
return m_quantitiesNoMatchingHistory;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiaSummaryAddressAnalyzer::isSingleQuantityIgnoreHistory() const
{
if ( quantities().size() == 1 ) return true;
if ( quantities().size() == 2 && quantityNamesWithHistory().size() == 1 )
{
return true;
}
return false;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -46,6 +46,8 @@ public:
std::set<std::string> quantityNamesWithHistory() const;
std::set<std::string> quantityNamesNoHistory() const;
bool isSingleQuantityIgnoreHistory() const;
std::string quantityNameForTitle() const;
std::set<std::string> wellNames() const;

View File

@ -64,9 +64,6 @@ RimPlotAxisProperties::RimPlotAxisProperties()
CAF_PDM_InitField( &m_isActive, "Active", true, "Active" );
m_isActive.uiCapability()->setUiHidden( true );
CAF_PDM_InitField( &m_isMinMaxOverridden, "IsMinMaxOverridden", false, "IsMinMaxOverridden" );
m_isMinMaxOverridden.uiCapability()->setUiHidden( true );
CAF_PDM_InitFieldNoDefault( &m_objectName, "Name", "Name" );
m_objectName.uiCapability()->setUiHidden( true );
@ -76,17 +73,22 @@ RimPlotAxisProperties::RimPlotAxisProperties()
CAF_PDM_InitField( &isAutoTitle, "AutoTitle", true, "Auto Title" );
CAF_PDM_InitField( &m_displayLongName, "DisplayLongName", true, " Names" );
m_displayLongName.uiCapability()->enableAutoValueSupport( true );
CAF_PDM_InitField( &m_displayShortName, "DisplayShortName", false, " Acronyms" );
CAF_PDM_InitField( &m_displayUnitText, "DisplayUnitText", true, " Units" );
CAF_PDM_InitFieldNoDefault( &m_customTitle, "CustomTitle", "Title" );
CAF_PDM_InitField( &m_visibleRangeMax, "VisibleRangeMax", RiaDefines::maximumDefaultValuePlot(), "Max" );
m_visibleRangeMax.uiCapability()->enableAutoValueSupport( true );
CAF_PDM_InitField( &m_visibleRangeMin, "VisibleRangeMin", RiaDefines::minimumDefaultValuePlot(), "Min" );
m_visibleRangeMin.uiCapability()->enableAutoValueSupport( true );
CAF_PDM_InitFieldNoDefault( &m_numberFormat, "NumberFormat", "Number Format" );
CAF_PDM_InitField( &m_numberOfDecimals, "Decimals", 2, "Number of Decimals" );
CAF_PDM_InitField( &m_scaleFactor, "ScaleFactor", 1.0, "Scale Factor" );
m_scaleFactor.uiCapability()->enableAutoValueSupport( true );
CAF_PDM_InitField( &m_isAutoZoom, "AutoZoom", true, "Set Range Automatically" );
CAF_PDM_InitField( &m_isLogarithmicScaleEnabled, "LogarithmicScale", false, "Logarithmic Scale" );
@ -106,6 +108,7 @@ RimPlotAxisProperties::RimPlotAxisProperties()
m_annotations.uiCapability()->setUiTreeHidden( true );
CAF_PDM_InitFieldNoDefault( &m_majorTickmarkCount, "MajorTickmarkCount", "Major Tickmark Count" );
m_majorTickmarkCount.uiCapability()->enableAutoValueSupport( true );
updateOptionSensitivity();
}
@ -261,8 +264,6 @@ void RimPlotAxisProperties::defineUiOrdering( QString uiConfigName, caf::PdmUiOr
m_plotAxis.uiCapability()->setUiReadOnly( m_isAlwaysRequired );
uiOrdering.skipRemainingFields( true );
updateOverriddenLabelAndReadOnlyState();
}
//--------------------------------------------------------------------------------------------------
@ -503,41 +504,52 @@ void RimPlotAxisProperties::setVisible( bool visible )
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimPlotAxisProperties::computeAndSetScaleFactor()
void RimPlotAxisProperties::enableAutoValueForScaleFactor( bool enable )
{
m_scaleFactor.uiCapability()->enableAutoValue( enable );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimPlotAxisProperties::computeAndSetAutoValueForScaleFactor()
{
auto maxAbsValue = std::max( std::fabs( visibleRangeMax() ), std::fabs( visibleRangeMin() ) );
double scaleFactor = 1.0;
if ( maxAbsValue < 1.0 && maxAbsValue > 1e-6 )
{
// Do not use scale factor for small values above 1e-6
m_scaleFactor = 1.0;
return;
scaleFactor = 1.0;
}
if ( maxAbsValue > 1.0 && maxAbsValue < 1e6 )
else if ( maxAbsValue > 1.0 && maxAbsValue < 1e6 )
{
// Do not use scale factor for values above 1 and below 1e-6
m_scaleFactor = 1.0;
return;
}
int exponent = std::floor( std::log10( maxAbsValue ) );
if ( exponent > 0 )
{
while ( exponent > -20 && ( exponent % 3 ) != 0 )
{
exponent--;
}
scaleFactor = 1.0;
}
else
{
while ( exponent < 1 && ( exponent % 3 ) != 0 )
int exponent = std::floor( std::log10( maxAbsValue ) );
if ( exponent > 0 )
{
exponent++;
while ( exponent > -20 && ( exponent % 3 ) != 0 )
{
exponent--;
}
}
else
{
while ( exponent < 1 && ( exponent % 3 ) != 0 )
{
exponent++;
}
}
scaleFactor = std::pow( 10, exponent );
}
m_scaleFactor = std::pow( 10, exponent );
m_scaleFactor.uiCapability()->setAutoValue( scaleFactor );
}
//--------------------------------------------------------------------------------------------------
@ -567,9 +579,36 @@ double RimPlotAxisProperties::visibleRangeMax() const
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimPlotAxisProperties::setMinMaxOverridden( bool isOverridden )
void RimPlotAxisProperties::enableAutoValueMinMax( bool enable )
{
m_isMinMaxOverridden = isOverridden;
m_visibleRangeMin.uiCapability()->enableAutoValueSupport( enable );
m_visibleRangeMax.uiCapability()->enableAutoValueSupport( enable );
if ( enable )
{
m_visibleRangeMin.uiCapability()->enableAutoValue( enable );
m_visibleRangeMax.uiCapability()->enableAutoValue( enable );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimPlotAxisProperties::setAutoValueVisibleRangeMin( double value )
{
// Do not notify editors, as this causes recursive updates
bool notifyFieldChanged = false;
m_visibleRangeMin.uiCapability()->setAutoValue( value, notifyFieldChanged );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimPlotAxisProperties::setAutoValueVisibleRangeMax( double value )
{
// Do not notify editors, as this causes recursive updates
bool notifyFieldChanged = false;
m_visibleRangeMax.uiCapability()->setAutoValue( value, notifyFieldChanged );
}
//--------------------------------------------------------------------------------------------------
@ -588,6 +627,17 @@ void RimPlotAxisProperties::setVisibleRangeMax( double value )
m_visibleRangeMax = value;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimPlotAxisProperties::setAutoZoomIfNoCustomRangeIsSet()
{
if ( !m_visibleRangeMax.uiCapability()->isAutoValueEnabled() ) return;
if ( !m_visibleRangeMin.uiCapability()->isAutoValueEnabled() ) return;
setAutoZoom( true );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -604,6 +654,24 @@ void RimPlotAxisProperties::setMajorTickmarkCount( LegendTickmarkCount count )
m_majorTickmarkCount = count;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimPlotAxisProperties::setAutoValueForMajorTickmarkCount( LegendTickmarkCount count )
{
auto enumValue = static_cast<std::underlying_type_t<LegendTickmarkCount>>( count );
m_majorTickmarkCount.uiCapability()->setAutoValue( enumValue );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimPlotAxisProperties::enableAutoValueForMajorTickmarkCount( bool enable )
{
m_majorTickmarkCount.uiCapability()->enableAutoValue( enable );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -659,23 +727,6 @@ void RimPlotAxisProperties::updateOptionSensitivity()
m_customTitle.uiCapability()->setUiReadOnly( isAutoTitle );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimPlotAxisProperties::updateOverriddenLabelAndReadOnlyState()
{
// Auto Appearance is defined in RimSummaryMultiPlot::analyzePlotsAndAdjustAppearanceSettings()
QString axisRangeToolTip = "Controlled by Axis Range Control";
RiaFieldHandleTools::updateOverrideStateAndLabel( &m_visibleRangeMin, m_isMinMaxOverridden, axisRangeToolTip );
RiaFieldHandleTools::updateOverrideStateAndLabel( &m_visibleRangeMax, m_isMinMaxOverridden, axisRangeToolTip );
QString autoAppearanceToolTip = "Controlled by Auto Adjust Appearance";
RiaFieldHandleTools::updateOverrideStateAndLabel( &m_majorTickmarkCount, isAppearanceOverridden(), autoAppearanceToolTip );
RiaFieldHandleTools::updateOverrideStateAndLabel( &m_scaleFactor, isAppearanceOverridden(), autoAppearanceToolTip );
RiaFieldHandleTools::updateOverrideStateAndLabel( &m_displayLongName, isAppearanceOverridden(), autoAppearanceToolTip );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -97,7 +97,8 @@ public:
double scaleFactor() const;
void setVisible( bool visible );
void computeAndSetScaleFactor();
void enableAutoValueForScaleFactor( bool enable );
void computeAndSetAutoValueForScaleFactor();
bool isDeletable() const override;
@ -113,12 +114,17 @@ public:
double visibleRangeMin() const override;
double visibleRangeMax() const override;
void setMinMaxOverridden( bool isOverridden );
void enableAutoValueMinMax( bool enable );
void setAutoValueVisibleRangeMin( double value );
void setAutoValueVisibleRangeMax( double value );
void setVisibleRangeMin( double value ) override;
void setVisibleRangeMax( double value ) override;
void setAutoZoomIfNoCustomRangeIsSet();
LegendTickmarkCount majorTickmarkCount() const override;
void setMajorTickmarkCount( LegendTickmarkCount count ) override;
void setAutoValueForMajorTickmarkCount( LegendTickmarkCount count );
void enableAutoValueForMajorTickmarkCount( bool enable );
protected:
void initAfterRead() override;
@ -131,15 +137,12 @@ protected:
private:
void updateOptionSensitivity();
void updateOverriddenLabelAndReadOnlyState();
caf::FontTools::FontSize plotFontSize() const;
void defineObjectEditorAttribute( QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override;
private:
caf::PdmField<bool> m_isActive;
caf::PdmField<bool> m_isMinMaxOverridden;
caf::PdmField<bool> isAutoTitle;
caf::PdmField<bool> m_displayShortName;
caf::PdmField<bool> m_displayLongName;

View File

@ -53,9 +53,6 @@ RimPlotAxisPropertiesInterface::RimPlotAxisPropertiesInterface()
: settingsChanged( this )
{
CAF_PDM_InitObject( "Plot Axis Properties Interface" );
CAF_PDM_InitField( &m_isAppearanceOverridden, "IsAppearanceOverridden", false, "IsAppearanceOverridden" );
m_isAppearanceOverridden.uiCapability()->setUiHidden( true );
}
//--------------------------------------------------------------------------------------------------
@ -74,14 +71,6 @@ bool RimPlotAxisPropertiesInterface::isLogarithmicScaleEnabled() const
return false;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimPlotAxisPropertiesInterface::setAppearanceOverridden( bool isOverridden )
{
m_isAppearanceOverridden = isOverridden;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -109,11 +98,3 @@ int RimPlotAxisPropertiesInterface::tickmarkCountFromEnum( LegendTickmarkCount c
return maxTickmarkCount;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimPlotAxisPropertiesInterface::isAppearanceOverridden() const
{
return m_isAppearanceOverridden();
}

View File

@ -78,7 +78,6 @@ public:
virtual LegendTickmarkCount majorTickmarkCount() const = 0;
virtual void setMajorTickmarkCount( LegendTickmarkCount count ) = 0;
void setAppearanceOverridden( bool isOverridden );
static int tickmarkCountFromEnum( LegendTickmarkCount count );
@ -86,10 +85,4 @@ public:
virtual AxisTitlePositionType titlePosition() const = 0;
virtual int titleFontSize() const = 0;
virtual int valuesFontSize() const = 0;
protected:
bool isAppearanceOverridden() const;
private:
caf::PdmField<bool> m_isAppearanceOverridden;
};

View File

@ -146,7 +146,7 @@ RimSummaryMultiPlot::RimSummaryMultiPlot()
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_linkSubPlotAxes );
CAF_PDM_InitField( &m_linkTimeAxis, "LinkTimeAxis", true, "Link Time Axis" );
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_linkTimeAxis );
CAF_PDM_InitField( &m_autoAdjustAppearance, "AutoAdjustAppearance", true, "Auto Adjust Appearance" );
CAF_PDM_InitField( &m_autoAdjustAppearance, "AutoAdjustAppearance", true, "Auto Plot Settings" );
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_autoAdjustAppearance );
CAF_PDM_InitField( &m_allow3DSelectionLink, "Allow3DSelectionLink", true, "Allow Well Selection from 3D View" );
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_allow3DSelectionLink );
@ -453,9 +453,8 @@ void RimSummaryMultiPlot::fieldChangedByUi( const caf::PdmFieldHandle* changedFi
else if ( changedField == &m_linkSubPlotAxes || changedField == &m_axisRangeAggregation ||
changedField == &m_linkTimeAxis )
{
syncAxisRanges();
setOverriddenFlag();
syncAxisRanges();
}
else if ( changedField == &m_hidePlotsWithValuesBelow )
{
@ -493,8 +492,8 @@ void RimSummaryMultiPlot::fieldChangedByUi( const caf::PdmFieldHandle* changedFi
}
else if ( changedField == &m_autoAdjustAppearance )
{
checkAndApplyAutoAppearance();
setOverriddenFlag();
checkAndApplyAutoAppearance();
}
else
{
@ -731,6 +730,8 @@ void RimSummaryMultiPlot::onLoadDataAndUpdate()
//--------------------------------------------------------------------------------------------------
void RimSummaryMultiPlot::zoomAll()
{
setOverriddenFlag();
// Reset zoom to make sure the complete range for min/max is available
RimMultiPlot::zoomAll();
@ -816,8 +817,16 @@ void RimSummaryMultiPlot::syncAxisRanges()
return;
}
// Reset zoom to make sure the complete range for min/max is available
RimMultiPlot::zoomAllYAxes();
// Reset zoom for axes with no custom range set to make sure the complete range for min/max is available
for ( auto p : summaryPlots() )
{
for ( auto ax : p->plotYAxes() )
{
ax->setAutoZoomIfNoCustomRangeIsSet();
}
}
updateZoom();
if ( m_axisRangeAggregation() == AxisRangeAggregation::SUB_PLOTS )
{
@ -853,8 +862,8 @@ void RimSummaryMultiPlot::syncAxisRanges()
auto [minVal, maxVal] = axisRanges[axis->plotAxisType()];
if ( axis->isAxisInverted() ) std::swap( minVal, maxVal );
axis->setAutoZoom( false );
axis->setVisibleRangeMin( minVal );
axis->setVisibleRangeMax( maxVal );
axis->setAutoValueVisibleRangeMin( minVal );
axis->setAutoValueVisibleRangeMax( maxVal );
}
plot->updateAxes();
@ -1099,8 +1108,8 @@ void RimSummaryMultiPlot::computeAggregatedAxisRange()
scaleEngine.autoScale( maxMajorTickIntervalCount, minVal, maxVal, stepSize );
}
axis->setVisibleRangeMin( minVal );
axis->setVisibleRangeMax( maxVal );
axis->setAutoValueVisibleRangeMin( minVal );
axis->setAutoValueVisibleRangeMax( maxVal );
}
}
@ -1152,17 +1161,17 @@ void RimSummaryMultiPlot::setOverriddenFlag()
///
//--------------------------------------------------------------------------------------------------
void RimSummaryMultiPlot::setOverriddenFlagsForPlot( RimSummaryPlot* summaryPlot,
bool isMinMaxOverridden,
bool isAppearanceOverridden )
bool enableAutoValueMinMax,
bool enableAutoValueAppearance )
{
for ( auto plotAxis : summaryPlot->plotAxes() )
auto timeAxisProp = summaryPlot->timeAxisProperties();
if ( timeAxisProp ) timeAxisProp->enableAutoValueForMajorTickmarkCount( enableAutoValueAppearance );
for ( auto plotAxis : summaryPlot->plotYAxes() )
{
plotAxis->setAppearanceOverridden( isAppearanceOverridden );
auto plotAxProp = dynamic_cast<RimPlotAxisProperties*>( plotAxis );
if ( plotAxProp )
{
plotAxProp->setMinMaxOverridden( isMinMaxOverridden );
}
plotAxis->enableAutoValueMinMax( enableAutoValueMinMax );
plotAxis->enableAutoValueForMajorTickmarkCount( enableAutoValueAppearance );
plotAxis->enableAutoValueForScaleFactor( enableAutoValueAppearance );
}
}
@ -1205,16 +1214,16 @@ void RimSummaryMultiPlot::analyzePlotsAndAdjustAppearanceSettings()
analyzer.appendAddresses( addresses );
}
bool hasOnlyOneQuantity = analyzer.quantities().size() == 1;
bool hasOnlyOneQuantity = analyzer.isSingleQuantityIgnoreHistory();
for ( auto p : summaryPlots() )
{
auto timeAxisProp = p->timeAxisProperties();
if ( columnCount() < 3 )
timeAxisProp->setMajorTickmarkCount( RimPlotAxisProperties::LegendTickmarkCount::TICKMARK_DEFAULT );
timeAxisProp->setAutoValueForMajorTickmarkCount( RimPlotAxisProperties::LegendTickmarkCount::TICKMARK_DEFAULT );
else
timeAxisProp->setMajorTickmarkCount( RimPlotAxisProperties::LegendTickmarkCount::TICKMARK_FEW );
timeAxisProp->setAutoValueForMajorTickmarkCount( RimPlotAxisProperties::LegendTickmarkCount::TICKMARK_FEW );
for ( RimPlotAxisPropertiesInterface* axisInterface : p->plotYAxes() )
{
@ -1223,11 +1232,13 @@ void RimSummaryMultiPlot::analyzePlotsAndAdjustAppearanceSettings()
if ( !axisProp ) continue;
if ( rowsPerPage() == 1 )
axisProp->setMajorTickmarkCount( RimPlotAxisPropertiesInterface::LegendTickmarkCount::TICKMARK_DEFAULT );
axisProp->setAutoValueForMajorTickmarkCount(
RimPlotAxisPropertiesInterface::LegendTickmarkCount::TICKMARK_DEFAULT );
else
axisProp->setMajorTickmarkCount( RimPlotAxisPropertiesInterface::LegendTickmarkCount::TICKMARK_FEW );
axisProp->setAutoValueForMajorTickmarkCount(
RimPlotAxisPropertiesInterface::LegendTickmarkCount::TICKMARK_FEW );
axisProp->computeAndSetScaleFactor();
axisProp->computeAndSetAutoValueForScaleFactor();
if ( hasOnlyOneQuantity )
{
@ -1236,9 +1247,15 @@ void RimSummaryMultiPlot::analyzePlotsAndAdjustAppearanceSettings()
auto [row, col] = gridLayoutInfoForSubPlot( p );
if ( col == 0 )
{
axisProp->setShowUnitText( true );
axisProp->setShowDescription( true );
}
else
{
axisProp->setShowUnitText( false );
axisProp->setShowDescription( false );
}
}
}
@ -1369,8 +1386,8 @@ void RimSummaryMultiPlot::appendSubPlotByStepping( int direction )
// NOTE: If summary cross plots should be handled here, we also need to call
// curve->setSummaryCaseX( newCase );
// Setting summaryCaseX with a default uninitialized summary address causes issues for the summary name
// analyzer
// Setting summaryCaseX with a default uninitialized summary address causes issues for the summary
// name analyzer
}
}
else if ( m_sourceStepping()->stepDimension() == RimSummaryDataSourceStepping::SourceSteppingDimension::ENSEMBLE )

View File

@ -135,7 +135,8 @@ private:
void updatePlotVisibility();
void setOverriddenFlag();
void setOverriddenFlagsForPlot( RimSummaryPlot* summaryPlot, bool isMinMaxOverridden, bool isAppearanceOverridden );
static void
setOverriddenFlagsForPlot( RimSummaryPlot* summaryPlot, bool isMinMaxOverridden, bool isAppearanceOverridden );
void duplicate();

View File

@ -1738,8 +1738,19 @@ void RimSummaryPlot::updateZoomFromParentPlot()
auto [axisMin, axisMax] = plotWidget()->axisRange( axisProperties->plotAxisType() );
if ( axisProperties->isAxisInverted() ) std::swap( axisMin, axisMax );
axisProperties->setVisibleRangeMax( axisMax );
axisProperties->setVisibleRangeMin( axisMin );
auto propertyAxis = dynamic_cast<RimPlotAxisProperties*>( axisProperties );
if ( propertyAxis )
{
propertyAxis->setAutoValueVisibleRangeMax( axisMax );
propertyAxis->setAutoValueVisibleRangeMin( axisMin );
}
else
{
axisProperties->setVisibleRangeMax( axisMax );
axisProperties->setVisibleRangeMin( axisMin );
}
axisProperties->updateConnectedEditors();
}
}
@ -2849,12 +2860,13 @@ std::vector<RimPlotAxisPropertiesInterface*> RimSummaryPlot::plotAxes() const
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<RimPlotAxisPropertiesInterface*> RimSummaryPlot::plotYAxes() const
std::vector<RimPlotAxisProperties*> RimSummaryPlot::plotYAxes() const
{
std::vector<RimPlotAxisPropertiesInterface*> axisProps;
std::vector<RimPlotAxisProperties*> axisProps;
for ( const auto& ap : m_axisProperties )
{
if ( RiaDefines::isVertical( ap->plotAxisType().axis() ) ) axisProps.push_back( ap );
auto plotAxisProp = dynamic_cast<RimPlotAxisProperties*>( ap.p() );
if ( plotAxisProp ) axisProps.push_back( plotAxisProp );
}
return axisProps;

View File

@ -197,7 +197,7 @@ public:
std::vector<RimSummaryCurve*> allCurves( RimSummaryDataSourceStepping::Axis axis ) const override;
std::vector<RimPlotAxisPropertiesInterface*> plotAxes() const;
std::vector<RimPlotAxisPropertiesInterface*> plotYAxes() const;
std::vector<RimPlotAxisProperties*> plotYAxes() const;
RimPlotAxisPropertiesInterface* axisPropertiesForPlotAxis( RiuPlotAxis plotAxis ) const;

View File

@ -120,6 +120,7 @@ RimSummaryTimeAxisProperties::RimSummaryTimeAxisProperties()
m_timeFormat = RiaPreferences::current()->timeFormat();
CAF_PDM_InitFieldNoDefault( &m_majorTickmarkCount, "MajorTickmarkCount", "Major Tickmark Count" );
m_majorTickmarkCount.uiCapability()->enableAutoValueSupport( true );
CAF_PDM_InitFieldNoDefault( &m_annotations, "Annotations", "" );
m_annotations.uiCapability()->setUiTreeHidden( true );
@ -373,6 +374,24 @@ void RimSummaryTimeAxisProperties::setMajorTickmarkCount( LegendTickmarkCount co
m_majorTickmarkCount = count;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryTimeAxisProperties::setAutoValueForMajorTickmarkCount( LegendTickmarkCount count )
{
auto enumValue = static_cast<std::underlying_type_t<LegendTickmarkCount>>( count );
m_majorTickmarkCount.uiCapability()->setAutoValue( enumValue );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryTimeAxisProperties::enableAutoValueForMajorTickmarkCount( bool enable )
{
m_majorTickmarkCount.uiCapability()->enableAutoValue( enable );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -616,10 +635,6 @@ void RimSummaryTimeAxisProperties::defineUiOrdering( QString uiConfigName, caf::
timeGroup->add( &m_valuesFontSize );
timeGroup->add( &m_majorTickmarkCount );
// Auto Appearance is defined in RimSummaryMultiPlot::analyzePlotsAndAdjustAppearanceSettings()
QString autoAppearanceToolTip = "Controlled by Auto Adjust Appearance";
RiaFieldHandleTools::updateOverrideStateAndLabel( &m_majorTickmarkCount, isAppearanceOverridden(), autoAppearanceToolTip );
if ( m_timeMode() == DATE )
{
caf::PdmUiGroup* advancedGroup = timeGroup->addNewGroup( "Date/Time Label Format" );

View File

@ -106,6 +106,8 @@ public:
LegendTickmarkCount majorTickmarkCount() const override;
void setMajorTickmarkCount( LegendTickmarkCount count ) override;
void setAutoValueForMajorTickmarkCount( LegendTickmarkCount count );
void enableAutoValueForMajorTickmarkCount( bool enable );
const QString objectName() const override;
const QString axisTitleText() const override;

View File

@ -336,7 +336,7 @@ QIcon RiuDockWidgetTools::dockIcon( const QString dockWidgetName )
else if ( dockWidgetName == mainWindowProjectTreeName() )
return QIcon( ":/standard.svg" );
else if ( dockWidgetName == mainWindowDataSourceTreeName() )
return QIcon( ":/data-sources.svg" );
return QIcon( ":/Calculator.svg" );
else if ( dockWidgetName == mainWindowScriptsTreeName() )
return QIcon( ":/scripts.svg" );
else if ( dockWidgetName == mainPlotWindowName() )

View File

@ -731,7 +731,7 @@ void RiuMainWindow::createToolBars()
void RiuMainWindow::createDockPanels()
{
const int nTreeViews = 3;
const std::vector<QString> treeViewTitles = { "Project Tree", "Data Sources", "Scripts" };
const std::vector<QString> treeViewTitles = { "Project Tree", "Calculator Data ", "Scripts" };
const std::vector<QString> treeViewConfigs = { "MainWindow.ProjectTree", "MainWindow.DataSources", "MainWindow.Scripts" };
const std::vector<QString> treeViewDockNames = { RiuDockWidgetTools::mainWindowProjectTreeName(),
RiuDockWidgetTools::mainWindowDataSourceTreeName(),

View File

@ -136,13 +136,13 @@ void PdmUiFieldHandle::enableAndSetAutoValue( const QVariant& autoValue )
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmUiFieldHandle::setAutoValue( const QVariant& autoValue )
void PdmUiFieldHandle::setAutoValue( const QVariant& autoValue, bool notifyFieldChanged )
{
m_autoValue = autoValue;
if ( m_useAutoValue )
if ( m_useAutoValue && m_autoValue.isValid() )
{
setValueFromUiEditor( m_autoValue, false );
setValueFromUiEditor( m_autoValue, notifyFieldChanged );
updateConnectedEditors();
}
}
@ -162,9 +162,9 @@ void PdmUiFieldHandle::enableAutoValue( bool enable )
{
m_useAutoValue = enable;
if ( m_useAutoValue )
if ( m_useAutoValue && m_autoValue.isValid() )
{
setValueFromUiEditor( m_autoValue, false );
setValueFromUiEditor( m_autoValue, true );
updateConnectedEditors();
}
}
@ -174,6 +174,8 @@ void PdmUiFieldHandle::enableAutoValue( bool enable )
//--------------------------------------------------------------------------------------------------
bool PdmUiFieldHandle::isAutoValueEnabled() const
{
if ( !m_isAutoValueSupported ) return false;
return m_useAutoValue;
}

View File

@ -28,7 +28,7 @@ public:
void setAutoAddingOptionFromValue( bool isAddingValue );
void enableAndSetAutoValue( const QVariant& autoValue );
void setAutoValue( const QVariant& autoValue );
void setAutoValue( const QVariant& autoValue, bool notifyFieldChanged = true );
QVariant autoValue() const;
void enableAutoValue( bool enable );
bool isAutoValueEnabled() const;

View File

@ -656,9 +656,9 @@ class SmallDemoPdmObjectA : public caf::PdmObject
CAF_PDM_HEADER_INIT;
public:
enum TestEnumType
enum class TestEnumType
{
T1,
T1 = 10,
T2,
T3
};
@ -687,13 +687,14 @@ public:
"Enter some small number here",
"This is a place you can enter a small integer value if you want");
CAF_PDM_InitField(&m_textField, "TextField", QString("Small Demo Object A"), "Name Text Field", "", "", "");
CAF_PDM_InitField(&m_testEnumField, "TestEnumValue", caf::AppEnum<TestEnumType>(T1), "EnumField", "", "", "");
CAF_PDM_InitField(
&m_testEnumField, "TestEnumValue", caf::AppEnum<TestEnumType>(TestEnumType::T1), "EnumField", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_ptrField, "m_ptrField", "PtrField", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_proxyEnumField, "ProxyEnumValue", "ProxyEnum", "", "", "");
m_proxyEnumField.registerSetMethod(this, &SmallDemoPdmObjectA::setEnumMember);
m_proxyEnumField.registerGetMethod(this, &SmallDemoPdmObjectA::enumMember);
m_proxyEnumMember = T2;
m_proxyEnumMember = TestEnumType::T2;
CAF_PDM_InitFieldNoDefault(&m_multipleAppEnum, "MultipleAppEnumValue", "MultipleAppEnumValue", "", "", "");
m_multipleAppEnum.capability<caf::PdmUiFieldHandle>()->setUiEditorTypeName(
@ -739,7 +740,7 @@ public:
}
else if (changedField == &m_highlightedEnum)
{
std::cout << "Highlight value " << m_highlightedEnum() << std::endl;
std::cout << "Highlight value " << m_highlightedEnum().uiText().toStdString() << std::endl;
}
else if (changedField == &m_pushButtonField)
{
@ -803,7 +804,11 @@ public:
void enableAutoValueForTestEnum(TestEnumType value)
{
m_testEnumField.uiCapability()->enableAndSetAutoValue(value);
// Convert to integer value as this is used when communicating enum from UI to field enum value
// See PdmUiFieldSpecialization<caf::AppEnum<T>>
auto enumValue = static_cast<std::underlying_type_t<TestEnumType>>(value);
m_testEnumField.uiCapability()->enableAndSetAutoValue(enumValue);
}
void enableAutoValueForDouble(double value)
@ -818,7 +823,11 @@ public:
void setAutoValueForTestEnum(TestEnumType value)
{
m_testEnumField.uiCapability()->setAutoValue(value);
// Convert to integer value as this is used when communicating enum from UI to field enum value
// See PdmUiFieldSpecialization<caf::AppEnum<T>>
auto enumValue = static_cast<std::underlying_type_t<TestEnumType>>(value);
m_testEnumField.uiCapability()->setAutoValue(enumValue);
}
void setAutoValueForDouble(double value)
@ -879,10 +888,10 @@ namespace caf
template<>
void AppEnum<SmallDemoPdmObjectA::TestEnumType>::setUp()
{
addItem(SmallDemoPdmObjectA::T1, "T1", "An A letter");
addItem(SmallDemoPdmObjectA::T2, "T2", "A B letter");
addItem(SmallDemoPdmObjectA::T3, "T3", "A B C letter");
setDefault(SmallDemoPdmObjectA::T1);
addItem(SmallDemoPdmObjectA::TestEnumType::T1, "T1", "An A letter");
addItem(SmallDemoPdmObjectA::TestEnumType::T2, "T2", "A B letter");
addItem(SmallDemoPdmObjectA::TestEnumType::T3, "T3", "A B C letter");
setDefault(SmallDemoPdmObjectA::TestEnumType::T1);
}
} // namespace caf

View File

@ -11,9 +11,9 @@ set(QRC_FILES textedit.qrc)
find_package(
Qt5
COMPONENTS
REQUIRED Core Gui Widgets OpenGL
REQUIRED Core Gui Widgets OpenGL Svg
)
set(QT_LIBRARIES Qt5::Core Qt5::Gui Qt5::Widgets Qt5::OpenGL)
set(QT_LIBRARIES Qt5::Core Qt5::Gui Qt5::Widgets Qt5::OpenGL Qt5::Svg)
qt5_wrap_cpp(MOC_SOURCE_FILES ${MOC_HEADER_FILES})
qt5_add_resources(QRC_FILES_CPP ${QRC_FILES})

View File

@ -53,8 +53,6 @@ set(MOC_HEADER_FILES
cafPdmDoubleStringValidator.h
cafPdmUiPickableLineEditor.h
cafPdmUiLabelEditor.h
cafUiAppearanceSettings.h
cafUiIconFactory.h
)
find_package(

View File

@ -279,6 +279,8 @@ void PdmUiComboBoxEditor::configureAndUpdateUi( const QString& uiConfigName )
m_autoValueToolButton->setIcon( icon );
m_autoValueToolButton->setChecked( uiField()->isAutoValueEnabled() );
QString tooltipText = uiField()->isAutoValueEnabled() ? "Linked" : "Unlinked";
m_autoValueToolButton->setToolTip( tooltipText );
m_layout->insertWidget( 3, m_autoValueToolButton );
m_autoValueToolButton->show();
}

View File

@ -156,6 +156,9 @@ void PdmUiLineEditor::configureAndUpdateUi( const QString& uiConfigName )
m_autoValueToolButton->setIcon( icon );
m_autoValueToolButton->setChecked( uiField()->isAutoValueEnabled() );
QString tooltipText = uiField()->isAutoValueEnabled() ? "Linked" : "Unlinked";
m_autoValueToolButton->setToolTip( tooltipText );
m_layout->insertWidget( 1, m_autoValueToolButton );
m_autoValueToolButton->show();
}

View File

@ -156,7 +156,7 @@ static const struct
// clang-format off
static char* linked_svg_data = R"(
static const char* linked_svg_data = R"(
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">
@ -168,7 +168,7 @@ static char* linked_svg_data = R"(
)";
static char* linked_white_svg_data = R"(
static const char* linked_white_svg_data = R"(
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">
@ -183,7 +183,7 @@ static char* linked_white_svg_data = R"(
)";
static char* unlinked_svg_data= R"(
static const char* unlinked_svg_data= R"(
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">
@ -201,7 +201,7 @@ static char* unlinked_svg_data= R"(
)";
static char* unlinked_white_svg_data = R"(
static const char* unlinked_white_svg_data = R"(
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">