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 =
[&]( 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 );
};

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( "^"
"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<bool( wxString* )> 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 );
}

View File

@ -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<void( SCH_ITEM* )>& aFunction ) override;
@ -368,7 +374,7 @@ public:
void CreateGraphicShape( const RENDER_SETTINGS* aRenderSettings, std::vector<VECTOR2I>& 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; }

View File

@ -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 );