Don't allow updates to shown_text outside of cacheShownText().

But also don't use cacheShownText() in c'tors, as it will not call
the subclass's version.
This commit is contained in:
Jeff Young 2023-08-07 23:21:58 +01:00
parent feb887fe8f
commit 7b71e55ab9
3 changed files with 31 additions and 17 deletions

View File

@ -95,7 +95,17 @@ EDA_TEXT::EDA_TEXT( const EDA_IU_SCALE& aIuScale, const wxString& aText ) :
{
SetTextSize( VECTOR2I( EDA_UNIT_UTILS::Mils2IU( m_IuScale, DEFAULT_SIZE_TEXT ),
EDA_UNIT_UTILS::Mils2IU( m_IuScale, DEFAULT_SIZE_TEXT ) ) );
cacheShownText();
if( m_text.IsEmpty() )
{
m_shown_text = wxEmptyString;
m_shown_text_has_text_var_refs = false;
}
else
{
m_shown_text = UnescapeString( m_text );
m_shown_text_has_text_var_refs = m_shown_text.Contains( wxT( "${" ) );
}
}
@ -170,22 +180,14 @@ EDA_TEXT& EDA_TEXT::operator=( const EDA_TEXT& aText )
void EDA_TEXT::SetText( const wxString& aText )
{
m_text = aText;
cacheShownText();
ClearRenderCache();
m_bounding_box_cache_valid = false;
}
void EDA_TEXT::CopyText( const EDA_TEXT& aSrc )
{
m_text = aSrc.m_text;
m_shown_text = aSrc.m_shown_text;
m_shown_text_has_text_var_refs = aSrc.m_shown_text_has_text_var_refs;
ClearRenderCache();
m_bounding_box_cache_valid = false;
cacheShownText();
}
@ -280,11 +282,7 @@ void EDA_TEXT::SetAttributes( const EDA_TEXT& aSrc )
void EDA_TEXT::SwapText( EDA_TEXT& aTradingPartner )
{
std::swap( m_text, aTradingPartner.m_text );
std::swap( m_shown_text, aTradingPartner.m_shown_text );
std::swap( m_shown_text_has_text_var_refs, aTradingPartner.m_shown_text_has_text_var_refs );
ClearRenderCache();
m_bounding_box_cache_valid = false;
cacheShownText();
}

View File

@ -161,7 +161,10 @@ SCH_LABEL_BASE::SCH_LABEL_BASE( const VECTOR2I& aPos, const wxString& aText, KIC
m_lastResolvedColor( COLOR4D::UNSPECIFIED )
{
SetMultilineAllowed( false );
ClearFieldsAutoplaced(); // fiels are not yet autoplaced.
ClearFieldsAutoplaced(); // fields are not yet autoplaced.
if( !HasTextVars() )
m_cached_driver_name = EscapeString( EDA_TEXT::GetShownText( true, 0 ), CTX_NETNAME );
}
@ -170,7 +173,8 @@ SCH_LABEL_BASE::SCH_LABEL_BASE( const SCH_LABEL_BASE& aLabel ) :
m_shape( aLabel.m_shape ),
m_connectionType( aLabel.m_connectionType ),
m_isDangling( aLabel.m_isDangling ),
m_lastResolvedColor( aLabel.m_lastResolvedColor )
m_lastResolvedColor( aLabel.m_lastResolvedColor ),
m_cached_driver_name( aLabel.m_cached_driver_name )
{
SetMultilineAllowed( false );
@ -181,6 +185,16 @@ SCH_LABEL_BASE::SCH_LABEL_BASE( const SCH_LABEL_BASE& aLabel ) :
}
SCH_LABEL_BASE& SCH_LABEL_BASE::operator=( const SCH_LABEL_BASE& aLabel )
{
SCH_TEXT::operator=( aLabel );
m_cached_driver_name = aLabel.m_cached_driver_name;
return *this;
}
const wxString SCH_LABEL_BASE::GetDefaultFieldName( const wxString& aName, bool aUseDefaultName )
{
if( aName == wxT( "Intersheetrefs" ) )

View File

@ -38,6 +38,8 @@ public:
SCH_LABEL_BASE( const SCH_LABEL_BASE& aLabel );
SCH_LABEL_BASE& operator=( const SCH_LABEL_BASE& aLabel );
// Abstract class
virtual wxString GetClass() const override = 0;