diff --git a/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake b/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake index f1781a8b9e..0851d05385 100644 --- a/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake +++ b/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake @@ -104,6 +104,7 @@ ${CMAKE_CURRENT_LIST_DIR}/Rim3dWellLogExtractionCurve.h ${CMAKE_CURRENT_LIST_DIR}/Rim3dWellLogRftCurve.h ${CMAKE_CURRENT_LIST_DIR}/RimVirtualPerforationResults.h ${CMAKE_CURRENT_LIST_DIR}/RimLegendConfig.h +${CMAKE_CURRENT_LIST_DIR}/RimWellLogCurveNameConfig.h ) @@ -212,6 +213,7 @@ ${CMAKE_CURRENT_LIST_DIR}/Rim3dWellLogExtractionCurve.cpp ${CMAKE_CURRENT_LIST_DIR}/Rim3dWellLogRftCurve.cpp ${CMAKE_CURRENT_LIST_DIR}/RimVirtualPerforationResults.cpp ${CMAKE_CURRENT_LIST_DIR}/RimLegendConfig.cpp +${CMAKE_CURRENT_LIST_DIR}/RimWellLogCurveNameConfig.cpp ) list(APPEND CODE_HEADER_FILES diff --git a/ApplicationCode/ProjectDataModel/Completions/Rim3dWellLogCurveCollection.cpp b/ApplicationCode/ProjectDataModel/Completions/Rim3dWellLogCurveCollection.cpp index fbf49270d9..bb5524a750 100644 --- a/ApplicationCode/ProjectDataModel/Completions/Rim3dWellLogCurveCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/Rim3dWellLogCurveCollection.cpp @@ -85,6 +85,7 @@ void Rim3dWellLogCurveCollection::add3dWellLogCurve(Rim3dWellLogCurve* curve) size_t index = m_3dWellLogCurves.size(); curve->setColor(RiaColorTables::wellLogPlotPaletteColors().cycledColor3f(index)); m_3dWellLogCurves.push_back(curve); + curve->createCurveAutoName(); } } diff --git a/ApplicationCode/ProjectDataModel/Rim3dWellLogCurve.cpp b/ApplicationCode/ProjectDataModel/Rim3dWellLogCurve.cpp index ead33dd23f..9d3d75f0b0 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dWellLogCurve.cpp +++ b/ApplicationCode/ProjectDataModel/Rim3dWellLogCurve.cpp @@ -69,8 +69,6 @@ Rim3dWellLogCurve::Rim3dWellLogCurve() CAF_PDM_InitField(&m_drawPlane, "DrawPlane", DrawPlaneEnum(VERTICAL_ABOVE), "Draw Plane", "", "", ""); CAF_PDM_InitField(&m_color, "CurveColor", cvf::Color3f(0.0f, 0.0f, 0.0f), "Curve Color", "", "", ""); - CAF_PDM_InitField(&m_name, "Name", QString("3D Well Log Curve"), "3d Well Log Curve", "", "", ""); - m_name.uiCapability()->setUiHidden(true); } //-------------------------------------------------------------------------------------------------- @@ -90,14 +88,6 @@ void Rim3dWellLogCurve::updateCurveIn3dView() proj->createDisplayModelAndRedrawAllViews(); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -const QString& Rim3dWellLogCurve::name() const -{ - return m_name(); -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -171,14 +161,6 @@ void Rim3dWellLogCurve::fieldChangedByUi(const caf::PdmFieldHandle* changedField } } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -caf::PdmFieldHandle* Rim3dWellLogCurve::userDescriptionField() -{ - return &m_name; -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -246,6 +228,14 @@ void Rim3dWellLogCurve::defineEditorAttribute(const caf::PdmFieldHandle* field, } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void Rim3dWellLogCurve::initAfterRead() +{ + this->createCurveAutoName(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -255,11 +245,9 @@ void Rim3dWellLogCurve::resetMinMaxValuesAndUpdateUI() this->updateConnectedEditors(); } -void Rim3dWellLogCurve::setGeometryGenerator(Riv3dWellLogCurveGeometryGenerator* generator) -{ - m_geometryGenerator = generator; -} - +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- bool Rim3dWellLogCurve::findClosestPointOnCurve(const cvf::Vec3d& globalIntersection, cvf::Vec3d* closestPoint, double* measuredDepthAtPoint, @@ -272,6 +260,17 @@ bool Rim3dWellLogCurve::findClosestPointOnCurve(const cvf::Vec3d& globalIntersec return false; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void Rim3dWellLogCurve::setGeometryGenerator(Riv3dWellLogCurveGeometryGenerator* generator) +{ + m_geometryGenerator = generator; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- cvf::ref Rim3dWellLogCurve::geometryGenerator() { return m_geometryGenerator; diff --git a/ApplicationCode/ProjectDataModel/Rim3dWellLogCurve.h b/ApplicationCode/ProjectDataModel/Rim3dWellLogCurve.h index 5d1e100338..1b3f68ad47 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dWellLogCurve.h +++ b/ApplicationCode/ProjectDataModel/Rim3dWellLogCurve.h @@ -23,17 +23,19 @@ #include "cafPdmObject.h" #include "cafPdmFieldCvfColor.h" - +#include "cafPdmChildField.h" #include "cvfObject.h" #include "cvfVector3.h" +#include "RimWellLogCurveNameConfig.h" + class Riv3dWellLogCurveGeometryGenerator; //================================================================================================== /// /// //================================================================================================== -class Rim3dWellLogCurve : public caf::PdmObject +class Rim3dWellLogCurve : public caf::PdmObject, public RimCurveNameConfigHolderInterface { CAF_PDM_HEADER_INIT; @@ -52,7 +54,7 @@ public: void updateCurveIn3dView(); - const QString& name() const; + virtual QString name() const = 0; virtual QString resultPropertyString() const = 0; DrawPlane drawPlane() const; cvf::Color3f color() const; @@ -72,18 +74,17 @@ public: void setGeometryGenerator(Riv3dWellLogCurveGeometryGenerator* generator); cvf::ref geometryGenerator(); - + protected: virtual caf::PdmFieldHandle* objectToggleField() override; virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; - virtual caf::PdmFieldHandle* userDescriptionField() override; void configurationUiOrdering(caf::PdmUiOrdering& uiOrdering); virtual QList calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly) override; virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute); + virtual void initAfterRead(); private: void resetMinMaxValues(); protected: - caf::PdmField m_name; caf::PdmField> m_drawPlane; caf::PdmField m_color; caf::PdmField m_minCurveValue; diff --git a/ApplicationCode/ProjectDataModel/Rim3dWellLogExtractionCurve.cpp b/ApplicationCode/ProjectDataModel/Rim3dWellLogExtractionCurve.cpp index 30f6b27928..8d02ef6745 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dWellLogExtractionCurve.cpp +++ b/ApplicationCode/ProjectDataModel/Rim3dWellLogExtractionCurve.cpp @@ -21,10 +21,17 @@ #include "RigWellLogFile.h" #include "RiaExtractionTools.h" +#include "RigEclipseCaseData.h" +#include "RigGeoMechCaseData.h" #include "RigEclipseWellLogExtractor.h" #include "RigGeoMechWellLogExtractor.h" #include "RigResultAccessorFactory.h" +#include "RigCaseCellResultsData.h" +#include "RigFemPartResultsCollection.h" +#include "RimEclipseCase.h" +#include "RimGeoMechCase.h" #include "Rim3dView.h" +#include "RimWellLogCurveNameConfig.h" #include "RimCase.h" #include "RimEclipseCase.h" #include "RimEclipseCellColors.h" @@ -71,7 +78,8 @@ Rim3dWellLogExtractionCurve::Rim3dWellLogExtractionCurve() m_geomResultDefinition.uiCapability()->setUiTreeChildrenHidden(true); m_geomResultDefinition = new RimGeoMechResultDefinition; - m_name = "3D Well Log Curve"; + CAF_PDM_InitFieldNoDefault(&m_nameConfig, "NameGenerator", "", "", "", ""); + m_nameConfig = new RimWellLogExtractionCurveNameConfig(this); } //-------------------------------------------------------------------------------------------------- @@ -81,6 +89,7 @@ Rim3dWellLogExtractionCurve::~Rim3dWellLogExtractionCurve() { delete m_geomResultDefinition; delete m_eclipseResultDefinition; + delete m_nameConfig; } //-------------------------------------------------------------------------------------------------- @@ -174,6 +183,88 @@ void Rim3dWellLogExtractionCurve::curveValuesAndMds(std::vector* values, } } +QString Rim3dWellLogExtractionCurve::name() const +{ + return m_nameConfig()->name(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString Rim3dWellLogExtractionCurve::createCurveAutoName() const +{ + RimGeoMechCase* geomCase = dynamic_cast(m_case.value()); + RimEclipseCase* eclipseCase = dynamic_cast(m_case.value()); + + QStringList generatedCurveName; + + if (m_nameConfig->addWellName()) + { + RimWellPath* wellPath; + this->firstAncestorOrThisOfTypeAsserted(wellPath); + if (!wellPath->name().isEmpty()) + { + generatedCurveName += wellPath->name(); + } + } + + if (m_nameConfig->addCaseName() && m_case()) + { + generatedCurveName.push_back(m_case->caseUserDescription()); + } + + if (m_nameConfig->addProperty() && !resultPropertyString().isEmpty()) + { + generatedCurveName.push_back(resultPropertyString()); + } + + if (m_nameConfig->addTimeStep() || m_nameConfig->addDate()) + { + size_t maxTimeStep = 0; + + if (eclipseCase) + { + RigEclipseCaseData* data = eclipseCase->eclipseCaseData(); + if (data) + { + maxTimeStep = data->results(m_eclipseResultDefinition->porosityModel())->maxTimeStepCount(); + } + } + else if (geomCase) + { + RigGeoMechCaseData* data = geomCase->geoMechData(); + if (data) + { + maxTimeStep = data->femPartResults()->frameCount(); + } + } + + if (m_nameConfig->addDate()) + { + QString dateString = wellDate(); + if (!dateString.isEmpty()) + { + generatedCurveName.push_back(dateString); + } + } + + if (m_nameConfig->addTimeStep()) + { + generatedCurveName.push_back(QString("[%1/%2]").arg(m_timeStep()).arg(maxTimeStep)); + } + } + + return generatedCurveName.join(", "); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +caf::PdmFieldHandle* Rim3dWellLogExtractionCurve::userDescriptionField() +{ + return m_nameConfig()->nameField(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -237,6 +328,8 @@ void Rim3dWellLogExtractionCurve::defineUiOrdering(QString uiConfigName, caf::Pd Rim3dWellLogCurve::configurationUiOrdering(uiOrdering); + caf::PdmUiGroup* nameGroup = m_nameConfig()->createUiGroup(uiConfigName, uiOrdering); + uiOrdering.skipRemainingFields(true); } @@ -251,3 +344,28 @@ void Rim3dWellLogExtractionCurve::initAfterRead() m_eclipseResultDefinition->setEclipseCase(eclipseCase); m_geomResultDefinition->setGeoMechCase(geomCase); } + +QString Rim3dWellLogExtractionCurve::wellDate() const +{ + RimGeoMechCase* geomCase = dynamic_cast(m_case.value()); + RimEclipseCase* eclipseCase = dynamic_cast(m_case.value()); + + QStringList timeStepNames; + + if (eclipseCase) + { + if (eclipseCase->eclipseCaseData()) + { + timeStepNames = eclipseCase->timeStepStrings(); + } + } + else if (geomCase) + { + if (geomCase->geoMechData()) + { + timeStepNames = geomCase->timeStepStrings(); + } + } + + return (m_timeStep >= 0 && m_timeStep < timeStepNames.size()) ? timeStepNames[m_timeStep] : ""; +} diff --git a/ApplicationCode/ProjectDataModel/Rim3dWellLogExtractionCurve.h b/ApplicationCode/ProjectDataModel/Rim3dWellLogExtractionCurve.h index 5ab17dbea6..cdbb90a382 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dWellLogExtractionCurve.h +++ b/ApplicationCode/ProjectDataModel/Rim3dWellLogExtractionCurve.h @@ -28,6 +28,7 @@ class Rim3dView; class RimCase; class RimGeoMechResultDefinition; class RimEclipseResultDefinition; +class RimWellLogExtractionCurveNameConfig; //================================================================================================== /// @@ -45,17 +46,22 @@ public: virtual QString resultPropertyString() const override; virtual void curveValuesAndMds(std::vector* values, std::vector* measuredDepthValues) const override; + virtual QString name() const override; + virtual QString createCurveAutoName() const override; +protected: + virtual caf::PdmFieldHandle* userDescriptionField() override; private: virtual QList calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) override; virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; virtual void initAfterRead() override; - + QString wellDate() const; private: caf::PdmPtrField m_case; caf::PdmField m_timeStep; caf::PdmChildField m_eclipseResultDefinition; caf::PdmChildField m_geomResultDefinition; + caf::PdmChildField m_nameConfig; }; diff --git a/ApplicationCode/ProjectDataModel/Rim3dWellLogFileCurve.cpp b/ApplicationCode/ProjectDataModel/Rim3dWellLogFileCurve.cpp index 3f7f7d1835..dcd47d0bca 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dWellLogFileCurve.cpp +++ b/ApplicationCode/ProjectDataModel/Rim3dWellLogFileCurve.cpp @@ -20,6 +20,7 @@ #include "RigWellLogFile.h" +#include "RimWellLogCurveNameConfig.h" #include "RimWellLogFile.h" #include "RimWellLogFileChannel.h" #include "RimWellPath.h" @@ -44,13 +45,17 @@ Rim3dWellLogFileCurve::Rim3dWellLogFileCurve() CAF_PDM_InitFieldNoDefault(&m_wellLogFile, "WellLogFile", "Well Log File", "", "", ""); - m_name = "3D Well Log LAS Curve"; + CAF_PDM_InitFieldNoDefault(&m_nameConfig, "NameConfig", "", "", "", ""); + m_nameConfig = new RimWellLogFileCurveNameConfig(this); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -Rim3dWellLogFileCurve::~Rim3dWellLogFileCurve() {} +Rim3dWellLogFileCurve::~Rim3dWellLogFileCurve() +{ + delete m_nameConfig; +} //-------------------------------------------------------------------------------------------------- /// @@ -72,7 +77,6 @@ void Rim3dWellLogFileCurve::setDefaultFileCurveDataInfo() if (!fileLogs.empty()) { m_wellLogChannelName = fileLogs[0]->name(); - m_name = "LAS: " + m_wellLogChannelName; } } } @@ -104,6 +108,76 @@ QString Rim3dWellLogFileCurve::resultPropertyString() const return m_wellLogChannelName(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString Rim3dWellLogFileCurve::name() const +{ + return m_nameConfig->name(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString Rim3dWellLogFileCurve::createCurveAutoName() const +{ + QStringList name; + QString unit; + bool channelNameAvailable = false; + + RimWellPath* wellPath; + this->firstAncestorOrThisOfType(wellPath); + + if (wellPath) + { + name.push_back(wellPath->name()); + name.push_back("LAS"); + + if (!m_wellLogChannelName().isEmpty()) + { + name.push_back(m_wellLogChannelName); + channelNameAvailable = true; + } + + RigWellLogFile* wellLogFile = m_wellLogFile ? m_wellLogFile->wellLogFileData() : nullptr; + + if (wellLogFile) + { + if (channelNameAvailable) + { + /* RimWellLogPlot* wellLogPlot; + firstAncestorOrThisOfType(wellLogPlot); + CVF_ASSERT(wellLogPlot); + QString unitName = wellLogFile->wellLogChannelUnitString(m_wellLogChannelName, wellLogPlot->depthUnit()); + + if (!unitName.isEmpty()) + { + name.back() += QString(" [%1]").arg(unitName); + } */ + } + + QString date = wellLogFile->date(); + if (!date.isEmpty()) + { + name.push_back(wellLogFile->date()); + } + + } + + return name.join(", "); + } + + return "Empty curve"; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +caf::PdmFieldHandle* Rim3dWellLogFileCurve::userDescriptionField() +{ + return m_nameConfig()->nameField(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -178,5 +252,7 @@ void Rim3dWellLogFileCurve::defineUiOrdering(QString uiConfigName, caf::PdmUiOrd Rim3dWellLogCurve::configurationUiOrdering(uiOrdering); + caf::PdmUiGroup* nameGroup = m_nameConfig()->createUiGroup(uiConfigName, uiOrdering); + uiOrdering.skipRemainingFields(true); } diff --git a/ApplicationCode/ProjectDataModel/Rim3dWellLogFileCurve.h b/ApplicationCode/ProjectDataModel/Rim3dWellLogFileCurve.h index 9f537df3cc..58390e7a7f 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dWellLogFileCurve.h +++ b/ApplicationCode/ProjectDataModel/Rim3dWellLogFileCurve.h @@ -25,6 +25,7 @@ #include "cafPdmPtrField.h" class RimWellLogFile; +class RimWellLogFileCurveNameConfig; //================================================================================================== /// @@ -41,8 +42,10 @@ public: void setDefaultFileCurveDataInfo(); virtual void curveValuesAndMds(std::vector* values, std::vector* measuredDepthValues) const override; virtual QString resultPropertyString() const override; - + virtual QString name() const override; + virtual QString createCurveAutoName() const override; protected: + virtual caf::PdmFieldHandle* userDescriptionField() override; virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; @@ -56,4 +59,5 @@ private: private: caf::PdmPtrField m_wellLogFile; caf::PdmField m_wellLogChannelName; + caf::PdmChildField m_nameConfig; }; diff --git a/ApplicationCode/ProjectDataModel/Rim3dWellLogRftCurve.cpp b/ApplicationCode/ProjectDataModel/Rim3dWellLogRftCurve.cpp index a3eef10699..85ad411929 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dWellLogRftCurve.cpp +++ b/ApplicationCode/ProjectDataModel/Rim3dWellLogRftCurve.cpp @@ -18,12 +18,14 @@ #include "Rim3dWellLogRftCurve.h" +#include "RifReaderEclipseRft.h" +#include "RigWellLogCurveData.h" + +#include "RimWellLogCurveNameConfig.h" +#include "RimEclipseResultCase.h" +#include "RimTools.h" #include "RimWellPath.h" #include "RimWellLogCurve.h" -#include "RigWellLogCurveData.h" -#include "RimEclipseResultCase.h" -#include "RifReaderEclipseRft.h" -#include "RimTools.h" //================================================================================================== /// @@ -49,7 +51,8 @@ Rim3dWellLogRftCurve::Rim3dWellLogRftCurve() m_2dWellLogRftCurve = new RimWellLogRftCurve(); m_2dWellLogRftCurve.xmlCapability()->disableIO(); - m_name = "3D Well Log RFT Curve"; + CAF_PDM_InitFieldNoDefault(&m_nameConfig, "NameConfig", "", "", "", ""); + m_nameConfig = new RimWellLogRftCurveNameConfig(this); } //-------------------------------------------------------------------------------------------------- @@ -57,6 +60,7 @@ Rim3dWellLogRftCurve::Rim3dWellLogRftCurve() //-------------------------------------------------------------------------------------------------- Rim3dWellLogRftCurve::~Rim3dWellLogRftCurve() { + delete m_nameConfig; } //-------------------------------------------------------------------------------------------------- @@ -84,6 +88,53 @@ QString Rim3dWellLogRftCurve::resultPropertyString() const return caf::AppEnum::uiText(m_wellLogChannelName()); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString Rim3dWellLogRftCurve::name() const +{ + return m_nameConfig->name(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString Rim3dWellLogRftCurve::createCurveAutoName() const +{ + QStringList name; + + if (!wellName().isEmpty()) + { + name.push_back(wellName()); + } + + name.push_back("RFT"); + + if (m_eclipseResultCase) + { + name.push_back(m_eclipseResultCase->caseUserDescription()); + } + if (m_wellLogChannelName().text() != caf::AppEnum::text(RifEclipseRftAddress::NONE)) + { + RifEclipseRftAddress::RftWellLogChannelType channelNameEnum = m_wellLogChannelName(); + name.push_back(caf::AppEnum::uiText(channelNameEnum)); + } + if (!m_timeStep().isNull()) + { + name.push_back(m_timeStep().toString(RimTools::dateFormatString())); + } + + return name.join(", "); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +caf::PdmFieldHandle* Rim3dWellLogRftCurve::userDescriptionField() +{ + return m_nameConfig()->nameField(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Rim3dWellLogRftCurve.h b/ApplicationCode/ProjectDataModel/Rim3dWellLogRftCurve.h index e922d1059a..ee9b157fe0 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dWellLogRftCurve.h +++ b/ApplicationCode/ProjectDataModel/Rim3dWellLogRftCurve.h @@ -28,6 +28,7 @@ #include "RimWellLogRftCurve.h" class RimEclipseResultCase; +class RimWellLogRftCurveNameConfig; class QString; //================================================================================================== @@ -45,8 +46,12 @@ public: virtual void curveValuesAndMds(std::vector* values, std::vector* measuredDepthValues) const override; virtual QString resultPropertyString() const override; + virtual QString name() const override; + virtual QString createCurveAutoName() const override; protected: + virtual caf::PdmFieldHandle* userDescriptionField() override; + virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; @@ -66,4 +71,5 @@ private: caf::PdmField> m_wellLogChannelName; caf::PdmChildField m_2dWellLogRftCurve; + caf::PdmChildField m_nameConfig; }; diff --git a/ApplicationCode/ProjectDataModel/RimWellLogCurveNameConfig.cpp b/ApplicationCode/ProjectDataModel/RimWellLogCurveNameConfig.cpp new file mode 100644 index 0000000000..7bbc4903b8 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimWellLogCurveNameConfig.cpp @@ -0,0 +1,274 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2018- Statoil 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. +// + m_addWellName {m_fieldValue=true m_defaultFieldValue=true } caf::PdmField + +// 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. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RimProject.h" +#include "RimWellLogCurveNameConfig.h" +#include "Rim3dWellLogCurve.h" + +//================================================================================================== +/// +/// +//================================================================================================== + +CAF_PDM_SOURCE_INIT(RimCurveNameConfig, "RimCurveNameGenerator"); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimCurveNameConfig::RimCurveNameConfig(const RimCurveNameConfigHolderInterface* configHolder /*= nullptr*/) + : m_configHolder(configHolder) +{ + CAF_PDM_InitObject("Curve Name Generator", "", "", ""); + + CAF_PDM_InitField(&m_isUsingAutoName, "IsUsingAutoName", true, "Generate Name Automatically", "", "", ""); + CAF_PDM_InitFieldNoDefault(&m_customName, "CustomCurveName", "Curve Name", "", "", ""); + CAF_PDM_InitFieldNoDefault(&m_autoName, "AutoCurveName", "Curve Name", "", "", ""); + m_autoName.registerGetMethod(this, &RimCurveNameConfig::autoName); + m_autoName.registerSetMethod(this, &RimCurveNameConfig::setCustomName); + m_autoName.xmlCapability()->disableIO(); + + CVF_ASSERT(configHolder); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimCurveNameConfig::~RimCurveNameConfig() +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimCurveNameConfig::isUsingAutoName() const +{ + return m_isUsingAutoName(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +caf::PdmFieldHandle* RimCurveNameConfig::nameField() +{ + if (isUsingAutoName()) + { + return &m_autoName; + } + return &m_customName; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimCurveNameConfig::name() const +{ + if (isUsingAutoName()) + { + return m_autoName(); + } + return m_customName(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +caf::PdmUiGroup* RimCurveNameConfig::createUiGroup(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) +{ + caf::PdmUiGroup* nameGroup = uiOrdering.addNewGroup("Curve Name Configuration"); + nameGroup->add(&m_isUsingAutoName); + return nameGroup; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimCurveNameConfig::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) +{ + if (changedField == &m_customName) + { + m_isUsingAutoName = false; + } + + if (changedField == &m_isUsingAutoName && !isUsingAutoName()) + { + m_customName = m_configHolder->createCurveAutoName(); + m_customName.uiCapability()->updateConnectedEditors(); + } + + updateAllSettings(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimCurveNameConfig::autoName() const +{ + return m_configHolder->createCurveAutoName(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimCurveNameConfig::setCustomName(const QString& name) +{ + m_isUsingAutoName = false; + m_customName = name; + updateAllSettings(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimCurveNameConfig::updateAllSettings() +{ + m_isUsingAutoName.uiCapability()->updateConnectedEditors(); + m_autoName.uiCapability()->updateConnectedEditors(); + m_customName.uiCapability()->updateConnectedEditors(); + + Rim3dWellLogCurve* curve; + this->firstAncestorOrThisOfTypeAsserted(curve); + curve->updateConnectedEditors(); + +} + +//================================================================================================== +/// +/// +//================================================================================================== + +CAF_PDM_SOURCE_INIT(RimWellLogExtractionCurveNameConfig, "RimWellLogExtractionCurveNameGenerator"); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimWellLogExtractionCurveNameConfig::RimWellLogExtractionCurveNameConfig(const RimCurveNameConfigHolderInterface* configHolder) + : RimCurveNameConfig(configHolder) +{ + CAF_PDM_InitObject("Well Log Extraction Curve Name Generator", "", "", ""); + + CAF_PDM_InitField(&m_addCaseName, "AddCaseName", false, "Add Case Name To Auto Name", "", "", ""); + CAF_PDM_InitField(&m_addProperty, "AddProperty", true, "Add Property Type To Auto Name", "", "", ""); + CAF_PDM_InitField(&m_addWellName, "AddWellName", true, "Add Well Name To Auto Name", "", "", ""); + CAF_PDM_InitField(&m_addTimestep, "AddTimeStep", true, "Add Time Step To Auto Name", "", "", ""); + CAF_PDM_InitField(&m_addDate, "AddDate", true, "Add Date To Auto Name", "", "", ""); + + m_customName = "Extraction Curve"; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +caf::PdmUiGroup* RimWellLogExtractionCurveNameConfig::createUiGroup(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) +{ + caf::PdmUiGroup* nameGroup = RimCurveNameConfig::createUiGroup(uiConfigName, uiOrdering); + nameGroup->add(&m_addCaseName); + nameGroup->add(&m_addProperty); + nameGroup->add(&m_addWellName); + nameGroup->add(&m_addTimestep); + nameGroup->add(&m_addDate); + return nameGroup; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimWellLogExtractionCurveNameConfig::addCaseName() const +{ + return m_addCaseName(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimWellLogExtractionCurveNameConfig::addProperty() const +{ + return m_addProperty(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimWellLogExtractionCurveNameConfig::addWellName() const +{ + return m_addWellName(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimWellLogExtractionCurveNameConfig::addTimeStep() const +{ + return m_addTimestep(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimWellLogExtractionCurveNameConfig::addDate() const +{ + return m_addDate(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimWellLogExtractionCurveNameConfig::updateAllSettings() +{ + m_addCaseName.uiCapability()->setUiReadOnly(!isUsingAutoName()); + m_addProperty.uiCapability()->setUiReadOnly(!isUsingAutoName()); + m_addWellName.uiCapability()->setUiReadOnly(!isUsingAutoName()); + m_addTimestep.uiCapability()->setUiReadOnly(!isUsingAutoName()); + m_addDate.uiCapability()->setUiReadOnly(!isUsingAutoName()); + + RimCurveNameConfig::updateAllSettings(); +} + +//================================================================================================== +/// +/// +//================================================================================================== + +CAF_PDM_SOURCE_INIT(RimWellLogFileCurveNameConfig, "RimWellLogFileCurveNameGenerator"); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimWellLogFileCurveNameConfig::RimWellLogFileCurveNameConfig(const RimCurveNameConfigHolderInterface* configHolder) + : RimCurveNameConfig(configHolder) +{ + CAF_PDM_InitObject("Well Log File Curve Name Generator", "", "", ""); + m_customName = "Las Curve"; +} + +//================================================================================================== +/// +/// +//================================================================================================== + +CAF_PDM_SOURCE_INIT(RimWellLogRftCurveNameConfig, "RimWellLogRftCurveNameGenerator"); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimWellLogRftCurveNameConfig::RimWellLogRftCurveNameConfig(const RimCurveNameConfigHolderInterface* configHolder) + : RimCurveNameConfig(configHolder) +{ + CAF_PDM_InitObject("Well Log Rft Curve Name Generator", "", "", ""); + m_customName = "Rft Curve"; +} \ No newline at end of file diff --git a/ApplicationCode/ProjectDataModel/RimWellLogCurveNameConfig.h b/ApplicationCode/ProjectDataModel/RimWellLogCurveNameConfig.h new file mode 100644 index 0000000000..0ad17339e4 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimWellLogCurveNameConfig.h @@ -0,0 +1,115 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2015- Statoil 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 +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "cafPdmField.h" +#include "cafPdmObject.h" +#include "cafPdmProxyValueField.h" + +//================================================================================================== +/// +/// +//================================================================================================== +class RimCurveNameConfigHolderInterface +{ +public: + virtual QString createCurveAutoName() const = 0; +}; + +//================================================================================================== +/// +/// +//================================================================================================== +class RimCurveNameConfig : public caf::PdmObject +{ + CAF_PDM_HEADER_INIT; + +public: + RimCurveNameConfig(const RimCurveNameConfigHolderInterface* configHolder = nullptr); + virtual ~RimCurveNameConfig(); + bool isUsingAutoName() const; + caf::PdmFieldHandle* nameField(); + QString name() const; + virtual caf::PdmUiGroup* createUiGroup(QString uiConfigName, caf::PdmUiOrdering& uiOrdering); + +protected: + virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; + QString autoName() const; + void setCustomName(const QString& name); + virtual void updateAllSettings(); +protected: + caf::PdmField m_isUsingAutoName; + caf::PdmField m_customName; + caf::PdmProxyValueField m_autoName; + + const RimCurveNameConfigHolderInterface* m_configHolder; +}; + +//================================================================================================== +/// +/// +//================================================================================================== +class RimWellLogExtractionCurveNameConfig : public RimCurveNameConfig +{ + CAF_PDM_HEADER_INIT; + +public: + RimWellLogExtractionCurveNameConfig(const RimCurveNameConfigHolderInterface* configHolder = nullptr); + virtual caf::PdmUiGroup* createUiGroup(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; + + bool addCaseName() const; + bool addProperty() const; + bool addWellName() const; + bool addTimeStep() const; + bool addDate() const; + +protected: + virtual void updateAllSettings(); + +private: + caf::PdmField m_addCaseName; + caf::PdmField m_addProperty; + caf::PdmField m_addWellName; + caf::PdmField m_addTimestep; + caf::PdmField m_addDate; +}; + +//================================================================================================== +/// +/// +//================================================================================================== +class RimWellLogFileCurveNameConfig : public RimCurveNameConfig +{ + CAF_PDM_HEADER_INIT; + +public: + RimWellLogFileCurveNameConfig(const RimCurveNameConfigHolderInterface* configHolder = nullptr); +}; + +//================================================================================================== +/// +/// +//================================================================================================== +class RimWellLogRftCurveNameConfig : public RimCurveNameConfig +{ + CAF_PDM_HEADER_INIT; + +public: + RimWellLogRftCurveNameConfig(const RimCurveNameConfigHolderInterface* configHolder = nullptr); +};