diff --git a/ApplicationLibCode/ProjectDataModel/CMakeLists_files.cmake b/ApplicationLibCode/ProjectDataModel/CMakeLists_files.cmake index 17c3daa87a..8ad1982d45 100644 --- a/ApplicationLibCode/ProjectDataModel/CMakeLists_files.cmake +++ b/ApplicationLibCode/ProjectDataModel/CMakeLists_files.cmake @@ -67,7 +67,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RimContextCommandBuilder.h ${CMAKE_CURRENT_LIST_DIR}/RimGridCollection.h ${CMAKE_CURRENT_LIST_DIR}/RimPlotCurve.h - ${CMAKE_CURRENT_LIST_DIR}/RimPlotCurveCurve.h + ${CMAKE_CURRENT_LIST_DIR}/RimPlotCurveAppearance.h ${CMAKE_CURRENT_LIST_DIR}/RimStackablePlotCurve.h ${CMAKE_CURRENT_LIST_DIR}/RimBoxIntersection.h ${CMAKE_CURRENT_LIST_DIR}/RimAdvancedSnapshotExportDefinition.h diff --git a/ApplicationLibCode/ProjectDataModel/Flow/RimWellFlowRateCurve.cpp b/ApplicationLibCode/ProjectDataModel/Flow/RimWellFlowRateCurve.cpp index 9f3621d0c5..71c8b784ba 100644 --- a/ApplicationLibCode/ProjectDataModel/Flow/RimWellFlowRateCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/Flow/RimWellFlowRateCurve.cpp @@ -28,6 +28,8 @@ #include "RiuQwtPlotCurve.h" +#include "RiaColorTools.h" + #include "qwt_plot.h" #include @@ -201,10 +203,9 @@ void RimWellFlowRateCurve::updateCurveAppearance() if ( m_doFillCurve || isLastCurveInGroup ) // Fill the last curve in group with a transparent color to "tie" the // group together { - QColor curveQColor = - QColor( m_curveColor.value().rByte(), m_curveColor.value().gByte(), m_curveColor.value().bByte() ); - QColor fillColor = curveQColor; - QColor lineColor = curveQColor.darker(); + QColor curveQColor = RiaColorTools::toQColor( m_curveAppearance->color() ); + QColor fillColor = curveQColor; + QColor lineColor = curveQColor.darker(); if ( !m_doFillCurve && isLastCurveInGroup ) { @@ -239,8 +240,6 @@ void RimWellFlowRateCurve::defineUiOrdering( QString uiConfigName, caf::PdmUiOrd { uiOrdering.add( &m_curveName ); m_curveName.uiCapability()->setUiReadOnly( true ); - uiOrdering.add( &m_curveColor ); - m_curveColor.uiCapability()->setUiReadOnly( true ); uiOrdering.skipRemainingFields(); } diff --git a/ApplicationLibCode/ProjectDataModel/RimPlotCurve.cpp b/ApplicationLibCode/ProjectDataModel/RimPlotCurve.cpp index 97665eba37..15f3676150 100644 --- a/ApplicationLibCode/ProjectDataModel/RimPlotCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimPlotCurve.cpp @@ -27,6 +27,7 @@ #include "RimEnsembleCurveSet.h" #include "RimEnsembleCurveSetCollection.h" #include "RimNameConfig.h" +#include "RimProject.h" #include "RimSummaryCrossPlot.h" #include "RimSummaryCurve.h" #include "RimSummaryCurveCollection.h" @@ -72,35 +73,64 @@ RimPlotCurve::RimPlotCurve() m_legendEntryText.uiCapability()->setUiHidden( true ); CAF_PDM_InitField( &m_isUsingAutoName, "AutoName", true, "Auto Name", "", "", "" ); + CAF_PDM_InitField( &m_showLegend, "ShowLegend", true, "Contribute To Legend", "", "", "" ); + CAF_PDM_InitField( &m_showErrorBars, "ShowErrorBars", true, "Show Error Bars", "", "", "" ); - CAF_PDM_InitField( &m_curveColor, "Color", RiaColorTools::textColor3f(), "Color", "", "", "" ); - CAF_PDM_InitField( &m_fillColor, "FillColor", cvf::Color3f( -1.0, -1.0, -1.0 ), "Fill Color", "", "", "" ); + // Obsolete field: appearance configuration is moved to RimPlotCurveAppearance + CAF_PDM_InitField( &m_curveColor_OBSOLETE, "Color", RiaColorTools::textColor3f(), "Color", "", "", "" ); + m_curveColor_OBSOLETE.xmlCapability()->setIOWritable( false ); - CAF_PDM_InitField( &m_curveThickness, "Thickness", 1, "Line Thickness", "", "", "" ); - m_curveThickness.uiCapability()->setUiEditorTypeName( caf::PdmUiComboBoxEditor::uiEditorTypeName() ); + CAF_PDM_InitField( &m_fillColor_OBSOLETE, "FillColor", cvf::Color3f( -1.0, -1.0, -1.0 ), "Fill Color", "", "", "" ); + m_fillColor_OBSOLETE.xmlCapability()->setIOWritable( false ); - CAF_PDM_InitFieldNoDefault( &m_curveInterpolation, "CurveInterpolation", "Interpolation", "", "", "" ); - CAF_PDM_InitFieldNoDefault( &m_lineStyle, "LineStyle", "Line Style", "", "", "" ); - CAF_PDM_InitFieldNoDefault( &m_fillStyle, "FillStyle", "Area Fill Style", "", "", "" ); - CAF_PDM_InitFieldNoDefault( &m_pointSymbol, "PointSymbol", "Symbol", "", "", "" ); - CAF_PDM_InitField( &m_symbolEdgeColor, "SymbolEdgeColor", RiaColorTools::textColor3f(), "Symbol Edge Color", "", "", "" ); + CAF_PDM_InitField( &m_curveThickness_OBSOLETE, "Thickness", 1, "Line Thickness", "", "", "" ); + m_curveThickness_OBSOLETE.xmlCapability()->setIOWritable( false ); - CAF_PDM_InitField( &m_symbolSkipPixelDistance, + CAF_PDM_InitFieldNoDefault( &m_curveInterpolation_OBSOLETE, "CurveInterpolation", "Interpolation", "", "", "" ); + m_curveInterpolation_OBSOLETE.xmlCapability()->setIOWritable( false ); + + CAF_PDM_InitFieldNoDefault( &m_lineStyle_OBSOLETE, "LineStyle", "Line Style", "", "", "" ); + m_lineStyle_OBSOLETE.xmlCapability()->setIOWritable( false ); + + CAF_PDM_InitFieldNoDefault( &m_fillStyle_OBSOLETE, "FillStyle", "Area Fill Style", "", "", "" ); + m_fillStyle_OBSOLETE.xmlCapability()->setIOWritable( false ); + + CAF_PDM_InitFieldNoDefault( &m_pointSymbol_OBSOLETE, "PointSymbol", "Symbol", "", "", "" ); + m_pointSymbol_OBSOLETE.xmlCapability()->setIOWritable( false ); + + CAF_PDM_InitField( &m_symbolEdgeColor_OBSOLETE, + "SymbolEdgeColor", + RiaColorTools::textColor3f(), + "Symbol Edge Color", + "", + "", + "" ); + m_symbolEdgeColor_OBSOLETE.xmlCapability()->setIOWritable( false ); + + CAF_PDM_InitField( &m_symbolSkipPixelDistance_OBSOLETE, "SymbolSkipPxDist", 0.0f, "Symbol Skip Distance", "", "Minimum pixel distance between symbols", "" ); + m_symbolSkipPixelDistance_OBSOLETE.xmlCapability()->setIOWritable( false ); - CAF_PDM_InitField( &m_showLegend, "ShowLegend", true, "Contribute To Legend", "", "", "" ); + CAF_PDM_InitFieldNoDefault( &m_symbolLabel_OBSOLETE, "SymbolLabel", "Symbol Label", "", "", "" ); + m_symbolLabel_OBSOLETE.xmlCapability()->setIOWritable( false ); - CAF_PDM_InitFieldNoDefault( &m_symbolLabel, "SymbolLabel", "Symbol Label", "", "", "" ); - CAF_PDM_InitField( &m_symbolSize, "SymbolSize", 6, "Symbol Size", "", "", "" ); + CAF_PDM_InitField( &m_symbolSize_OBSOLETE, "SymbolSize", 6, "Symbol Size", "", "", "" ); + m_symbolSize_OBSOLETE.xmlCapability()->setIOWritable( false ); - CAF_PDM_InitField( &m_showErrorBars, "ShowErrorBars", true, "Show Error Bars", "", "", "" ); + CAF_PDM_InitFieldNoDefault( &m_symbolLabelPosition_OBSOLETE, "SymbolLabelPosition", "Symbol Label Position", "", "", "" ); + m_symbolLabelPosition_OBSOLETE.xmlCapability()->setIOWritable( false ); - CAF_PDM_InitFieldNoDefault( &m_symbolLabelPosition, "SymbolLabelPosition", "Symbol Label Position", "", "", "" ); + CAF_PDM_InitFieldNoDefault( &m_curveAppearance, "PlotCurveAppearance", "PlotCurveAppearance", "", "", "" ); + m_curveAppearance = new RimPlotCurveAppearance; + m_curveAppearance.uiCapability()->setUiTreeHidden( true ); + m_curveAppearance.uiCapability()->setUiTreeChildrenHidden( true ); + m_curveAppearance->appearanceChanged.connect( this, &RimPlotCurve::onCurveAppearanceChanged ); + m_curveAppearance->appearanceChanged.connect( this, &RimPlotCurve::onFillColorChanged ); m_qwtPlotCurve = new RiuRimQwtPlotCurve( this ); m_qwtCurveErrorBars = new QwtPlotIntervalCurve(); @@ -148,33 +178,6 @@ void RimPlotCurve::fieldChangedByUi( const caf::PdmFieldHandle* changedField, co m_customCurveName = m_curveName; updateCurveNameAndUpdatePlotLegendAndTitle(); } - else if ( &m_curveColor == changedField || &m_curveThickness == changedField || &m_pointSymbol == changedField || - &m_lineStyle == changedField || &m_symbolSkipPixelDistance == changedField || - &m_curveInterpolation == changedField || &m_symbolSize == changedField || - &m_symbolEdgeColor == changedField || &m_fillStyle == changedField || &m_fillColor == changedField ) - { - if ( &m_fillStyle == changedField ) - { - checkAndApplyDefaultFillColor(); - } - - updateCurveAppearance(); - - if ( &m_pointSymbol == changedField ) - { - m_symbolSize.uiCapability()->setUiReadOnly( m_pointSymbol() == RiuQwtSymbol::SYMBOL_NONE ); - m_symbolSkipPixelDistance.uiCapability()->setUiReadOnly( m_pointSymbol() == RiuQwtSymbol::SYMBOL_NONE ); - } - else if ( &m_lineStyle == changedField ) - { - m_curveThickness.uiCapability()->setUiReadOnly( m_lineStyle() == - RiuQwtPlotCurveDefines::LineStyleEnum::STYLE_NONE ); - m_curveInterpolation.uiCapability()->setUiReadOnly( m_lineStyle() == - RiuQwtPlotCurveDefines::LineStyleEnum::STYLE_NONE ); - } - - appearanceChanged.send(); - } else if ( changedField == &m_isUsingAutoName ) { if ( !m_isUsingAutoName ) @@ -264,12 +267,22 @@ void RimPlotCurve::updateCurveVisibility() //-------------------------------------------------------------------------------------------------- void RimPlotCurve::initAfterRead() { - m_symbolSize.uiCapability()->setUiReadOnly( m_pointSymbol() == RiuQwtSymbol::SYMBOL_NONE ); - m_symbolSkipPixelDistance.uiCapability()->setUiReadOnly( m_pointSymbol() == RiuQwtSymbol::SYMBOL_NONE ); - m_curveThickness.uiCapability()->setUiReadOnly( m_lineStyle() == RiuQwtPlotCurveDefines::LineStyleEnum::STYLE_NONE ); - m_curveInterpolation.uiCapability()->setUiReadOnly( m_lineStyle() == RiuQwtPlotCurveDefines::LineStyleEnum::STYLE_NONE ); - - checkAndApplyDefaultFillColor(); + if ( RimProject::current()->isProjectFileVersionEqualOrOlderThan( "2024.10.1" ) ) + { + // Forward values of obsolete fields to appearance object + m_curveAppearance->setSymbolSize( m_symbolSize_OBSOLETE ); + m_curveAppearance->setSymbolLabel( m_symbolLabel_OBSOLETE ); + m_curveAppearance->setColor( m_curveColor_OBSOLETE ); + m_curveAppearance->setLineThickness( m_curveThickness_OBSOLETE ); + m_curveAppearance->setSymbolSkipDistance( m_symbolSkipPixelDistance_OBSOLETE ); + m_curveAppearance->setSymbol( m_pointSymbol_OBSOLETE() ); + m_curveAppearance->setLineStyle( m_lineStyle_OBSOLETE() ); + m_curveAppearance->setFillStyle( m_fillStyle_OBSOLETE() ); + m_curveAppearance->setFillColor( m_fillColor_OBSOLETE ); + m_curveAppearance->setInterpolation( m_curveInterpolation_OBSOLETE() ); + m_curveAppearance->setSymbolLabelPosition( m_symbolLabelPosition_OBSOLETE() ); + m_curveAppearance->setSymbolEdgeColor( m_symbolEdgeColor_OBSOLETE ); + } } //-------------------------------------------------------------------------------------------------- @@ -336,8 +349,16 @@ caf::PdmFieldHandle* RimPlotCurve::userDescriptionField() //-------------------------------------------------------------------------------------------------- void RimPlotCurve::setColor( const cvf::Color3f& color ) { - m_curveColor = color; - m_fillColor = color; + m_curveAppearance->setColor( color ); + m_curveAppearance->setFillColor( color ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Color3f RimPlotCurve::color() const +{ + return m_curveAppearance->color(); } //-------------------------------------------------------------------------------------------------- @@ -576,22 +597,8 @@ void RimPlotCurve::setSamplesFromTimeTAndYValues( const std::vector& dat //-------------------------------------------------------------------------------------------------- void RimPlotCurve::appearanceUiOrdering( caf::PdmUiOrdering& uiOrdering ) { - uiOrdering.add( &m_curveColor ); - uiOrdering.add( &m_pointSymbol ); - if ( RiuQwtSymbol::isFilledSymbol( m_pointSymbol() ) ) - { - uiOrdering.add( &m_symbolEdgeColor ); - } - uiOrdering.add( &m_symbolSize ); - uiOrdering.add( &m_symbolSkipPixelDistance ); - uiOrdering.add( &m_lineStyle ); - uiOrdering.add( &m_fillStyle ); - if ( m_fillStyle != Qt::BrushStyle::NoBrush ) - { - uiOrdering.add( &m_fillColor ); - } - uiOrdering.add( &m_curveThickness ); - uiOrdering.add( &m_curveInterpolation ); + QString configName = "AppearanceOrdering"; + m_curveAppearance->uiOrdering( configName, uiOrdering ); } //-------------------------------------------------------------------------------------------------- @@ -608,11 +615,9 @@ void RimPlotCurve::curveNameUiOrdering( caf::PdmUiOrdering& uiOrdering ) //-------------------------------------------------------------------------------------------------- void RimPlotCurve::updateUiIconFromPlotSymbol() { - if ( m_pointSymbol() != RiuQwtSymbol::NoSymbol && m_qwtPlotCurve ) + if ( m_curveAppearance->symbol() != RiuQwtSymbol::SYMBOL_NONE && m_qwtPlotCurve ) { CVF_ASSERT( RiaGuiApplication::isRunning() ); - QColor curveColor( m_curveColor.value().rByte(), m_curveColor.value().gByte(), m_curveColor.value().bByte() ); - QSizeF iconSize( 24, 24 ); QwtGraphic graphic = m_qwtPlotCurve->legendIcon( 0, iconSize ); QPixmap pixmap = graphic.toPixmap(); @@ -668,10 +673,10 @@ void RimPlotCurve::attachCurveAndErrorBars() //-------------------------------------------------------------------------------------------------- void RimPlotCurve::checkAndApplyDefaultFillColor() { - if ( !m_fillColor().isValid() ) - { - m_fillColor = m_curveColor; - } + // if ( m_curveAppearance->fillColor().isValid() ) + // { + // m_curveAppearance->fillColor() = m_curveAppearance->color(); + // } } //-------------------------------------------------------------------------------------------------- @@ -679,10 +684,10 @@ void RimPlotCurve::checkAndApplyDefaultFillColor() //-------------------------------------------------------------------------------------------------- void RimPlotCurve::updateCurveAppearance() { - QColor curveColor( m_curveColor.value().rByte(), m_curveColor.value().gByte(), m_curveColor.value().bByte() ); - QwtSymbol* symbol = nullptr; + QColor curveColor = RiaColorTools::toQColor( m_curveAppearance->color() ); + QwtSymbol* symbol = nullptr; - if ( m_pointSymbol() != RiuQwtSymbol::SYMBOL_NONE ) + if ( m_curveAppearance->symbol() != RiuQwtSymbol::SYMBOL_NONE ) { int legendFontSize = caf::FontTools::absolutePointSize( RiaPreferences::current()->defaultPlotFontSize(), caf::FontTools::RelativeSize::Small ); @@ -694,18 +699,18 @@ void RimPlotCurve::updateCurveAppearance() } // QwtPlotCurve will take ownership of the symbol - symbol = new RiuQwtSymbol( m_pointSymbol(), m_symbolLabel(), m_symbolLabelPosition(), legendFontSize ); - symbol->setSize( m_symbolSize, m_symbolSize ); + symbol = new RiuQwtSymbol( m_curveAppearance->symbol(), + m_curveAppearance->symbolLabel(), + m_curveAppearance->symbolLabelPosition(), + legendFontSize ); + symbol->setSize( m_curveAppearance->symbolSize(), m_curveAppearance->symbolSize() ); symbol->setColor( curveColor ); // If the symbol is a "filled" symbol, we can have a different edge color // Otherwise we'll have to use the curve color. - if ( RiuQwtSymbol::isFilledSymbol( m_pointSymbol() ) ) + if ( RiuQwtSymbol::isFilledSymbol( m_curveAppearance->symbol() ) ) { - QColor symbolEdgeColor( m_symbolEdgeColor.value().rByte(), - m_symbolEdgeColor.value().gByte(), - m_symbolEdgeColor.value().bByte() ); - + QColor symbolEdgeColor = RiaColorTools::toQColor( m_curveAppearance->symbolEdgeColor() ); symbol->setPen( symbolEdgeColor ); } else @@ -723,17 +728,22 @@ void RimPlotCurve::updateCurveAppearance() if ( m_qwtPlotCurve ) { - QColor fillColor( m_fillColor.value().rByte(), m_fillColor.value().gByte(), m_fillColor.value().bByte() ); + QColor fillColor = RiaColorTools::toQColor( m_curveAppearance->fillColor() ); + fillColor = RiaColorTools::blendQColors( fillColor, QColor( Qt::white ), 3, 1 ); - QBrush fillBrush( fillColor, m_fillStyle() ); - m_qwtPlotCurve->setAppearance( m_lineStyle(), m_curveInterpolation(), m_curveThickness(), curveColor, fillBrush ); + QBrush fillBrush( fillColor, m_curveAppearance->fillStyle() ); + m_qwtPlotCurve->setAppearance( m_curveAppearance->lineStyle(), + m_curveAppearance->interpolation(), + m_curveAppearance->lineThickness(), + curveColor, + fillBrush ); m_qwtPlotCurve->setSymbol( symbol ); - m_qwtPlotCurve->setSymbolSkipPixelDistance( m_symbolSkipPixelDistance() ); + m_qwtPlotCurve->setSymbolSkipPixelDistance( m_curveAppearance->symbolSkipDistance() ); // Make sure the legend lines are long enough to distinguish between line types. // Standard width in Qwt is 8 which is too short. // Use 10 and scale this by curve thickness + add space for displaying symbol. - if ( m_lineStyle() != RiuQwtPlotCurveDefines::LineStyleEnum::STYLE_NONE ) + if ( m_curveAppearance->lineStyle() != RiuQwtPlotCurveDefines::LineStyleEnum::STYLE_NONE ) { QSize legendIconSize = m_qwtPlotCurve->legendIconSize(); @@ -743,7 +753,7 @@ void RimPlotCurve::updateCurveAppearance() symbolWidth = symbol->boundingRect().size().width() + 2; } - int width = std::max( 10 * m_curveThickness, ( symbolWidth * 3 ) / 2 ); + int width = std::max( 10 * m_curveAppearance->lineThickness(), ( symbolWidth * 3 ) / 2 ); legendIconSize.setWidth( width ); m_qwtPlotCurve->setLegendIconSize( legendIconSize ); @@ -763,25 +773,6 @@ bool RimPlotCurve::isCrossPlotCurve() const return false; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -QList RimPlotCurve::calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions, - bool* useOptionsOnly ) -{ - QList options; - - if ( fieldNeedingOptions == &m_curveThickness ) - { - for ( size_t i = 0; i < 10; i++ ) - { - options.push_back( caf::PdmOptionItemInfo( QString::number( i + 1 ), QVariant::fromValue( i + 1 ) ) ); - } - } - - return options; -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -837,7 +828,7 @@ bool RimPlotCurve::yValueRangeInQwt( double* minimumValue, double* maximumValue //-------------------------------------------------------------------------------------------------- void RimPlotCurve::setLineStyle( RiuQwtPlotCurveDefines::LineStyleEnum lineStyle ) { - m_lineStyle = lineStyle; + m_curveAppearance->setLineStyle( lineStyle ); } //-------------------------------------------------------------------------------------------------- @@ -845,7 +836,7 @@ void RimPlotCurve::setLineStyle( RiuQwtPlotCurveDefines::LineStyleEnum lineStyle //-------------------------------------------------------------------------------------------------- void RimPlotCurve::setSymbol( RiuQwtSymbol::PointSymbolEnum symbolStyle ) { - m_pointSymbol = symbolStyle; + m_curveAppearance->setSymbol( symbolStyle ); } //-------------------------------------------------------------------------------------------------- @@ -853,7 +844,7 @@ void RimPlotCurve::setSymbol( RiuQwtSymbol::PointSymbolEnum symbolStyle ) //-------------------------------------------------------------------------------------------------- void RimPlotCurve::setInterpolation( RiuQwtPlotCurveDefines::CurveInterpolationEnum curveInterpolation ) { - m_curveInterpolation = curveInterpolation; + m_curveAppearance->setInterpolation( curveInterpolation ); } //-------------------------------------------------------------------------------------------------- @@ -861,7 +852,7 @@ void RimPlotCurve::setInterpolation( RiuQwtPlotCurveDefines::CurveInterpolationE //-------------------------------------------------------------------------------------------------- RiuQwtSymbol::PointSymbolEnum RimPlotCurve::symbol() { - return m_pointSymbol(); + return m_curveAppearance->symbol(); } //-------------------------------------------------------------------------------------------------- @@ -869,7 +860,7 @@ RiuQwtSymbol::PointSymbolEnum RimPlotCurve::symbol() //-------------------------------------------------------------------------------------------------- int RimPlotCurve::symbolSize() const { - return m_symbolSize(); + return m_curveAppearance->symbolSize(); } //-------------------------------------------------------------------------------------------------- @@ -877,7 +868,7 @@ int RimPlotCurve::symbolSize() const //-------------------------------------------------------------------------------------------------- cvf::Color3f RimPlotCurve::symbolEdgeColor() const { - return m_symbolEdgeColor; + return m_curveAppearance->symbolEdgeColor(); } //-------------------------------------------------------------------------------------------------- @@ -885,7 +876,7 @@ cvf::Color3f RimPlotCurve::symbolEdgeColor() const //-------------------------------------------------------------------------------------------------- void RimPlotCurve::setSymbolEdgeColor( const cvf::Color3f& edgeColor ) { - m_symbolEdgeColor = edgeColor; + m_curveAppearance->setSymbolEdgeColor( edgeColor ); } //-------------------------------------------------------------------------------------------------- @@ -893,7 +884,7 @@ void RimPlotCurve::setSymbolEdgeColor( const cvf::Color3f& edgeColor ) //-------------------------------------------------------------------------------------------------- void RimPlotCurve::setSymbolSkipDistance( float distance ) { - m_symbolSkipPixelDistance = distance; + m_curveAppearance->setSymbolSkipDistance( distance ); } //-------------------------------------------------------------------------------------------------- @@ -901,7 +892,7 @@ void RimPlotCurve::setSymbolSkipDistance( float distance ) //-------------------------------------------------------------------------------------------------- void RimPlotCurve::setSymbolLabel( const QString& label ) { - m_symbolLabel = label; + m_curveAppearance->setSymbolLabel( label ); } //-------------------------------------------------------------------------------------------------- @@ -909,7 +900,7 @@ void RimPlotCurve::setSymbolLabel( const QString& label ) //-------------------------------------------------------------------------------------------------- void RimPlotCurve::setSymbolLabelPosition( RiuQwtSymbol::LabelPosition labelPosition ) { - m_symbolLabelPosition = labelPosition; + m_curveAppearance->setSymbolLabelPosition( labelPosition ); } //-------------------------------------------------------------------------------------------------- @@ -917,7 +908,7 @@ void RimPlotCurve::setSymbolLabelPosition( RiuQwtSymbol::LabelPosition labelPosi //-------------------------------------------------------------------------------------------------- void RimPlotCurve::setSymbolSize( int sizeInPixels ) { - m_symbolSize = sizeInPixels; + m_curveAppearance->setSymbolSize( sizeInPixels ); } //-------------------------------------------------------------------------------------------------- @@ -925,7 +916,7 @@ void RimPlotCurve::setSymbolSize( int sizeInPixels ) //-------------------------------------------------------------------------------------------------- void RimPlotCurve::setLineThickness( int thickness ) { - m_curveThickness = thickness; + m_curveAppearance->setLineThickness( thickness ); } //-------------------------------------------------------------------------------------------------- @@ -946,7 +937,7 @@ void RimPlotCurve::resetAppearance() //-------------------------------------------------------------------------------------------------- Qt::BrushStyle RimPlotCurve::fillStyle() const { - return m_fillStyle(); + return m_curveAppearance->fillStyle(); } //-------------------------------------------------------------------------------------------------- @@ -954,7 +945,7 @@ Qt::BrushStyle RimPlotCurve::fillStyle() const //-------------------------------------------------------------------------------------------------- void RimPlotCurve::setFillStyle( Qt::BrushStyle brushStyle ) { - m_fillStyle = brushStyle; + m_curveAppearance->setFillStyle( brushStyle ); } //-------------------------------------------------------------------------------------------------- @@ -962,7 +953,7 @@ void RimPlotCurve::setFillStyle( Qt::BrushStyle brushStyle ) //-------------------------------------------------------------------------------------------------- void RimPlotCurve::setFillColor( const cvf::Color3f& fillColor ) { - m_fillColor = fillColor; + m_curveAppearance->setFillColor( fillColor ); } //-------------------------------------------------------------------------------------------------- @@ -1050,3 +1041,20 @@ void RimPlotCurve::updateLegendEntryVisibilityNoPlotUpdate() } m_qwtPlotCurve->setItemAttribute( QwtPlotItem::Legend, showLegendInQwt ); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPlotCurve::onCurveAppearanceChanged( const caf::SignalEmitter* emitter ) +{ + checkAndApplyDefaultFillColor(); + updateCurveAppearance(); + appearanceChanged.send(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPlotCurve::onFillColorChanged( const caf::SignalEmitter* emitter ) +{ +} diff --git a/ApplicationLibCode/ProjectDataModel/RimPlotCurve.h b/ApplicationLibCode/ProjectDataModel/RimPlotCurve.h index 9a24e8e369..694ca3f54f 100644 --- a/ApplicationLibCode/ProjectDataModel/RimPlotCurve.h +++ b/ApplicationLibCode/ProjectDataModel/RimPlotCurve.h @@ -27,6 +27,7 @@ #include "RiuQwtPlotCurveDefines.h" #include "RiuQwtSymbol.h" +#include "cafPdmChildField.h" #include "cafPdmField.h" #include "cafPdmFieldCvfColor.h" #include "cafPdmObject.h" @@ -69,7 +70,7 @@ public: QwtPlotCurve* qwtPlotCurve() const; void setColor( const cvf::Color3f& color ); - cvf::Color3f color() const { return m_curveColor; } + cvf::Color3f color() const; void setLineStyle( RiuQwtPlotCurveDefines::LineStyleEnum lineStyle ); void setSymbol( RiuQwtSymbol::PointSymbolEnum symbolStyle ); void setInterpolation( RiuQwtPlotCurveDefines::CurveInterpolationEnum ); @@ -147,13 +148,14 @@ protected: protected: // Overridden PDM methods - void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; - caf::PdmFieldHandle* objectToggleField() override; - caf::PdmFieldHandle* userDescriptionField() override; - QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions, - bool* useOptionsOnly ) override; - void appearanceUiOrdering( caf::PdmUiOrdering& uiOrdering ); - void curveNameUiOrdering( caf::PdmUiOrdering& uiOrdering ); + void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; + caf::PdmFieldHandle* objectToggleField() override; + caf::PdmFieldHandle* userDescriptionField() override; + void appearanceUiOrdering( caf::PdmUiOrdering& uiOrdering ); + void curveNameUiOrdering( caf::PdmUiOrdering& uiOrdering ); + + virtual void onCurveAppearanceChanged( const caf::SignalEmitter* emitter ); + virtual void onFillColorChanged( const caf::SignalEmitter* emitter ); private: bool canCurveBeAttached() const; @@ -170,21 +172,22 @@ protected: caf::PdmField m_curveName; caf::PdmField m_customCurveName; caf::PdmField m_showLegend; - caf::PdmField m_symbolLabel; - caf::PdmField m_symbolSize; caf::PdmField m_legendEntryText; + caf::PdmField m_showErrorBars; + caf::PdmField m_isUsingAutoName; - caf::PdmField m_isUsingAutoName; - caf::PdmField m_curveColor; - caf::PdmField m_curveThickness; - caf::PdmField m_symbolSkipPixelDistance; - caf::PdmField m_showErrorBars; + caf::PdmChildField m_curveAppearance; - caf::PdmField m_pointSymbol; - caf::PdmField m_lineStyle; - caf::PdmField m_fillStyle; - caf::PdmField m_fillColor; - caf::PdmField m_curveInterpolation; - caf::PdmField m_symbolLabelPosition; - caf::PdmField m_symbolEdgeColor; + caf::PdmField m_symbolLabel_OBSOLETE; + caf::PdmField m_symbolSize_OBSOLETE; + caf::PdmField m_curveColor_OBSOLETE; + caf::PdmField m_curveThickness_OBSOLETE; + caf::PdmField m_symbolSkipPixelDistance_OBSOLETE; + caf::PdmField m_pointSymbol_OBSOLETE; + caf::PdmField m_lineStyle_OBSOLETE; + caf::PdmField m_fillStyle_OBSOLETE; + caf::PdmField m_fillColor_OBSOLETE; + caf::PdmField m_curveInterpolation_OBSOLETE; + caf::PdmField m_symbolLabelPosition_OBSOLETE; + caf::PdmField m_symbolEdgeColor_OBSOLETE; }; diff --git a/ApplicationLibCode/ProjectDataModel/RimPlotCurveAppearance.cpp b/ApplicationLibCode/ProjectDataModel/RimPlotCurveAppearance.cpp index bbab2aa98f..104c9165fa 100644 --- a/ApplicationLibCode/ProjectDataModel/RimPlotCurveAppearance.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimPlotCurveAppearance.cpp @@ -78,6 +78,7 @@ void RimPlotCurveAppearance::FillStyle::setUp() //-------------------------------------------------------------------------------------------------- RimPlotCurveAppearance::RimPlotCurveAppearance() : appearanceChanged( this ) + , fillColorChanged( this ) , m_colorVisible( true ) , m_interpolationVisible( true ) , m_fillOptionsVisible( true ) @@ -141,6 +142,10 @@ void RimPlotCurveAppearance::fieldChangedByUi( const caf::PdmFieldHandle* change m_curveInterpolation.uiCapability()->setUiReadOnly( m_lineStyle() == RiuQwtPlotCurveDefines::LineStyleEnum::STYLE_NONE ); } + else if ( &m_fillColor == changedField ) + { + fillColorChanged.send(); + } appearanceChanged.send(); } @@ -169,7 +174,15 @@ void RimPlotCurveAppearance::setColor( const cvf::Color3f& color ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimPlotCurveAppearance::appearanceUiOrdering( caf::PdmUiOrdering& uiOrdering ) +cvf::Color3f RimPlotCurveAppearance::color() const +{ + return m_curveColor; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPlotCurveAppearance::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) { uiOrdering.add( &m_curveColor ); m_curveColor.uiCapability()->setUiHidden( !m_colorVisible ); @@ -240,6 +253,14 @@ void RimPlotCurveAppearance::setInterpolation( RiuQwtPlotCurveDefines::CurveInte m_curveInterpolation = curveInterpolation; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiuQwtPlotCurveDefines::CurveInterpolationEnum RimPlotCurveAppearance::interpolation() const +{ + return m_curveInterpolation(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -304,6 +325,14 @@ void RimPlotCurveAppearance::setSymbolLabel( const QString& label ) m_symbolLabel = label; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimPlotCurveAppearance::symbolLabel() const +{ + return m_symbolLabel; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -312,6 +341,14 @@ void RimPlotCurveAppearance::setSymbolLabelPosition( RiuQwtSymbol::LabelPosition m_symbolLabelPosition = labelPosition; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiuQwtSymbol::LabelPosition RimPlotCurveAppearance::symbolLabelPosition() const +{ + return m_symbolLabelPosition.value(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -373,6 +410,14 @@ void RimPlotCurveAppearance::setFillColor( const cvf::Color3f& fillColor ) m_fillColor = fillColor; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Color3f RimPlotCurveAppearance::fillColor() const +{ + return m_fillColor; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimPlotCurveAppearance.h b/ApplicationLibCode/ProjectDataModel/RimPlotCurveAppearance.h index ba505a95ba..e986988c59 100644 --- a/ApplicationLibCode/ProjectDataModel/RimPlotCurveAppearance.h +++ b/ApplicationLibCode/ProjectDataModel/RimPlotCurveAppearance.h @@ -37,6 +37,7 @@ class RimPlotCurveAppearance : public caf::PdmObject public: caf::Signal<> appearanceChanged; + caf::Signal<> fillColorChanged; public: typedef caf::AppEnum CurveInterpolation; @@ -50,7 +51,7 @@ public: ~RimPlotCurveAppearance() override; void setColor( const cvf::Color3f& color ); - cvf::Color3f color() const { return m_curveColor; } + cvf::Color3f color() const; void setLineStyle( RiuQwtPlotCurveDefines::LineStyleEnum lineStyle ); RiuQwtPlotCurveDefines::LineStyleEnum lineStyle() const; @@ -70,23 +71,27 @@ public: void setSymbolSkipDistance( float distance ); float symbolSkipDistance() const; - void setSymbolLabel( const QString& label ); + void setSymbolLabel( const QString& label ); + QString symbolLabel() const; void setSymbolLabelPosition( RiuQwtSymbol::LabelPosition labelPosition ); - RiuQwtSymbol::LabelPosition systemLabelPosition(); + RiuQwtSymbol::LabelPosition symbolLabelPosition() const; void resetAppearance(); Qt::BrushStyle fillStyle() const; void setFillStyle( Qt::BrushStyle brushStyle ); - void setFillColor( const cvf::Color3f& fillColor ); - void setInterpolation( RiuQwtPlotCurveDefines::CurveInterpolationEnum ); + void setFillColor( const cvf::Color3f& fillColor ); + cvf::Color3f fillColor() const; + + void setInterpolation( RiuQwtPlotCurveDefines::CurveInterpolationEnum ); + RiuQwtPlotCurveDefines::CurveInterpolationEnum interpolation() const; void setInterpolationVisible( bool isVisible ); void setColorVisible( bool isVisible ); void setFillOptionsVisible( bool isVisible ); - void appearanceUiOrdering( caf::PdmUiOrdering& uiOrdering ); + void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; protected: // Overridden PDM methods diff --git a/ApplicationLibCode/ProjectDataModel/RimStackablePlotCurve.cpp b/ApplicationLibCode/ProjectDataModel/RimStackablePlotCurve.cpp index 909c3b74bc..c63229c8fe 100644 --- a/ApplicationLibCode/ProjectDataModel/RimStackablePlotCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimStackablePlotCurve.cpp @@ -65,13 +65,13 @@ void RimStackablePlotCurve::assignStackColor( size_t index, size_t count ) } } - m_fillColor = curveColor; + setFillColor( curveColor ); { auto moreSaturatedColor = RiaColorTools::toQColor( curveColor ); moreSaturatedColor = RiaColorTools::modifySaturation( moreSaturatedColor, 1.2 ); - m_curveColor = RiaColorTools::fromQColorTo3f( moreSaturatedColor ); + m_curveAppearance->setColor( RiaColorTools::fromQColorTo3f( moreSaturatedColor ) ); } this->updateCurveAppearance(); @@ -100,10 +100,10 @@ void RimStackablePlotCurve::setIsStacked( bool stacked ) { m_isStacked = stacked; - if ( !m_isStacked() && m_fillStyle() != Qt::NoBrush ) + if ( !m_isStacked() && fillStyle() != Qt::NoBrush ) { // Switch off area fill when turning off stacking. - m_fillStyle = Qt::NoBrush; + setFillStyle( Qt::NoBrush ); } stackingChanged.send( m_isStacked() ); } @@ -119,10 +119,10 @@ void RimStackablePlotCurve::fieldChangedByUi( const caf::PdmFieldHandle* changed if ( changedField == &m_isStacked ) { - if ( !m_isStacked() && m_fillStyle() != Qt::NoBrush ) + if ( !m_isStacked() && fillStyle() != Qt::NoBrush ) { // Switch off area fill when turning off stacking. - m_fillStyle = Qt::NoBrush; + setFillStyle( Qt::NoBrush ); } stackingChanged.send( m_isStacked() ); } @@ -130,11 +130,16 @@ void RimStackablePlotCurve::fieldChangedByUi( const caf::PdmFieldHandle* changed { stackingColorsChanged.send( m_isStackedWithPhaseColors() ); } - else if ( changedField == &m_fillColor ) - { - m_isStackedWithPhaseColors = false; - this->updateConnectedEditors(); - } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimStackablePlotCurve::onFillColorChanged( const caf::SignalEmitter* emitter ) +{ + m_isStackedWithPhaseColors = false; + this->updateConnectedEditors(); + stackingColorsChanged.send( m_isStackedWithPhaseColors() ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimStackablePlotCurve.h b/ApplicationLibCode/ProjectDataModel/RimStackablePlotCurve.h index 2485517f47..a15b593ebc 100644 --- a/ApplicationLibCode/ProjectDataModel/RimStackablePlotCurve.h +++ b/ApplicationLibCode/ProjectDataModel/RimStackablePlotCurve.h @@ -38,6 +38,8 @@ protected: void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void stackingUiOrdering( caf::PdmUiOrdering& uiOrdering ); + void onFillColorChanged( const caf::SignalEmitter* emitter ) override; + protected: caf::PdmField m_isStacked; caf::PdmField m_isStackedWithPhaseColors; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimAsciiDataCurve.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimAsciiDataCurve.cpp index cd12460aef..e54a0d5c3b 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimAsciiDataCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimAsciiDataCurve.cpp @@ -49,8 +49,8 @@ RimAsciiDataCurve::RimAsciiDataCurve() CAF_PDM_InitFieldNoDefault( &m_values, "Values", "Values", "", "", "" ); CAF_PDM_InitFieldNoDefault( &m_title, "Title", "Title", "", "", "" ); - m_symbolSkipPixelDistance = 10.0f; - m_curveThickness = 2; + setSymbolSkipDistance( 10.0f ); + setLineThickness( 2 ); setDeletable( true ); } diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.cpp index 58f53ea7f3..c5001bee9a 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.cpp @@ -125,8 +125,8 @@ RimSummaryCurve::RimSummaryCurve() CAF_PDM_InitField( &m_isTopZWithinCategory, "isTopZWithinCategory", false, "", "", "", "" ); m_isTopZWithinCategory.uiCapability()->setUiHidden( true ); - m_symbolSkipPixelDistance = 10.0f; - m_curveThickness = 2; + setSymbolSkipDistance( 10.0f ); + setLineThickness( 2 ); CAF_PDM_InitFieldNoDefault( &m_yValuesSummaryFilter_OBSOLETE, "VarListFilter", "Filter", "", "", "" ); m_yValuesSummaryFilter_OBSOLETE.uiCapability()->setUiTreeChildrenHidden( true ); @@ -380,7 +380,8 @@ double RimSummaryCurve::yValueAtTimeT( time_t time ) const } else if ( i < timeSteps.size() - 1u && timeSteps[i] < time && time < timeSteps[i + 1] ) { - if ( m_curveInterpolation == RiuQwtPlotCurveDefines::CurveInterpolationEnum::INTERPOLATION_STEP_LEFT ) + if ( m_curveAppearance->interpolation() == + RiuQwtPlotCurveDefines::CurveInterpolationEnum::INTERPOLATION_STEP_LEFT ) { return values[i + 1]; } @@ -976,7 +977,7 @@ void RimSummaryCurve::setCurveAppearanceFromCaseType() if ( prefs->defaultSummaryHistoryCurveStyle() == RiaPreferencesSummary::SummaryHistoryCurveStyleMode::SYMBOLS ) { - m_symbolEdgeColor = m_curveColor; + setSymbolEdgeColor( m_curveAppearance->color() ); setSymbol( RiuQwtSymbol::SYMBOL_XCROSS ); setLineStyle( RiuQwtPlotCurveDefines::LineStyleEnum::STYLE_NONE ); @@ -984,7 +985,7 @@ void RimSummaryCurve::setCurveAppearanceFromCaseType() else if ( prefs->defaultSummaryHistoryCurveStyle() == RiaPreferencesSummary::SummaryHistoryCurveStyleMode::SYMBOLS_AND_LINES ) { - m_symbolEdgeColor = m_curveColor; + setSymbolEdgeColor( m_curveAppearance->color() ); setSymbol( RiuQwtSymbol::SYMBOL_XCROSS ); setLineStyle( RiuQwtPlotCurveDefines::LineStyleEnum::STYLE_SOLID ); @@ -1262,11 +1263,12 @@ void RimSummaryCurve::calculateCurveInterpolationFromAddress() auto address = m_yValuesSummaryAddress()->address(); if ( RiaSummaryTools::hasAccumulatedData( address ) ) { - m_curveInterpolation = RiuQwtPlotCurveDefines::CurveInterpolationEnum::INTERPOLATION_POINT_TO_POINT; + m_curveAppearance->setInterpolation( + RiuQwtPlotCurveDefines::CurveInterpolationEnum::INTERPOLATION_POINT_TO_POINT ); } else { - m_curveInterpolation = RiuQwtPlotCurveDefines::CurveInterpolationEnum::INTERPOLATION_STEP_LEFT; + m_curveAppearance->setInterpolation( RiuQwtPlotCurveDefines::CurveInterpolationEnum::INTERPOLATION_STEP_LEFT ); } } } diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.cpp index 01c3cc70a1..fea48a98ff 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.cpp @@ -488,7 +488,8 @@ void RimEnsembleWellLogCurveSet::defineUiOrdering( QString uiConfigName, caf::Pd m_statistics->defineUiOrdering( uiConfigName, *statGroup ); caf::PdmUiGroup* curveAppearanceGroup = uiOrdering.addNewGroup( "Curve Appearance" ); - m_curveAppearance->appearanceUiOrdering( *curveAppearanceGroup ); + QString configName = "AppearanceOrdering"; + m_curveAppearance->uiOrdering( configName, *curveAppearanceGroup ); uiOrdering.skipRemainingFields( true ); } diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurve.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurve.cpp index 7646791dc1..8662c7c6e2 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurve.cpp @@ -179,7 +179,7 @@ const RigWellLogCurveData* RimWellLogCurve::curveData() const void RimWellLogCurve::updateCurveAppearance() { RimPlotCurve::updateCurveAppearance(); - if ( m_fillStyle != Qt::BrushStyle::NoBrush ) + if ( fillStyle() != Qt::BrushStyle::NoBrush ) { m_qwtPlotCurve->setOrientation( Qt::Horizontal ); m_qwtPlotCurve->setBaseline( -std::numeric_limits::infinity() );