Removes QIntValidator and uses setRange

Replaces the usage of `QIntValidator` with the `setRange` function available in the PDM framework for limiting integer input in UI fields.
This approach provides a more direct and maintainable way to specify value ranges for UI elements.

This change simplifies the code and reduces dependencies.
This commit is contained in:
Magne Sjaastad
2025-12-22 10:17:00 +01:00
parent 4488a7215d
commit 405a32e2da
16 changed files with 42 additions and 143 deletions
@@ -46,7 +46,6 @@
#include <QDir>
#include <QFileInfo>
#include <QIntValidator>
#include <set>
@@ -92,6 +91,7 @@ RicExportEclipseSectorModelUi::RicExportEclipseSectorModelUi()
"",
"Number of cells to add around visible wells",
"" );
m_visibleWellsPadding.setRange( 0, 100 );
QString minIJKLabel = "Min I, J, K";
CAF_PDM_InitField( &minI, "MinI", std::numeric_limits<int>::max(), minIJKLabel );
@@ -113,8 +113,11 @@ RicExportEclipseSectorModelUi::RicExportEclipseSectorModelUi()
QString ijkLabel = "Cell Count I, J, K";
CAF_PDM_InitField( &refinementCountI, "RefinementCountI", 1, ijkLabel );
refinementCountI.setRange( 1, 10 );
CAF_PDM_InitField( &refinementCountJ, "RefinementCountJ", 1, "" );
refinementCountJ.setRange( 1, 10 );
CAF_PDM_InitField( &refinementCountK, "RefinementCountK", 1, "" );
refinementCountK.setRange( 1, 10 );
CAF_PDM_InitFieldNoDefault( &exportParameters, "ExportParams", "Export Parameters" );
CAF_PDM_InitField( &m_exportParametersFilename, "ExportParamsFilename", QString(), "File Name" );
@@ -247,17 +250,9 @@ void RicExportEclipseSectorModelUi::defineEditorAttribute( const caf::PdmFieldHa
QString uiConfigName,
caf::PdmUiEditorAttribute* attribute )
{
if ( !m_caseData ) return;
const RigMainGrid* mainGrid = m_caseData->mainGrid();
const cvf::Vec3st gridDimensions = mainGrid->cellCounts();
auto* lineEditorAttr = dynamic_cast<caf::PdmUiLineEditorAttribute*>( attribute );
if ( field == &m_exportParametersFilename || field == &m_exportGridFilename || field == &m_exportFaultsFilename )
{
auto* myAttr = dynamic_cast<caf::PdmUiFilePathEditorAttribute*>( attribute );
if ( myAttr )
if ( auto* myAttr = dynamic_cast<caf::PdmUiFilePathEditorAttribute*>( attribute ) )
{
myAttr->m_selectSaveFileName = true;
myAttr->m_fileSelectionFilter = "GRDECL files (*.grdecl *.GRDECL);;All files (*.*)";
@@ -265,54 +260,15 @@ void RicExportEclipseSectorModelUi::defineEditorAttribute( const caf::PdmFieldHa
}
else if ( field == &selectedKeywords )
{
auto myAttr = dynamic_cast<caf::PdmUiTreeSelectionEditorAttribute*>( attribute );
if ( myAttr )
if ( auto* myAttr = dynamic_cast<caf::PdmUiTreeSelectionEditorAttribute*>( attribute ) )
{
myAttr->heightHint = 280;
}
}
else if ( field == &m_visibleWellsPadding )
{
if ( lineEditorAttr )
{
// Wells padding should be between 0 and 100 cells
lineEditorAttr->validator = new QIntValidator( 0, 100, nullptr );
}
}
else if ( field == &refinementCountI || field == &refinementCountJ || field == &refinementCountK )
{
if ( lineEditorAttr )
{
auto* validator = new QIntValidator( 1, 10, nullptr );
lineEditorAttr->validator = validator;
}
}
else if ( field == &minI || field == &maxI )
{
if ( lineEditorAttr )
{
lineEditorAttr->validator = new QIntValidator( 1, (int)gridDimensions.x(), nullptr );
}
}
else if ( field == &minJ || field == &maxJ )
{
if ( lineEditorAttr )
{
lineEditorAttr->validator = new QIntValidator( 1, (int)gridDimensions.y(), nullptr );
}
}
else if ( field == &minK || field == &maxK )
{
if ( lineEditorAttr )
{
lineEditorAttr->validator = new QIntValidator( 1, (int)gridDimensions.z(), nullptr );
}
}
if ( field == &m_exportFolder )
{
caf::PdmUiFilePathEditorAttribute* myAttr = dynamic_cast<caf::PdmUiFilePathEditorAttribute*>( attribute );
if ( myAttr )
if ( auto* myAttr = dynamic_cast<caf::PdmUiFilePathEditorAttribute*>( attribute ) )
{
myAttr->m_selectDirectory = true;
}
@@ -324,6 +280,20 @@ void RicExportEclipseSectorModelUi::defineEditorAttribute( const caf::PdmFieldHa
//--------------------------------------------------------------------------------------------------
void RicExportEclipseSectorModelUi::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
{
// Update dynamic range limits before defining UI ordering
if ( m_caseData && m_caseData->mainGrid() )
{
const cvf::Vec3st gridDimensions = m_caseData->mainGrid()->cellCounts();
minI.setRange( 1, (int)gridDimensions.x() );
minJ.setRange( 1, (int)gridDimensions.y() );
minK.setRange( 1, (int)gridDimensions.z() );
maxI.setRange( 1, (int)gridDimensions.x() );
maxJ.setRange( 1, (int)gridDimensions.y() );
maxK.setRange( 1, (int)gridDimensions.z() );
}
if ( uiConfigName == m_tabNames[0] )
{
uiOrdering.add( &m_exportFolder );
@@ -45,7 +45,6 @@
#include "FractureCommands/RicNewStimPlanFractureTemplateFeature.h"
#include "cafAppEnum.h"
#include "cafPdmUiLineEditor.h"
#include "cafPdmUiTextEditor.h"
#include "cafPdmUiToolButtonEditor.h"
#include "cafPdmUiTreeSelectionEditor.h"
@@ -54,7 +53,6 @@
#include <QDir>
#include <QFile>
#include <QIntValidator>
namespace caf
{
@@ -140,12 +138,16 @@ RimEnsembleFractureStatistics::RimEnsembleFractureStatistics()
// Uniform sampling
CAF_PDM_InitField( &m_numSamplesX, "NumberOfSamplesX", 100, "X" );
m_numSamplesX.setMinValue( 1 );
CAF_PDM_InitField( &m_numSamplesY, "NumberOfSamplesY", 200, "Y" );
m_numSamplesY.setMinValue( 1 );
// Adaptive sampling
CAF_PDM_InitFieldNoDefault( &m_adaptiveMeanType, "AdaptiveMeanType", "Mean Type" );
CAF_PDM_InitFieldNoDefault( &m_adaptiveNumLayersType, "AdaptiveNumLayersType", "Number of Layers" );
CAF_PDM_InitField( &m_adaptiveNumLayers, "AdaptiveNumLayers", 30, "Number of Layers Y" );
m_adaptiveNumLayers.setMinValue( 1 );
std::vector<caf::AppEnum<RimEnsembleFractureStatistics::StatisticsType>> defaultStatisticsTypes = {
caf::AppEnum<RimEnsembleFractureStatistics::StatisticsType>( RimEnsembleFractureStatistics::StatisticsType::MEAN ) };
@@ -246,16 +248,6 @@ void RimEnsembleFractureStatistics::defineEditorAttribute( const caf::PdmFieldHa
myAttr->textMode = caf::PdmUiTextEditorAttribute::HTML;
}
}
else if ( field == &m_adaptiveNumLayers || field == &m_numSamplesX || field == &m_numSamplesY )
{
caf::PdmUiLineEditorAttribute* lineEditorAttr = dynamic_cast<caf::PdmUiLineEditorAttribute*>( attribute );
if ( lineEditorAttr )
{
// Positive integer
QIntValidator* validator = new QIntValidator( 1, std::numeric_limits<int>::max(), nullptr );
lineEditorAttr->validator = validator;
}
}
}
//--------------------------------------------------------------------------------------------------
@@ -15,6 +15,7 @@
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#include "RimWellPathCompletionSettings.h"
#include "RiaStdStringTools.h"
@@ -101,6 +102,8 @@ RimWellPathCompletionSettings::RimWellPathCompletionSettings()
"WellBoreFluidPvtTable",
0,
"Wellbore Fluid PVT table" );
m_wellBoreFluidPVTTable.setMinValue( 0 );
CAF_PDM_InitScriptableFieldNoDefault( &m_hydrostaticDensity, "HydrostaticDensity", "Hydrostatic Density" );
CAF_PDM_InitScriptableField( &m_fluidInPlaceRegion, "FluidInPlaceRegion", 0, "Fluid In-Place Region" );
@@ -409,28 +412,6 @@ void RimWellPathCompletionSettings::fieldChangedByUi( const caf::PdmFieldHandle*
m_mswParameters->fieldChangedByUi( changedField, oldValue, newValue );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimWellPathCompletionSettings::defineEditorAttribute( const caf::PdmFieldHandle* field,
QString uiConfigName,
caf::PdmUiEditorAttribute* attribute )
{
caf::PdmUiLineEditorAttribute* lineEditorAttr = dynamic_cast<caf::PdmUiLineEditorAttribute*>( attribute );
if ( field == &m_wellBoreFluidPVTTable && lineEditorAttr )
{
// Positive integer
QIntValidator* validator = new QIntValidator( 0, std::numeric_limits<int>::max(), nullptr );
lineEditorAttr->validator = validator;
}
else if ( field == &m_fluidInPlaceRegion && lineEditorAttr )
{
// Any integer
QIntValidator* validator = new QIntValidator( -std::numeric_limits<int>::max(), std::numeric_limits<int>::max(), nullptr );
lineEditorAttr->validator = validator;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -102,7 +102,6 @@ public:
protected:
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override;
void initAfterRead() override;
private:
@@ -71,6 +71,7 @@ RimFaultInViewCollection::RimFaultInViewCollection()
CAF_PDM_InitField( &m_applyCellFilters, "ApplyCellFilters", true, "Use Cell Filters for Faults" );
CAF_PDM_InitField( &m_meshLineThickness, "MeshLineThickness", 1, "Mesh Line Thickness [1..10]" );
m_meshLineThickness.setRange( 1, 10 );
CAF_PDM_InitField( &m_onlyShowWithNeighbor, "OnlyShowWithDefNeighbor", false, "Show Only Faces with Juxtaposition" );
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_onlyShowWithNeighbor );
@@ -223,20 +224,6 @@ caf::PdmFieldHandle* RimFaultInViewCollection::objectToggleField()
return &m_showFaultCollection;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFaultInViewCollection::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute )
{
if ( field == &m_meshLineThickness )
{
if ( auto* lineEditorAttr = dynamic_cast<caf::PdmUiLineEditorAttribute*>( attribute ) )
{
lineEditorAttr->validator = new QIntValidator( 1, 10, nullptr );
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -84,7 +84,6 @@ public:
private:
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) 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;
void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override;
@@ -76,6 +76,7 @@ RimGridCrossPlotRegressionCurve::RimGridCrossPlotRegressionCurve()
m_maxExtrapolationRangeX.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleValueEditor::uiEditorTypeName() );
CAF_PDM_InitField( &m_polynomialDegree, "PolynomialDegree", 3, "Degree" );
m_polynomialDegree.setRange( 1, 50 );
CAF_PDM_InitFieldNoDefault( &m_minRangeX, "MinRangeX", "Min X" );
m_minRangeX.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleSliderEditor::uiEditorTypeName() );
@@ -362,15 +363,7 @@ void RimGridCrossPlotRegressionCurve::defineEditorAttribute( const caf::PdmField
QString uiConfigName,
caf::PdmUiEditorAttribute* attribute )
{
if ( field == &m_polynomialDegree )
{
if ( auto* lineEditorAttr = dynamic_cast<caf::PdmUiLineEditorAttribute*>( attribute ) )
{
// Polynomial degree should be a positive number.
lineEditorAttr->validator = new QIntValidator( 1, 50, nullptr );
}
}
else if ( field == &m_minRangeX || field == &m_maxRangeX )
if ( field == &m_minRangeX || field == &m_maxRangeX )
{
if ( auto* myAttr = dynamic_cast<caf::PdmUiDoubleSliderEditorAttribute*>( attribute ) )
{
@@ -57,7 +57,10 @@ RimSummaryDeclineCurve::RimSummaryDeclineCurve()
CAF_PDM_InitObject( "Decline Curve", ":/decline-curve.svg" );
CAF_PDM_InitFieldNoDefault( &m_declineCurveType, "DeclineCurveType", "Type" );
CAF_PDM_InitField( &m_predictionYears, "PredictionYears", 5, "Years" );
m_predictionYears.setRange( 1, 50 );
CAF_PDM_InitField( &m_hyperbolicDeclineConstant, "HyperbolicDeclineConstant", 0.5, "Decline Constant" );
m_hyperbolicDeclineConstant.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleSliderEditor::uiEditorTypeName() );
@@ -395,15 +398,6 @@ void RimSummaryDeclineCurve::defineEditorAttribute( const caf::PdmFieldHandle* f
{
RimSummaryCurve::defineEditorAttribute( field, uiConfigName, attribute );
if ( field == &m_predictionYears )
{
if ( auto* lineEditorAttr = dynamic_cast<caf::PdmUiLineEditorAttribute*>( attribute ) )
{
// Predict into the future should be a positive number.
lineEditorAttr->validator = new QIntValidator( 1, 50, nullptr );
}
}
if ( field == &m_hyperbolicDeclineConstant )
{
if ( auto* myAttr = dynamic_cast<caf::PdmUiDoubleSliderEditorAttribute*>( attribute ) )
@@ -103,10 +103,17 @@ RimSummaryRegressionAnalysisCurve::RimSummaryRegressionAnalysisCurve()
CAF_PDM_InitFieldNoDefault( &m_ensembleStatisticsType, "EnsembleStatisticsType", "Ensemble Statistics Type" );
CAF_PDM_InitFieldNoDefault( &m_regressionType, "RegressionType", "Type" );
CAF_PDM_InitField( &m_forecastForward, "ForecastForward", 0, "Forward" );
m_forecastForward.setRange( 0, 50 );
CAF_PDM_InitField( &m_forecastBackward, "ForecastBackward", 0, "Backward" );
m_forecastBackward.setRange( 0, 50 );
CAF_PDM_InitFieldNoDefault( &m_forecastUnit, "ForecastUnit", "Unit" );
CAF_PDM_InitField( &m_polynomialDegree, "PolynomialDegree", 3, "Degree" );
m_polynomialDegree.setRange( 1, 50 );
CAF_PDM_InitFieldNoDefault( &m_timeRangeSelection, "TimeRangeSelection", "Time Range" );
CAF_PDM_InitFieldNoDefault( &m_minTimeSliderPosition, "MinTimeSliderPosition", "From" );
@@ -546,23 +553,7 @@ void RimSummaryRegressionAnalysisCurve::defineEditorAttribute( const caf::PdmFie
{
RimSummaryCurve::defineEditorAttribute( field, uiConfigName, attribute );
if ( field == &m_polynomialDegree )
{
if ( auto* lineEditorAttr = dynamic_cast<caf::PdmUiLineEditorAttribute*>( attribute ) )
{
// Polynomial degree should be a positive number.
lineEditorAttr->validator = new QIntValidator( 1, 50, nullptr );
}
}
else if ( field == &m_forecastForward || field == &m_forecastBackward )
{
if ( auto* lineEditorAttr = dynamic_cast<caf::PdmUiLineEditorAttribute*>( attribute ) )
{
// Block negative forecast
lineEditorAttr->validator = new QIntValidator( 0, 50, nullptr );
}
}
else if ( field == &m_minTimeSliderPosition || field == &m_maxTimeSliderPosition )
if ( field == &m_minTimeSliderPosition || field == &m_maxTimeSliderPosition )
{
if ( auto* myAttr = dynamic_cast<caf::PdmUiSliderEditorAttribute*>( attribute ) )
{
@@ -34,7 +34,6 @@
#include <QDialog>
#include <QDoubleValidator>
#include <QHBoxLayout>
#include <QIntValidator>
#include <QLabel>
#include <QLineEdit>
#include <QMessageBox>
@@ -46,7 +46,6 @@
#include <QApplication>
#include <QDate>
#include <QGridLayout>
#include <QIntValidator>
#include <QLabel>
#include <QLineEdit>
#include <QMainWindow>
@@ -48,7 +48,6 @@
#include <QClipboard>
#include <QDir>
#include <QFileDialog>
#include <QIntValidator>
#include <QLabel>
#include <QLineEdit>
@@ -52,7 +52,6 @@
#include <QBitmap>
#include <QCompleter>
#include <QDebug>
#include <QIntValidator>
#include <QKeyEvent>
#include <QLabel>
#include <QMainWindow>
@@ -43,7 +43,6 @@
#include "cafPdmUiFieldEditorHandle.h"
#include <QHBoxLayout>
#include <QIntValidator>
#include <QLabel>
#include <QLineEdit>
@@ -41,7 +41,6 @@
#include "cafPdmUiDefaultObjectEditor.h"
#include "cafPdmUiFieldEditorHandle.h"
#include <QIntValidator>
#include <QLabel>
#include <QMimeData>
#include <QTextEdit>
@@ -45,7 +45,6 @@
#include <QApplication>
#include <QGridLayout>
#include <QIntValidator>
#include <QLabel>
#include <QLineEdit>
#include <QMainWindow>