Jon Evans 2 years ago
parent
commit
2b27337778
  1. 3
      include/eda_units.h
  2. 26
      include/properties/property_validators.h
  3. 3
      pcbnew/board_connected_item.cpp

3
include/eda_units.h

@ -38,7 +38,8 @@ enum class EDA_DATA_TYPE
{
DISTANCE = 0,
AREA = 1,
VOLUME = 2
VOLUME = 2,
UNITLESS = 3
};
enum class EDA_UNITS

26
include/properties/property_validators.h

@ -47,8 +47,9 @@ public:
wxString Format( UNITS_PROVIDER* aUnits ) const override
{
bool addUnit = DataType != EDA_DATA_TYPE::UNITLESS;
return wxString::Format( wxS( "Value must be less than or equal to %s" ),
aUnits->StringFromValue( Maximum, true ) );
aUnits->StringFromValue( Maximum, addUnit ) );
}
};
@ -70,8 +71,9 @@ public:
wxString Format( UNITS_PROVIDER* aUnits ) const override
{
bool addUnit = DataType != EDA_DATA_TYPE::UNITLESS;
return wxString::Format( wxS( "Value must be greater than or equal to %s" ),
aUnits->StringFromValue( Minimum, true ) );
aUnits->StringFromValue( Minimum, addUnit ) );
}
};
@ -127,6 +129,26 @@ public:
return std::nullopt;
}
static VALIDATOR_RESULT PositiveRatioValidator( const wxAny&& aValue, EDA_ITEM* aItem )
{
wxASSERT_MSG( aValue.CheckType<double>(), "Expecting double-containing value" );
double val = aValue.As<double>();
if( val > 1.0 )
{
return std::make_unique<VALIDATION_ERROR_TOO_LARGE<double>>( val, 1.0,
EDA_DATA_TYPE::UNITLESS );
}
else if( val < 0.0 )
{
return std::make_unique<VALIDATION_ERROR_TOO_SMALL<double>>( val, 0.0,
EDA_DATA_TYPE::UNITLESS );
}
return std::nullopt;
}
};
#endif //KICAD_PROPERTY_VALIDATORS_H

3
pcbnew/board_connected_item.cpp

@ -27,6 +27,7 @@
#include <board_connected_item.h>
#include <board_design_settings.h>
#include <connectivity/connectivity_data.h>
#include <properties/property_validators.h>
#include <string_utils.h>
#include <i18n_utility.h>
#include <netinfo.h>
@ -243,6 +244,7 @@ static struct BOARD_CONNECTED_ITEM_DESC
&BOARD_CONNECTED_ITEM::SetTeardropBestLengthRatio,
&BOARD_CONNECTED_ITEM::GetTeardropBestLengthRatio );
bestLength->SetAvailableFunc( supportsTeardrops );
bestLength->SetValidator( PROPERTY_VALIDATORS::PositiveRatioValidator );
propMgr.AddProperty( bestLength, groupTeardrops );
auto maxLength = new PROPERTY<BOARD_CONNECTED_ITEM, int>( _HKI( "Max Length" ),
@ -255,6 +257,7 @@ static struct BOARD_CONNECTED_ITEM_DESC
&BOARD_CONNECTED_ITEM::SetTeardropBestWidthRatio,
&BOARD_CONNECTED_ITEM::GetTeardropBestWidthRatio );
bestWidth->SetAvailableFunc( supportsTeardrops );
bestWidth->SetValidator( PROPERTY_VALIDATORS::PositiveRatioValidator );
propMgr.AddProperty( bestWidth, groupTeardrops );
auto maxWidth = new PROPERTY<BOARD_CONNECTED_ITEM, int>( _HKI( "Max Width" ),

Loading…
Cancel
Save