Use enum class to represent wxPGNumericValidationConstants

This is for better type safety.
This commit is contained in:
Artur Wieczorek 2024-01-06 17:51:14 +01:00
parent ca3acd7a03
commit e7ab6a6d53
3 changed files with 57 additions and 33 deletions

View file

@ -133,18 +133,27 @@ protected:
// -----------------------------------------------------------------------
// Constants used with NumericValidation<>().
enum wxPGNumericValidationConstants
enum class wxPGNumericValidationMode
{
// Instead of modifying the value, show an error message.
wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE = 0,
ErrorMessage,
// Modify value, but stick with the limitations.
wxPG_PROPERTY_VALIDATION_SATURATE = 1,
Saturate,
// Modify value, wrap around on overflow.
wxPG_PROPERTY_VALIDATION_WRAP = 2
Wrap
};
#if WXWIN_COMPATIBILITY_3_2
wxDEPRECATED_MSG("use wxPGNumericValidationMode::ErrorMessage instead")
constexpr wxPGNumericValidationMode wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE { wxPGNumericValidationMode::ErrorMessage };
wxDEPRECATED_MSG("use wxPGNumericValidationMode::Saturate instead")
constexpr wxPGNumericValidationMode wxPG_PROPERTY_VALIDATION_SATURATE { wxPGNumericValidationMode::Saturate };
wxDEPRECATED_MSG("use wxPGNumericValidationMode::Wrap instead")
constexpr wxPGNumericValidationMode wxPG_PROPERTY_VALIDATION_WRAP { wxPGNumericValidationMode::Wrap };
#endif // WXWIN_COMPATIBILITY_3_2
// -----------------------------------------------------------------------
#if wxUSE_VALIDATORS
@ -182,9 +191,16 @@ public:
bool UseSpinMotion() const { return m_spinMotion; }
// Common validation code - for internal use.
#if WXWIN_COMPATIBILITY_3_2
template<typename T>
wxDEPRECATED_MSG("use DoNumericValidation with 'mode' argument as wxPGNumericValidationMode")
bool DoNumericValidation(T& value, wxPGValidationInfo* pValidationInfo,
int mode, T defMin, T defMax) const;
#endif // WXWIN_COMPATIBILITY_3_2
template<typename T>
bool DoNumericValidation(T& value, wxPGValidationInfo* pValidationInfo,
wxPGNumericValidationMode mode, T defMin, T defMax) const;
protected:
wxNumericProperty(const wxString& label, const wxString& name);
@ -255,14 +271,12 @@ private:
static bool DoValidation( const wxNumericProperty* property,
wxLongLong& value,
wxPGValidationInfo* pValidationInfo,
int mode =
wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE );
wxPGNumericValidationMode = wxPGNumericValidationMode::ErrorMessage);
#endif // wxUSE_LONGLONG
static bool DoValidation(const wxNumericProperty* property,
long& value,
wxPGValidationInfo* pValidationInfo,
int mode =
wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE);
wxPGNumericValidationMode mode = wxPGNumericValidationMode::ErrorMessage);
};
// -----------------------------------------------------------------------
@ -332,12 +346,12 @@ private:
static bool DoValidation(const wxNumericProperty* property,
wxULongLong& value,
wxPGValidationInfo* pValidationInfo,
int mode =wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE);
wxPGNumericValidationMode = wxPGNumericValidationMode::ErrorMessage);
#endif // wxUSE_LONGLONG
static bool DoValidation(const wxNumericProperty* property,
long& value,
wxPGValidationInfo* pValidationInfo,
int mode = wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE);
wxPGNumericValidationMode mode = wxPGNumericValidationMode::ErrorMessage);
};
// -----------------------------------------------------------------------
@ -390,7 +404,7 @@ private:
static bool DoValidation(const wxNumericProperty* property,
double& value,
wxPGValidationInfo* pValidationInfo,
int mode = wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE);
wxPGNumericValidationMode mode = wxPGNumericValidationMode::ErrorMessage);
};
// -----------------------------------------------------------------------

View file

