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-2021 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_SYMBOL;
34 class DIALOG_SYMBOL_LIB_TABLE;
35 
36 
42 {
43 public:
44  typedef SCH_IO_MGR::SCH_FILE_T LIB_T;
45 
46  SYMBOL_LIB_TABLE_ROW( const wxString& aNick, const wxString& aURI, const wxString& aType,
47  const wxString& aOptions = wxEmptyString,
48  const wxString& aDescr = wxEmptyString ) :
49  LIB_TABLE_ROW( aNick, aURI, aOptions, aDescr )
50  {
51  SetType( aType );
52  SetEnabled( true );
53  }
54 
56  type( SCH_IO_MGR::SCH_KICAD )
57  {
58  SetEnabled( true );
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 
81  bool Refresh();
82 
83 protected:
85  LIB_TABLE_ROW( aRow ),
86  type( aRow.type )
87  {
88  SetEnabled( aRow.GetIsEnabled() );
89  }
90 
91 private:
92  friend class SYMBOL_LIB_TABLE;
93 
94  virtual LIB_TABLE_ROW* do_clone() const override
95  {
96  return new SYMBOL_LIB_TABLE_ROW( *this );
97  }
98 
99  void setPlugin( SCH_PLUGIN* aPlugin )
100  {
101  plugin.set( aPlugin );
102  }
103 
106 };
107 
108 
110 {
111 public:
112  KICAD_T Type() override { return SYMBOL_LIB_TABLE_T; }
113 
114  static const char* PropPowerSymsOnly;
115  static const char* PropNonPowerSymsOnly;
116 
117  virtual void Parse( LIB_TABLE_LEXER* aLexer ) override;
118 
119  virtual void Format( OUTPUTFORMATTER* aOutput, int aIndentLevel ) const override;
120 
129  SYMBOL_LIB_TABLE( SYMBOL_LIB_TABLE* aFallBackTable = nullptr );
130 
142  SYMBOL_LIB_TABLE_ROW* FindRow( const wxString& aNickName, bool aCheckIfEnabled = false );
143 
144  int GetModifyHash();
145 
146  //-----<PLUGIN API SUBSET, REBASED ON aNickname>---------------------------
147 
156  void EnumerateSymbolLib( const wxString& aNickname, wxArrayString& aAliasNames,
157  bool aPowerSymbolsOnly = false );
158 
159  void LoadSymbolLib( std::vector<LIB_SYMBOL*>& aAliasList, const wxString& aNickname,
160  bool aPowerSymbolsOnly = false );
161 
172  LIB_SYMBOL* LoadSymbol( const wxString& aNickname, const wxString& aName );
173 
174  LIB_SYMBOL* LoadSymbol( const LIB_ID& aLibId )
175  {
176  return LoadSymbol( aLibId.GetLibNickname(), aLibId.GetLibItemName() );
177  }
178 
182  enum SAVE_T
183  {
186  };
187 
204  SAVE_T SaveSymbol( const wxString& aNickname, const LIB_SYMBOL* aSymbol,
205  bool aOverwrite = true );
206 
214  void DeleteSymbol( const wxString& aNickname, const wxString& aSymbolName );
215 
225  bool IsSymbolLibWritable( const wxString& aNickname );
226 
233  bool IsSymbolLibLoaded( 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 
251 
263  static bool LoadGlobalTable( SYMBOL_LIB_TABLE& aTable );
264 
271  static wxString GetGlobalTableFileName();
272 
281  static const wxString GlobalPathEnvVariableName();
282 
284 
285  static const wxString& GetSymbolLibTableFileName();
286 
287 private:
288  friend class SYMBOL_LIB_TABLE_GRID;
289  friend class PANEL_SYM_LIB_TABLE;
290 
291  static int m_modifyHash;
292 };
293 
294 
295 #endif // _SYMBOL_LIB_TABLE_H_
A factory which returns an instance of a SCH_PLUGIN.
Definition: sch_io_mgr.h:47
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.
const UTF8 & GetLibItemName() const
Definition: lib_id.h:104
Hold a record identifying a symbol library accessed by the appropriate symbol library SCH_PLUGIN obje...
Hold a record identifying a library accessed by the appropriate plug in object in the LIB_TABLE.
SYMBOL_LIB_TABLE_ROW(const SYMBOL_LIB_TABLE_ROW &aRow)
void CreateSymbolLib(const wxString &aNickname)
SCH_PLUGIN::SCH_PLUGIN_RELEASER plugin
SAVE_T SaveSymbol(const wxString &aNickname, const LIB_SYMBOL *aSymbol, bool aOverwrite=true)
Write aSymbol to an existing library given by aNickname.
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:79
static const wxString GlobalPathEnvVariableName()
Return the name of the environment variable used to hold the directory of locally installed "KiCad sp...
An interface used to output 8 bit text in a convenient way.
Definition: richio.h:309
LIB_SYMBOL * LoadSymbolWithOptionalNickname(const LIB_ID &aId)
Load a LIB_SYMBOL having aFootprintId with possibly an empty library nickname.
bool operator!=(const SYMBOL_LIB_TABLE_ROW &aRow) const
void set(SCH_PLUGIN *aPlugin)
Definition: sch_io_mgr.h:507
LIB_SYMBOL * LoadSymbol(const LIB_ID &aLibId)
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.
Define a library symbol object.
Definition: lib_symbol.h:96
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition: typeinfo.h:77
bool IsSymbolLibLoaded(const wxString &aNickname)
Return true if the library given by aNickname was successfully loaded.
bool operator==(const SYMBOL_LIB_TABLE_ROW &aRow) const
void SetEnabled(bool aEnabled=true)
Change the enabled status of this library.
Base class that schematic file and library loading and saving plugins should derive from.
Definition: sch_io_mgr.h:152
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.
bool GetIsEnabled() const
KICAD_T Type() override
bool Refresh()
Attempt to reload the library.
const wxString GetType() const override
Return the type of symbol library table represented by this row.
const UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
Definition: lib_id.h:90
Dialog to show and edit symbol library tables.
virtual void Format(OUTPUTFORMATTER *aOutput, int aIndentLevel) const override
Generate the table in s-expression format to aOutput with an indentation 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:479
virtual LIB_TABLE_ROW * do_clone() const override
void LoadSymbolLib(std::vector< LIB_SYMBOL * > &aAliasList, const wxString &aNickname, bool aPowerSymbolsOnly=false)
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 objec...
LIB_SYMBOL * LoadSymbol(const wxString &aNickname, const wxString &aName)
Load a LIB_SYMBOL having aName from the library given by aNickname.
SAVE_T
The set of return values from SaveSymbol() below.
static const char * PropNonPowerSymsOnly
SYMBOL_LIB_TABLE_ROW * FindRow(const wxString &aNickName, bool aCheckIfEnabled=false)
Return an SYMBOL_LIB_TABLE_ROW if aNickName is found in this table or in any chained fallBack table f...
SYMBOL_LIB_TABLE(SYMBOL_LIB_TABLE *aFallBackTable=nullptr)
Build a symbol library table by pre-pending this table fragment in front of aFallBackTable.
static wxString GetGlobalTableFileName()
Fetch the global symbol library table file name.
static const char * PropPowerSymsOnly
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.