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, const PROPERTIES* aProperties );
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;
185  void init( SCHEMATIC* aSchematic, const PROPERTIES* aProperties = nullptr );
186 };
188 #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)
Instances are attached to a symbol or sheet and provide a place for the component's value,...
Definition: sch_field.h:50
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,...
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.
Definition: schematic.h:59
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)
An interface used to output 8 bit text in a convenient way.
Definition: richio.h:306
void saveNoConnect(SCH_NO_CONNECT *aNoConnect)
A name/value tuple with unique names and optional values.
Definition: properties.h:33
static LIB_PART * ParsePart(LINE_READER &aReader, int majorVersion=0, int minorVersion=0)
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 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
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 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:151
bool isBuffering(const PROPERTIES *aProperties)
void loadHierarchy(SCH_SHEET *aSheet)
void cacheLib(const wxString &aLibraryFileName, const PROPERTIES *aProperties)
Define a library symbol object.
Definition: lib_symbol.h:93
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 void FormatPart(LIB_PART *aPart, OUTPUTFORMATTER &aFormatter)
Object to handle a bitmap image that can be inserted in a schematic.
Definition: sch_bitmap.h:40
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:54
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_symbol.h:78
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.
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.
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.