mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-26 07:00:17 -05:00
Remove custom editor attribute classes and migrate all double field validation and formatting (range, decimals, number format) to the attribute map system. Refactor PdmUiDoubleValueEditor to read settings from the field's attributes and always display formatted values. Remove redundant defineEditorAttribute overrides. Add tests for pair<bool, double> field validation. Centralize and simplify double field UI configuration for improved maintainability.
139 lines
5.7 KiB
C++
139 lines
5.7 KiB
C++
/////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (C) 2018- Equinor ASA
|
|
// Copyright (C) 2015-2018 Statoil ASA
|
|
// Copyright (C) 2015- Ceetron Solutions 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 <http://www.gnu.org/licenses/gpl.html>
|
|
// for more details.
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#pragma once
|
|
|
|
#include "RimCheckableObject.h"
|
|
#include "RimFemResultObserver.h"
|
|
|
|
#include "RigFemResultPosEnum.h"
|
|
|
|
#include "cafAppEnum.h"
|
|
#include "cafPdmField.h"
|
|
#include "cafPdmObject.h"
|
|
#include "cafPdmPointer.h"
|
|
|
|
class RimGeoMechView;
|
|
class RimGeoMechPropertyFilter;
|
|
class RifGeoMechReaderInterface;
|
|
class RigGeoMechCaseData;
|
|
class RimGeoMechCase;
|
|
class RimRegularLegendConfig;
|
|
|
|
//==================================================================================================
|
|
///
|
|
///
|
|
//==================================================================================================
|
|
class RimGeoMechResultDefinition : public RimFemResultObserver, public RimCheckableObject
|
|
{
|
|
CAF_PDM_HEADER_INIT;
|
|
|
|
public:
|
|
RimGeoMechResultDefinition();
|
|
~RimGeoMechResultDefinition() override;
|
|
|
|
void setGeoMechCase( RimGeoMechCase* geomCase );
|
|
RimGeoMechCase* geoMechCase() const;
|
|
|
|
RigGeoMechCaseData* ownerCaseData() const;
|
|
bool hasResult();
|
|
void loadResult();
|
|
void setAddWellPathDerivedResults( bool addWellPathDerivedResults );
|
|
|
|
RigFemResultAddress resultAddress() const;
|
|
std::vector<RigFemResultAddress> observedResults() const override;
|
|
|
|
RigFemResultPosEnum resultPositionType() const;
|
|
QString resultFieldName() const;
|
|
QString resultComponentName() const;
|
|
QString diffResultUiName() const;
|
|
QString diffResultUiShortName() const;
|
|
void setResultAddress( const RigFemResultAddress& resultAddress );
|
|
|
|
QString resultFieldUiName() const;
|
|
QString resultComponentUiName() const;
|
|
QString resultVariableUiName() const;
|
|
QString resultVariableName() const;
|
|
QString currentResultUnits() const;
|
|
QString defaultLasUnits() const;
|
|
|
|
double normalizationAirGap() const;
|
|
void setNormalizationAirGap( double airGap );
|
|
|
|
bool hasCategoryResult() const { return m_resultPositionType() == RIG_FORMATION_NAMES; }
|
|
|
|
void updateLegendTextAndRanges( RimRegularLegendConfig* legendConfigToUpdate, const QString& legendHeading, int timeStepIndex );
|
|
|
|
bool isBiotCoefficientDependent() const;
|
|
|
|
protected:
|
|
virtual void updateLegendCategorySettings() {};
|
|
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
|
|
|
|
friend class RimIntersectionResultDefinition;
|
|
|
|
private:
|
|
// Overridden PDM methods
|
|
|
|
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override;
|
|
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
|
|
|
|
void calculateNormalizationAirGapDefault();
|
|
bool useUndoRedoForFieldChanged() override;
|
|
|
|
void initAfterRead() override;
|
|
// Metadata and option build tools
|
|
|
|
std::map<std::string, std::vector<std::string>> getResultMetaDataForUIFieldSetting();
|
|
static void getUiAndResultVariableStringList( QStringList* uiNames,
|
|
QStringList* variableNames,
|
|
const std::map<std::string, std::vector<std::string>>& fieldCompNames );
|
|
static QString composeFieldCompString( const QString& resultFieldName, const QString& resultComponentName );
|
|
|
|
static QString convertToUiResultFieldName( QString resultFieldName );
|
|
|
|
bool normalizableResultSelected() const;
|
|
bool referenceCaseDependentResultSelected() const;
|
|
|
|
// Data Fields
|
|
|
|
caf::PdmField<caf::AppEnum<RigFemResultPosEnum>> m_resultPositionType;
|
|
caf::PdmField<QString> m_resultFieldName;
|
|
caf::PdmField<QString> m_resultComponentName;
|
|
caf::PdmField<int> m_timeLapseBaseTimestep;
|
|
caf::PdmField<int> m_compactionRefLayer;
|
|
caf::PdmField<bool> m_normalizeByHydrostaticPressure;
|
|
caf::PdmField<double> m_normalizationAirGap;
|
|
caf::PdmField<int> m_referenceTimeStep;
|
|
|
|
// UI Fields only
|
|
friend class RimGeoMechPropertyFilter; // Property filter needs the ui fields
|
|
friend class RimWellLogExtractionCurve; // Curve needs the ui fields
|
|
friend class RimGeoMechCellColors; // Needs the ui fields
|
|
|
|
caf::PdmField<caf::AppEnum<RigFemResultPosEnum>> m_resultPositionTypeUiField;
|
|
caf::PdmField<QString> m_resultVariableUiField;
|
|
caf::PdmField<int> m_compactionRefLayerUiField;
|
|
caf::PdmPointer<RimGeoMechCase> m_geomCase;
|
|
|
|
bool m_isChangedByField;
|
|
bool m_addWellPathDerivedResults;
|
|
};
|