Implement better sheet-path awareness for label text var resolution.

This commit is contained in:
Jeff Young 2023-04-27 12:56:15 +01:00
parent 37c441a189
commit 4b0027a5d7
4 changed files with 26 additions and 12 deletions

View File

@ -190,7 +190,7 @@ wxString SCH_FIELD::GetShownText( const SCH_SHEET_PATH* aPath, int aDepth,
std::function<bool( wxString* )> labelResolver = std::function<bool( wxString* )> labelResolver =
[&]( wxString* token ) -> bool [&]( wxString* token ) -> bool
{ {
return static_cast<SCH_LABEL_BASE*>( m_parent )->ResolveTextVar( token, return static_cast<SCH_LABEL_BASE*>( m_parent )->ResolveTextVar( aPath, token,
aDepth + 1 ); aDepth + 1 );
}; };

View File

@ -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( "^" static wxRegEx operatingPoint( wxT( "^"
"OP" "OP"
@ -600,9 +601,14 @@ bool SCH_LABEL_BASE::ResolveTextVar( wxString* token, int aDepth ) const
if( sheet->ResolveTextVar( token, aDepth + 1 ) ) if( sheet->ResolveTextVar( token, aDepth + 1 ) )
return true; 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() ) else if( SCH_SHEET* sheet = Schematic()->CurrentSheet().Last() )
{ {
if( sheet->ResolveTextVar( token, aDepth + 1 ) ) if( sheet->ResolveTextVar( aPath, token, aDepth + 1 ) )
return true; 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<bool( wxString* )> textResolver = std::function<bool( wxString* )> textResolver =
[&]( wxString* token ) -> bool [&]( wxString* token ) -> bool
{ {
return ResolveTextVar( token, aDepth ); return ResolveTextVar( aPath, token, aDepth );
}; };
wxString text = EDA_TEXT::GetShownText(); 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() ) if( token->IsSameAs( wxT( "INTERSHEET_REFS" ) ) && Schematic() )
{ {
@ -1472,7 +1479,7 @@ bool SCH_GLOBALLABEL::ResolveTextVar( wxString* token, int aDepth ) const
return true; return true;
} }
return SCH_LABEL_BASE::ResolveTextVar( token, aDepth ); return SCH_LABEL_BASE::ResolveTextVar( aPath, token, aDepth );
} }

View File

@ -141,9 +141,15 @@ public:
* *
* @param aDepth a counter to limit recursion and circular references. * @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<void( SCH_ITEM* )>& aFunction ) override; void RunOnChildren( const std::function<void( SCH_ITEM* )>& aFunction ) override;
@ -368,7 +374,7 @@ public:
void CreateGraphicShape( const RENDER_SETTINGS* aRenderSettings, std::vector<VECTOR2I>& aPoints, void CreateGraphicShape( const RENDER_SETTINGS* aRenderSettings, std::vector<VECTOR2I>& aPoints,
const VECTOR2I& aPos ) const override; 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; } bool IsConnectable() const override { return true; }

View File

@ -128,8 +128,9 @@ public:
return wxT( "SCH_TEXT" ); return wxT( "SCH_TEXT" );
} }
wxString GetShownText( const SCH_SHEET_PATH* aPath, int aDepth = 0, virtual wxString GetShownText( const SCH_SHEET_PATH* aPath, int aDepth = 0,
bool aAllowExtraText = true ) const; bool aAllowExtraText = true ) const;
wxString GetShownText( int aDepth = 0, bool aAllowExtraText = true ) const override wxString GetShownText( int aDepth = 0, bool aAllowExtraText = true ) const override
{ {
return GetShownText( nullptr, aDepth, aAllowExtraText ); return GetShownText( nullptr, aDepth, aAllowExtraText );