40#include <wx/filename.h>
58 return _(
"(Deleted Item)" );
63 return wxT(
"DELETED_SHEET_ITEM" );
94 void Show(
int , std::ostream& )
const override {}
123 return path.GetCurrentHash();
151 m_sheets = std::move( aOther.m_sheets );
169 for(
size_t i = 0; i <
size; i++ )
199 if(
size() > aSheetPathToTest.
size() )
202 if(
size() < aSheetPathToTest.
size() )
206 for(
unsigned i = 0; i <
size(); i++ )
208 if(
at( i )->m_Uuid < aSheetPathToTest.
at( i )->
m_Uuid )
211 if(
at( i )->m_Uuid != aSheetPathToTest.
at( i )->
m_Uuid )
226 if( pageNumComp == 0 )
231 if( virtualPageA > virtualPageB )
233 else if( virtualPageA < virtualPageB )
243 if( aSheetPathToTest.
size() >
size() )
246 for(
size_t i = 0; i < aSheetPathToTest.
size(); ++i )
248 if(
at( i )->m_Uuid != aSheetPathToTest.
at( i )->
m_Uuid )
299 if( sheet->GetExcludedFromSim() )
309 if( aVariantName.IsEmpty() )
314 while( !
copy.empty() )
331 if( sheet->GetExcludedFromBOM() )
341 if( aVariantName.IsEmpty() )
346 while( !
copy.empty() )
363 if( sheet->GetExcludedFromBoard() )
373 if( aVariantName.IsEmpty() )
378 while( !
copy.empty() )
395 if( sheet->GetDNP() )
405 if( aVariantName.IsEmpty() )
410 while( !
copy.empty() )
431 for(
unsigned i = 1; i <
size(); i++ )
457 for(
size_t i = 1; i <
size; i++ )
465 bool aStripTrailingSeparator,
466 bool aEscapeSheetNames )
const
473 if( !
empty() &&
at( 0 )->IsVirtualRootSheet() )
476 if( aUseShortRootName )
484 if(
size() > startIdx &&
at( startIdx )->GetScreen() )
487 wxFileName fn = fileName;
489 s = fn.GetName() + wxS(
"/" );
493 for(
unsigned i = startIdx + 1; i <
size(); i++ )
497 if( aEscapeSheetNames )
500 s << sheetName << wxS(
"/" );
503 if( aStripTrailingSeparator && s.EndsWith(
"/" ) )
504 s = s.Left( s.length() - 1 );
512 std::vector<SCH_ITEM*> items;
515 std::back_inserter( items ),
523 std::optional<wxString> variantName;
567 bool isPowerSymbol = !aReference.IsEmpty() && aReference[0] == wxT(
'#' );
569 switch( aSymbolFilter )
576 default:
return !isPowerSymbol;
582 bool aForceIncludeOrphanSymbols )
const
587 AppendSymbol( aReferences, symbol, aSymbolFilter, aForceIncludeOrphanSymbols );
593 bool aForceIncludeOrphanSymbols )
const
604 aReferences.
AddItem( schReference );
634 wxString reference_str = schReference.
GetRef();
637 if( reference_str[reference_str.Len() - 1] ==
'?' )
640 aRefList[reference_str].AddItem( schReference );
653 auto pair = std::make_pair( aSrcFileName, aDestFileName );
660 wxCHECK_MSG( sch,
false,
"No SCHEMATIC found in SCH_SHEET_PATH::TestForRecursion!" );
663 wxFileName srcFn = aSrcFileName;
664 wxFileName destFn = aDestFileName;
666 if( srcFn.IsRelative() )
667 srcFn.MakeAbsolute( rootFn.GetPath() );
669 if( destFn.IsRelative() )
670 destFn.MakeAbsolute( rootFn.GetPath() );
673 if( srcFn == destFn )
688 if( cmpFn.IsRelative() )
689 cmpFn.MakeAbsolute( rootFn.GetPath() );
692 if( cmpFn == destFn )
700 if( i >=
size() || i == 0 )
714 if( cmpFn.IsRelative() )
715 cmpFn.MakeAbsolute( rootFn.GetPath() );
735 wxCHECK( sheet, wxEmptyString );
739 if( !tmpPath.empty() )
742 return wxEmptyString;
752 if( pageStr.ToLong( &page ) )
767 if( !tmpPath.empty() )
773 wxCHECK_MSG(
false, , wxS(
"Sheet paths must have a least one valid sheet." ) );
782 const wxString& aProjectName )
784 wxCHECK( !aProjectName.IsEmpty(), );
790 newSheetPath = newSheetPath + currentSheetPath;
796 wxCHECK2( symbol,
continue );
805 newSymbolInstance.
m_Path = newSheetPath.
Path();
814 newSymbolInstance.
m_Path = newSheetPath.
Path();
823 newSymbolInstance.
m_Path = newSheetPath.
Path();
838 wxCHECK2( symbol,
continue );
844 fullSheetPath = fullSheetPath + currentSheetPath;
856 wxLogTrace(
traceSchSheetPaths,
"CheckForMissingSymbolInstances for path: %s (project: %s)",
865 wxCHECK2( symbol,
continue );
878 (
LastScreen()->GetFileFormatVersionAtLoad() <= 20200310 ) )
885 " Legacy format: Using reference '%s' from field, unit %d",
898 " Using first available instance: ref=%s, unit=%d",
909 " No instance data: Using reference '%s' from field, unit %d",
918 " Created instance: ref=%s, path=%s",
924 " Symbol %s already has instance: ref=%s, path=%s",
940 if( sheetFileName.IsAbsolute() )
946 wxCHECK( screen && parentScreen, );
949 wxFileName parentFileName = parentScreen->
GetFileName();
953 wxCHECK( fileName.IsAbsolute() && parentFileName.IsAbsolute(), );
955 if( fileName.GetPath() == parentFileName.GetPath() )
959 else if( fileName.MakeRelativeTo( parentFileName.GetPath() ) )
969 wxT(
"\n File name: '%s'"
970 "\n parent file name '%s',"
971 "\n sheet '%s' file name '%s'." ),
973 Last()->GetFileName() );
979 if( aSheet !=
nullptr )
990 "BuildSheetList called with sheet '%s' (UUID=%s, isVirtualRoot=%d)",
1002 std::vector<SCH_ITEM*> childSheets;
1005 for(
SCH_ITEM* item : childSheets )
1015 std::vector<SCH_SHEET*> badSheets;
1024 std::vector<SCH_ITEM*> childSheets;
1027 for(
SCH_ITEM* item : childSheets )
1031 if( aCheckIntegrity )
1036 badSheets.push_back( sheet );
1043 wxT(
"Recursion prevented in SCH_SHEET_LIST::BuildSheetList" ) );
1050 if( aCheckIntegrity )
1066 path.CachePageNumber();
1068 std::sort( begin(),
end(),
1072 size_t common_len = 0;
1073 size_t min_len = std::min( a.
size(), b.
size() );
1075 while( common_len < min_len && a.
at( common_len )->
m_Uuid == b.
at( common_len )->
m_Uuid )
1080 if( common_len == a.
size() )
1082 if( common_len == b.
size() )
1093 for(
size_t i = 0; i < common_len; i++ )
1094 ancestor.push_back( a.
at( i )->
m_Uuid );
1115 if( aUpdateVirtualPageNums )
1117 int virtualPageNum = 1;
1128 path.CachePageNumber();
1130 std::sort( begin(),
end(),
1138 else if( retval > 0 )
1150 if( aUpdateVirtualPageNums )
1152 int virtualPageNum = 1;
1186 auto it = std::remove_if( begin(),
end(),
1189 return std::find( aPageInclusions.begin(),
1190 aPageInclusions.end(),
1200 wxString pageNumber;
1203 std::set<int> usedPageNumbers;
1207 wxString existingPageNum =
path.GetPageNumber();
1210 if( existingPageNum.ToLong( &pageNum ) && pageNum > 0 )
1211 usedPageNumbers.insert(
static_cast<int>( pageNum ) );
1215 int nextAvailable = 1;
1217 while( usedPageNumbers.count( nextAvailable ) > 0 )
1220 pageNumber.Printf( wxT(
"%d" ), nextAvailable );
1263 if( aAllowNullptrReturn )
1274 if( aItem->m_Uuid == aID )
1282 if( aChild->
m_Uuid == aID )
1283 childMatch = aChild;
1303 aMap[ aItem->m_Uuid ] = aItem;
1305 aItem->RunOnChildren(
1308 aMap[ aChild->
m_Uuid ] = aChild;
1332 if( libSymbol && libSymbol->
IsPower() )
1335 references.
AddItem( schReference );
1341 std::map<wxString, int> ref_list;
1343 for(
unsigned ii = 0; ii< references.
GetCount(); ++ii )
1345 wxString curr_ref = references[ii].GetRef();
1347 if( curr_ref.IsEmpty() )
1350 if( ref_list.find( curr_ref ) == ref_list.end() )
1352 ref_list[curr_ref] = ii;
1357 if( curr_ref.Last() <
'0' && curr_ref.Last() >
'9' )
1361 while( !curr_ref.IsEmpty() && curr_ref.Last() >=
'0' && curr_ref.Last() <=
'9' )
1362 curr_ref.RemoveLast();
1364 references[ii].SetRef( curr_ref );
1373 for(
unsigned ii = 0; ii< references.
GetCount(); ++ii )
1377 if( ref_unit.
GetRef()[0] !=
'#' )
1379 wxString new_ref =
"#" + ref_unit.
GetRef();
1380 ref_unit.
SetRef( new_ref );
1388 bool aForceIncludeOrphanSymbols )
const
1391 sheet.
GetSymbols( aReferences, aSymbolFilter, aForceIncludeOrphanSymbols );
1396 SYMBOL_FILTER aSymbolFilter,
bool aForceIncludeOrphanSymbols )
const
1401 sheet.
GetSymbols( aReferences, aSymbolFilter, aForceIncludeOrphanSymbols );
1412 aSheets.push_back( sheet );
1418 bool aIncludeLastSheet )
const
1424 if( !aIncludeLastSheet )
1425 testPath.pop_back();
1427 if( testPath == aPath )
1431 return std::nullopt;
1437 for(
auto it = begin(); it !=
end(); ++it )
1440 ( *it ).GetMultiUnitSymbols( tempMap, aSymbolFilter );
1442 for( SCH_MULTI_UNIT_REFERENCE_MAP::value_type& pair : tempMap )
1445 unsigned n_refs = pair.second.GetCount();
1447 for(
unsigned thisRef = 0; thisRef < n_refs; ++thisRef )
1448 aRefList[pair.first].AddItem( pair.second[thisRef] );
1455 const wxString& aDestFileName )
1460 SCHEMATIC* sch = at( 0 ).LastScreen()->Schematic();
1462 wxCHECK_MSG( sch,
false,
"No SCHEMATIC found in SCH_SHEET_LIST::TestForRecursion!" );
1465 wxFileName destFn = aDestFileName;
1467 if( destFn.IsRelative() )
1468 destFn.MakeAbsolute( rootFn.GetPath() );
1471 for(
unsigned i = 0; i < size(); i++ )
1474 for(
unsigned j = 0; j < aSrcSheetHierarchy.size(); j++ )
1478 for(
unsigned k = 0; k < sheetPath->
size(); k++ )
1525 retval.push_back( sheetpath );
1533 const std::vector<SCH_SYMBOL_INSTANCE>& aSymbolInstances )
1541 wxCHECK2( symbol,
continue );
1544 sheetPathWithSymbolUuid.push_back( symbol->
m_Uuid );
1546 auto it = std::find_if( aSymbolInstances.begin(), aSymbolInstances.end(),
1549 return sheetPathWithSymbolUuid == r.m_Path;
1552 if( it == aSymbolInstances.end() )
1555 sheetPathWithSymbolUuid.
AsString() );
1564 if( !it->m_Value.IsEmpty() )
1567 if( !it->m_Footprint.IsEmpty() )
1583 wxCHECK2( sheet &&
path.Last(),
continue );
1585 auto it = std::find_if( aSheetInstances.begin(), aSheetInstances.end(),
1588 return path.Path() == r.m_Path;
1591 if( it == aSheetInstances.end() )
1594 path.Path().AsString() );
1599 ( sheet->
GetName().IsEmpty() ) ? wxString( wxT(
"root" ) ) : sheet->
GetName(),
1600 path.Path().AsString(), it->m_PageNumber );
1601 path.SetPageNumber( it->m_PageNumber );
1608 std::vector<KIID_PATH> paths;
1611 paths.emplace_back( sheetPath.
Path() );
1619 std::vector<SCH_SHEET_INSTANCE> retval;
1625 wxCHECK2( sheet,
continue );
1634 retval.push_back( std::move( instance ) );
1666 tmp.Printf(
"%d", pageNumber );
1674 const wxString& aProjectName )
1689 int aLastVirtualPageNumber )
1691 wxString pageNumber;
1692 int lastUsedPageNumber = 1;
1693 int nextVirtualPageNumber = aLastVirtualPageNumber;
1696 std::vector< wxString > usedPageNumbers;
1698 if( aPrefixSheetPath.
size() )
1704 pageNumber =
path.GetPageNumber();
1706 if( !pageNumber.IsEmpty() )
1707 usedPageNumbers.emplace_back( pageNumber );
1717 newSheetPath = newSheetPath + sheetPath;
1724 wxCHECK2( sheet,
continue );
1726 nextVirtualPageNumber += 1;
1743 pageNumber.Printf( wxT(
"%d" ), lastUsedPageNumber );
1744 lastUsedPageNumber += 1;
1745 }
while( std::find( usedPageNumbers.begin(), usedPageNumbers.end(), pageNumber ) !=
1746 usedPageNumbers.end() );
1761 "SCH_SHEET_LIST::CheckForMissingSymbolInstances: Processing %zu sheet paths",
1767 " Processing sheet path: '%s' (size=%zu, KIID_PATH='%s')",
1778 int lastVirtualPageNumber = 1;
1786 return lastVirtualPageNumber;
1794 if(
path.Path() == aPath )
1806 for(
size_t i = 0; i <
path.size(); i++ )
1808 if(
path.at( i ) == aSheet )
1821 return std::nullopt;
1825 if(
path.LastScreen() == aScreen )
1826 return std::optional<SCH_SHEET_PATH>(
path );
1829 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 void UpdateHatching() const
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.
bool IsPower() const override
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
wxString GetCurrentVariant() const
Return the current variant being edited.
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, bool aAllowExtraText, int aDepth=0, const wxString &aVariantName=wxEmptyString) 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 SplitReferences()
Attempt to split all reference designators into a name (U) and number (1).
void AddItem(const SCH_REFERENCE &aItem)
A helper to define a symbol's reference designator in a schematic.
void SetRef(const wxString &aReference)
void SetSheetNumber(int aSheetNumber)
EE_RTREE & Items()
Get the full RTree, usually for iterating.
const wxString & GetFileName() const
SCHEMATIC * Schematic() const
void Update(SCH_ITEM *aItem, bool aUpdateLibSymbol=true)
Update aItem's bounding box in the tree.
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,...
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.
void AnnotatePowerSymbols()
Silently annotate the not yet annotated power symbols of the entire hierarchy of the sheet path list.
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
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 GetExcludedFromBOM() const
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)
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.
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
void InitializeAttributes(const SCH_SYMBOL &aSymbol)
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)
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.
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.
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".
table push_back({ "Source", "Layer", "Vertices", "Strategy", "Build(us)", "ns/query", "Mquery/s", "Inside" })
wxLogTrace helper definitions.
@ NOT_USED
the 3d code uses this value
VECTOR2< int32_t > VECTOR2I