KiCad PCB EDA Suite
Loading...
Searching...
No Matches
symbol_library.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) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
5 * Copyright (C) 2008 Wayne Stambaugh <[email protected]>
6 * Copyright (C) 2004-2022 KiCad Developers, see AUTHORS.txt for contributors.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, you may find one here:
20 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21 * or you may search the http://www.gnu.org website for the version 2 license,
22 * or you may write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24 */
25
31#ifndef SYMBOL_LIBRARY_H
32#define SYMBOL_LIBRARY_H
33
34#include <mutex>
35#include <boost/ptr_container/ptr_vector.hpp>
36#include <wx/filename.h>
37
38#include <project.h>
39#include <sch_io/sch_io_mgr.h>
41
42
43class LIB_SYMBOL;
44class LIB_ID;
45class LINE_READER;
46class OUTPUTFORMATTER;
47class SCH_IO;
48class SYMBOL_LIB;
49
50
51/* Helpers for creating a list of symbol libraries. */
52typedef boost::ptr_vector< SYMBOL_LIB > SYMBOL_LIBS_BASE;
53
54
62{
63public:
65
67
74 SYMBOL_LIB* AddLibrary( const wxString& aFileName );
75
84 SYMBOL_LIB* AddLibrary( const wxString& aFileName, SYMBOL_LIBS::iterator& aIterator );
85
92 bool ReloadLibrary( const wxString& aFileName );
93
101 void LoadAllLibraries( PROJECT* aProject, bool aShowProgress=true );
102
103 static void GetLibNamesAndPaths( PROJECT* aProject, wxString* aPaths,
104 wxArrayString* aNames = nullptr );
105
106 static void SetLibNamesAndPaths( PROJECT* aProject, const wxString& aPaths,
107 const wxArrayString& aNames );
108
115 static const wxString CacheName( const wxString& aFullProjectFilename );
116
123 SYMBOL_LIB* FindLibrary( const wxString& aName );
124
125 SYMBOL_LIB* FindLibraryByFullFileName( const wxString& aFullFileName );
126
128
135 wxArrayString GetLibraryNames( bool aSorted = true );
136
147 LIB_SYMBOL* FindLibSymbol( const LIB_ID& aLibId, const wxString& aLibraryName = wxEmptyString );
148
162 void FindLibraryNearEntries( std::vector<LIB_SYMBOL*>& aCandidates, const wxString& aEntryName,
163 const wxString& aLibraryName = wxEmptyString );
164
165 int GetLibraryCount() { return size(); }
166};
167
168
176{
177public:
178 SYMBOL_LIB( SCH_LIB_TYPE aType, const wxString& aFileName,
179 SCH_IO_MGR::SCH_FILE_T aPluginType = SCH_IO_MGR::SCH_LEGACY );
180 ~SYMBOL_LIB();
181
185 int GetModHash() const { return m_mod_hash; }
186
187 SCH_IO_MGR::SCH_FILE_T GetPluginType() const { return m_pluginType; }
188
189 void SetPluginType( SCH_IO_MGR::SCH_FILE_T aPluginType );
190
191 void Create( const wxString& aFileName = wxEmptyString );
192
193 void SetFileName( const wxString& aFileName ) { fileName = aFileName; }
194
195 bool IsModified() const
196 {
197 return isModified;
198 }
199
200 bool IsCache() const;
201
202 void SetCache();
203
204 bool IsBuffering() const;
205
206 void EnableBuffering( bool aEnable = true );
207
208 void Save( bool aSaveDocFile = true );
209
213 bool IsReadOnly() const { return !fileName.IsFileWritable(); }
214
220 void GetSymbolNames( wxArrayString& aNames ) const;
221
227 void GetSymbols( std::vector<LIB_SYMBOL*>& aSymbols ) const;
228
235 LIB_SYMBOL* FindSymbol( const wxString& aName ) const;
236
237 LIB_SYMBOL* FindSymbol( const LIB_ID& aLibId ) const;
238
247 void AddSymbol( LIB_SYMBOL* aSymbol );
248
261
271 LIB_SYMBOL* ReplaceSymbol( LIB_SYMBOL* aOldSymbol, LIB_SYMBOL* aNewSymbol );
272
278 const wxString GetName() const { return fileName.GetName(); }
279
285 wxString GetFullFileName() const { return fileName.GetFullPath(); }
286
292 const wxString GetLogicalName() const
293 {
294 /* for now is the filename without path or extension.
295
296 Technically the library should not know its logical name!
297 This will eventually come out of a pair of lookup tables using a
298 reverse lookup using the full name or library pointer as a key.
299 Search will be by project lookup table and then user lookup table if
300 not found.
301 */
302 return fileName.GetName();
303 }
304
312 static SYMBOL_LIB* LoadSymbolLibrary( const wxString& aFileName );
313
314private:
316 wxFileName fileName;
317 wxDateTime timeStamp;
320 wxString header;
323
324 SCH_IO_MGR::SCH_FILE_T m_pluginType;
325 std::unique_ptr< SCH_IO > m_plugin;
326 std::unique_ptr<std::map<std::string, UTF8>> m_properties;
327};
328
329
333bool operator==( const SYMBOL_LIB& aLibrary, const wxString& aName );
334bool operator!=( const SYMBOL_LIB& aLibrary, const wxString& aName );
335
336#endif // SYMBOL_LIBRARY_H
A logical library item identifier and consists of various portions much like a URI.
Definition: lib_id.h:49
Define a library symbol object.
Definition: lib_symbol.h:78
An abstract class from which implementation specific LINE_READERs may be derived to read single lines...
Definition: richio.h:93
An interface used to output 8 bit text in a convenient way.
Definition: richio.h:322
A PROJECT can hold stuff it knows nothing about, in the form of _ELEM derivatives.
Definition: project.h:93
Container for project specific data.
Definition: project.h:64
ELEM
The set of #_ELEMs that a PROJECT can hold.
Definition: project.h:70
Base class that schematic file and library loading and saving plugins should derive from.
Definition: sch_io.h:57
A collection of SYMBOL_LIB objects.
int GetLibraryCount()
void FindLibraryNearEntries(std::vector< LIB_SYMBOL * > &aCandidates, const wxString &aEntryName, const wxString &aLibraryName=wxEmptyString)
Search all libraries in the list for a LIB_SYMBOL using a case insensitive comparison.
static void SetLibNamesAndPaths(PROJECT *aProject, const wxString &aPaths, const wxArrayString &aNames)
SYMBOL_LIB * FindLibrary(const wxString &aName)
Find a symbol library by aName.
SYMBOL_LIB * FindLibraryByFullFileName(const wxString &aFullFileName)
PROJECT::ELEM ProjectElementType() override
wxArrayString GetLibraryNames(bool aSorted=true)
Return the list of symbol library file names without path and extension.
void LoadAllLibraries(PROJECT *aProject, bool aShowProgress=true)
Load all of the project's libraries into this container, which should be cleared before calling it.
bool ReloadLibrary(const wxString &aFileName)
Refreshes the library from the (possibly updated) contents on disk.
static const wxString CacheName(const wxString &aFullProjectFilename)
Return the name of the cache library after potentially fixing it from an older naming scheme.
LIB_SYMBOL * FindLibSymbol(const LIB_ID &aLibId, const wxString &aLibraryName=wxEmptyString)
Search all libraries in the list for a symbol.
SYMBOL_LIB * AddLibrary(const wxString &aFileName)
Allocate and adds a symbol library to the library list.
static void GetLibNamesAndPaths(PROJECT *aProject, wxString *aPaths, wxArrayString *aNames=nullptr)
SYMBOL_LIB * GetCacheLibrary()
Object used to load, save, search, and otherwise manipulate symbol library files.
std::unique_ptr< SCH_IO > m_plugin
void SetFileName(const wxString &aFileName)
wxString GetFullFileName() const
Return the full file library name with path and extension.
SCH_IO_MGR::SCH_FILE_T m_pluginType
int GetModHash() const
void Create(const wxString &aFileName=wxEmptyString)
void GetSymbols(std::vector< LIB_SYMBOL * > &aSymbols) const
Load a vector with all the entries in this library.
bool IsBuffering() const
bool IsCache() const
std::unique_ptr< std::map< std::string, UTF8 > > m_properties
Library properties.
void SetPluginType(SCH_IO_MGR::SCH_FILE_T aPluginType)
SCH_LIB_TYPE type
Library type indicator.
bool IsModified() const
void EnableBuffering(bool aEnable=true)
SCH_IO_MGR::SCH_FILE_T GetPluginType() const
bool IsReadOnly() const
void Save(bool aSaveDocFile=true)
const wxString GetLogicalName() const
Return the logical name of the library.
LIB_SYMBOL * FindSymbol(const wxString &aName) const
Find LIB_SYMBOL by aName.
void AddSymbol(LIB_SYMBOL *aSymbol)
Add aSymbol entry to library.
static SYMBOL_LIB * LoadSymbolLibrary(const wxString &aFileName)
Allocate and load a symbol library file.
bool isModified
Library modification status.
void GetSymbolNames(wxArrayString &aNames) const
Load a string array with the names of all the entries in this library.
wxDateTime timeStamp
Library save time and date.
int versionMinor
Library minor version number.
int m_mod_hash
incremented each time library is changed.
LIB_SYMBOL * ReplaceSymbol(LIB_SYMBOL *aOldSymbol, LIB_SYMBOL *aNewSymbol)
Replace an existing symbol entry in the library.
wxFileName fileName
Library file name.
int versionMajor
Library major version number.
wxString header
first line of loaded library.
const wxString GetName() const
Return the file name without path or extension.
LIB_SYMBOL * RemoveSymbol(LIB_SYMBOL *aEntry)
Safely remove aEntry from the library and return the next entry.
bool operator==(const SYMBOL_LIB &aLibrary, const wxString &aName)
Case insensitive library name comparison.
boost::ptr_vector< SYMBOL_LIB > SYMBOL_LIBS_BASE
bool operator!=(const SYMBOL_LIB &aLibrary, const wxString &aName)