KiCad PCB EDA Suite
Go to the documentation of this file.
4 /*
5  * This program source code file is part of KiCad, a free EDA CAD application.
6  *
7  * Copyright (C) 2016 CERN
8  * Copyright (C) 2016-2021 KiCad Developers, see change_log.txt for contributors.
9  *
10  * @author Wayne Stambaugh <[email protected]>
11  *
12  * This program is free software; you can redistribute it and/or
13  * modify it under the terms of the GNU General Public License
14  * as published by the Free Software Foundation; either version 2
15  * of the License, or (at your option) any later version.
16  *
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * GNU General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public License along
23  * with this program. If not, see <>.
24  */
26 #include <memory>
27 #include <sch_io_mgr.h>
28 #include <stack>
29 #include <general.h> // for EESCHEMA_VERSION definition
32 class KIWAY;
33 class LINE_READER;
34 class SCH_SCREEN;
35 class SCH_SHEET;
36 class SCH_BITMAP;
37 class SCH_JUNCTION;
38 class SCH_NO_CONNECT;
39 class SCH_LINE;
41 class SCH_TEXT;
42 class SCH_SYMBOL;
43 class SCH_FIELD;
44 class PROPERTIES;
45 class SELECTION;
47 class LIB_SYMBOL;
48 class SYMBOL_LIB;
49 class BUS_ALIAS;
64 {
65 public:
68  virtual ~SCH_LEGACY_PLUGIN();
70  const wxString GetName() const override
71  {
72  return wxT( "Eeschema-Legacy" );
73  }
75  const wxString GetFileExtension() const override
76  {
77  return wxT( "sch" );
78  }
80  const wxString GetLibraryFileExtension() const override
81  {
82  return wxT( "lib" );
83  }
85  void SetProgressReporter( PROGRESS_REPORTER* aReporter ) override
86  {
87  m_progressReporter = aReporter;
88  }
95  static const char* PropBuffering;
101  static const char* PropNoDocFile;
103  int GetModifyHash() const override;
105  SCH_SHEET* Load( const wxString& aFileName, SCHEMATIC* aSchematic,
106  SCH_SHEET* aAppendToMe = nullptr,
107  const PROPERTIES* aProperties = nullptr ) override;
109  void LoadContent( LINE_READER& aReader, SCH_SCREEN* aScreen,
110  int version = EESCHEMA_VERSION );
112  void Save( const wxString& aFileName, SCH_SHEET* aScreen, SCHEMATIC* aSchematic,
113  const PROPERTIES* aProperties = nullptr ) override;
115  void Format( SCH_SHEET* aSheet );
117  void Format( SELECTION* aSelection, OUTPUTFORMATTER* aFormatter );
119  void EnumerateSymbolLib( wxArrayString& aSymbolNameList,
120  const wxString& aLibraryPath,
121  const PROPERTIES* aProperties = nullptr ) override;
122  void EnumerateSymbolLib( std::vector<LIB_SYMBOL*>& aSymbolList,
123  const wxString& aLibraryPath,
124  const PROPERTIES* aProperties = nullptr ) override;
125  LIB_SYMBOL* LoadSymbol( const wxString& aLibraryPath, const wxString& aAliasName,
126  const PROPERTIES* aProperties = nullptr ) override;
127  void SaveSymbol( const wxString& aLibraryPath, const LIB_SYMBOL* aSymbol,
128  const PROPERTIES* aProperties = nullptr ) override;
129  void DeleteSymbol( const wxString& aLibraryPath, const wxString& aSymbolName,
130  const PROPERTIES* aProperties = nullptr ) override;
131  void CreateSymbolLib( const wxString& aLibraryPath,
132  const PROPERTIES* aProperties = nullptr ) override;
133  bool DeleteSymbolLib( const wxString& aLibraryPath,
134  const PROPERTIES* aProperties = nullptr ) override;
135  void SaveLibrary( const wxString& aLibraryPath,
136  const PROPERTIES* aProperties = nullptr ) override;
138  bool CheckHeader( const wxString& aFileName ) override;
139  bool IsSymbolLibWritable( const wxString& aLibraryPath ) override;
141  const wxString& GetError() const override { return m_error; }
143  static LIB_SYMBOL* ParsePart( LINE_READER& aReader, int majorVersion = 0,
144  int minorVersion = 0 );
145  static void FormatPart( LIB_SYMBOL* aSymbol, OUTPUTFORMATTER& aFormatter );
147 private:
148  void checkpoint();
149  void loadHierarchy( SCH_SHEET* aSheet );
150  void loadHeader( LINE_READER& aReader, SCH_SCREEN* aScreen );
151  void loadPageSettings( LINE_READER& aReader, SCH_SCREEN* aScreen );
152  void loadFile( const wxString& aFileName, SCH_SCREEN* aScreen );
153  SCH_SHEET* loadSheet( LINE_READER& aReader );
154  SCH_BITMAP* loadBitmap( LINE_READER& aReader );
157  SCH_LINE* loadWire( LINE_READER& aReader );
159  SCH_TEXT* loadText( LINE_READER& aReader );
160  SCH_SYMBOL* loadSymbol( LINE_READER& aReader );
161  std::shared_ptr<BUS_ALIAS> loadBusAlias( LINE_READER& aReader, SCH_SCREEN* aScreen );
163  void saveSymbol( SCH_SYMBOL* aSymbol );
164  void saveField( SCH_FIELD* aField );
165  void saveBitmap( SCH_BITMAP* aBitmap );
166  void saveSheet( SCH_SHEET* aSheet );
167  void saveJunction( SCH_JUNCTION* aJunction );
168  void saveNoConnect( SCH_NO_CONNECT* aNoConnect );
169  void saveBusEntry( SCH_BUS_ENTRY_BASE* aBusEntry );
170  void saveLine( SCH_LINE* aLine );
171  void saveText( SCH_TEXT* aText );
172  void saveBusAlias( std::shared_ptr<BUS_ALIAS> aAlias );
174  void cacheLib( const wxString& aLibraryFileName, const PROPERTIES* aProperties );
175  bool writeDocFile( const PROPERTIES* aProperties );
176  bool isBuffering( const PROPERTIES* aProperties );
178 protected:
179  int m_version;
181  wxString m_error;
186  unsigned m_lineCount;
188  wxString m_path;
189  std::stack<wxString> m_currentPath;
196  void init( SCHEMATIC* aSchematic, const PROPERTIES* aProperties = nullptr );
197 };
199 #endif // _SCH_LEGACY_PLUGIN_H_
SCH_SHEET * loadSheet(LINE_READER &aReader)
void LoadContent(LINE_READER &aReader, SCH_SCREEN *aScreen, int version=EESCHEMA_VERSION)
SCH_JUNCTION * loadJunction(LINE_READER &aReader)
LIB_SYMBOL * LoadSymbol(const wxString &aLibraryPath, const wxString &aAliasName, const PROPERTIES *aProperties=nullptr) override
Load a LIB_SYMBOL object having aPartName from the aLibraryPath containing a library format that this...
Instances are attached to a symbol or sheet and provide a place for the symbol's value,...
Definition: sch_field.h:49
An abstract class from which implementation specific LINE_READERs may be derived to read single lines...
Definition: richio.h:80
SCH_SHEET * Load(const wxString &aFileName, SCHEMATIC *aSchematic, SCH_SHEET *aAppendToMe=nullptr, const PROPERTIES *aProperties=nullptr) override
Load information from some input file format that this SCH_PLUGIN implementation knows about,...
wxString m_error
For throwing exceptions or errors on partial schematic loads.
Holds all the data relating to one schematic.
Definition: schematic.h:59
Object used to load, save, search, and otherwise manipulate symbol library files.
void saveLine(SCH_LINE *aLine)
A progress reporter interface for use in multi-threaded environments.
void init(SCHEMATIC *aSchematic, const PROPERTIES *aProperties=nullptr)
initialize PLUGIN like a constructor would.
SCH_SHEET * m_rootSheet
The root sheet of the schematic being loaded.
void saveText(SCH_TEXT *aText)
An interface used to output 8 bit text in a convenient way.
Definition: richio.h:309
void saveNoConnect(SCH_NO_CONNECT *aNoConnect)
A name/value tuple with unique names and optional values.
Definition: properties.h:33
Define a library symbol object.
Definition: lib_symbol.h:96
void saveSheet(SCH_SHEET *aSheet)
const wxString GetName() const override
Return a brief hard coded name for this SCH_PLUGIN.
const wxString & GetError() const override
Return an error string to the caller.
A cache assistant for the symbol library portion of the SCH_PLUGIN API, and only for the SCH_LEGACY_P...
void saveField(SCH_FIELD *aField)
static void FormatPart(LIB_SYMBOL *aSymbol, OUTPUTFORMATTER &aFormatter)
Base class for a bus or wire entry.
Definition: sch_bus_entry.h:42
const wxString GetFileExtension() const override
Return the file extension for the SCH_PLUGIN.
void saveJunction(SCH_JUNCTION *aJunction)
int m_version
Version of file being loaded.
void loadFile(const wxString &aFileName, SCH_SCREEN *aScreen)
void saveSymbol(SCH_SYMBOL *aSymbol)
void DeleteSymbol(const wxString &aLibraryPath, const wxString &aSymbolName, const PROPERTIES *aProperties=nullptr) override
Delete the entire LIB_SYMBOL associated with aAliasName from the library aLibraryPath.
wxString m_path
Root project path for loading child sheets.
Definition: general.h:35
Base class that schematic file and library loading and saving plugins should derive from.
Definition: sch_io_mgr.h:152
bool isBuffering(const PROPERTIES *aProperties)
void loadHierarchy(SCH_SHEET *aSheet)
void cacheLib(const wxString &aLibraryFileName, const PROPERTIES *aProperties)
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
Definition: kiway.h:260
void loadPageSettings(LINE_READER &aReader, SCH_SCREEN *aScreen)
void Save(const wxString &aFileName, SCH_SHEET *aScreen, SCHEMATIC *aSchematic, const PROPERTIES *aProperties=nullptr) override
Write aSchematic to a storage file in a format that this SCH_PLUGIN implementation knows about,...
void saveBitmap(SCH_BITMAP *aBitmap)
static const char * PropNoDocFile
The property used internally by the plugin to disable writing the library documentation (....
static LIB_SYMBOL * ParsePart(LINE_READER &aReader, int majorVersion=0, int minorVersion=0)
Object to handle a bitmap image that can be inserted in a schematic.
Definition: sch_bitmap.h:40
void SaveLibrary(const wxString &aLibraryPath, const PROPERTIES *aProperties=nullptr) override
A SCH_PLUGIN derivation for loading schematic files created before the new s-expression file format.
bool CheckHeader(const wxString &aFileName) override
Return true if the first line in aFileName begins with the expected header.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
Definition: sch_sheet.h:54
void Format(SCH_SHEET *aSheet)
SCH_BITMAP * loadBitmap(LINE_READER &aReader)
Schematic symbol object.
Definition: sch_symbol.h:78
void saveBusAlias(std::shared_ptr< BUS_ALIAS > aAlias)
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:37
The formatter for saving SCH_SCREEN objects.
LINE_READER * m_lineReader
for progress reporting
PROGRESS_REPORTER * m_progressReporter
optional; may be nullptr
void CreateSymbolLib(const wxString &aLibraryPath, const PROPERTIES *aProperties=nullptr) override
Create a new empty symbol library at aLibraryPath.
unsigned m_lineCount
for progress reporting
const wxString GetLibraryFileExtension() const override
Return the library file extension for the SCH_PLUGIN object.
void SaveSymbol(const wxString &aLibraryPath, const LIB_SYMBOL *aSymbol, const PROPERTIES *aProperties=nullptr) override
Write aSymbol to an existing library located at aLibraryPath.
static const char * PropBuffering
The property used internally by the plugin to enable cache buffering which prevents the library file ...
int GetModifyHash() const override
Return the modification hash from the library cache.
SCH_NO_CONNECT * loadNoConnect(LINE_READER &aReader)
void loadHeader(LINE_READER &aReader, SCH_SCREEN *aScreen)
SCH_LINE * loadWire(LINE_READER &aReader)
SCH_TEXT * loadText(LINE_READER &aReader)
bool IsSymbolLibWritable(const wxString &aLibraryPath) override
Return true if the library at aLibraryPath is writable.
SCH_SYMBOL * loadSymbol(LINE_READER &aReader)
void saveBusEntry(SCH_BUS_ENTRY_BASE *aBusEntry)
bool writeDocFile(const PROPERTIES *aProperties)
void EnumerateSymbolLib(wxArrayString &aSymbolNameList, const wxString &aLibraryPath, const PROPERTIES *aProperties=nullptr) override
Populate a list of LIB_SYMBOL alias names contained within the library aLibraryPath.
std::shared_ptr< BUS_ALIAS > loadBusAlias(LINE_READER &aReader, SCH_SCREEN *aScreen)
bool DeleteSymbolLib(const wxString &aLibraryPath, const PROPERTIES *aProperties=nullptr) override
Delete an existing symbol library and returns true if successful, or if library does not exist return...
void SetProgressReporter(PROGRESS_REPORTER *aReporter) override
Set an optional progress reporter.
std::stack< wxString > m_currentPath
Stack to maintain nested sheet paths.