21#ifndef _SCH_IO_ALTIUM_H_
22#define _SCH_IO_ALTIUM_H_
30#include <wx/filename.h>
86 {
"SchLib",
"IntLib" } );
96 const std::map<std::string, UTF8>* aProperties =
nullptr )
override;
99 const std::map<std::string, UTF8>* aProperties );
109 const wxString& aLibraryPath,
110 const std::map<std::string, UTF8>* aProperties =
nullptr )
override;
113 const wxString& aLibraryPath,
114 const std::map<std::string, UTF8>* aProperties =
nullptr )
override;
117 const wxString& aAliasName,
118 const std::map<std::string, UTF8>* aProperties =
nullptr )
override;
155 const wxString& aSectionName );
166 wxFileName
ResolveSheetFileName(
const wxString& aParentPath,
const wxString& aSheetFileName )
const;
177 std::vector<int>& aFontSize =
nullint );
179 void ParseComponent(
int aIndex,
const std::map<wxString, wxString>& aProperties );
180 void ParseTemplate(
int aIndex,
const std::map<wxString, wxString>& aProperties );
181 void ParsePin(
const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol =
nullsym);
182 void ParseLabel(
const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol =
nullsym,
183 std::vector<int>& aFontSize =
nullint );
184 void ParseTextFrame(
const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol =
nullsym,
185 std::vector<int>& aFontSize =
nullint );
186 void ParseNote(
const std::map<wxString, wxString>& aProperties );
187 void ParseBezier(
const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol =
nullsym);
188 void ParsePolyline(
const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol =
nullsym);
189 void ParsePolygon(
const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol =
nullsym);
191 void ParseArc(
const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol =
nullsym);
193 void ParseEllipse(
const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol =
nullsym);
194 void ParseCircle(
const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol =
nullsym);
195 void ParseLine(
const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol =
nullsym);
202 void ParsePieChart(
const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol =
nullsym);
203 void ParseRectangle(
const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol =
nullsym);
204 void ParseSheetSymbol(
int aIndex,
const std::map<wxString, wxString>& aProperties );
205 void ParseSheetEntry(
const std::map<wxString, wxString>& aProperties );
206 void ParsePowerPort(
const std::map<wxString, wxString>& aProperties );
209 void ParseNoERC(
const std::map<wxString, wxString>& aProperties );
210 void ParseNetLabel(
const std::map<wxString, wxString>& aProperties );
211 void ParseBus(
const std::map<wxString, wxString>& aProperties );
212 void ParseWire(
const std::map<wxString, wxString>& aProperties );
213 void ParseJunction(
const std::map<wxString, wxString>& aProperties );
214 void ParseImage(
const std::map<wxString, wxString>& aProperties );
215 void ParseSheet(
const std::map<wxString, wxString>& aProperties );
216 void ParseSheetName(
const std::map<wxString, wxString>& aProperties );
217 void ParseFileName(
const std::map<wxString, wxString>& aProperties );
218 void ParseDesignator(
const std::map<wxString, wxString>& aProperties );
219 void ParseLibDesignator(
const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol =
nullsym, std::vector<int>& aFontSize =
nullint );
220 void ParseBusEntry(
const std::map<wxString, wxString>& aProperties );
221 void ParseParameter(
const std::map<wxString, wxString>& aProperties );
222 void ParseLibParameter(
const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol =
nullsym, std::vector<int>& aFontSize =
nullint );
228 std::vector<LIB_SYMBOL*>
ParseLibComponent(
const std::map<wxString, wxString>& aProperties );
230 void doEnumerateSymbolLib(
const wxString& aLibraryPath,
const std::map<std::string, UTF8>* aProperties,
231 std::function<
void(
const wxString&,
LIB_SYMBOL*)> aInserter );
236 void ensureLoadedLibrary(
const wxString& aLibraryPath,
const std::map<std::string, UTF8>* aProperties );
240 static bool isASCIIFile(
const wxString& aFileName );
279 std::map<wxString, CASE_INSENSITIVE_MAP<LIB_SYMBOL*>>
m_libCache;
282 std::vector<std::pair<wxString, int>>
m_fonts;
std::map< wxString, ValueType, DETAIL::CASE_INSENSITIVE_COMPARER > CASE_INSENSITIVE_MAP
Define a library symbol object.
Holds all the data relating to one schematic.
void ParseFileHeader(const ALTIUM_COMPOUND_FILE &aAltiumSchFile)
void ParseHyperlink(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
std::vector< wxFileName > m_projectDocuments
void ParseSignalHarness(const std::map< wxString, wxString > &aProperties)
std::map< int, ASCH_TEMPLATE > m_altiumTemplates
std::map< int, ASCH_SYMBOL > m_altiumComponents
void ParsePort(const ASCH_PORT &aElem)
void ParseNote(const std::map< wxString, wxString > &aProperties)
std::map< std::vector< wxString >, SCH_SCREEN * > m_loadedScreens
void ParseAltiumSch(const wxString &aFileName)
std::vector< ASCH_PORT > m_altiumPortsCurrentSheet
void ParseSheetName(const std::map< wxString, wxString > &aProperties)
void ParseBusEntry(const std::map< wxString, wxString > &aProperties)
wxFileName ResolveSheetFileName(const wxString &aParentPath, const wxString &aSheetFileName) const
const IO_BASE::IO_FILE_DESC GetLibraryDesc() const override
Get the descriptor for the library container that this IO plugin operates on.
SCH_SHEET * getCurrentSheet()
void ParseStorage(const ALTIUM_COMPOUND_FILE &aAltiumSchFile)
std::map< wxString, LIB_SYMBOL * > m_powerSymbols
void ParseBus(const std::map< wxString, wxString > &aProperties)
void ParseFileName(const std::map< wxString, wxString > &aProperties)
static bool isASCIIFile(const wxString &aFileName)
LIB_SYMBOL * LoadSymbol(const wxString &aLibraryPath, const wxString &aAliasName, const std::map< std::string, UTF8 > *aProperties=nullptr) override
Load a LIB_SYMBOL object having aPartName from the aLibraryPath containing a library format that this...
std::map< int, SCH_SHEET * > m_sheets
const IO_BASE::IO_FILE_DESC GetSchematicFileDesc() const override
Returns schematic file description for the SCH_IO.
void ParseLibHeader(const ALTIUM_COMPOUND_FILE &aAltiumSchFile, std::vector< int > &aFontSizes)
void ParseHarnessPort(const ASCH_PORT &aElem)
void ParseRoundRectangle(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
void pruneCyclicSheets(const std::vector< SCH_SHEET * > &aCyclicSheets, SCH_SCREEN *aScreen)
Remove sheet symbols referencing a parse-stack file (an unrepresentable cycle), converting their pins...
int GetModifyHash() const override
Return the modification hash from the library cache.
void ParseLibDesignator(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym, std::vector< int > &aFontSize=nullint)
std::map< wxString, CASE_INSENSITIVE_MAP< LIB_SYMBOL * > > m_libCache
std::map< int, int > m_altiumImplementationList
void attachEmptySheetScreen(SCH_SHEET *aSheet, const wxString &aMissingFile)
Give a sheet whose source file is missing an empty screen with a file of its own; aMissingFile is emp...
std::map< wxString, SCH_SCREEN * > m_missingScreens
void ParseTextFrame(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym, std::vector< int > &aFontSize=nullint)
void ParsePolygon(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
void fixupSymbolPinNameNumbers(SYMBOL *aSymbol)
void EnsureSheetSymbolNames()
void ParseRecord(int index, std::map< wxString, wxString > &properties, const wxString &aSectionName)
std::vector< ASCH_PORT > m_altiumHarnessPortsCurrentSheet
void ParseDesignator(const std::map< wxString, wxString > &aProperties)
int m_harnessOwnerIndexOffset
void ParsePortHelper(const ASCH_PORT &aElem)
std::set< wxString > m_subsheetFiles
static bool checkFileHeader(const wxString &aFileName)
long long getLibraryTimestamp(const wxString &aLibraryPath) const
void ParseSheetEntry(const std::map< wxString, wxString > &aProperties)
static bool isBinaryFile(const wxString &aFileName)
void ParseHarnessType(const std::map< wxString, wxString > &aProperties)
void ParseJunction(const std::map< wxString, wxString > &aProperties)
void ParseLibParameter(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym, std::vector< int > &aFontSize=nullint)
std::set< wxString > m_parsedFiles
void ParseASCIISchematic(const wxString &aFileName)
void ParsePolyline(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
std::unique_ptr< ASCH_SHEET > m_altiumSheet
void ParseComponent(int aIndex, const std::map< wxString, wxString > &aProperties)
std::unique_ptr< TITLE_BLOCK > m_currentTitleBlock
SCH_SHEET * LoadSchematicProject(SCHEMATIC *aSchematic, const std::map< std::string, UTF8 > *aProperties)
void ParseImage(const std::map< wxString, wxString > &aProperties)
void ParseArc(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
void ParseNetLabel(const std::map< wxString, wxString > &aProperties)
void ParseNoERC(const std::map< wxString, wxString > &aProperties)
SCH_SHEET * LoadSchematicFile(const wxString &aFileName, SCHEMATIC *aSchematic, SCH_SHEET *aAppendToMe=nullptr, const std::map< std::string, UTF8 > *aProperties=nullptr) override
Load information from some input file format that this SCH_IO implementation knows about,...
std::unordered_map< wxString, SEVERITY > m_errorMessages
std::map< wxString, int > m_parsingFiles
void ParseImplementationList(int aIndex, const std::map< wxString, wxString > &aProperties)
std::vector< LIB_SYMBOL * > ParseLibComponent(const std::map< wxString, wxString > &aProperties)
void ParseSheet(const std::map< wxString, wxString > &aProperties)
void ParseParameter(const std::map< wxString, wxString > &aProperties)
bool ShouldPutItemOnSheet(int aOwnerindex)
void NormalizeRepeatedSheetInstances()
void AddLibTextBox(const ASCH_TEXT_FRAME *aElem, std::vector< LIB_SYMBOL * > &aSymbol=nullsym, std::vector< int > &aFontSize=nullint)
bool CanReadSchematicFile(const wxString &aFileName) const override
Checks if this SCH_IO can read the specified schematic file.
void ParsePieChart(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
void ParseEllipticalArc(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
std::map< int, HARNESS > m_altiumHarnesses
void ParseEllipse(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
std::set< wxString > m_sheetSpecialStrings
void ParseWire(const std::map< wxString, wxString > &aProperties)
bool IsLibraryWritable(const wxString &aLibraryPath) override
Return true if the library at aLibraryPath is writable.
void ParseHarnessEntry(const std::map< wxString, wxString > &aProperties)
void EnumerateSymbolLib(wxArrayString &aSymbolNameList, const wxString &aLibraryPath, const std::map< std::string, UTF8 > *aProperties=nullptr) override
Populate a list of LIB_SYMBOL alias names contained within the library aLibraryPath.
void ParseImplementation(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
void ParseTemplate(int aIndex, const std::map< wxString, wxString > &aProperties)
void ParseAdditional(const ALTIUM_COMPOUND_FILE &aAltiumSchFile)
std::vector< ASCH_ADDITIONAL_FILE > m_altiumAdditional
friend struct PARSE_FILE_GUARD
std::set< wxString > m_sheetFiles
std::set< wxString > m_unsetSheetParams
void AddTextBox(const ASCH_TEXT_FRAME *aElem)
void ParsePowerPort(const std::map< wxString, wxString > &aProperties)
bool CanReadLibrary(const wxString &aFileName) const override
Checks if this IO object can read the specified library file/directory.
std::map< const SCH_SYMBOL *, wxString > m_altiumSymbolToUid
const ASCH_STORAGE_FILE * GetFileFromStorage(const wxString &aFilename) const
void ParseRectangle(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
void doEnumerateSymbolLib(const wxString &aLibraryPath, const std::map< std::string, UTF8 > *aProperties, std::function< void(const wxString &, LIB_SYMBOL *)> aInserter)
void NameNetsAfterNetLabels()
Name power nets after their net labels, as Altium does unless Power Port Names Take Priority is set.
std::vector< ASCH_STORAGE_FILE > m_altiumStorage
SCH_SHEET_PATH m_sheetPath
void PostProcessBusLabels()
wxString claimSheetFile(const wxString &aStem)
Claim a file in the project folder for a sheet screen that neither the root nor another sheet holds,...
void ParseLabel(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym, std::vector< int > &aFontSize=nullint)
CASE_INSENSITIVE_MAP< LIB_SYMBOL * > ParseLibFile(const ALTIUM_COMPOUND_FILE &aAltiumSchFile)
void ParseBezier(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
void ParseLine(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
void ParseCircle(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
std::map< int, SCH_SYMBOL * > m_symbols
void ParseSheetSymbol(int aIndex, const std::map< wxString, wxString > &aProperties)
std::vector< std::pair< wxString, int > > m_fonts
std::map< wxString, long long > m_timestamps
wxFileName getLibFileName()
SCH_SCREEN * getCurrentScreen()
void ParsePin(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
std::map< int, LIB_SYMBOL * > m_libSymbols
void ParseHarnessConnector(int aIndex, const std::map< wxString, wxString > &aProperties)
void ensureLoadedLibrary(const wxString &aLibraryPath, const std::map< std::string, UTF8 > *aProperties)
SCH_IO(const wxString &aName)
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
A base class for LIB_SYMBOL and SCH_SYMBOL.
Hold the information shown in the lower right corner of a plot, printout, or editing view.
static std::vector< int > nullint
static std::vector< LIB_SYMBOL * > nullsym
SCH_IO_ALTIUM is a SCH_IO derivation for loading Altium .SchDoc schematic files.
Definition of the SCH_SHEET_PATH and SCH_SHEET_LIST classes for Eeschema.
int m_primaryConnectionPosition
ASCH_SHEET_ENTRY_SIDE m_harnessConnectorSide
std::vector< HARNESS_PORT > m_ports
Container that describes file type info.
VECTOR2< int32_t > VECTOR2I