24#ifndef UNITS_PROVIDER_H
25#define UNITS_PROVIDER_H
62 return identityTransform;
83 aAddUnitLabel, aType );
107 aValue.value(), aAddUnitLabel, aType );
114 EDA_DATA_TYPE::DISTANCE );
127 aValue, aAddUnitLabel, aType );
134 EDA_DATA_TYPE::DISTANCE );
159 return KiROUND<double, int>( value );
183 return KiROUND<double, int>( value );
200 if( aType == EDA_DATA_TYPE::TIME )
202 return EDA_UNITS::PS;
204 else if( aType == EDA_DATA_TYPE::LENGTH_DELAY )
207 return EDA_UNITS::PS_PER_CM;
209 return EDA_UNITS::PS_PER_INCH;
223 case EDA_UNITS::INCH:
227 case EDA_UNITS::MILS:
228 return EDA_DATA_TYPE::DISTANCE;
229 case EDA_UNITS::DEGREES:
230 case EDA_UNITS::PERCENT:
231 case EDA_UNITS::UNSCALED:
232 return EDA_DATA_TYPE::UNITLESS;
235 return EDA_DATA_TYPE::TIME;
236 case EDA_UNITS::PS_PER_INCH:
237 case EDA_UNITS::PS_PER_CM:
238 case EDA_UNITS::PS_PER_MM:
239 return EDA_DATA_TYPE::LENGTH_DELAY;
242 wxString msg = wxString::Format( wxT(
"Unhandled unit data type %d" ),
static_cast<int>( aUnits ) );
243 wxCHECK_MSG(
false, EDA_DATA_TYPE::UNITLESS, msg );
244 return EDA_DATA_TYPE::UNITLESS;
constexpr EDA_IU_SCALE unityScale
wxString MessageTextFromValue(const EDA_ANGLE &aValue, bool aAddUnitLabel=true) const
EDA_ANGLE AngleValueFromString(const wxString &aTextValue) const
const EDA_IU_SCALE & m_iuScale
const EDA_IU_SCALE & GetIuScale() const
virtual void GetUnitPair(EDA_UNITS &aPrimaryUnit, EDA_UNITS &aSecondaryUnits)
EDA_UNITS GetUnitsFromType(EDA_DATA_TYPE aType) const
Gets the units to use in the conversion based on the underlying user units.
static const wxString NullUiString
The string that is used in the UI to represent a null value.
virtual ~UNITS_PROVIDER()
std::optional< int > OptionalValueFromString(const wxString &aTextValue, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
Converts aTextValue in aUnits to internal units used by the frame.
virtual ORIGIN_TRANSFORMS & GetOriginTransforms()
UNITS_PROVIDER(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnits)
wxString StringFromOptionalValue(std::optional< int > aValue, bool aAddUnitLabel=false, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
Converts an optional aValue in internal units into a united string.
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
A lower-precision version of StringFromValue().
wxString MessageTextFromMinOptMax(const MINOPTMAX< int > &aValue, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
EDA_UNITS GetUserUnits() const
void SetUserUnits(EDA_UNITS aUnits)
static EDA_DATA_TYPE GetTypeFromUnits(const EDA_UNITS aUnits)
Gets the inferred type from the given units.
wxString StringFromValue(double aValue, bool aAddUnitLabel=false, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
Converts aValue in internal units into a united string.
wxString StringFromValue(const EDA_ANGLE &aValue, bool aAddUnitLabel=false) const
int ValueFromString(const wxString &aTextValue, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
Converts aTextValue in aUnits to internal units used by the frame.
EDA_DATA_TYPE
The type of unit.
KICOMMON_API wxString MessageTextFromValue(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnits, double aValue, bool aAddUnitsText=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
A helper to convert the double length aValue to a string in inches, millimeters, or unscaled units.
KICOMMON_API wxString StringFromValue(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnits, double aValue, bool aAddUnitsText=false, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
Return the string from aValue according to aUnits (inch, mm ...) for display.
KICOMMON_API wxString MessageTextFromMinOptMax(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnits, const MINOPTMAX< int > &aValue)
KICOMMON_API double DoubleValueFromString(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnits, const wxString &aTextValue, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
Convert aTextValue to a double.
KICOMMON_API bool IsImperialUnit(EDA_UNITS aUnit)
KICOMMON_API bool IsMetricUnit(EDA_UNITS aUnit)