From 9851afc621a1bbacbd26456f769f34a1460e8234 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 19 Jan 2026 07:08:08 +0100 Subject: [PATCH] #2070 AppFwk : Disable default IO for proxy fields Proxy fields usually reads and transforms data from other sources, usually other Pdm fields. This commit disables IO for proxy fields in the constructor. If XML serialization is required, this must be set on the proxy field, like this field.xmlCapability()->setIOWritable(true) field.xmlCapability()->setIOReadable(true) --- .../Annotations/RimTextAnnotation.cpp | 1 - .../CellFilters/RimCellFilter.cpp | 1 - .../CellFilters/RimEclipsePropertyFilter.cpp | 2 - .../Completions/RimFracture.cpp | 3 -- .../Completions/RimFractureTemplate.cpp | 3 -- .../EnsembleFileSet/RimEnsembleFileSet.cpp | 1 - .../Flow/RimWellRftEnsembleCurveSet.cpp | 1 - .../Parameters/RimParameterGroup.cpp | 1 - .../QuickAccess/RimFieldQuickAccess.cpp | 2 - .../Rim2dIntersectionView.cpp | 1 - .../ProjectDataModel/RimColorLegendItem.cpp | 1 - .../ProjectDataModel/RimEclipseView.cpp | 1 - .../ProjectDataModel/RimGridCalculation.cpp | 1 - .../ProjectDataModel/RimNameConfig.cpp | 1 - .../RimObservedFmuRftData.cpp | 1 - .../ProjectDataModel/RimPressureDepthData.cpp | 1 - .../RimUserDefinedCalculationVariable.cpp | 1 - .../Seismic/RimSeismicDifferenceData.cpp | 1 - .../Seismic/RimSeismicSection.cpp | 1 - .../StimPlanModel/RimStimPlanModel.cpp | 1 - .../Summary/RimEnsembleCurveSet.cpp | 1 - .../Summary/RimSummaryEnsemble.cpp | 1 - .../ProjectDataModel/Surfaces/RimSurface.cpp | 1 - .../Surfaces/RimSurfaceInViewCollection.cpp | 1 - .../WellLog/RimEnsembleWellLogCurveSet.cpp | 1 - .../WellPath/RimWellIASettings.cpp | 1 - .../cafInternalPdmXmlFieldCapability.h | 36 ++++++++++++++ .../cafInternalPdmXmlFieldCapability.inl | 49 +++++++++++++++++++ .../cafPdmXmlBasicTest.cpp | 19 +++++++ .../cafPdmBasicTest.cpp | 3 ++ 30 files changed, 107 insertions(+), 32 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/Annotations/RimTextAnnotation.cpp b/ApplicationLibCode/ProjectDataModel/Annotations/RimTextAnnotation.cpp index 0938adaca4..a6a01531fb 100644 --- a/ApplicationLibCode/ProjectDataModel/Annotations/RimTextAnnotation.cpp +++ b/ApplicationLibCode/ProjectDataModel/Annotations/RimTextAnnotation.cpp @@ -72,7 +72,6 @@ RimTextAnnotation::RimTextAnnotation() CAF_PDM_InitFieldNoDefault( &m_nameProxy, "NameProxy", "Name Proxy" ); m_nameProxy.registerGetMethod( this, &RimTextAnnotation::extractNameFromText ); m_nameProxy.uiCapability()->setUiReadOnly( true ); - m_nameProxy.xmlCapability()->disableIO(); m_anchorPointPickEventHandler = std::make_shared( &m_anchorPointXyd ); m_labelPointPickEventHandler = std::make_shared( &m_labelPointXyd, 0.1 ); diff --git a/ApplicationLibCode/ProjectDataModel/CellFilters/RimCellFilter.cpp b/ApplicationLibCode/ProjectDataModel/CellFilters/RimCellFilter.cpp index 691d23a2ed..58a8b7da39 100644 --- a/ApplicationLibCode/ProjectDataModel/CellFilters/RimCellFilter.cpp +++ b/ApplicationLibCode/ProjectDataModel/CellFilters/RimCellFilter.cpp @@ -71,7 +71,6 @@ RimCellFilter::RimCellFilter( FilterDefinitionType defType ) m_nameProxy.registerGetMethod( this, &RimCellFilter::fullName ); m_nameProxy.uiCapability()->setUiReadOnly( true ); m_nameProxy.uiCapability()->setUiHidden( true ); - m_nameProxy.xmlCapability()->disableIO(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.cpp b/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.cpp index 870726cc84..a52e30a7a0 100644 --- a/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.cpp +++ b/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.cpp @@ -88,13 +88,11 @@ RimEclipsePropertyFilter::RimEclipsePropertyFilter() m_integerLowerBound.uiCapability()->setUiEditorTypeName( caf::PdmUiSliderEditor::uiEditorTypeName() ); m_integerLowerBound.registerGetMethod( this, &RimEclipsePropertyFilter::lowerBound ); m_integerLowerBound.registerSetMethod( this, &RimEclipsePropertyFilter::setLowerBound ); - m_integerLowerBound.xmlCapability()->disableIO(); CAF_PDM_InitFieldNoDefault( &m_integerUpperBound, "IntegerUpperBound", "Max" ); m_integerUpperBound.uiCapability()->setUiEditorTypeName( caf::PdmUiSliderEditor::uiEditorTypeName() ); m_integerUpperBound.registerGetMethod( this, &RimEclipsePropertyFilter::upperBound ); m_integerUpperBound.registerSetMethod( this, &RimEclipsePropertyFilter::setUpperBound ); - m_integerUpperBound.xmlCapability()->disableIO(); CAF_PDM_InitField( &m_useCategorySelection, "CategorySelection", false, "Category Selection" ); m_upperBound.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleSliderEditor::uiEditorTypeName() ); diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimFracture.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimFracture.cpp index 0a98f65316..2c9ea2d21f 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimFracture.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimFracture.cpp @@ -122,7 +122,6 @@ RimFracture::RimFracture() CAF_PDM_InitFieldNoDefault( &m_uiAnchorPosition, "ui_positionAtWellpath", "Fracture Position" ); m_uiAnchorPosition.registerGetMethod( this, &RimFracture::fracturePositionForUi ); m_uiAnchorPosition.uiCapability()->setUiReadOnly( true ); - m_uiAnchorPosition.xmlCapability()->disableIO(); CAF_PDM_InitField( &m_azimuth, "Azimuth", 0.0, "Azimuth" ); m_azimuth.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleSliderEditor::uiEditorTypeName() ); @@ -146,12 +145,10 @@ RimFracture::RimFracture() CAF_PDM_InitFieldNoDefault( &m_uiWellPathAzimuth, "WellPathAzimuth", "Well Path Azimuth" ); m_uiWellPathAzimuth.registerGetMethod( this, &RimFracture::wellAzimuthAtFracturePositionText ); m_uiWellPathAzimuth.uiCapability()->setUiReadOnly( true ); - m_uiWellPathAzimuth.xmlCapability()->disableIO(); CAF_PDM_InitFieldNoDefault( &m_uiWellFractureAzimuthDiff, "WellFractureAzimuthDiff", "Azimuth Difference Between\nFracture and Well" ); m_uiWellFractureAzimuthDiff.registerGetMethod( this, &RimFracture::wellFractureAzimuthDiffText ); m_uiWellFractureAzimuthDiff.uiCapability()->setUiReadOnly( true ); - m_uiWellFractureAzimuthDiff.xmlCapability()->disableIO(); CAF_PDM_InitField( &m_wellFractureAzimuthAngleWarning, "WellFractureAzimithAngleWarning", diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimFractureTemplate.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimFractureTemplate.cpp index 537eb9a5b8..b9581ccdb4 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimFractureTemplate.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimFractureTemplate.cpp @@ -119,7 +119,6 @@ RimFractureTemplate::RimFractureTemplate() CAF_PDM_InitFieldNoDefault( &m_nameAndUnit, "NameAndUnit", "NameAndUnit" ); m_nameAndUnit.registerGetMethod( this, &RimFractureTemplate::nameAndUnit ); m_nameAndUnit.uiCapability()->setUiHidden( true ); - m_nameAndUnit.xmlCapability()->disableIO(); CAF_PDM_InitField( &m_fractureTemplateUnit, "UnitSystem", @@ -192,14 +191,12 @@ RimFractureTemplate::RimFractureTemplate() m_dFactorDisplayField.registerGetMethod( this, &RimFractureTemplate::dFactorForTemplate ); m_dFactorDisplayField.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleValueEditor::uiEditorTypeName() ); m_dFactorDisplayField.uiCapability()->setUiReadOnly( true ); - m_dFactorDisplayField.xmlCapability()->disableIO(); CAF_PDM_InitFieldNoDefault( &m_dFactorSummaryText, "dFactorSummaryText", "D Factor Summary" ); m_dFactorSummaryText.registerGetMethod( this, &RimFractureTemplate::dFactorSummary ); m_dFactorSummaryText.uiCapability()->setUiReadOnly( true ); m_dFactorSummaryText.uiCapability()->setUiEditorTypeName( caf::PdmUiTextEditor::uiEditorTypeName() ); m_dFactorSummaryText.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::LabelPosition::TOP ); - m_dFactorSummaryText.xmlCapability()->disableIO(); CAF_PDM_InitScriptableField( &m_heightScaleFactor, "HeightScaleFactor", 1.0, "Height" ); CAF_PDM_InitScriptableField( &m_halfLengthScaleFactor, "WidthScaleFactor", 1.0, "Half Length" ); diff --git a/ApplicationLibCode/ProjectDataModel/EnsembleFileSet/RimEnsembleFileSet.cpp b/ApplicationLibCode/ProjectDataModel/EnsembleFileSet/RimEnsembleFileSet.cpp index 5a7498f1c7..4ab9541d60 100644 --- a/ApplicationLibCode/ProjectDataModel/EnsembleFileSet/RimEnsembleFileSet.cpp +++ b/ApplicationLibCode/ProjectDataModel/EnsembleFileSet/RimEnsembleFileSet.cpp @@ -66,7 +66,6 @@ RimEnsembleFileSet::RimEnsembleFileSet() CAF_PDM_InitFieldNoDefault( &m_ensembleInfo, "EnsembleInfo", "Info" ); m_ensembleInfo.registerGetMethod( this, &RimEnsembleFileSet::ensembleInfo ); m_ensembleInfo.uiCapability()->setUiReadOnly( true ); - m_ensembleInfo.xmlCapability()->disableIO(); m_ensembleInfo.uiCapability()->setUiEditorTypeName( caf::PdmUiTextEditor::uiEditorTypeName() ); CAF_PDM_InitFieldNoDefault( &m_groupingMode, "GroupingMode", "Grouping Mode" ); diff --git a/ApplicationLibCode/ProjectDataModel/Flow/RimWellRftEnsembleCurveSet.cpp b/ApplicationLibCode/ProjectDataModel/Flow/RimWellRftEnsembleCurveSet.cpp index f2c2084049..51df83e81e 100644 --- a/ApplicationLibCode/ProjectDataModel/Flow/RimWellRftEnsembleCurveSet.cpp +++ b/ApplicationLibCode/ProjectDataModel/Flow/RimWellRftEnsembleCurveSet.cpp @@ -47,7 +47,6 @@ RimWellRftEnsembleCurveSet::RimWellRftEnsembleCurveSet() CAF_PDM_InitFieldNoDefault( &m_ensembleName, "NameAndUnit", "NameAndUnit" ); m_ensembleName.registerGetMethod( this, &RimWellRftEnsembleCurveSet::ensembleName ); m_ensembleName.uiCapability()->setUiHidden( true ); - m_ensembleName.xmlCapability()->disableIO(); CAF_PDM_InitFieldNoDefault( &m_eclipseCase, "EclipseResultCase", "Eclipse Result Case" ); m_eclipseCase.uiCapability()->setUiHidden( true ); diff --git a/ApplicationLibCode/ProjectDataModel/Parameters/RimParameterGroup.cpp b/ApplicationLibCode/ProjectDataModel/Parameters/RimParameterGroup.cpp index dd81ef57b8..57f427decf 100644 --- a/ApplicationLibCode/ProjectDataModel/Parameters/RimParameterGroup.cpp +++ b/ApplicationLibCode/ProjectDataModel/Parameters/RimParameterGroup.cpp @@ -68,7 +68,6 @@ RimParameterGroup::RimParameterGroup() m_labelProxy.registerGetMethod( this, &RimParameterGroup::labelOrName ); m_labelProxy.uiCapability()->setUiReadOnly( true ); m_labelProxy.uiCapability()->setUiHidden( true ); - m_labelProxy.xmlCapability()->disableIO(); CAF_PDM_InitFieldNoDefault( &m_lists, "ParameterLists", "Parameter Lists" ); m_lists.uiCapability()->setUiHidden( true ); diff --git a/ApplicationLibCode/ProjectDataModel/QuickAccess/RimFieldQuickAccess.cpp b/ApplicationLibCode/ProjectDataModel/QuickAccess/RimFieldQuickAccess.cpp index ef4a798b88..57b3f357e7 100644 --- a/ApplicationLibCode/ProjectDataModel/QuickAccess/RimFieldQuickAccess.cpp +++ b/ApplicationLibCode/ProjectDataModel/QuickAccess/RimFieldQuickAccess.cpp @@ -40,11 +40,9 @@ RimFieldQuickAccess::RimFieldQuickAccess() CAF_PDM_InitFieldNoDefault( &m_selectObjectButton, "SelectObject", "...", ":/Select.svg", "Select Object in Property Editor" ); m_selectObjectButton.uiCapability()->setUiEditorTypeName( caf::PdmUiToolButtonCallbackEditor::uiEditorTypeName() ); - m_selectObjectButton.xmlCapability()->disableIO(); CAF_PDM_InitFieldNoDefault( &m_removeItemButton, "RemoveItem", "...", ":/pinned-remove.svg", "Remove Quick Access" ); m_removeItemButton.uiCapability()->setUiEditorTypeName( caf::PdmUiToolButtonCallbackEditor::uiEditorTypeName() ); - m_removeItemButton.xmlCapability()->disableIO(); m_markedForRemoval = false; } diff --git a/ApplicationLibCode/ProjectDataModel/Rim2dIntersectionView.cpp b/ApplicationLibCode/ProjectDataModel/Rim2dIntersectionView.cpp index 2162425b38..a9d5f62c45 100644 --- a/ApplicationLibCode/ProjectDataModel/Rim2dIntersectionView.cpp +++ b/ApplicationLibCode/ProjectDataModel/Rim2dIntersectionView.cpp @@ -86,7 +86,6 @@ Rim2dIntersectionView::Rim2dIntersectionView() CAF_PDM_InitField( &m_showAxisLines, "ShowAxisLines", false, "Show Axis Lines" ); CAF_PDM_InitFieldNoDefault( &m_nameProxy, "NameProxy", "Name" ); - m_nameProxy.xmlCapability()->disableIO(); m_nameProxy.registerGetMethod( this, &Rim2dIntersectionView::getName ); m_nameProxy.registerSetMethod( this, &Rim2dIntersectionView::setName ); diff --git a/ApplicationLibCode/ProjectDataModel/RimColorLegendItem.cpp b/ApplicationLibCode/ProjectDataModel/RimColorLegendItem.cpp index 04843a8a14..905f390214 100644 --- a/ApplicationLibCode/ProjectDataModel/RimColorLegendItem.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimColorLegendItem.cpp @@ -46,7 +46,6 @@ RimColorLegendItem::RimColorLegendItem() CAF_PDM_InitFieldNoDefault( &m_nameProxy, "NameProxy", "Name Proxy" ); m_nameProxy.registerGetMethod( this, &RimColorLegendItem::itemName ); m_nameProxy.uiCapability()->setUiHidden( true ); - m_nameProxy.xmlCapability()->disableIO(); setDeletable( true ); } diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseView.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseView.cpp index 1f58c742e8..faffef6e08 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseView.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseView.cpp @@ -209,7 +209,6 @@ RimEclipseView::RimEclipseView() CAF_PDM_InitField( &m_showInvalidCells, "ShowInvalidCells", false, "Show Invalid Cells" ); CAF_PDM_InitScriptableFieldNoDefault( &m_cellResultData, "CellResultData", "", "", "", "Current Eclipse Cell Result" ); - m_cellResultData.xmlCapability()->disableIO(); m_cellResultData.registerGetMethod( this, &RimEclipseView::currentCellResultData ); m_cellResultData.registerSetMethod( this, &RimEclipseView::setCurrentCellResultData ); diff --git a/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp b/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp index 1570b40b81..6cc6ff5333 100644 --- a/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp @@ -111,7 +111,6 @@ RimGridCalculation::RimGridCalculation() CAF_PDM_InitFieldNoDefault( &m_nonVisibleResultText, "NonVisibleResultText", "" ); m_nonVisibleResultText.registerGetMethod( this, &RimGridCalculation::nonVisibleResultAddressText ); m_nonVisibleResultText.uiCapability()->setUiReadOnly( true ); - m_nonVisibleResultText.xmlCapability()->disableIO(); CAF_PDM_InitFieldNoDefault( &m_selectedTimeSteps, "SelectedTimeSteps", "Time Step Selection" ); m_selectedTimeSteps.uiCapability()->setUiEditorTypeName( caf::PdmUiTreeSelectionEditor::uiEditorTypeName() ); diff --git a/ApplicationLibCode/ProjectDataModel/RimNameConfig.cpp b/ApplicationLibCode/ProjectDataModel/RimNameConfig.cpp index 3df568b2a7..7d9d281c3b 100644 --- a/ApplicationLibCode/ProjectDataModel/RimNameConfig.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimNameConfig.cpp @@ -38,7 +38,6 @@ RimNameConfig::RimNameConfig( const QString& customName ) CAF_PDM_InitFieldNoDefault( &m_customName, "CustomCurveName", "Custom Name Part" ); CAF_PDM_InitFieldNoDefault( &m_autoName, "AutoCurveName", "Full Name" ); m_autoName.registerGetMethod( this, &RimNameConfig::autoName ); - m_autoName.xmlCapability()->disableIO(); m_autoName.uiCapability()->setUiReadOnly( true ); m_customName = customName; diff --git a/ApplicationLibCode/ProjectDataModel/RimObservedFmuRftData.cpp b/ApplicationLibCode/ProjectDataModel/RimObservedFmuRftData.cpp index ce397b9bd9..ebcf1e24a9 100644 --- a/ApplicationLibCode/ProjectDataModel/RimObservedFmuRftData.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimObservedFmuRftData.cpp @@ -39,7 +39,6 @@ RimObservedFmuRftData::RimObservedFmuRftData() m_directoryPath_OBSOLETE.xmlCapability()->setIOWritable( false ); CAF_PDM_InitFieldNoDefault( &m_wells, "Wells", "Wells" ); - m_wells.xmlCapability()->disableIO(); m_wells.uiCapability()->setUiReadOnly( true ); m_wells.registerGetMethod( this, &RimObservedFmuRftData::wells ); } diff --git a/ApplicationLibCode/ProjectDataModel/RimPressureDepthData.cpp b/ApplicationLibCode/ProjectDataModel/RimPressureDepthData.cpp index 59bdafed2b..fe0bf75378 100644 --- a/ApplicationLibCode/ProjectDataModel/RimPressureDepthData.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimPressureDepthData.cpp @@ -35,7 +35,6 @@ RimPressureDepthData::RimPressureDepthData() m_filePath.uiCapability()->setUiReadOnly( true ); CAF_PDM_InitFieldNoDefault( &m_wells, "Wells", "Wells" ); - m_wells.xmlCapability()->disableIO(); m_wells.uiCapability()->setUiReadOnly( true ); m_wells.registerGetMethod( this, &RimPressureDepthData::wellNames ); diff --git a/ApplicationLibCode/ProjectDataModel/RimUserDefinedCalculationVariable.cpp b/ApplicationLibCode/ProjectDataModel/RimUserDefinedCalculationVariable.cpp index 5c0f3ae545..b787b6c7b8 100644 --- a/ApplicationLibCode/ProjectDataModel/RimUserDefinedCalculationVariable.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimUserDefinedCalculationVariable.cpp @@ -32,7 +32,6 @@ RimUserDefinedCalculationVariable::RimUserDefinedCalculationVariable() CAF_PDM_InitFieldNoDefault( &m_addressUi, "AddressUi", "Address" ); m_addressUi.registerGetMethod( this, &RimUserDefinedCalculationVariable::displayString ); - m_addressUi.xmlCapability()->disableIO(); m_addressUi.uiCapability()->setUiReadOnly( true ); } diff --git a/ApplicationLibCode/ProjectDataModel/Seismic/RimSeismicDifferenceData.cpp b/ApplicationLibCode/ProjectDataModel/Seismic/RimSeismicDifferenceData.cpp index 9fd43d8135..08e242b912 100644 --- a/ApplicationLibCode/ProjectDataModel/Seismic/RimSeismicDifferenceData.cpp +++ b/ApplicationLibCode/ProjectDataModel/Seismic/RimSeismicDifferenceData.cpp @@ -72,7 +72,6 @@ RimSeismicDifferenceData::RimSeismicDifferenceData() m_nameProxy.registerGetMethod( this, &RimSeismicDifferenceData::fullName ); m_nameProxy.uiCapability()->setUiReadOnly( true ); m_nameProxy.uiCapability()->setUiHidden( true ); - m_nameProxy.xmlCapability()->disableIO(); CAF_PDM_InitFieldNoDefault( &m_seismicData1, "SeismicData1", "Seismic Data 1" ); CAF_PDM_InitFieldNoDefault( &m_seismicData2, "SeismicData2", "Seismic Data 2" ); diff --git a/ApplicationLibCode/ProjectDataModel/Seismic/RimSeismicSection.cpp b/ApplicationLibCode/ProjectDataModel/Seismic/RimSeismicSection.cpp index d64f30e227..38fb321eba 100644 --- a/ApplicationLibCode/ProjectDataModel/Seismic/RimSeismicSection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Seismic/RimSeismicSection.cpp @@ -77,7 +77,6 @@ RimSeismicSection::RimSeismicSection() m_nameProxy.registerGetMethod( this, &RimSeismicSection::fullName ); m_nameProxy.uiCapability()->setUiReadOnly( true ); m_nameProxy.uiCapability()->setUiHidden( true ); - m_nameProxy.xmlCapability()->disableIO(); CAF_PDM_InitFieldNoDefault( &m_type, "Type", "Type" ); diff --git a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModel.cpp b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModel.cpp index 9505c8dd14..358f064e9f 100644 --- a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModel.cpp +++ b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModel.cpp @@ -183,7 +183,6 @@ RimStimPlanModel::RimStimPlanModel() CAF_PDM_InitFieldNoDefault( &m_anchorPositionForUi, "AnchorPositionForUi", "Anchor Position" ); m_anchorPositionForUi.registerGetMethod( this, &RimStimPlanModel::anchorPositionForUi ); m_anchorPositionForUi.uiCapability()->setUiReadOnly( true ); - m_anchorPositionForUi.xmlCapability()->disableIO(); CAF_PDM_InitScriptableFieldNoDefault( &m_thicknessDirection, "ThicknessDirection", "Thickness Direction" ); m_thicknessDirection.uiCapability()->setUiReadOnly( true ); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp index 25b3b0a1d8..4ac10a24c3 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp @@ -247,7 +247,6 @@ RimEnsembleCurveSet::RimEnsembleCurveSet() CAF_PDM_InitFieldNoDefault( &m_autoGeneratedName, "AutoGeneratedName", "Curve Set Name" ); m_autoGeneratedName.registerGetMethod( this, &RimEnsembleCurveSet::createAutoName ); m_autoGeneratedName.uiCapability()->setUiReadOnly( true ); - m_autoGeneratedName.xmlCapability()->disableIO(); CAF_PDM_InitField( &m_isUsingAutoName, "AutoName", true, "Auto Name" ); CAF_PDM_InitFieldNoDefault( &m_summaryAddressNameTools, "SummaryAddressNameTools", "SummaryAddressNameTools" ); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsemble.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsemble.cpp index 2b7853a8b8..7c0c54fe9b 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsemble.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsemble.cpp @@ -107,7 +107,6 @@ RimSummaryEnsemble::RimSummaryEnsemble() m_ensembleDescription.registerGetMethod( this, &RimSummaryEnsemble::ensembleDescription ); m_ensembleDescription.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::LabelPosition::TOP ); m_ensembleDescription.uiCapability()->setUiEditorTypeName( caf::PdmUiTextEditor::uiEditorTypeName() ); - m_ensembleDescription.xmlCapability()->disableIO(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurface.cpp b/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurface.cpp index 6af73db9d5..f915c7b821 100644 --- a/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurface.cpp +++ b/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurface.cpp @@ -72,7 +72,6 @@ RimSurface::RimSurface() m_nameProxy.registerGetMethod( this, &RimSurface::fullName ); m_nameProxy.uiCapability()->setUiReadOnly( true ); m_nameProxy.uiCapability()->setUiHidden( true ); - m_nameProxy.xmlCapability()->disableIO(); setDeletable( true ); } diff --git a/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceInViewCollection.cpp b/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceInViewCollection.cpp index 3caf81e4a4..5627dc04e8 100644 --- a/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceInViewCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceInViewCollection.cpp @@ -47,7 +47,6 @@ RimSurfaceInViewCollection::RimSurfaceInViewCollection() CAF_PDM_InitFieldNoDefault( &m_collectionName, "CollectionName", "Name" ); m_collectionName.registerGetMethod( this, &RimSurfaceInViewCollection::name ); m_collectionName.uiCapability()->setUiReadOnly( true ); - m_collectionName.xmlCapability()->disableIO(); CAF_PDM_InitFieldNoDefault( &m_collectionsInView, "SurfacesInViewFieldCollections", "SurfacesInViewFieldCollections" ); diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.cpp index 02ab375424..af5bb28b45 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.cpp @@ -125,7 +125,6 @@ RimEnsembleWellLogCurveSet::RimEnsembleWellLogCurveSet() CAF_PDM_InitFieldNoDefault( &m_autoGeneratedName, "AutoGeneratedName", "Curve Set Name" ); m_autoGeneratedName.registerGetMethod( this, &RimEnsembleWellLogCurveSet::createAutoName ); m_autoGeneratedName.uiCapability()->setUiReadOnly( true ); - m_autoGeneratedName.xmlCapability()->disableIO(); CAF_PDM_InitField( &m_isUsingAutoName, "AutoName", true, "Auto Name" ); diff --git a/ApplicationLibCode/ProjectDataModel/WellPath/RimWellIASettings.cpp b/ApplicationLibCode/ProjectDataModel/WellPath/RimWellIASettings.cpp index ea359f4976..c94e41b2f9 100644 --- a/ApplicationLibCode/ProjectDataModel/WellPath/RimWellIASettings.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellPath/RimWellIASettings.cpp @@ -86,7 +86,6 @@ RimWellIASettings::RimWellIASettings() m_nameProxy.registerGetMethod( this, &RimWellIASettings::fullName ); m_nameProxy.uiCapability()->setUiReadOnly( true ); m_nameProxy.uiCapability()->setUiHidden( true ); - m_nameProxy.xmlCapability()->disableIO(); CAF_PDM_InitField( &m_showBox, "showBox", false, "Show model box" ); diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafInternalPdmXmlFieldCapability.h b/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafInternalPdmXmlFieldCapability.h index 923d33733c..f4fbc1b634 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafInternalPdmXmlFieldCapability.h +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafInternalPdmXmlFieldCapability.h @@ -1,6 +1,7 @@ #pragma once #include "cafInternalPdmXmlFieldReaderWriter.h" +#include "cafPdmProxyValueField.h" #include "cafPdmXmlFieldHandle.h" #include @@ -195,6 +196,41 @@ private: FieldType* m_field; }; +template +class PdmFieldXmlCap> : public PdmXmlFieldHandle +{ + typedef PdmProxyValueField FieldType; + +public: + PdmFieldXmlCap( FieldType* field, bool giveOwnership ) + : PdmXmlFieldHandle( field, giveOwnership ) + { + m_field = field; + m_dataTypeName = QString( "%1" ).arg( typeid( DataType ).name() ); + + // Proxy fields should not be serialized by default + // If needed, this can be overridden by the user by enabling IO on the field: + // + // m_proxyDoubleField.xmlCapability()->setIOWritable( true ); + // m_proxyDoubleField.xmlCapability()->setIOReadable( true ); + + disableIO(); + } + + // Xml Serializing +public: + std::vector readFieldData( QXmlStreamReader& xmlStream, + PdmObjectFactory* objectFactory, + const std::vector& deprecations = {} ) override; + void writeFieldData( QXmlStreamWriter& xmlStream ) const override; + bool resolveReferences() override; + + bool isVectorField() const override; + +private: + FieldType* m_field; +}; + template void addXmlCapabilityToField( FieldType* field ) { diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafInternalPdmXmlFieldCapability.inl b/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafInternalPdmXmlFieldCapability.inl index 6fafee6fbb..8ca5f990ce 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafInternalPdmXmlFieldCapability.inl +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafInternalPdmXmlFieldCapability.inl @@ -533,4 +533,53 @@ bool caf::PdmFieldXmlCap>>::resolveReference return true; } +//================================================================================================== +/// XML Implementation for PdmFieldXmlCap> methods +/// +//================================================================================================== + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +template +bool caf::PdmFieldXmlCap>::isVectorField() const +{ + return m_field->isStreamingField(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +template +std::vector + caf::PdmFieldXmlCap>::readFieldData( QXmlStreamReader& xmlStream, + PdmObjectFactory*, + const std::vector& ) +{ + this->assertValid(); + DataType value; + PdmFieldReader::readFieldData( value, xmlStream, m_field ); + m_field->setValue( value ); + return {}; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +template +void caf::PdmFieldXmlCap>::writeFieldData( QXmlStreamWriter& xmlStream ) const +{ + this->assertValid(); + PdmFieldWriter::writeFieldData( m_field->value(), xmlStream ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +template +bool caf::PdmFieldXmlCap>::resolveReferences() +{ + return true; +} + } // End namespace caf diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafPdmXml_UnitTests/cafPdmXmlBasicTest.cpp b/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafPdmXml_UnitTests/cafPdmXmlBasicTest.cpp index f09f131bec..78a7f7ddc8 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafPdmXml_UnitTests/cafPdmXmlBasicTest.cpp +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafPdmXml_UnitTests/cafPdmXmlBasicTest.cpp @@ -37,6 +37,8 @@ public: CAF_PDM_XML_InitField( &m_proxyDoubleField, "BigNumber" ); m_proxyDoubleField.registerSetMethod( this, &DemoPdmObject::setDoubleMember ); m_proxyDoubleField.registerGetMethod( this, &DemoPdmObject::doubleMember ); + m_proxyDoubleField.xmlCapability()->setIOWritable( true ); + m_proxyDoubleField.xmlCapability()->setIOReadable( true ); CAF_PDM_XML_InitField( &m_proxyEnumField, "AppEnum" ); m_proxyEnumField.registerSetMethod( this, &DemoPdmObject::setEnumMember ); @@ -587,3 +589,20 @@ TEST( BaseTest, XmlImportClamping ) EXPECT_DOUBLE_EQ( -123.456, obj->m_unclampedField() ); } } + +//-------------------------------------------------------------------------------------------------- +/// Test that proxy fields have IO disabled by default +//-------------------------------------------------------------------------------------------------- +TEST( BaseTest, ProxyFieldIODisabled ) +{ + // Test with SimpleObj which has default proxy field IO behavior (disabled) + auto simpleObj = std::make_unique(); + EXPECT_FALSE( simpleObj->m_proxyDouble.xmlCapability()->isIOReadable() ); + EXPECT_FALSE( simpleObj->m_proxyDouble.xmlCapability()->isIOWritable() ); + + // Regular fields should still have IO enabled + EXPECT_TRUE( simpleObj->m_position.xmlCapability()->isIOReadable() ); + EXPECT_TRUE( simpleObj->m_position.xmlCapability()->isIOWritable() ); + + // Note: DemoPdmObject explicitly enables IO for its proxy field for the ChildArrayFieldSerializing test +} diff --git a/Fwk/AppFwk/cafProjectDataModel/cafProjectDataModel_UnitTests/cafPdmBasicTest.cpp b/Fwk/AppFwk/cafProjectDataModel/cafProjectDataModel_UnitTests/cafPdmBasicTest.cpp index d1536bada1..d62ae6da3b 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafProjectDataModel_UnitTests/cafPdmBasicTest.cpp +++ b/Fwk/AppFwk/cafProjectDataModel/cafProjectDataModel_UnitTests/cafPdmBasicTest.cpp @@ -75,6 +75,9 @@ public: addUiCapabilityToField( &m_proxyDouble ); addXmlCapabilityToField( &m_proxyDouble ); CAF_PDM_InitFieldNoDefault( &m_proxyDouble, "ProxyDouble", "ProxyDouble" ); + m_proxyDouble.xmlCapability()->setIOWritable( true ); + m_proxyDouble.xmlCapability()->setIOReadable( true ); + m_proxyDouble.xmlCapability()->setCopyable( true ); #endif }