From 7b71e55ab9da3c4f87c7ad4e8f71643cfbd00d58 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Mon, 7 Aug 2023 23:21:58 +0100 Subject: [PATCH] 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. --- common/eda_text.cpp | 28 +++++++++++++--------------- eeschema/sch_label.cpp | 18 ++++++++++++++++-- eeschema/sch_label.h | 2 ++ 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/common/eda_text.cpp b/common/eda_text.cpp index 6803d442a1..5be08f3dd8 100644 --- a/common/eda_text.cpp +++ b/common/eda_text.cpp @@ -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(); } diff --git a/eeschema/sch_label.cpp b/eeschema/sch_label.cpp index d6e9bf51df..76e5bd5936 100644 --- a/eeschema/sch_label.cpp +++ b/eeschema/sch_label.cpp @@ -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" ) ) diff --git a/eeschema/sch_label.h b/eeschema/sch_label.h index 36d0578603..f87db329da 100644 --- a/eeschema/sch_label.h +++ b/eeschema/sch_label.h @@ -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;