@ -63,19 +63,19 @@ public:
/** Constants used with NumericValidation<>().
*/
enum wxPGNumericValidationConstants
enum class wxPGNumericValidationMode
{
/** Instead of modifying the value, show an error message.
*/
wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE = 0,
ErrorMessage,
/** Modify value, but stick with the limitations.
*/
wxPG_PROPERTY_VALIDATION_SATURATE = 1,
Saturate,
/** Modify value, wrap around on overflow.
*/
wxPG_PROPERTY_VALIDATION_WRAP = 2
Wrap
};

View file

@ -265,9 +265,19 @@ namespace {
// Common validation code to be called in ValidateValue() implementations.
// Note that 'value' is reference on purpose, so we can write
// back to it when mode is wxPG_PROPERTY_VALIDATION_SATURATE or wxPG_PROPERTY_VALIDATION_WRAP.
#if WXWIN_COMPATIBILITY_3_2
template<typename T>
bool wxNumericProperty::DoNumericValidation(T& value, wxPGValidationInfo* pValidationInfo,
int mode, T defMin, T defMax) const
{
return DoNumericValidation<T>(value, pValidationInfo,
static_cast<wxPGNumericValidationMode>(mode), defMin, defMax);
}
#endif // WXWIN_COMPATIBILITY_3_2
template<typename T>
bool wxNumericProperty::DoNumericValidation(T& value, wxPGValidationInfo* pValidationInfo,
wxPGNumericValidationMode mode, T defMin, T defMax) const
{
T min = defMin;
T max = defMax;
@ -304,7 +314,7 @@ bool wxNumericProperty::DoNumericValidation(T& value, wxPGValidationInfo* pValid
{
if ( value < min )
{
if ( mode == wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE )
if ( mode == wxPGNumericValidationMode::ErrorMessage )
{
wxString msg;
wxVariant vmin = WXVARIANT(min);
@ -319,7 +329,7 @@ bool wxNumericProperty::DoNumericValidation(T& value, wxPGValidationInfo* pValid
}
pValidationInfo->SetFailureMessage(msg);
}
else if ( mode == wxPG_PROPERTY_VALIDATION_SATURATE )
else if ( mode == wxPGNumericValidationMode::Saturate )
value = min;
else
value = max - (min - value);
@ -331,7 +341,7 @@ bool wxNumericProperty::DoNumericValidation(T& value, wxPGValidationInfo* pValid
{
if ( value > max )
{
if ( mode == wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE )
if ( mode == wxPGNumericValidationMode::ErrorMessage )
{
wxString msg;
wxVariant vmax = WXVARIANT(max);
@ -346,7 +356,7 @@ bool wxNumericProperty::DoNumericValidation(T& value, wxPGValidationInfo* pValid
}
pValidationInfo->SetFailureMessage(msg);
}
else if ( mode == wxPG_PROPERTY_VALIDATION_SATURATE )
else if ( mode == wxPGNumericValidationMode::Saturate )
value = max;
else
value = min + (value - max);
@ -470,7 +480,7 @@ bool wxIntProperty::IntToValue( wxVariant& variant, int value, wxPGPropValFormat
bool wxIntProperty::DoValidation( const wxNumericProperty* property,
wxLongLong& value,
wxPGValidationInfo* pValidationInfo,
int mode )
wxPGNumericValidationMode mode )
{
return property->DoNumericValidation<wxLongLong>(value,
pValidationInfo,
@ -481,7 +491,7 @@ bool wxIntProperty::DoValidation( const wxNumericProperty* property,
bool wxIntProperty::DoValidation(const wxNumericProperty* property,
long& value,
wxPGValidationInfo* pValidationInfo,
int mode)
wxPGNumericValidationMode mode)
{
return property->DoNumericValidation<long>(value, pValidationInfo,
mode, wxPG_LONG_MIN, wxPG_LONG_MAX);
@ -496,7 +506,7 @@ bool wxIntProperty::ValidateValue( wxVariant& value,
long ll = value.GetLong();
#endif
return DoValidation(this, ll, &validationInfo,
wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE);
wxPGNumericValidationMode::ErrorMessage);
}
wxValidator* wxIntProperty::GetClassValidator()
@ -520,8 +530,8 @@ wxValidator* wxIntProperty::DoGetValidator() const
wxVariant wxIntProperty::AddSpinStepValue(long stepScale) const
{
int mode = m_spinWrap ? wxPG_PROPERTY_VALIDATION_WRAP
: wxPG_PROPERTY_VALIDATION_SATURATE;
wxPGNumericValidationMode mode = m_spinWrap ? wxPGNumericValidationMode::Wrap
: wxPGNumericValidationMode::Saturate;
wxVariant value = GetValue();
if ( value.GetType() == wxPG_VARIANT_TYPE_LONG )
{
@ -733,7 +743,7 @@ bool wxUIntProperty::IntToValue( wxVariant& variant, int number, wxPGPropValForm
bool wxUIntProperty::DoValidation(const wxNumericProperty* property,
wxULongLong& value,
wxPGValidationInfo* pValidationInfo,
int mode )
wxPGNumericValidationMode mode )
{
return property->DoNumericValidation<wxULongLong>(value, pValidationInfo,
mode, wxULongLong(0), wxULongLong(wxPG_ULLONG_MAX));
@ -743,7 +753,7 @@ bool wxUIntProperty::DoValidation(const wxNumericProperty* property,
bool wxUIntProperty::DoValidation(const wxNumericProperty* property,
long& value,
wxPGValidationInfo* pValidationInfo,
int mode)
wxPGNumericValidationMode mode)
{
return property->DoNumericValidation<long>(value, pValidationInfo,
mode, 0, wxPG_ULONG_MAX);
@ -757,7 +767,7 @@ bool wxUIntProperty::ValidateValue( wxVariant& value, wxPGValidationInfo& valida
long uul = value.GetLong();
#endif
return DoValidation(this, uul, &validationInfo,
wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE);
wxPGNumericValidationMode::ErrorMessage);
}
wxValidator* wxUIntProperty::DoGetValidator() const
@ -806,8 +816,8 @@ bool wxUIntProperty::DoSetAttribute( const wxString& name, wxVariant& value )
wxVariant wxUIntProperty::AddSpinStepValue(long stepScale) const
{
int mode = m_spinWrap ? wxPG_PROPERTY_VALIDATION_WRAP
: wxPG_PROPERTY_VALIDATION_SATURATE;
wxPGNumericValidationMode mode = m_spinWrap ? wxPGNumericValidationMode::Wrap
: wxPGNumericValidationMode::Saturate;
wxVariant value = GetValue();
if ( value.GetType() == wxPG_VARIANT_TYPE_LONG )
{
@ -964,7 +974,7 @@ bool wxFloatProperty::StringToValue( wxVariant& variant, const wxString& text, w
bool wxFloatProperty::DoValidation( const wxNumericProperty* property,
double& value,
wxPGValidationInfo* pValidationInfo,
int mode )
wxPGNumericValidationMode mode )
{
return property->DoNumericValidation<double>(value, pValidationInfo,
mode, wxPG_DBL_MIN, wxPG_DBL_MAX);
@ -976,7 +986,7 @@ wxFloatProperty::ValidateValue( wxVariant& value,
{
double fpv = value.GetDouble();
return DoValidation(this, fpv, &validationInfo,
wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE);
wxPGNumericValidationMode::ErrorMessage);
}
bool wxFloatProperty::DoSetAttribute( const wxString& name, wxVariant& value )
@ -1011,8 +1021,8 @@ wxValidator* wxFloatProperty::DoGetValidator() const
wxVariant wxFloatProperty::AddSpinStepValue(long stepScale) const
{
int mode = m_spinWrap ? wxPG_PROPERTY_VALIDATION_WRAP
: wxPG_PROPERTY_VALIDATION_SATURATE;
wxPGNumericValidationMode mode = m_spinWrap ? wxPGNumericValidationMode::Wrap
: wxPGNumericValidationMode::Saturate;
wxVariant value = GetValue();
double v = value.GetDouble();
double step = m_spinStep.GetDouble();