38#include <wx/filename.h>
56 return _(
"(Deleted Item)" );
61 return wxT(
"DELETED_SHEET_ITEM" );
92 void Show(
int , std::ostream& )
const override {}
141 return path.GetCurrentHash();
169 m_sheets = std::move( aOther.m_sheets );
174 m_path = std::move( aOther.m_path );
188 m_path.swap( aOther.m_path );
199 for(
size_t i = 0; i <
size; i++ )
255 for(
size_t i = 1; i <
m_sheets.size(); i++ )
262 if(
size() > aSheetPathToTest.
size() )
265 if(
size() < aSheetPathToTest.
size() )
269 for(
unsigned i = 0; i <
size(); i++ )
271 if(
at( i )->m_Uuid < aSheetPathToTest.
at( i )->
m_Uuid )
274 if(
at( i )->m_Uuid != aSheetPathToTest.
at( i )->
m_Uuid )
289 if( pageNumComp == 0 )
294 if( virtualPageA > virtualPageB )
296 else if( virtualPageA < virtualPageB )
306 if( aSheetPathToTest.
size() >
size() )
309 for(
size_t i = 0; i < aSheetPathToTest.
size(); ++i )
311 if(
at( i )->m_Uuid != aSheetPathToTest.
at( i )->
m_Uuid )
362 if( sheet->GetExcludedFromSim() )
372 if( aVariantName.IsEmpty() )
377 while( !
copy.empty() )
394 if( sheet->GetExcludedFromBOM() )
404 if( aVariantName.IsEmpty() )
409 while( !
copy.empty() )
426 if( sheet->GetExcludedFromBoard() )
436 if( aVariantName.IsEmpty() )
441 while( !
copy.empty() )
458 if( sheet->GetDNP() )
468 if( aVariantName.IsEmpty() )
473 while( !
copy.empty() )
494 for(
unsigned i = 1; i <
size(); i++ )
508 bool aStripTrailingSeparator,
509 bool aEscapeSheetNames )
const
516 if( !
empty() &&
at( 0 )->IsVirtualRootSheet() )
519 if( aUseShortRootName )
527 if(
size() > startIdx &&
at( startIdx )->GetScreen() )
530 wxFileName fn = fileName;
532 s = fn.GetName() + wxS(
"/" );
539 size_t loopStart = startIdx + 1;
541 if( aUseShortRootName &&
size() > startIdx )
547 loopStart = startIdx;
552 for(
size_t i = 0; i < loopStart && i <
size(); ++i )
555 for(
unsigned i = loopStart; i <
size(); i++ )
560 if( aEscapeSheetNames )
563 s << sheetName << wxS(
"/" );
566 if( aStripTrailingSeparator && s.EndsWith(
"/" ) )
567 s = s.Left( s.length() - 1 );
575 std::vector<SCH_ITEM*> items;
578 std::back_inserter( items ),
595 reference->EDA_TEXT::SetText( symbol->
GetRef(
this ).Strip( wxString::both ) );
627 bool isPowerSymbol = !aReference.IsEmpty() && aReference[0] == wxT(
'#' );
629 switch( aSymbolFilter )
632 return isPowerSymbol;
639 return !isPowerSymbol;
645 bool aForceIncludeOrphanSymbols )
const
650 AppendSymbol( aReferences, symbol, aSymbolFilter, aForceIncludeOrphanSymbols );
656 bool aForceIncludeOrphanSymbols )
const
667 aReferences.
AddItem( schReference );
697 wxString reference_str = schReference.
GetRef();
700 if( reference_str[reference_str.Len() - 1] ==
'?' )
703 aRefList[reference_str].AddItem( schReference );
716 auto pair = std::make_pair( aSrcFileName, aDestFileName );
723 wxCHECK_MSG( sch,
false,
"No SCHEMATIC found in SCH_SHEET_PATH::TestForRecursion!" );
726 wxFileName srcFn = aSrcFileName;
727 wxFileName destFn = aDestFileName;
729 if( srcFn.IsRelative() )
730 srcFn.MakeAbsolute( rootFn.GetPath() );
732 if( destFn.IsRelative() )
733 destFn.MakeAbsolute( rootFn.GetPath() );
736 if( srcFn == destFn )
751 if( cmpFn.IsRelative() )
752 cmpFn.MakeAbsolute( rootFn.GetPath() );
755 if( cmpFn == destFn )
763 if( i >=
size() || i == 0 )
777 if( cmpFn.IsRelative() )
778 cmpFn.MakeAbsolute( rootFn.GetPath() );
798 wxCHECK( sheet, wxEmptyString );
802 if( !tmpPath.empty() )
805 return wxEmptyString;
815 if( pageStr.ToLong( &page ) )
830 if( !tmpPath.empty() )
836 wxCHECK_MSG(
false, , wxS(
"Sheet paths must have a least one valid sheet." ) );
845 const wxString& aProjectName )
847 wxCHECK( !aProjectName.IsEmpty(), );
853 newSheetPath = newSheetPath + currentSheetPath;
859 wxCHECK2( symbol,
continue );
868 newSymbolInstance.
m_Path = newSheetPath.
Path();
877 newSymbolInstance.
m_Path = newSheetPath.
Path();
886 newSymbolInstance.
m_Path = newSheetPath.
Path();
901 wxCHECK2( symbol,
continue );
907 fullSheetPath = fullSheetPath + currentSheetPath;
919 wxLogTrace(
traceSchSheetPaths,
"CheckForMissingSymbolInstances for path: %s (project: %s)",
928 wxCHECK2( symbol,
continue );
946 wxLogTrace(
traceSchSheetPaths,
" Legacy format: Using reference '%s' from field, unit %d",
955 const std::vector<SCH_SYMBOL_INSTANCE>& instances = symbol->
GetInstances();
957 auto sourceIt = std::find_if( instances.begin(), instances.end(),
960 return aInstance.m_ProjectName == aProjectName;
963 if( sourceIt == instances.end() )
964 sourceIt = instances.begin();
966 symbolInstance = *sourceIt;
969 " Using available instance (project '%s'): ref=%s, unit=%d, variants=%zu",
970 sourceIt->m_ProjectName, symbolInstance.
m_Reference,
981 " No instance data: Using reference '%s' from field, unit %d",
990 " Created instance: ref=%s, path=%s",
996 " Symbol %s already has instance: ref=%s, path=%s",
1012 if( sheetFileName.IsAbsolute() )
1018 wxCHECK( screen && parentScreen, );
1021 wxFileName parentFileName = parentScreen->
GetFileName();
1025 wxCHECK( fileName.IsAbsolute() && parentFileName.IsAbsolute(), );
1027 if( fileName.GetPath() == parentFileName.GetPath() )
1031 else if( fileName.MakeRelativeTo( parentFileName.GetPath() ) )
1041 wxT(
"\n File name: '%s'"
1042 "\n parent file name '%s',"
1043 "\n sheet '%s' file name '%s'." ),
1045 Last()->GetFileName() );
1053 while( !tmp.
empty() )
1069 if( aSheet !=
nullptr )
1080 "BuildSheetList called with sheet '%s' (UUID=%s, isVirtualRoot=%d)",
1088 wxLogTrace(
traceSchSheetPaths,
" Skipping virtual root, processing children only" );
1092 std::vector<SCH_ITEM*> childSheets;
1095 for(
SCH_ITEM* item : childSheets )
1105 std::vector<SCH_SHEET*> badSheets;
1114 std::vector<SCH_ITEM*> childSheets;
1117 for(
SCH_ITEM* item : childSheets )
1121 if( aCheckIntegrity )
1126 badSheets.push_back( sheet );
1133 wxT(
"Recursion prevented in SCH_SHEET_LIST::BuildSheetList" ) );
1140 if( aCheckIntegrity )
1156 path.CachePageNumber();
1158 std::sort( begin(),
end(),
1162 size_t common_len = 0;
1163 size_t min_len = std::min( a.
size(), b.
size() );
1165 while( common_len < min_len && a.
at( common_len )->
m_Uuid == b.
at( common_len )->
m_Uuid )
1170 if( common_len == a.
size() )
1172 if( common_len == b.
size() )
1183 for(
size_t i = 0; i < common_len; i++ )
1184 ancestor.push_back( a.
at( i )->
m_Uuid );
1205 if( aUpdateVirtualPageNums )
1207 int virtualPageNum = 1;
1218 path.CachePageNumber();
1220 std::sort( begin(),
end(),
1228 else if( retval > 0 )
1240 if( aUpdateVirtualPageNums )
1242 int virtualPageNum = 1;
1276 auto it = std::remove_if( begin(),
end(),
1279 return std::find( aPageInclusions.begin(),
1280 aPageInclusions.end(),
1290 wxString pageNumber;
1293 std::set<int> usedPageNumbers;
1297 wxString existingPageNum =
path.GetPageNumber();
1300 if( existingPageNum.ToLong( &pageNum ) && pageNum > 0 )
1301 usedPageNumbers.insert(
static_cast<int>( pageNum ) );
1305 int nextAvailable = 1;
1307 while( usedPageNumbers.count( nextAvailable ) > 0 )
1310 pageNumber.Printf( wxT(
"%d" ), nextAvailable );
1353 if( aAllowNullptrReturn )
1367 if( aItem->m_Uuid == aID )
1375 if( aChild->
m_Uuid == aID )
1376 childMatch = aChild;
1396 aMap[ aItem->m_Uuid ] = aItem;
1398 aItem->RunOnChildren(
1401 aMap[ aChild->
m_Uuid ] = aChild;
1410 bool aForceIncludeOrphanSymbols )
const
1413 sheet.
GetSymbols( aReferences, aSymbolFilter, aForceIncludeOrphanSymbols );
1418 SYMBOL_FILTER aSymbolFilter,
bool aForceIncludeOrphanSymbols )
const
1423 sheet.
GetSymbols( aReferences, aSymbolFilter, aForceIncludeOrphanSymbols );
1434 aSheets.push_back( sheet );
1440 bool aIncludeLastSheet )
const
1446 if( !aIncludeLastSheet )
1447 testPath.pop_back();
1449 if( testPath == aPath )
1453 return std::nullopt;
1459 for(
auto it = begin(); it !=
end(); ++it )
1462 ( *it ).GetMultiUnitSymbols( tempMap, aSymbolFilter );
1464 for( SCH_MULTI_UNIT_REFERENCE_MAP::value_type& pair : tempMap )
1467 unsigned n_refs = pair.second.GetCount();
1469 for(
unsigned thisRef = 0; thisRef < n_refs; ++thisRef )
1470 aRefList[pair.first].AddItem( pair.second[thisRef] );
1477 const wxString& aDestFileName )
1482 SCHEMATIC* sch = at( 0 ).LastScreen()->Schematic();
1484 wxCHECK_MSG( sch,
false,
"No SCHEMATIC found in SCH_SHEET_LIST::TestForRecursion!" );
1487 wxFileName destFn = aDestFileName;
1489 if( destFn.IsRelative() )
1490 destFn.MakeAbsolute( rootFn.GetPath() );
1493 for(
unsigned i = 0; i < size(); i++ )
1496 for(
unsigned j = 0; j < aSrcSheetHierarchy.size(); j++ )
1500 for(
unsigned k = 0; k < sheetPath->
size(); k++ )
1547 retval.push_back( sheetpath );
1555 const std::vector<SCH_SYMBOL_INSTANCE>& aSymbolInstances )
1563 wxCHECK2( symbol,
continue );
1566 sheetPathWithSymbolUuid.push_back( symbol->
m_Uuid );
1568 auto it = std::find_if( aSymbolInstances.begin(), aSymbolInstances.end(),
1571 return sheetPathWithSymbolUuid == r.m_Path;
1574 if( it == aSymbolInstances.end() )
1577 sheetPathWithSymbolUuid.
AsString() );
1586 if( !it->m_Value.IsEmpty() )
1589 if( !it->m_Footprint.IsEmpty() )
1605 wxCHECK2( sheet &&
path.Last(),
continue );
1607 auto it = std::find_if( aSheetInstances.begin(), aSheetInstances.end(),
1610 return path.Path() == r.m_Path;
1613 if( it == aSheetInstances.end() )
1616 path.Path().AsString() );
1621 ( sheet->
GetName().IsEmpty() ) ? wxString( wxT(
"root" ) ) : sheet->
GetName(),
1622 path.Path().AsString(), it->m_PageNumber );
1623 path.SetPageNumber( it->m_PageNumber );
1630 std::vector<KIID_PATH> paths;
1633 paths.emplace_back( sheetPath.
Path() );
1641 std::vector<SCH_SHEET_INSTANCE> retval;
1647 wxCHECK2( sheet,
continue );
1656 retval.push_back( std::move( instance ) );
1688 tmp.Printf(
"%d", pageNumber );
1703 std::set<wxString> reservedPageIds;
1712 if( !pageNumber.IsEmpty() )
1713 reservedPageIds.insert( pageNumber );
1716 std::set<wxString> assignedPageIds;
1717 bool modified =
false;
1728 if( !pageNumber.IsEmpty() && assignedPageIds.insert( pageNumber ).second )
1731 wxString pageStr = wxString::Format( wxT(
"%ld" ), nextPage );
1733 while( reservedPageIds.count( pageStr ) || assignedPageIds.count( pageStr ) )
1736 pageStr = wxString::Format( wxT(
"%ld" ), nextPage );
1740 assignedPageIds.insert( pageStr );
1750 const wxString& aProjectName )
1765 int aLastVirtualPageNumber )
1767 wxString pageNumber;
1768 int lastUsedPageNumber = 1;
1769 int nextVirtualPageNumber = aLastVirtualPageNumber;
1772 std::vector< wxString > usedPageNumbers;
1774 if( aPrefixSheetPath.
size() )
1780 pageNumber =
path.GetPageNumber();
1782 if( !pageNumber.IsEmpty() )
1783 usedPageNumbers.emplace_back( pageNumber );
1793 newSheetPath = newSheetPath + sheetPath;
1800 wxCHECK2( sheet,
continue );
1802 nextVirtualPageNumber += 1;
1819 pageNumber.Printf( wxT(
"%d" ), lastUsedPageNumber );
1820 lastUsedPageNumber += 1;
1821 }
while( std::find( usedPageNumbers.begin(), usedPageNumbers.end(), pageNumber ) !=
1822 usedPageNumbers.end() );
1837 "SCH_SHEET_LIST::CheckForMissingSymbolInstances: Processing %zu sheet paths",
1843 " Processing sheet path: '%s' (size=%zu, KIID_PATH='%s')",
1854 int lastVirtualPageNumber = 1;
1862 return lastVirtualPageNumber;
1870 if(
path.Path() == aPath )
1882 for(
size_t i = 0; i <
path.size(); i++ )
1884 if(
path.at( i ) == aSheet )
1897 return std::nullopt;
1901 if(
path.LastScreen() == aScreen )
1902 return std::optional<SCH_SHEET_PATH>(
path );
1905 return std::nullopt;
bool IsContentModified() const
void SetContentModified(bool aModified=true)
wxString GetClass() const override
Return the class name.
void SetPosition(const VECTOR2I &) override
static DELETED_SHEET_ITEM * GetInstance()
double Similarity(const SCH_ITEM &aOther) const override
Return a measure of how likely the other object is to represent the same object.
void Rotate(const VECTOR2I &aCenter, bool aRotateCCW) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
void Move(const VECTOR2I &aMoveVector) override
Move the item by aMoveVector to a new position.
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
bool operator==(const SCH_ITEM &aOther) const override
void MirrorVertically(int aCenter) override
Mirror item vertically about aCenter.
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
KICAD_T Type() const
Returns the type of object.
virtual bool IsVisible() const
virtual void SetVisible(bool aVisible)
EE_TYPE OfType(KICAD_T aType) const
wxString AsString() const
wxString AsString() const
Define a library symbol object.
int GetUnitCount() const override
bool m_IntersheetRefsShow
Holds all the data relating to one schematic.
wxString GetFileName() const
Helper to retrieve the filename from the root sheet screen.
SCHEMATIC_SETTINGS & Settings() const
std::vector< SCH_SHEET * > GetTopLevelSheets() const
Get the list of top-level sheets.
VECTOR2I GetPosition() const override
virtual const wxString & GetText() const override
Return the string associated with the text object.
wxString GetShownText(const SCH_SHEET_PATH *aPath, RESOLUTION_CONTEXT aContext, const wxString &aVariantName=wxEmptyString, int aDepth=0) const
void SetText(const wxString &aText) override
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this label.
Base class for any item which can be embedded within the SCHEMATIC container class,...
virtual void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction, RECURSE_MODE aMode)
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
virtual void SetUnit(int aUnit)
SCH_ITEM(EDA_ITEM *aParent, KICAD_T aType, int aUnit=0, int aBodyStyle=0)
void AutoplaceFields(SCH_SCREEN *aScreen, AUTOPLACE_ALGO aAlgo) override
std::vector< SCH_FIELD > & GetFields()
Container to create a flattened list of symbols because in a complex hierarchy, a symbol can be used ...
void AddItem(const SCH_REFERENCE &aItem)
A helper to define a symbol's reference designator in a schematic.
void SetSheetNumber(int aSheetNumber)
void UpdateDisplayBounds(SCH_ITEM *aItem)
Refresh display bounds only; the item's source and membership must be unchanged.
EE_RTREE & Items()
Get the full RTree, usually for iterating.
const wxString & GetFileName() const
SCHEMATIC * Schematic() const
void GetSheets(std::vector< SCH_ITEM * > *aItems) const
Similar to Items().OfType( SCH_SHEET_T ), but return the sheets in a deterministic order (L-R,...
void UpdateHatching() const override
std::optional< SCH_SHEET_PATH > GetSheetPathByKIIDPath(const KIID_PATH &aPath, bool aIncludeLastSheet=true) const
Finds a SCH_SHEET_PATH that matches the provided KIID_PATH.
SCH_ITEM * ResolveItem(const KIID &aID, SCH_SHEET_PATH *aPathOut=nullptr, bool aAllowNullptrReturn=false) const
Fetch a SCH_ITEM by ID.
std::optional< SCH_SHEET_PATH > GetOrdinalPath(const SCH_SCREEN *aScreen) const
Return the ordinal sheet path of aScreen.
void FillItemMap(std::map< KIID, EDA_ITEM * > &aMap)
Fill an item cache for temporary use when many items need to be fetched.
SCH_SHEET_PATH m_currentSheetPath
void TrimToPageNumbers(const std::vector< wxString > &aPageInclusions)
Truncates the list by removing sheet's with page numbers not in the given list.
void SortByPageNumbers(bool aUpdateVirtualPageNums=true)
Sort the list of sheets by page number.
void AddNewSymbolInstances(const SCH_SHEET_PATH &aPrefixSheetPath, const wxString &aProjectName)
Attempt to add new symbol instances for all symbols in this list of sheet paths prefixed with aPrefix...
bool NameExists(const wxString &aSheetName) const
void GetSymbolsWithinPath(SCH_REFERENCE_LIST &aReferences, const SCH_SHEET_PATH &aSheetPath, SYMBOL_FILTER aSymbolFilter, bool aForceIncludeOrphanSymbols=false) const
Add a SCH_REFERENCE object to aReferences for each symbol in the list of sheets that are contained wi...
std::vector< SCH_SHEET_INSTANCE > GetSheetInstances() const
Fetch the instance information for all of the sheets in the hierarchy.
void UpdateSheetInstanceData(const std::vector< SCH_SHEET_INSTANCE > &aSheetInstances)
Update all of the sheet instance information using aSheetInstances.
void SetInitialPageNumbers()
Set initial sheet page numbers.
void RemoveSymbolInstances(const SCH_SHEET_PATH &aPrefixSheetPath)
SCH_SHEET_LIST FindAllSheetsForScreen(const SCH_SCREEN *aScreen) const
Return a SCH_SHEET_LIST with a copy of all the SCH_SHEET_PATH using a particular screen.
wxString GetNextPageNumber() const
bool AllSheetPageNumbersEmpty() const
Check all of the sheet instance for empty page numbers.
bool IsModified() const
Check the entire hierarchy for any modifications.
SCH_SHEET_LIST(SCH_SHEET *aSheet=nullptr)
Construct a flattened list of SCH_SHEET_PATH objects from aSheet.
int GetLastVirtualPageNumber() const
void UpdateSymbolInstanceData(const std::vector< SCH_SYMBOL_INSTANCE > &aSymbolInstances)
Update all of the symbol instance information using aSymbolInstances.
void GetSheetsWithinPath(std::vector< SCH_SHEET_PATH > &aSheets, const SCH_SHEET_PATH &aSheetPath) const
Add a SCH_SHEET_PATH object to aSheets for each sheet in the list that are contained within aSheetPat...
bool PageNumberExists(const wxString &aPageNumber) const
void SortByHierarchicalPageNumbers(bool aUpdateVirtualPageNums=true)
This works like SortByPageNumbers, but it sorts the sheets first by their hierarchical depth and then...
void AddNewSheetInstances(const SCH_SHEET_PATH &aPrefixSheetPath, int aLastVirtualPageNumber)
void GetMultiUnitSymbols(SCH_MULTI_UNIT_REFERENCE_MAP &aRefList, SYMBOL_FILTER aSymbolFilter) const
Add a SCH_REFERENCE_LIST object to aRefList for each same-reference set of multi-unit parts in the li...
bool ContainsSheet(const SCH_SHEET *aSheet) const
bool RepairPageNumbers()
Assign valid page numbers to sheet paths whose stored page number is missing or collides with an earl...
std::vector< KIID_PATH > GetPaths() const
void BuildSheetList(SCH_SHEET *aSheet, bool aCheckIntegrity)
Build the list of sheets and their sheet path from aSheet.
SCH_SHEET_PATH FindSheetForScreen(const SCH_SCREEN *aScreen)
Return the first SCH_SHEET_PATH object (not necessarily the only one) using a particular screen.
void CheckForMissingSymbolInstances(const wxString &aProjectName)
bool HasPath(const KIID_PATH &aPath) const
SCH_SHEET_PATH * FindSheetForPath(const SCH_SHEET_PATH *aPath)
Return a pointer to the first SCH_SHEET_PATH object (not necessarily the only one) matching the provi...
void GetSymbols(SCH_REFERENCE_LIST &aReferences, SYMBOL_FILTER aSymbolFilter, bool aForceIncludeOrphanSymbols=false) const
Add a SCH_REFERENCE object to aReferences for each symbol in the list of sheets.
bool TestForRecursion(const SCH_SHEET_LIST &aSrcSheetHierarchy, const wxString &aDestFileName)
Test every SCH_SHEET_PATH in this SCH_SHEET_LIST to verify if adding the sheets stored in aSrcSheetHi...
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
void AppendSymbol(SCH_REFERENCE_LIST &aReferences, SCH_SYMBOL *aSymbol, SYMBOL_FILTER aSymbolFilter, bool aForceIncludeOrphanSymbols=false) const
Append a SCH_REFERENCE object to aReferences based on aSymbol.
bool IsSharedPath() const
Determine if this sheet path is shared in a complex hierarchy.
KIID_PATH m_path
The UUID path of m_sheets, kept in step with it by Rehash().
bool GetExcludedFromBOM() const
void Swap(SCH_SHEET_PATH &aOther) noexcept
const SCH_SHEET * GetSheet(unsigned aIndex) const
bool empty() const
Forwarded method from std::vector.
int ComparePageNum(const SCH_SHEET_PATH &aSheetPathToTest) const
Compare sheets by their page number.
size_t GetCurrentHash() const
void GetMultiUnitSymbols(SCH_MULTI_UNIT_REFERENCE_MAP &aRefList, SYMBOL_FILTER aSymbolFilter) const
Add a SCH_REFERENCE_LIST object to aRefList for each same-reference set of multi-unit parts in the sh...
void GetSymbols(SCH_REFERENCE_LIST &aReferences, SYMBOL_FILTER aSymbolFilter, bool aForceIncludeOrphanSymbols=false) const
Adds SCH_REFERENCE object to aReferences for each symbol in the sheet.
bool operator==(const SCH_SHEET_PATH &d1) const
void AddNewSymbolInstances(const SCH_SHEET_PATH &aPrefixSheetPath, const wxString &aProjectName)
Attempt to add new symbol instances for all symbols in this sheet path prefixed with aPrefixSheetPath...
KIID_PATH Path() const
Get the sheet path as an KIID_PATH.
bool TestForRecursion(const wxString &aSrcFileName, const wxString &aDestFileName)
Test the SCH_SHEET_PATH file names to check adding the sheet stored in the file aSrcFileName to the s...
void UpdateAllScreenReferences() const
Update all the symbol references for this sheet path.
void MakeFilePathRelativeToParentSheet()
Make the sheet file name relative to its parent sheet.
SCH_ITEM * ResolveItem(const KIID &aID) const
Fetch a SCH_ITEM by ID.
wxString GetCachedPageNumber() const
std::vector< SCH_SHEET * > m_sheets
SCH_SCREEN * LastScreen()
int Cmp(const SCH_SHEET_PATH &aSheetPathToTest) const
Compare if this is the same sheet path as aSheetPathToTest.
void initFromOther(const SCH_SHEET_PATH &aOther)
wxString m_cached_page_number
wxString GetPageNumber() const
void RemoveSymbolInstances(const SCH_SHEET_PATH &aPrefixSheetPath)
void CheckForMissingSymbolInstances(const wxString &aProjectName)
bool IsContainedWithin(const SCH_SHEET_PATH &aSheetPathToTest) const
Check if this path is contained inside aSheetPathToTest.
SCH_SHEET * at(size_t aIndex) const
Forwarded method from std::vector.
void SetVirtualPageNumber(int aPageNumber)
Set the sheet instance virtual page number.
wxString PathHumanReadable(bool aUseShortRootName=true, bool aStripTrailingSeparator=false, bool aEscapeSheetNames=false) const
Return the sheet path in a human readable form made from the sheet names.
std::map< std::pair< wxString, wxString >, bool > m_recursion_test_cache
bool GetExcludedFromSim() const
wxString PathAsString() const
Return the path of time stamps which do not changes even when editing sheet parameters.
void AppendMultiUnitSymbol(SCH_MULTI_UNIT_REFERENCE_MAP &aRefList, SCH_SYMBOL *aSymbol, SYMBOL_FILTER aSymbolFilter) const
Append a SCH_REFERENCE_LIST object to aRefList based on aSymbol, storing same-reference set of multi-...
bool GetExcludedFromBoard() const
void SetPageNumber(const wxString &aPageNumber)
Set the sheet instance user definable page number.
SCH_SHEET_PATH & operator=(const SCH_SHEET_PATH &aOther)
int GetPageNumberAsInt() const
SCH_SHEET * Last() const
Return a pointer to the last SCH_SHEET of the list.
SCH_SHEET_PATH operator+(const SCH_SHEET_PATH &aOther)
int m_virtualPageNumber
Page numbers are maintained by the sheet load order.
void push_back(SCH_SHEET *aSheet)
Forwarded method from std::vector.
size_t size() const
Forwarded method from std::vector.
int GetVirtualPageNumber() const
void pop_back()
Forwarded method from std::vector.
void InitializeAttributes(const SCH_SHEET &aSheet)
bool HasDifferentials(const SCH_SHEET &aSheet) const
Return true if the variant carries any differential against the base sheet values.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
void SetFileName(const wxString &aFilename)
wxString GetFileName() const
Return the filename corresponding to this sheet.
bool getInstance(SCH_SHEET_INSTANCE &aInstance, const KIID_PATH &aSheetPath, bool aTestFromEnd=false) const
bool addInstance(const KIID_PATH &aInstance)
Add a new instance aSheetPath to the instance list.
wxString getPageNumber(const KIID_PATH &aParentPath) const
Return the sheet page number for aParentPath.
bool IsTopLevelSheet() const
Check if this sheet is a top-level sheet.
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this sheet.
bool GetExcludedFromBOM(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
bool GetExcludedFromSim(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
SCH_SCREEN * GetScreen() const
static int ComparePageNum(const wxString &aPageNumberA, const wxString &aPageNumberB)
Compare page numbers of schematic sheets.
void setPageNumber(const KIID_PATH &aInstance, const wxString &aPageNumber)
Set the page number for the sheet instance aInstance.
bool IsVirtualRootSheet() const
bool GetDNP(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Set or clear the 'Do Not Populate' flags.
bool GetExcludedFromBoard(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
PIN_MAP_INSTANCE_OVERRIDE m_PinMapOverride
Per-instance pin-to-pad map override for this variant (issue #2282).
std::optional< LIB_ID > m_SymbolOverride
Alternate library symbol to substitute for the base symbol in this variant, if any.
void InitializeAttributes(const SCH_SYMBOL &aSymbol)
bool HasDifferentials(const SCH_SYMBOL &aSymbol) const
Return true if the variant carries any differential against the base symbol values,...
void UpdatePrefix()
Set the prefix based on the current reference designator.
bool GetExcludedFromSim(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
const std::vector< SCH_SYMBOL_INSTANCE > & GetInstances() const
void RemoveInstance(const SCH_SHEET_PATH &aInstancePath)
PIN_MAP_INSTANCE_OVERRIDE GetPinMapOverride(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const
bool GetExcludedFromBOM(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
void SetFootprintFieldText(const wxString &aFootprint)
void AddHierarchicalReference(const KIID_PATH &aPath, const wxString &aRef, int aUnit)
Add a full hierarchical reference to this symbol.
void SetValueFieldText(const wxString &aValue, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString)
bool GetExcludedFromPosFiles(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
bool GetInstance(SCH_SYMBOL_INSTANCE &aInstance, const KIID_PATH &aSheetPath, bool aTestFromEnd=false) const
bool GetExcludedFromBoard(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
int GetUnitSelection(const SCH_SHEET_PATH *aSheet) const
Return the instance-specific unit selection for the given sheet path.
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
virtual bool GetDNP(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Set or clear the 'Do Not Populate' flag.
const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const override
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this symbol.
std::map< wxString, wxString > m_Fields
bool m_ExcludedFromPosFiles
static bool empty(const wxTextEntryBase *aCtrl)
const wxChar *const tracePathsAndFiles
Flag to enable path and file name debug output.
const wxChar *const traceSchSheetPaths
Flag to enable debug output of schematic symbol sheet path manipulation code.
static constexpr void hash_combine(std::size_t &seed)
This is a dummy function to take the final case of hash_combine below.
Collection of utility functions for component reference designators (refdes)
static bool matchesSymbolFilter(const wxString &aReference, SYMBOL_FILTER aSymbolFilter)
Definition of the SCH_SHEET_PATH and SCH_SHEET_LIST classes for Eeschema.
std::map< wxString, SCH_REFERENCE_LIST > SCH_MULTI_UNIT_REFERENCE_MAP
Container to map reference designators for multi-unit parts.
@ SYMBOL_FILTER_NON_POWER
wxString EscapeString(const wxString &aSource, ESCAPE_CONTEXT aContext)
The Escape/Unescape routines use HTML-entity-reference-style encoding to handle characters which are:...
A simple container for sheet instance information.
A simple container for schematic symbol instance information.
std::map< wxString, SCH_SYMBOL_VARIANT > m_Variants
A list of symbol variants.
size_t operator()(const SCH_SHEET_PATH &path) const
@ INTERSHEET_REFS
Global label cross-reference page numbers.
@ REFERENCE
Field Reference of part, i.e. "IC21".
wxLogTrace helper definitions.
@ NOT_USED
the 3d code uses this value
VECTOR2< int32_t > VECTOR2I