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-2019 KiCad Developers, see change_log.txt for contributors.
9  *
10  * @author Wayne Stambaugh <>
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;
43 class SCH_FIELD;
44 class PROPERTIES;
45 class SELECTION;
47 class LIB_PART;
48 class PART_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  }
90  static const char* PropBuffering;
96  static const char* PropNoDocFile;
98  int GetModifyHash() const override;
100  SCH_SHEET* Load( const wxString& aFileName, SCHEMATIC* aSchematic,
101  SCH_SHEET* aAppendToMe = nullptr,
102  const PROPERTIES* aProperties = nullptr ) override;
104  void LoadContent( LINE_READER& aReader, SCH_SCREEN* aScreen,
105  int version = EESCHEMA_VERSION );
107  void Save( const wxString& aFileName, SCH_SHEET* aScreen, SCHEMATIC* aSchematic,
108  const PROPERTIES* aProperties = nullptr ) override;
110  void Format( SCH_SHEET* aSheet );
112  void Format( SELECTION* aSelection, OUTPUTFORMATTER* aFormatter );
114  void EnumerateSymbolLib( wxArrayString& aSymbolNameList,
115  const wxString& aLibraryPath,
116  const PROPERTIES* aProperties = nullptr ) override;
117  void EnumerateSymbolLib( std::vector<LIB_PART*>& aSymbolList,
118  const wxString& aLibraryPath,
119  const PROPERTIES* aProperties = nullptr ) override;
120  LIB_PART* LoadSymbol( const wxString& aLibraryPath, const wxString& aAliasName,
121  const PROPERTIES* aProperties = nullptr ) override;
122  void SaveSymbol( const wxString& aLibraryPath, const LIB_PART* aSymbol,
123  const PROPERTIES* aProperties = nullptr ) override;
124  void DeleteSymbol( const wxString& aLibraryPath, const wxString& aSymbolName,
125  const PROPERTIES* aProperties = nullptr ) override;
126  void CreateSymbolLib( const wxString& aLibraryPath,
127  const PROPERTIES* aProperties = nullptr ) override;
128  bool DeleteSymbolLib( const wxString& aLibraryPath,
129  const PROPERTIES* aProperties = nullptr ) override;
130  void SaveLibrary( const wxString& aLibraryPath,
131  const PROPERTIES* aProperties = nullptr ) override;
133  bool CheckHeader( const wxString& aFileName ) override;
134  bool IsSymbolLibWritable( const wxString& aLibraryPath ) override;
136  const wxString& GetError() const override { return m_error; }
138  static LIB_PART* ParsePart( LINE_READER& aReader, int majorVersion = 0, int minorVersion = 0 );
139  static void FormatPart( LIB_PART* aPart, OUTPUTFORMATTER& aFormatter );
141 private:
142  void loadHierarchy( SCH_SHEET* aSheet );
143  void loadHeader( LINE_READER& aReader, SCH_SCREEN* aScreen );
144  void loadPageSettings( LINE_READER& aReader, SCH_SCREEN* aScreen );
145  void loadFile( const wxString& aFileName, SCH_SCREEN* aScreen );
146  SCH_SHEET* loadSheet( LINE_READER& aReader );
147  SCH_BITMAP* loadBitmap( LINE_READER& aReader );
150  SCH_LINE* loadWire( LINE_READER& aReader );
152  SCH_TEXT* loadText( LINE_READER& aReader );
154  std::shared_ptr<BUS_ALIAS> loadBusAlias( LINE_READER& aReader, SCH_SCREEN* aScreen );
156  void saveComponent( SCH_COMPONENT* aComponent );
157  void saveField( SCH_FIELD* aField );
158  void saveBitmap( SCH_BITMAP* aBitmap );
159  void saveSheet( SCH_SHEET* aSheet );
160  void saveJunction( SCH_JUNCTION* aJunction );
161  void saveNoConnect( SCH_NO_CONNECT* aNoConnect );
162  void saveBusEntry( SCH_BUS_ENTRY_BASE* aBusEntry );
163  void saveLine( SCH_LINE* aLine );
164  void saveText( SCH_TEXT* aText );
165  void saveBusAlias( std::shared_ptr<BUS_ALIAS> aAlias );
167  void cacheLib( const wxString& aLibraryFileName );
168  bool writeDocFile( const PROPERTIES* aProperties );
169  bool isBuffering( const PROPERTIES* aProperties );
171 protected:
172  int m_version;
175  wxString m_error;
177  wxString m_path;
178  std::stack<wxString> m_currentPath;
186  void init( SCHEMATIC* aSchematic, const PROPERTIES* aProperties = nullptr );
187 };
189 #endif // _SCH_LEGACY_PLUGIN_H_
SCHEMATIC * m_schematic
Passed to Load(), the schematic object being loaded.
SCH_SHEET * loadSheet(LINE_READER &aReader)
void LoadContent(LINE_READER &aReader, SCH_SCREEN *aScreen, int version=EESCHEMA_VERSION)
SCH_JUNCTION * loadJunction(LINE_READER &aReader)
SCH_FIELD instances are attached to a component and provide a place for the component's value,...
Definition: sch_field.h:52
LINE_READER is an abstract class from which implementation specific LINE_READERs may be derived to re...
Definition: richio.h:82
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,...
void SaveSymbol(const wxString &aLibraryPath, const LIB_PART *aSymbol, const PROPERTIES *aProperties=nullptr) override
Write aSymbol to an existing library located at aLibraryPath.
wxString m_error
For throwing exceptions or errors on partial schematic loads.
Holds all the data relating to one schematic A schematic may consist of one or more sheets (and one r...
Definition: schematic.h:42
void saveLine(SCH_LINE *aLine)
SCH_COMPONENT * loadComponent(LINE_READER &aReader)
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)
OUTPUTFORMATTER is an important interface (abstract class) used to output 8 bit text in a convenient ...
Definition: richio.h:328
void saveNoConnect(SCH_NO_CONNECT *aNoConnect)
PROPERTIES is a name/value tuple with unique names and optional values.
Definition: properties.h:34
static LIB_PART * ParsePart(LINE_READER &aReader, int majorVersion=0, int minorVersion=0)
void saveSheet(SCH_SHEET *aSheet)
const wxString GetName() const override
Returns 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 part library portion of the SCH_PLUGIN API, and only for the SCH_LEGACY_PLU...
void saveField(SCH_FIELD *aField)
Base class for a bus or wire entry.
Definition: sch_bus_entry.h:42
const wxString GetFileExtension() const override
Returns 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 DeleteSymbol(const wxString &aLibraryPath, const wxString &aSymbolName, const PROPERTIES *aProperties=nullptr) override
Delete the entire LIB_PART associated with aAliasName from the library aLibraryPath.
wxString m_path
Root project path for loading child sheets.
Definition: general.h:35
LIB_PART * LoadSymbol(const wxString &aLibraryPath, const wxString &aAliasName, const PROPERTIES *aProperties=nullptr) override
Load a LIB_PART object having aPartName from the aLibraryPath containing a library format that this S...
Base class that schematic file and library loading and saving plugins should derive from.
Definition: sch_io_mgr.h:153
bool isBuffering(const PROPERTIES *aProperties)
void loadHierarchy(SCH_SHEET *aSheet)
Define a library symbol object.
KIWAY is a minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the s...
Definition: kiway.h:273
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 void FormatPart(LIB_PART *aPart, OUTPUTFORMATTER &aFormatter)
Object to handle a bitmap image that can be inserted in a schematic.
Definition: sch_bitmap.h:42
void saveComponent(SCH_COMPONENT *aComponent)
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:218
void Format(SCH_SHEET *aSheet)
SCH_BITMAP * loadBitmap(LINE_READER &aReader)
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 output formatter for saving SCH_SCREEN objects.
void CreateSymbolLib(const wxString &aLibraryPath, const PROPERTIES *aProperties=nullptr) override
Create a new empty symbol library at aLibraryPath.
const wxString GetLibraryFileExtension() const override
Return the library file extension for the SCH_PLUGIN object.
Schematic symbol object.
Definition: sch_component.h:80
static const char * PropBuffering
The property used internally by the plugin to enable cache buffering which prevents the library file ...
void cacheLib(const wxString &aLibraryFileName)
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.
Object used to load, save, search, and otherwise manipulate symbol library files.
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_PART alias names contained within the library aLibraryPath.
const PROPERTIES * m_props
Passed via Save() or Load(), no ownership, may be nullptr.
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...
std::stack< wxString > m_currentPath
Stack to maintain nested sheet paths.