KiCad PCB EDA Suite
symbol_lib_table.h
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 Wayne Stambaugh <stambaughw@verizon.net>
5  * Copyright (C) 2016-2017 KiCad Developers, see change_log.txt for contributors.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, you may find one here:
19  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20  * or you may search the http://www.gnu.org website for the version 2 license,
21  * or you may write to the Free Software Foundation, Inc.,
22  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23  */
24 
25 #ifndef _SYMBOL_LIB_TABLE_H_
26 #define _SYMBOL_LIB_TABLE_H_
27 
28 #include <lib_table_base.h>
29 #include <sch_io_mgr.h>
30 #include <lib_id.h>
31 
32 class LIB_PART;
35 
36 
42 {
43  friend class SYMBOL_LIB_TABLE;
44 
45 public:
47 
48  SYMBOL_LIB_TABLE_ROW( const wxString& aNick, const wxString& aURI, const wxString& aType,
49  const wxString& aOptions = wxEmptyString,
50  const wxString& aDescr = wxEmptyString ) :
51  LIB_TABLE_ROW( aNick, aURI, aOptions, aDescr )
52  {
53  SetType( aType );
54  }
55 
57  type( SCH_IO_MGR::SCH_KICAD )
58  {
59  }
60 
61  bool operator==( const SYMBOL_LIB_TABLE_ROW& aRow ) const;
62 
63  bool operator!=( const SYMBOL_LIB_TABLE_ROW& aRow ) const { return !( *this == aRow ); }
64 
68  const wxString GetType() const override { return SCH_IO_MGR::ShowType( type ); }
69 
73  void SetType( const wxString& aType ) override;
74 
75 protected:
77  LIB_TABLE_ROW( aRow ),
78  type( aRow.type )
79  {
80  }
81 
82 private:
83 
84  virtual LIB_TABLE_ROW* do_clone() const override
85  {
86  return new SYMBOL_LIB_TABLE_ROW( *this );
87  }
88 
89  void setPlugin( SCH_PLUGIN* aPlugin )
90  {
91  plugin.set( aPlugin );
92  }
93 
95  LIB_T type;
96 };
97 
98 
100 {
101  friend class SYMBOL_LIB_TABLE_GRID;
103 
104 public:
105  virtual void Parse( LIB_TABLE_LEXER* aLexer ) override;
106 
107  virtual void Format( OUTPUTFORMATTER* aOutput, int aIndentLevel ) const override;
108 
117  SYMBOL_LIB_TABLE( SYMBOL_LIB_TABLE* aFallBackTable = NULL );
118 
132  const SYMBOL_LIB_TABLE_ROW* FindRow( const wxString& aNickName );
133 
134  //-----<PLUGIN API SUBSET, REBASED ON aNickname>---------------------------
135 
144  void EnumerateSymbolLib( const wxString& aNickname, wxArrayString& aAliasNames );
145 
159  LIB_ALIAS* LoadSymbol( const wxString& aNickname, const wxString& aAliasName );
160 
161  LIB_ALIAS* LoadSymbol( const LIB_ID& aLibId )
162  {
163  return LoadSymbol( aLibId.GetLibNickname(), aLibId.GetLibItemName() );
164  }
165 
169  enum SAVE_T
170  {
173  };
174 
193  SAVE_T SaveSymbol( const wxString& aNickname, const LIB_PART* aSymbol,
194  bool aOverwrite = true );
195 
205  void DeleteSymbol( const wxString& aNickname, const wxString& aSymbolName );
206 
221  void DeleteAlias( const wxString& aNickname, const wxString& aAliasName );
222 
233  bool IsSymbolLibWritable( const wxString& aNickname );
234 
235  void DeleteSymbolLib( const wxString& aNickname );
236 
237  void CreateSymbolLib( const wxString& aNickname );
238 
239  //-----</PLUGIN API SUBSET, REBASED ON aNickname>---------------------------
240 
253 
267  static bool LoadGlobalTable( SYMBOL_LIB_TABLE& aTable );
268 
275  static wxString GetGlobalTableFileName();
276 
285  static const wxString GlobalPathEnvVariableName();
286 
288 
289  static const wxString& GetSymbolLibTableFileName();
290 };
291 
292 
293 #endif // _SYMBOL_LIB_TABLE_H_
bool operator!=(const SYMBOL_LIB_TABLE_ROW &aRow) const
Class SCH_IO_MGR is a factory which returns an instance of a SCH_PLUGIN.
Definition: sch_io_mgr.h:44
void EnumerateSymbolLib(const wxString &aNickname, wxArrayString &aAliasNames)
Return a list of symbol alias names contained within the library given by aNickname.
LIB_ALIAS * LoadSymbol(const wxString &aNickname, const wxString &aAliasName)
Load a LIB_ALIAS having aAliasName from the library given by aNickname.
SAVE_T SaveSymbol(const wxString &aNickname, const LIB_PART *aSymbol, bool aOverwrite=true)
Write aSymbol to an existing library given by aNickname.
static const wxString & GetSymbolLibTableFileName()
static SYMBOL_LIB_TABLE & GetGlobalLibTable()
Part library alias object definition.
Hold a record identifying a symbol library accessed by the appropriate symbol library SCH_PLUGIN obje...
LIB_ALIAS * LoadSymbol(const LIB_ID &aLibId)
Class LIB_TABLE_ROW.
SYMBOL_LIB_TABLE(SYMBOL_LIB_TABLE *aFallBackTable=NULL)
Build a symbol library table by pre-pending this table fragment in front of aFallBackTable.
SYMBOL_LIB_TABLE_ROW(const SYMBOL_LIB_TABLE_ROW &aRow)
const SYMBOL_LIB_TABLE_ROW * FindRow(const wxString &aNickName)
Return an SYMBOL_LIB_TABLE_ROW if aNickName is found in this table or in any chained fallBack table f...
void CreateSymbolLib(const wxString &aNickname)
SCH_PLUGIN::SCH_PLUGIN_RELEASER plugin
void DeleteSymbolLib(const wxString &aNickname)
void SetType(const wxString &aType) override
Change the schematic plugin type represented by this row.
static const wxString ShowType(SCH_FILE_T aFileType)
Return a brief name for a plugin, given aFileType enum.
Definition: sch_io_mgr.cpp:75
static const wxString GlobalPathEnvVariableName()
Return the name of the environment variable used to hold the directory of locally installed "KiCad sp...
Class OUTPUTFORMATTER is an important interface (abstract class) used to output 8 bit text in a conve...
Definition: richio.h:327
void set(SCH_PLUGIN *aPlugin)
Definition: sch_io_mgr.h:529
Class LIB_ID.
Definition: lib_id.h:56
bool IsSymbolLibWritable(const wxString &aNickname)
Return true if the library given by aNickname is writable.
bool operator==(const SYMBOL_LIB_TABLE_ROW &aRow) const
LIB_ALIAS * LoadSymbolWithOptionalNickname(const LIB_ID &aId)
Load a LIB_PART having aFootprintId with possibly an empty library nickname.
Base class that schematic file and library loading and saving plugins should derive from...
Definition: sch_io_mgr.h:184
Build a wxGridTableBase by wrapping an SYMBOL_LIB_TABLE object.
static bool LoadGlobalTable(SYMBOL_LIB_TABLE &aTable)
Load the global symbol library table into aTable.
const UTF8 & GetLibItemName() const
Function GetLibItemName.
Definition: lib_id.h:129
const wxString GetType() const override
Return the type of symbol library table represented by this row.
Class LIB_PART defines a library part object.
virtual void Format(OUTPUTFORMATTER *aOutput, int aIndentLevel) const override
Generate the table in s-expression format to aOutput with an indention level of aIndentLevel.
void setPlugin(SCH_PLUGIN *aPlugin)
SCH_IO_MGR::SCH_FILE_T LIB_T
Helper object to release a SCH_PLUGIN in the context of a potential thrown exception through its dest...
Definition: sch_io_mgr.h:501
virtual LIB_TABLE_ROW * do_clone() const override
void DeleteSymbol(const wxString &aNickname, const wxString &aSymbolName)
Deletes the aSymbolName from the library given by aNickname.
virtual void Parse(LIB_TABLE_LEXER *aLexer) override
Function Parse.
Class LIB_TABLE_LEXER is an automatically generated class using the TokenList2DnsLexer.cmake technology, based on keywords provided by file: /home/kicad/workspace/kicad-doxygen/common/lib_table.keywords.
SAVE_T
The set of return values from SaveSymbol() below.
const UTF8 & GetLibNickname() const
Function GetLibNickname.
Definition: lib_id.h:108
static wxString GetGlobalTableFileName()
Fetch the global symbol library table file name.
void DeleteAlias(const wxString &aNickname, const wxString &aAliasName)
Delete aAliasName from the library at aLibraryPath.
Dialog to show and edit symbol library tables.
SCH_FILE_T
A set of file types that the SCH_IO_MGR knows about, and for which there has been a plugin written...
Definition: sch_io_mgr.h:52
SYMBOL_LIB_TABLE_ROW(const wxString &aNick, const wxString &aURI, const wxString &aType, const wxString &aOptions=wxEmptyString, const wxString &aDescr=wxEmptyString)
Class LIB_TABLE.