33 QWidget *editor =
nullptr;
35 if (
config( QStringLiteral(
"Style" ) ).toString() == QLatin1String(
"Dial" ) )
39 else if (
config( QStringLiteral(
"Style" ) ).toString() == QLatin1String(
"Slider" ) )
41 editor =
new QgsSlider( Qt::Horizontal, parent );
47 case QVariant::Double:
50 static_cast<QgsDoubleSpinBox *
>( editor )->setLineEditAlignment( Qt::AlignRight );
54 case QVariant::LongLong:
57 static_cast<QgsSpinBox *
>( editor )->setLineEditAlignment( Qt::AlignRight );
66 static void setupIntEditor(
const QVariant &min,
const QVariant &max,
const QVariant &step, T *slider,
QgsRangeWidgetWrapper *wrapper )
69 slider->setMinimum( min.isValid() ? min.toInt() : std::numeric_limits<int>::lowest() );
70 slider->setMaximum( max.isValid() ? max.toInt() : std::numeric_limits<int>::max() );
71 slider->setSingleStep( step.isValid() ? step.toInt() : 1 );
77 mDoubleSpinBox = qobject_cast<QDoubleSpinBox *>( editor );
78 mIntSpinBox = qobject_cast<QSpinBox *>( editor );
80 mDial = qobject_cast<QDial *>( editor );
81 mSlider = qobject_cast<QSlider *>( editor );
82 mQgsDial = qobject_cast<
QgsDial *>( editor );
83 mQgsSlider = qobject_cast<
QgsSlider *>( editor );
85 bool allowNull =
config( QStringLiteral(
"AllowNull" ),
true ).toBool();
87 QVariant min(
config( QStringLiteral(
"Min" ) ) );
88 QVariant max(
config( QStringLiteral(
"Max" ) ) );
89 QVariant step(
config( QStringLiteral(
"Step" ) ) );
90 QVariant precision(
config( QStringLiteral(
"Precision" ) ) );
94 double stepval = step.isValid() ? step.toDouble() : 1.0;
95 double minval = min.isValid() ? min.toDouble() : std::numeric_limits<double>::lowest();
96 double maxval = max.isValid() ? max.toDouble() : std::numeric_limits<double>::max();
99 mDoubleSpinBox->setDecimals( precisionval );
110 if ( precisionval > 0 )
112 decr = std::pow( 10, -precisionval );
120 mDoubleSpinBox->setMinimum( minval );
121 mDoubleSpinBox->setValue( minval );
124 mDoubleSpinBox->setMinimum( minval );
125 mDoubleSpinBox->setMaximum( maxval );
126 mDoubleSpinBox->setSingleStep( stepval );
127 if (
config( QStringLiteral(
"Suffix" ) ).isValid() )
128 mDoubleSpinBox->setSuffix(
config( QStringLiteral(
"Suffix" ) ).toString() );
130 connect( mDoubleSpinBox, static_cast <
void ( QDoubleSpinBox::* )(
double ) > ( &QDoubleSpinBox::valueChanged ),
133 else if ( mIntSpinBox )
138 int minval = min.toInt();
141 int stepval = step.toInt();
143 mIntSpinBox->setValue( minval );
146 setupIntEditor( minval, max, step, mIntSpinBox,
this );
147 if (
config( QStringLiteral(
"Suffix" ) ).isValid() )
148 mIntSpinBox->setSuffix(
config( QStringLiteral(
"Suffix" ) ).toString() );
156 setupIntEditor( min, max, step, mQgsDial,
this );
157 else if ( mQgsSlider )
158 setupIntEditor( min, max, step, mQgsSlider,
this );
160 setupIntEditor( min, max, step, mDial,
this );
162 setupIntEditor( min, max, step, mSlider,
this );
168 return mSlider || mDial || mQgsDial || mQgsSlider || mIntSpinBox || mDoubleSpinBox;
171 void QgsRangeWidgetWrapper::valueChangedVariant(
const QVariant &v )
173 if ( v.type() == QVariant::Int )
175 if ( v.type() == QVariant::Double )
183 if ( mDoubleSpinBox )
185 value = mDoubleSpinBox->value();
186 if ( value == mDoubleSpinBox->minimum() &&
config( QStringLiteral(
"AllowNull" ),
true ).toBool() )
188 value = QVariant(
field().type() );
191 else if ( mIntSpinBox )
193 value = mIntSpinBox->value();
194 if ( value == mIntSpinBox->minimum() &&
config( QStringLiteral(
"AllowNull" ),
true ).toBool() )
196 value = QVariant(
field().type() );
203 else if ( mQgsSlider )
209 value = mDial->value();
213 value = mSlider->value();
221 if ( mDoubleSpinBox )
223 if ( value.isNull() &&
config( QStringLiteral(
"AllowNull" ),
true ).toBool() )
225 mDoubleSpinBox->setValue( mDoubleSpinBox->minimum() );
229 mDoubleSpinBox->setValue( value.toDouble() );
235 if ( value.isNull() &&
config( QStringLiteral(
"AllowNull" ),
true ).toBool() )
237 mIntSpinBox->setValue( mIntSpinBox->minimum() );
241 mIntSpinBox->setValue( value.toInt() );
249 else if ( mQgsSlider )
255 mDial->setValue( value.toInt() );
259 mSlider->setValue( value.toInt() );
void setValue(const QVariant &value)
The QgsSpinBox is a spin box with a clear button that will set the value to the defined clear value...
void setShowClearButton(bool showClearButton)
Sets whether the widget will show a clear button.
bool convertCompatible(QVariant &v) const
Converts the provided variant to a compatible format.
The QgsSpinBox is a spin box with a clear button that will set the value to the defined clear value...
QgsField at(int i) const
Gets field at particular index (must be in range 0..N-1)
void setShowClearButton(bool showClearButton)
Sets whether the widget will show a clear button.
QgsFields fields() const override
Returns the list of fields of this layer.
static QString nullRepresentation()
This string is used to represent the value NULL throughout QGIS.
void setValue(const QVariant &value)
QVariant variantValue() const
Represents a vector layer which manages a vector based data sets.
QVariant variantValue() const