Don't mess up user formatting if eval'ing didn't actually change value.
Fixes https://gitlab.com/kicad/code/kicad/issues/13989
This commit is contained in:
parent
71df3f9edb
commit
8059edff0e
|
@ -859,7 +859,10 @@ void SIM_MODEL::doSetParamValue( int aParamIndex, const std::string& aValue )
|
|||
void SIM_MODEL::SetParamValue( int aParamIndex, const std::string& aValue,
|
||||
SIM_VALUE::NOTATION aNotation )
|
||||
{
|
||||
doSetParamValue( aParamIndex, SIM_VALUE::Normalize( aValue, aNotation ) );
|
||||
// Note: also converts decimal separators to '.'
|
||||
std::string value = SIM_VALUE::ConvertNotation( aValue, aNotation, SIM_VALUE::NOTATION::SI );
|
||||
|
||||
doSetParamValue( aParamIndex, value );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -158,16 +158,24 @@ bool SIM_STRING_PROPERTY::StringToValue( wxVariant& aVariant, const wxString& aT
|
|||
if( m_disabled )
|
||||
return false;
|
||||
|
||||
wxString text;
|
||||
wxString text = aText;
|
||||
|
||||
if( allowEval() && m_needsEval && m_eval.Process( aText ) )
|
||||
text = m_eval.Result();
|
||||
else
|
||||
text = aText;
|
||||
{
|
||||
double value = SIM_VALUE::ToDouble( m_eval.Result().ToStdString() );
|
||||
|
||||
m_model.SetParamValue( m_paramIndex, std::string( text.ToUTF8() ) );
|
||||
aVariant = GetParam().value;
|
||||
if( isnan( value ) || value == SIM_VALUE::ToDouble( aText.ToStdString() ) )
|
||||
{
|
||||
// Don't mess up user formatting if eval'ing didn't actually change the value.
|
||||
}
|
||||
else
|
||||
{
|
||||
text = SIM_VALUE::Normalize( value );
|
||||
}
|
||||
}
|
||||
|
||||
m_model.SetParamValue( m_paramIndex, text.ToStdString() );
|
||||
aVariant = text.ToStdString();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -395,6 +395,19 @@ std::string SIM_VALUE::ConvertNotation( const std::string& aString, NOTATION aFr
|
|||
}
|
||||
|
||||
|
||||
std::string SIM_VALUE::Normalize( double aValue )
|
||||
{
|
||||
double exponent = std::log10( std::abs( aValue ) );
|
||||
int expReduction = 0;
|
||||
|
||||
std::string prefix = SIM_VALUE_PARSER::ExponentToUnitPrefix( exponent, expReduction,
|
||||
NOTATION::SI );
|
||||
double reducedValue = aValue / std::pow( 10, expReduction );
|
||||
|
||||
return fmt::format( "{:g}{}", reducedValue, prefix );
|
||||
}
|
||||
|
||||
|
||||
double SIM_VALUE::ToDouble( const std::string& aString, double aDefault )
|
||||
{
|
||||
SIM_VALUE_PARSER::PARSE_RESULT parseResult = SIM_VALUE_PARSER::Parse( aString, NOTATION::SI );
|
||||
|
|
|
@ -79,11 +79,7 @@ public:
|
|||
static std::string ConvertNotation( const std::string& aString, NOTATION aFromNotation,
|
||||
NOTATION aToNotation );
|
||||
|
||||
static std::string Normalize( const std::string& aString, NOTATION aNotation )
|
||||
{
|
||||
// Note: also converts decimal separators to '.'
|
||||
return ConvertNotation( aString, aNotation, NOTATION::SI );
|
||||
}
|
||||
static std::string Normalize( double aValue );
|
||||
|
||||
static std::string ToSpice( const std::string& aString )
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue