KiCad PCB EDA Suite
sch_plugin.cpp
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 2016 CERN
5  * Copyright (C) 2016-2017 KiCad Developers, see AUTHORS.txt for contributors.
6  *
7  * @author Wayne Stambaugh <stambaughw@gmail.com>
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License
11  * as published by the Free Software Foundation; either version 2
12  * of the License, or (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License along
20  * with this program. If not, see <http://www.gnu.org/licenses/>.
21  */
22 
23 #include <properties.h>
24 
25 #include <sch_io_mgr.h>
26 
27 #define FMT_UNIMPLEMENTED _( "Plugin '%s' does not implement the '%s' function." )
28 
36 static void not_implemented( SCH_PLUGIN* aPlugin, const char* aCaller )
37 {
39  aPlugin->GetName().GetData(),
40  wxString::FromUTF8( aCaller ).GetData() ) );
41 }
42 
43 
44 static void not_implemented( const SCH_PLUGIN* aPlugin, const char* aCaller )
45 {
47  aPlugin->GetName().GetData(),
48  wxString::FromUTF8( aCaller ).GetData() ) );
49 }
50 
51 
52 void SCH_PLUGIN::SaveLibrary( const wxString& aFileName, const PROPERTIES* aProperties )
53 {
54  not_implemented( this, __FUNCTION__ );
55 }
56 
57 
58 SCH_SHEET* SCH_PLUGIN::Load( const wxString& aFileName, KIWAY* aKiway, SCH_SHEET* aAppendToMe,
59  const PROPERTIES* aProperties )
60 {
61  not_implemented( this, __FUNCTION__ );
62  return NULL;
63 }
64 
65 
66 void SCH_PLUGIN::Save( const wxString& aFileName, SCH_SCREEN* aSchematic, KIWAY* aKiway,
67  const PROPERTIES* aProperties )
68 {
69  // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
70  not_implemented( this, __FUNCTION__ );
71 }
72 
73 
74 size_t SCH_PLUGIN::GetSymbolLibCount( const wxString& aLibraryPath,
75  const PROPERTIES* aProperties )
76 {
77  // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
78  not_implemented( this, __FUNCTION__ );
79  return 0;
80 }
81 
82 
83 void SCH_PLUGIN::EnumerateSymbolLib( wxArrayString& aAliasNameList,
84  const wxString& aLibraryPath,
85  const PROPERTIES* aProperties )
86 {
87  // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
88  not_implemented( this, __FUNCTION__ );
89 }
90 
91 
92 void SCH_PLUGIN::EnumerateSymbolLib( std::vector<LIB_ALIAS*>& aAliasList,
93  const wxString& aLibraryPath,
94  const PROPERTIES* aProperties )
95 {
96  // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
97  not_implemented( this, __FUNCTION__ );
98 }
99 
100 
101 LIB_ALIAS* SCH_PLUGIN::LoadSymbol( const wxString& aLibraryPath, const wxString& aSymbolName,
102  const PROPERTIES* aProperties )
103 {
104  // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
105  not_implemented( this, __FUNCTION__ );
106  return NULL;
107 }
108 
109 
110 void SCH_PLUGIN::SaveSymbol( const wxString& aLibraryPath, const LIB_PART* aSymbol,
111  const PROPERTIES* aProperties )
112 {
113  // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
114  not_implemented( this, __FUNCTION__ );
115 }
116 
117 
118 void SCH_PLUGIN::DeleteAlias( const wxString& aLibraryPath, const wxString& aAliasName,
119  const PROPERTIES* aProperties )
120 {
121  // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
122  not_implemented( this, __FUNCTION__ );
123 }
124 
125 
126 void SCH_PLUGIN::DeleteSymbol( const wxString& aLibraryPath, const wxString& aAliasName,
127  const PROPERTIES* aProperties )
128 {
129  // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
130  not_implemented( this, __FUNCTION__ );
131 }
132 
133 
134 void SCH_PLUGIN::CreateSymbolLib( const wxString& aLibraryPath, const PROPERTIES* aProperties )
135 {
136  // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
137  not_implemented( this, __FUNCTION__ );
138 }
139 
140 
141 bool SCH_PLUGIN::DeleteSymbolLib( const wxString& aLibraryPath, const PROPERTIES* aProperties )
142 {
143  // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
144  not_implemented( this, __FUNCTION__ );
145  return false;
146 }
147 
148 
149 bool SCH_PLUGIN::IsSymbolLibWritable( const wxString& aLibraryPath )
150 {
151  // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
152  not_implemented( this, __FUNCTION__ );
153  return false;
154 }
155 
156 
157 void SCH_PLUGIN::SymbolLibOptions( PROPERTIES* aListToAppendTo ) const
158 {
159  // disable all these in another couple of months, after everyone has seen them:
160 #if 1
161  (*aListToAppendTo)["debug_level"] = UTF8( _(
162  "Enable <b>debug</b> logging for Symbol*() functions in this SCH_PLUGIN."
163  ) );
164 
165  (*aListToAppendTo)["read_filter_regex"] = UTF8( _(
166  "Regular expression <b>symbol name</b> filter."
167  ) );
168 
169  (*aListToAppendTo)["enable_transaction_logging"] = UTF8( _(
170  "Enable transaction logging. The mere presence of this option turns on the "
171  "logging, no need to set a Value."
172  ) );
173 
174  (*aListToAppendTo)["username"] = UTF8( _(
175  "User name for <b>login</b> to some special library server."
176  ));
177 
178  (*aListToAppendTo)["password"] = UTF8( _(
179  "Password for <b>login</b> to some special library server."
180  ) );
181 #endif
182 
183 #if 1
184  // Suitable for a C++ to python SCH_PLUGIN::Footprint*() adapter, move it to the adapter
185  // if and when implemented.
186  (*aListToAppendTo)["python_symbol_plugin"] = UTF8( _(
187  "Enter the python symbol which implements the SCH_PLUGIN::Symbol*() functions."
188  ) );
189 #endif
190 }
Class UTF8 is an 8 bit std::string that is assuredly encoded in UTF8, and supplies special conversion...
Definition: utf8.h:53
virtual void CreateSymbolLib(const wxString &aLibraryPath, const PROPERTIES *aProperties=NULL)
Create a new empty symbol library at aLibraryPath.
Definition: sch_plugin.cpp:134
Part library alias object definition.
virtual LIB_ALIAS * LoadSymbol(const wxString &aLibraryPath, const wxString &aAliasName, const PROPERTIES *aProperties=NULL)
Load a LIB_ALIAS object having aAliasName from the aLibraryPath containing a library format that this...
Definition: sch_plugin.cpp:101
virtual bool DeleteSymbolLib(const wxString &aLibraryPath, const PROPERTIES *aProperties=NULL)
Delete an existing symbol library and returns true if successful, or if library does not exist return...
Definition: sch_plugin.cpp:141
virtual void DeleteSymbol(const wxString &aLibraryPath, const wxString &aAliasName, const PROPERTIES *aProperties=NULL)
Delete the entire LIB_PART associated with aAliasName from the library aLibraryPath.
Definition: sch_plugin.cpp:126
virtual SCH_SHEET * Load(const wxString &aFileName, KIWAY *aKiway, SCH_SHEET *aAppendToMe=NULL, const PROPERTIES *aProperties=NULL)
Load information from some input file format that this SCH_PLUGIN implementation knows about...
Definition: sch_plugin.cpp:58
virtual void EnumerateSymbolLib(wxArrayString &aAliasNameList, const wxString &aLibraryPath, const PROPERTIES *aProperties=NULL)
Populate a list of LIB_PART alias names contained within the library aLibraryPath.
Definition: sch_plugin.cpp:83
virtual const wxString GetName() const =0
Returns a brief hard coded name for this SCH_PLUGIN.
Class PROPERTIES is a name/value tuple with unique names and optional values.
Definition: properties.h:34
virtual void SymbolLibOptions(PROPERTIES *aListToAppendTo) const
Append supported SCH_PLUGIN options to aListToAppenTo along with internationalized descriptions...
Definition: sch_plugin.cpp:157
#define FMT_UNIMPLEMENTED
Definition: sch_plugin.cpp:27
virtual size_t GetSymbolLibCount(const wxString &aLibraryPath, const PROPERTIES *aProperties=NULL)
Definition: sch_plugin.cpp:74
Base class that schematic file and library loading and saving plugins should derive from...
Definition: sch_io_mgr.h:184
static void not_implemented(SCH_PLUGIN *aPlugin, const char *aCaller)
Function not_implemented throws an IO_ERROR and complains of an API function not being implemented...
Definition: sch_plugin.cpp:36
Class LIB_PART defines a library part object.
Class KIWAY is a minimalistic software bus for communications between various DLLs/DSOs (DSOs) within...
Definition: kiway.h:257
#define THROW_IO_ERROR(x)
Definition: utf8.cpp:60
Class SCH_SHEET is the sheet symbol placed in a schematic, and is the entry point for a sub schematic...
Definition: sch_sheet.h:216
virtual void Save(const wxString &aFileName, SCH_SCREEN *aSchematic, KIWAY *aKiway, const PROPERTIES *aProperties=NULL)
Write aSchematic to a storage file in a format that this SCH_PLUGIN implementation knows about...
Definition: sch_plugin.cpp:66
virtual void SaveLibrary(const wxString &aFileName, const PROPERTIES *aProperties=NULL)
Definition: sch_plugin.cpp:52
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
virtual bool IsSymbolLibWritable(const wxString &aLibraryPath)
Return true if the library at aLibraryPath is writable.
Definition: sch_plugin.cpp:149
virtual void DeleteAlias(const wxString &aLibraryPath, const wxString &aAliasName, const PROPERTIES *aProperties=NULL)
Delete aAliasName from the library at aLibraryPath.
Definition: sch_plugin.cpp:118
virtual void SaveSymbol(const wxString &aLibraryPath, const LIB_PART *aSymbol, const PROPERTIES *aProperties=NULL)
Write aSymbol to an existing library located at aLibraryPath.
Definition: sch_plugin.cpp:110