diff --git a/eeschema/sch_field.cpp b/eeschema/sch_field.cpp index da30ca00a7..6951c61501 100644 --- a/eeschema/sch_field.cpp +++ b/eeschema/sch_field.cpp @@ -190,7 +190,7 @@ wxString SCH_FIELD::GetShownText( const SCH_SHEET_PATH* aPath, int aDepth, std::function labelResolver = [&]( wxString* token ) -> bool { - return static_cast( m_parent )->ResolveTextVar( token, + return static_cast( m_parent )->ResolveTextVar( aPath, token, aDepth + 1 ); }; diff --git a/eeschema/sch_label.cpp b/eeschema/sch_label.cpp index 59ae1f1c78..6f534f7ce3 100644 --- a/eeschema/sch_label.cpp +++ b/eeschema/sch_label.cpp @@ -507,7 +507,8 @@ void SCH_LABEL_BASE::GetContextualTextVars( wxArrayString* aVars ) const } -bool SCH_LABEL_BASE::ResolveTextVar( wxString* token, int aDepth ) const +bool SCH_LABEL_BASE::ResolveTextVar( const SCH_SHEET_PATH* aPath, wxString* token, + int aDepth ) const { static wxRegEx operatingPoint( wxT( "^" "OP" @@ -600,9 +601,14 @@ bool SCH_LABEL_BASE::ResolveTextVar( wxString* token, int aDepth ) const if( sheet->ResolveTextVar( token, aDepth + 1 ) ) return true; } + else if( aPath && aPath->Last() ) + { + if( aPath->Last()->ResolveTextVar( aPath, token, aDepth + 1 ) ) + return true; + } else if( SCH_SHEET* sheet = Schematic()->CurrentSheet().Last() ) { - if( sheet->ResolveTextVar( token, aDepth + 1 ) ) + if( sheet->ResolveTextVar( aPath, token, aDepth + 1 ) ) return true; } @@ -610,12 +616,12 @@ bool SCH_LABEL_BASE::ResolveTextVar( wxString* token, int aDepth ) const } -wxString SCH_LABEL_BASE::GetShownText( int aDepth, bool aAllowExtraText ) const +wxString SCH_LABEL_BASE::GetShownText( const SCH_SHEET_PATH* aPath, int aDepth, bool aAllowExtraText ) const { std::function textResolver = [&]( wxString* token ) -> bool { - return ResolveTextVar( token, aDepth ); + return ResolveTextVar( aPath, token, aDepth ); }; wxString text = EDA_TEXT::GetShownText(); @@ -1425,7 +1431,8 @@ void SCH_GLOBALLABEL::MirrorVertically( int aCenter ) } -bool SCH_GLOBALLABEL::ResolveTextVar( wxString* token, int aDepth ) const +bool SCH_GLOBALLABEL::ResolveTextVar( const SCH_SHEET_PATH* aPath, wxString* token, + int aDepth ) const { if( token->IsSameAs( wxT( "INTERSHEET_REFS" ) ) && Schematic() ) { @@ -1472,7 +1479,7 @@ bool SCH_GLOBALLABEL::ResolveTextVar( wxString* token, int aDepth ) const return true; } - return SCH_LABEL_BASE::ResolveTextVar( token, aDepth ); + return SCH_LABEL_BASE::ResolveTextVar( aPath, token, aDepth ); } diff --git a/eeschema/sch_label.h b/eeschema/sch_label.h index 7a27369c7e..b04c0d9b88 100644 --- a/eeschema/sch_label.h +++ b/eeschema/sch_label.h @@ -141,9 +141,15 @@ public: * * @param aDepth a counter to limit recursion and circular references. */ - virtual bool ResolveTextVar( wxString* token, int aDepth ) const; + virtual bool ResolveTextVar( const SCH_SHEET_PATH* aPath, wxString* token, int aDepth ) const; - wxString GetShownText( int aDepth = 0, bool aAllowExtraText = true ) const override; + wxString GetShownText( const SCH_SHEET_PATH* aPath, int aDepth = 0, + bool aAllowExtraText = true ) const override; + + wxString GetShownText( int aDepth = 0, bool aAllowExtraText = true ) const override + { + return GetShownText( nullptr, aDepth, aAllowExtraText ); + } void RunOnChildren( const std::function& aFunction ) override; @@ -368,7 +374,7 @@ public: void CreateGraphicShape( const RENDER_SETTINGS* aRenderSettings, std::vector& aPoints, const VECTOR2I& aPos ) const override; - bool ResolveTextVar( wxString* token, int aDepth ) const override; + bool ResolveTextVar( const SCH_SHEET_PATH* aPath, wxString* token, int aDepth ) const override; bool IsConnectable() const override { return true; } diff --git a/eeschema/sch_text.h b/eeschema/sch_text.h index 19a2ef8490..dfe02a80f0 100644 --- a/eeschema/sch_text.h +++ b/eeschema/sch_text.h @@ -128,8 +128,9 @@ public: return wxT( "SCH_TEXT" ); } - wxString GetShownText( const SCH_SHEET_PATH* aPath, int aDepth = 0, - bool aAllowExtraText = true ) const; + virtual wxString GetShownText( const SCH_SHEET_PATH* aPath, int aDepth = 0, + bool aAllowExtraText = true ) const; + wxString GetShownText( int aDepth = 0, bool aAllowExtraText = true ) const override { return GetShownText( nullptr, aDepth, aAllowExtraText );