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-2021 KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * @author Wayne Stambaugh <[email protected]>
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 <string_utf8_map.h>
24
25#include <sch_io_mgr.h>
26#include <wx/translation.h>
27
28#define FMT_UNIMPLEMENTED "Plugin \"%s\" does not implement the \"%s\" function."
29
37static void not_implemented( const SCH_PLUGIN* aPlugin, const char* aCaller )
38{
40 aPlugin->GetName().GetData(),
41 wxString::FromUTF8( aCaller ).GetData() ) );
42}
43
44
45void SCH_PLUGIN::SaveLibrary( const wxString& aFileName, const STRING_UTF8_MAP* aProperties )
46{
47 not_implemented( this, __FUNCTION__ );
48}
49
50
51SCH_SHEET* SCH_PLUGIN::Load( const wxString& aFileName, SCHEMATIC* aSchematic,
52 SCH_SHEET* aAppendToMe, const STRING_UTF8_MAP* aProperties )
53{
54 not_implemented( this, __FUNCTION__ );
55 return nullptr;
56}
57
58
59void SCH_PLUGIN::Save( const wxString& aFileName, SCH_SHEET* aSheet, SCHEMATIC* aSchematic,
60 const STRING_UTF8_MAP* aProperties )
61{
62 // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
63 not_implemented( this, __FUNCTION__ );
64}
65
66
67void SCH_PLUGIN::EnumerateSymbolLib( wxArrayString& aAliasNameList,
68 const wxString& aLibraryPath,
69 const STRING_UTF8_MAP* aProperties )
70{
71 // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
72 not_implemented( this, __FUNCTION__ );
73}
74
75
76void SCH_PLUGIN::EnumerateSymbolLib( std::vector<LIB_SYMBOL*>& aSymbolList,
77 const wxString& aLibraryPath,
78 const STRING_UTF8_MAP* aProperties )
79{
80 // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
81 not_implemented( this, __FUNCTION__ );
82}
83
84
85LIB_SYMBOL* SCH_PLUGIN::LoadSymbol( const wxString& aLibraryPath, const wxString& aSymbolName,
86 const STRING_UTF8_MAP* aProperties )
87{
88 // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
89 not_implemented( this, __FUNCTION__ );
90 return nullptr;
91}
92
93
94void SCH_PLUGIN::SaveSymbol( const wxString& aLibraryPath, const LIB_SYMBOL* aSymbol,
95 const STRING_UTF8_MAP* aProperties )
96{
97 // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
98 not_implemented( this, __FUNCTION__ );
99}
100
101
102void SCH_PLUGIN::DeleteSymbol( const wxString& aLibraryPath, const wxString& aSymbolName,
103 const STRING_UTF8_MAP* aProperties )
104{
105 // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
106 not_implemented( this, __FUNCTION__ );
107}
108
109
110void SCH_PLUGIN::CreateSymbolLib( const wxString& aLibraryPath, const STRING_UTF8_MAP* aProperties )
111{
112 // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
113 not_implemented( this, __FUNCTION__ );
114}
115
116
117bool SCH_PLUGIN::DeleteSymbolLib( const wxString& aLibraryPath, const STRING_UTF8_MAP* aProperties )
118{
119 // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
120 not_implemented( this, __FUNCTION__ );
121 return false;
122}
123
124
125bool SCH_PLUGIN::IsSymbolLibWritable( const wxString& aLibraryPath )
126{
127 // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
128 not_implemented( this, __FUNCTION__ );
129 return false;
130}
131
132
133void SCH_PLUGIN::SymbolLibOptions( STRING_UTF8_MAP* aListToAppendTo ) const
134{
135 // disable all these in another couple of months, after everyone has seen them:
136#if 1
137 (*aListToAppendTo)["debug_level"] = UTF8( _(
138 "Enable <b>debug</b> logging for Symbol*() functions in this SCH_PLUGIN."
139 ) );
140
141 (*aListToAppendTo)["read_filter_regex"] = UTF8( _(
142 "Regular expression <b>symbol name</b> filter."
143 ) );
144
145 (*aListToAppendTo)["enable_transaction_logging"] = UTF8( _(
146 "Enable transaction logging. The mere presence of this option turns on the "
147 "logging, no need to set a Value."
148 ) );
149
150 (*aListToAppendTo)["username"] = UTF8( _(
151 "User name for <b>login</b> to some special library server."
152 ) );
153
154 (*aListToAppendTo)["password"] = UTF8( _(
155 "Password for <b>login</b> to some special library server."
156 ) );
157#endif
158
159#if 1
160 // Suitable for a C++ to python SCH_PLUGIN::Footprint*() adapter, move it to the adapter
161 // if and when implemented.
162 (*aListToAppendTo)["python_symbol_plugin"] = UTF8( _(
163 "Enter the python symbol which implements the SCH_PLUGIN::Symbol*() functions."
164 ) );
165#endif
166}
167
168
169bool SCH_PLUGIN::CheckHeader( const wxString& aFileName )
170{
171 // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
172 not_implemented( this, __FUNCTION__ );
173 return false;
174}
175
176
177const wxString& SCH_PLUGIN::GetError() const
178{
179 // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
180 not_implemented( this, __FUNCTION__ );
181 static wxString error;
182 return error;
183}
Define a library symbol object.
Definition: lib_symbol.h:98
Holds all the data relating to one schematic.
Definition: schematic.h:61
Base class that schematic file and library loading and saving plugins should derive from.
Definition: sch_io_mgr.h:155
virtual void EnumerateSymbolLib(wxArrayString &aSymbolNameList, const wxString &aLibraryPath, const STRING_UTF8_MAP *aProperties=nullptr)
Populate a list of LIB_SYMBOL alias names contained within the library aLibraryPath.
Definition: sch_plugin.cpp:67
virtual void SaveSymbol(const wxString &aLibraryPath, const LIB_SYMBOL *aSymbol, const STRING_UTF8_MAP *aProperties=nullptr)
Write aSymbol to an existing library located at aLibraryPath.
Definition: sch_plugin.cpp:94
virtual void DeleteSymbol(const wxString &aLibraryPath, const wxString &aSymbolName, const STRING_UTF8_MAP *aProperties=nullptr)
Delete the entire LIB_SYMBOL associated with aAliasName from the library aLibraryPath.
Definition: sch_plugin.cpp:102
virtual void SaveLibrary(const wxString &aFileName, const STRING_UTF8_MAP *aProperties=nullptr)
Definition: sch_plugin.cpp:45
virtual const wxString GetName() const =0
Return a brief hard coded name for this SCH_PLUGIN.
virtual void SymbolLibOptions(STRING_UTF8_MAP *aListToAppendTo) const
Append supported SCH_PLUGIN options to aListToAppenTo along with internationalized descriptions.
Definition: sch_plugin.cpp:133
virtual LIB_SYMBOL * LoadSymbol(const wxString &aLibraryPath, const wxString &aPartName, const STRING_UTF8_MAP *aProperties=nullptr)
Load a LIB_SYMBOL object having aPartName from the aLibraryPath containing a library format that this...
Definition: sch_plugin.cpp:85
virtual const wxString & GetError() const
Return an error string to the caller.
Definition: sch_plugin.cpp:177
virtual void CreateSymbolLib(const wxString &aLibraryPath, const STRING_UTF8_MAP *aProperties=nullptr)
Create a new empty symbol library at aLibraryPath.
Definition: sch_plugin.cpp:110
virtual void Save(const wxString &aFileName, SCH_SHEET *aSheet, SCHEMATIC *aSchematic, const STRING_UTF8_MAP *aProperties=nullptr)
Write aSchematic to a storage file in a format that this SCH_PLUGIN implementation knows about,...
Definition: sch_plugin.cpp:59
virtual SCH_SHEET * Load(const wxString &aFileName, SCHEMATIC *aSchematic, SCH_SHEET *aAppendToMe=nullptr, const STRING_UTF8_MAP *aProperties=nullptr)
Load information from some input file format that this SCH_PLUGIN implementation knows about,...
Definition: sch_plugin.cpp:51
virtual bool DeleteSymbolLib(const wxString &aLibraryPath, const STRING_UTF8_MAP *aProperties=nullptr)
Delete an existing symbol library and returns true if successful, or if library does not exist return...
Definition: sch_plugin.cpp:117
virtual bool CheckHeader(const wxString &aFileName)
Return true if the first line in aFileName begins with the expected header.
Definition: sch_plugin.cpp:169
virtual bool IsSymbolLibWritable(const wxString &aLibraryPath)
Return true if the library at aLibraryPath is writable.
Definition: sch_plugin.cpp:125
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
Definition: sch_sheet.h:55
A name/value tuple with unique names and optional values.
An 8 bit string that is assuredly encoded in UTF8, and supplies special conversion support to and fro...
Definition: utf8.h:71
#define _(s)
#define THROW_IO_ERROR(msg)
Definition: ki_exception.h:38
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200
static void not_implemented(const 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:37
#define FMT_UNIMPLEMENTED
Definition: sch_plugin.cpp:28