///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2011- Statoil ASA // Copyright (C) 2013- Ceetron Solutions AS // Copyright (C) 2011-2012 Ceetron AS // // 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 // for more details. // ///////////////////////////////////////////////////////////////////////////////// #pragma once #include "RiaNumberFormat.h" #include "RimLegendConfig.h" #include "RimLegendConfigChangeType.h" #include "cvfArray.h" #include "cvfObject.h" #include "cafPdmPtrField.h" #include "cafSignal.h" #include namespace cvf { class ScalarMapperContinuousLog; class ScalarMapperContinuousLinear; class OverlayItem; class ScalarMapperDiscreteLinear; class ScalarMapperDiscreteLog; class ScalarMapper; class String; } // namespace cvf namespace caf { class TitledOverlayFrame; class CategoryLegend; class CategoryMapper; class OverlayScalarMapperLegend; } // namespace caf class Rim3dView; class RimEnsembleCurveSet; class RiuAbstractLegendFrame; class RimColorLegend; //================================================================================================== /// /// //================================================================================================== class RimRegularLegendConfig : public RimLegendConfig { CAF_PDM_HEADER_INIT; public: caf::Signal changed; public: RimRegularLegendConfig(); ~RimRegularLegendConfig() override; caf::PdmField resultVariableName; // Used internally to describe the variable this legend setup is used for enum class ColorRangesType { NORMAL, OPPOSITE_NORMAL, WHITE_PINK, PINK_WHITE, WHITE_BLACK, BLACK_WHITE, BLUE_WHITE_RED, RED_WHITE_BLUE, CATEGORY, ANGULAR, RAINBOW, STIMPLAN, GREEN_RED, BLUE_MAGENTA, RED_LIGHT_DARK, GREEN_LIGHT_DARK, BLUE_LIGHT_DARK, CORRELATION, HEAT_MAP, UNDEFINED }; using ColorRangeEnum = caf::AppEnum; enum class MappingType { LINEAR_DISCRETE, LINEAR_CONTINUOUS, LOG10_CONTINUOUS, LOG10_DISCRETE, CATEGORY_INTEGER }; using MappingEnum = caf::AppEnum; enum class CategoryColorModeType { INTERPOLATE, EXCLUSIVELY_COLORS }; using CategoryColorModeEnum = caf::AppEnum; void onRecreateLegend() override; void setColorLegend( RimColorLegend* colorLegend ); RimColorLegend* colorLegend() const; void setMappingMode( MappingType mappingType ); MappingType mappingMode() { return m_mappingMode(); } void setTickNumberFormat( RiaNumberFormat::NumberFormatType numberFormat ); void resetUserDefinedValues(); void setCenterLegendAroundZero( bool enable ); void setUserDefinedRange( double minVal, double maxVal ); void disableAllTimeStepsRange( bool doDisable ); void setAutomaticRanges( double globalMin, double globalMax, double localMin, double localMax ); void setClosestToZeroValues( double globalPosClosestToZero, double globalNegClosestToZero, double localPosClosestToZero, double localNegClosestToZero ); void setIntegerCategories( const std::vector& categories ); void setNamedCategories( const std::vector& categoryNames ); void setCategoryItems( const std::vector>& categories ); QString categoryNameFromCategoryValue( double categoryResultValue ) const; double categoryValueFromCategoryName( const QString& categoryName ) const; void setTitle( const QString& title ); void setUiValuesFromLegendConfig( const RimRegularLegendConfig* otherLegendConfig ); cvf::ScalarMapper* scalarMapper() { return m_currentScalarMapper.p(); } const cvf::ScalarMapper* scalarMapper() const { return m_currentScalarMapper.p(); } bool showLegend() const; void setShowLegend( bool show ); const caf::TitledOverlayFrame* titledOverlayFrame() const override; caf::TitledOverlayFrame* titledOverlayFrame() override; RiuAbstractLegendFrame* makeLegendFrame(); void setRangeMode( RangeModeType rangeMode ); RangeModeType rangeMode() const; static cvf::Color3ubArray colorArrayFromColorType( ColorRangesType colorType ); static RimColorLegend* mapToColorLegend( ColorRangesType colorType ); void updateFonts() override; QString valueToText( double value ) const; void setDefaultConfigForResultName( int caseId, const QString& resultName, bool useDiscreteLogLevels, bool isCategoryResult ); void defineUiOrderingColorOnly( caf::PdmUiOrdering* colorGroup ); void updateTickCountAndUserDefinedRange(); private: void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void sendChangedSignal( const caf::PdmFieldHandle* changedField ); void initAfterRead() override; caf::PdmFieldHandle* objectToggleField() override; void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; void updateLegend(); void updateFieldVisibility(); void updateCategoryItems(); void configureCategoryMapper(); friend class RimViewLinker; private: cvf::ref m_linDiscreteScalarMapper; cvf::ref m_logDiscreteScalarMapper; cvf::ref m_logSmoothScalarMapper; cvf::ref m_linSmoothScalarMapper; cvf::ref m_currentScalarMapper; cvf::ref m_scalarMapperLegend; cvf::ref m_categoryMapper; cvf::ref m_categoryLegend; double m_globalAutoMax; double m_globalAutoMin; double m_localAutoMax; double m_localAutoMin; double m_globalAutoPosClosestToZero; double m_globalAutoNegClosestToZero; double m_localAutoPosClosestToZero; double m_localAutoNegClosestToZero; bool m_isAllTimeStepsRangeDisabled; std::vector m_categories; std::vector m_categoryNames; cvf::Color3ubArray m_categoryColors; // Fields caf::PdmField m_showLegend; caf::PdmField m_numLevels; caf::PdmField m_precision; caf::PdmField> m_tickNumberFormat; caf::PdmField m_rangeMode; caf::PdmField m_userDefinedMaxValue; caf::PdmField m_userDefinedMinValue; caf::PdmField> m_colorRangeMode_OBSOLETE; caf::PdmField> m_mappingMode; caf::PdmField> m_categoryColorMode; caf::PdmField m_resetUserDefinedValuesButton; caf::PdmField m_centerLegendAroundZero; caf::PdmPtrField m_colorLegend; caf::PdmField m_selectColorLegendButton; bool m_resetUserDefinedValues; QString m_title; int m_significantDigitsInData; };