Clamp ratio properties
Fixes https://gitlab.com/kicad/code/kicad/-/issues/16153
This commit is contained in:
parent
c307e284e0
commit
2b27337778
|
@ -38,7 +38,8 @@ enum class EDA_DATA_TYPE
|
||||||
{
|
{
|
||||||
DISTANCE = 0,
|
DISTANCE = 0,
|
||||||
AREA = 1,
|
AREA = 1,
|
||||||
VOLUME = 2
|
VOLUME = 2,
|
||||||
|
UNITLESS = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class EDA_UNITS
|
enum class EDA_UNITS
|
||||||
|
|
|
@ -47,8 +47,9 @@ public:
|
||||||
|
|
||||||
wxString Format( UNITS_PROVIDER* aUnits ) const override
|
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" ),
|
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
|
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" ),
|
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;
|
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
|
#endif //KICAD_PROPERTY_VALIDATORS_H
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include <board_connected_item.h>
|
#include <board_connected_item.h>
|
||||||
#include <board_design_settings.h>
|
#include <board_design_settings.h>
|
||||||
#include <connectivity/connectivity_data.h>
|
#include <connectivity/connectivity_data.h>
|
||||||
|
#include <properties/property_validators.h>
|
||||||
#include <string_utils.h>
|
#include <string_utils.h>
|
||||||
#include <i18n_utility.h>
|
#include <i18n_utility.h>
|
||||||
#include <netinfo.h>
|
#include <netinfo.h>
|
||||||
|
@ -243,6 +244,7 @@ static struct BOARD_CONNECTED_ITEM_DESC
|
||||||
&BOARD_CONNECTED_ITEM::SetTeardropBestLengthRatio,
|
&BOARD_CONNECTED_ITEM::SetTeardropBestLengthRatio,
|
||||||
&BOARD_CONNECTED_ITEM::GetTeardropBestLengthRatio );
|
&BOARD_CONNECTED_ITEM::GetTeardropBestLengthRatio );
|
||||||
bestLength->SetAvailableFunc( supportsTeardrops );
|
bestLength->SetAvailableFunc( supportsTeardrops );
|
||||||
|
bestLength->SetValidator( PROPERTY_VALIDATORS::PositiveRatioValidator );
|
||||||
propMgr.AddProperty( bestLength, groupTeardrops );
|
propMgr.AddProperty( bestLength, groupTeardrops );
|
||||||
|
|
||||||
auto maxLength = new PROPERTY<BOARD_CONNECTED_ITEM, int>( _HKI( "Max Length" ),
|
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::SetTeardropBestWidthRatio,
|
||||||
&BOARD_CONNECTED_ITEM::GetTeardropBestWidthRatio );
|
&BOARD_CONNECTED_ITEM::GetTeardropBestWidthRatio );
|
||||||
bestWidth->SetAvailableFunc( supportsTeardrops );
|
bestWidth->SetAvailableFunc( supportsTeardrops );
|
||||||
|
bestWidth->SetValidator( PROPERTY_VALIDATORS::PositiveRatioValidator );
|
||||||
propMgr.AddProperty( bestWidth, groupTeardrops );
|
propMgr.AddProperty( bestWidth, groupTeardrops );
|
||||||
|
|
||||||
auto maxWidth = new PROPERTY<BOARD_CONNECTED_ITEM, int>( _HKI( "Max Width" ),
|
auto maxWidth = new PROPERTY<BOARD_CONNECTED_ITEM, int>( _HKI( "Max Width" ),
|
||||||
|
|
Loading…
Reference in New Issue