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@gmail.com>
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:
46  typedef SCH_IO_MGR::SCH_FILE_T LIB_T;
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  SetEnabled( true );
55  }
56 
58  type( SCH_IO_MGR::SCH_LEGACY )
59  {
60  SetEnabled( true );
61  }
62 
63  bool operator==( const SYMBOL_LIB_TABLE_ROW& aRow ) const;
64 
65  bool operator!=( const SYMBOL_LIB_TABLE_ROW& aRow ) const { return !( *this == aRow ); }
66 
70  const wxString GetType() const override { return SCH_IO_MGR::ShowType( type ); }
71 
75  void SetType( const wxString& aType ) override;
76 
77 protected:
79  LIB_TABLE_ROW( aRow ),
80  type( aRow.type )
81  {
82  SetEnabled( aRow.GetIsEnabled() );
83  }
84 
85 private:
86 
87  virtual LIB_TABLE_ROW* do_clone() const override
88  {
89  return new SYMBOL_LIB_TABLE_ROW( *this );
90  }
91 
92  void setPlugin( SCH_PLUGIN* aPlugin )
93  {
94  plugin.set( aPlugin );
95  }
96 
98  LIB_T type;
99 };
100 
101 
103 {
104  friend class SYMBOL_LIB_TABLE_GRID;
106 
107  static int m_modifyHash;
108 
109 public:
110  static const char* PropPowerSymsOnly;
111  static const char* PropNonPowerSymsOnly;
112 
113  virtual void Parse( LIB_TABLE_LEXER* aLexer ) override;
114 
115  virtual void Format( OUTPUTFORMATTER* aOutput, int aIndentLevel ) const override;
116 
125  SYMBOL_LIB_TABLE( SYMBOL_LIB_TABLE* aFallBackTable = NULL );
126 
140  SYMBOL_LIB_TABLE_ROW* FindRow( const wxString& aNickName );
141 
142  int GetModifyHash();
143 
144  //-----<PLUGIN API SUBSET, REBASED ON aNickname>---------------------------
145 
149  size_t GetSymbolCount( const wxString& aNickname );
150 
160  void EnumerateSymbolLib( const wxString& aNickname, wxArrayString& aAliasNames,
161  bool aPowerSymbolsOnly = false );
162 
176  LIB_ALIAS* LoadSymbol( const wxString& aNickname, const wxString& aAliasName );
177 
178  LIB_ALIAS* LoadSymbol( const LIB_ID& aLibId )
179  {
180  return LoadSymbol( aLibId.GetLibNickname(), aLibId.GetLibItemName() );
181  }
182 
186  enum SAVE_T
187  {
190  };
191 
210  SAVE_T SaveSymbol( const wxString& aNickname, const LIB_PART* aSymbol,
211  bool aOverwrite = true );
212 
222  void DeleteSymbol( const wxString& aNickname, const wxString& aSymbolName );
223 
238  void DeleteAlias( const wxString& aNickname, const wxString& aAliasName );
239 
250  bool IsSymbolLibWritable( const wxString& aNickname );
251 
252  void DeleteSymbolLib( const wxString& aNickname );
253 
254  void CreateSymbolLib( const wxString& aNickname );
255 
256  //-----</PLUGIN API SUBSET, REBASED ON aNickname>---------------------------
257 
270 
284  static bool LoadGlobalTable( SYMBOL_LIB_TABLE& aTable );
285 
292  static wxString GetGlobalTableFileName();
293 
302  static const wxString GlobalPathEnvVariableName();
303 
305 
306  static const wxString& GetSymbolLibTableFileName();
307 };
308 
309 
310 #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:46
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()
void EnumerateSymbolLib(const wxString &aNickname, wxArrayString &aAliasNames, bool aPowerSymbolsOnly=false)
Return a list of symbol alias names contained within the library given by aNickname.
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...
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)
Hold a record identifying a library accessed by the appropriate plug in object in the LIB_TABLE...
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)
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:76
static const wxString GlobalPathEnvVariableName()
Return the name of the environment variable used to hold the directory of locally installed "KiCad sp...
size_t GetSymbolCount(const wxString &aNickname)
Return the number of symbols in the symbol library mapped to aNickname.
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:551
A logical library item identifier and consists of various portions much like a URI.
Definition: lib_id.h:51
bool IsSymbolLibWritable(const wxString &aNickname)
Return true if the library given by aNickname is writable.
void SetEnabled(bool aEnabled=true)
Change the enabled status of this library.
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:188
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
Definition: lib_id.h:115
const wxString GetType() const override
Return the type of symbol library table represented by this row.
Define a library symbol 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:523
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.
static int m_modifyHash
helper for GetModifyHash()
virtual void Parse(LIB_TABLE_LEXER *aLexer) override
Parse the LIB_TABLE_LEXER s-expression library table format into the appropriate LIB_TABLE_ROW object...
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.
bool GetIsEnabled() const
static const char * PropNonPowerSymsOnly
const UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
Definition: lib_id.h:98
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.
static const char * PropPowerSymsOnly
Dialog to show and edit symbol library tables.
SYMBOL_LIB_TABLE_ROW(const wxString &aNick, const wxString &aURI, const wxString &aType, const wxString &aOptions=wxEmptyString, const wxString &aDescr=wxEmptyString)
Manage LIB_TABLE_ROW records (rows), and can be searched based on library nickname.