KiCad PCB EDA Suite
project.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) 2014-2017 KiCad Developers, see AUTHORS.txt for contributors.
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, you may find one here:
18  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19  * or you may search the http://www.gnu.org website for the version 2 license,
20  * or you may write to the Free Software Foundation, Inc.,
21  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
22  */
23 #ifndef PROJECT_H_
24 #define PROJECT_H_
25 
30 #include <vector>
31 #include <wx/string.h>
32 #include <wx/filename.h>
33 #include <core/typeinfo.h>
34 
37 #define PROJECT_VAR_NAME wxT( "KIPRJMOD" )
38 
39 
40 class wxConfigBase;
41 class PARAM_CFG_ARRAY;
42 class FP_LIB_TABLE;
43 class PART_LIBS;
44 class SEARCH_STACK;
45 class S3D_CACHE;
46 class KIWAY;
47 class SYMBOL_LIB_TABLE;
48 
49 #define VTBL_ENTRY virtual
50 
57 class PROJECT
58 {
59 public:
60 
67  class _ELEM
68  {
69  public:
70  virtual ~_ELEM() {}
71 
72  virtual KICAD_T Type() = 0; // Sanity-checking for returned values.
73  };
74 
75  PROJECT();
76  ~PROJECT();
77 
78  //-----<Cross Module API>----------------------------------------------------
79 
80  // VTBL_ENTRY bool MaybeLoadProjectSettings( const std::vector<wxString>& aFileSet );
81 
90  VTBL_ENTRY void SetProjectFullName( const wxString& aFullPathAndName );
91 
97  VTBL_ENTRY const wxString GetProjectFullName() const;
98 
104  VTBL_ENTRY const wxString GetProjectPath() const;
105 
111  VTBL_ENTRY const wxString GetProjectName() const;
112 
118  VTBL_ENTRY const wxString FootprintLibTblName() const;
119 
123  VTBL_ENTRY const wxString SymbolLibTableName() const;
124 
138  VTBL_ENTRY void ConfigSave( const SEARCH_STACK& aSList, const wxString& aGroupName,
139  const PARAM_CFG_ARRAY& aParams, const wxString& aFileName = wxEmptyString );
140 
159  VTBL_ENTRY bool ConfigLoad( const SEARCH_STACK& aSearchS, const wxString& aGroupName,
160  const PARAM_CFG_ARRAY& aParams, const wxString& aForeignConfigFileName = wxEmptyString );
161 
164  {
167  SCH_LIB_SELECT, // eeschema/selpart.cpp
169  SCH_LIBEDIT_CUR_PART, // eeschema/libeditframe.cpp
170 
173 
180 
182  };
183 
190  VTBL_ENTRY const wxString& GetRString( RSTRING_T aStringId );
191 
198  VTBL_ENTRY void SetRString( RSTRING_T aStringId, const wxString& aString );
199 
204  enum ELEM_T
205  {
207 
212 
214  };
215 
225  VTBL_ENTRY _ELEM* GetElem( ELEM_T aIndex );
226  VTBL_ENTRY void SetElem( ELEM_T aIndex, _ELEM* aElem );
227 
232  VTBL_ENTRY void ElemsClear();
233 
238  void Clear() // inline not virtual
239  {
240  ElemsClear();
241 
242  for( unsigned i = 0; i<RSTRING_COUNT; ++i )
243  SetRString( RSTRING_T( i ), wxEmptyString );
244  }
245 
252  VTBL_ENTRY const wxString AbsolutePath( const wxString& aFileName ) const;
253 
259 
260  //-----</Cross Module API>---------------------------------------------------
261 
262  //-----<KIFACE Specific APIs>------------------------------------------------
263 
264  // These are the non-virtual DATA LOAD ON DEMAND members. They load project related
265  // data on demand, and do so typicallly into m_elems[] at a particular index using
266  // SetElem() & GetElem(). That is, they wrap SetElem() and GetElem().
267  // To get the data to reload on demand, first SetProjectFullName(),
268  // then call SetElem( ELEM_T, NULL ) from client code.
269 
270  // non-virtuals resident in PCBNEW link image(s). By being non-virtual, these
271  // functions can get linked into the KIFACE that needs them, and only there.
272  // In fact, the other KIFACEs don't even know they exist.
273 #if defined(PCBNEW) || defined(CVPCB)
274 
279 
287  S3D_CACHE* Get3DCacheManager( bool updateProjDir = false );
288 #endif
289 
290 
291 #if defined(EESCHEMA)
292  // These are all prefaced with "Sch"
293  PART_LIBS* SchLibs();
294 
296  SEARCH_STACK* SchSearchS();
297 
299  SYMBOL_LIB_TABLE* SchSymbolLibTable();
300 #endif
301 
302  //-----</KIFACE Specific APIs>-----------------------------------------------
303 
304 private:
305 
314  wxConfigBase* configCreate( const SEARCH_STACK& aSList,
315  const wxString& aGroupName, const wxString& aProjectFileName = wxEmptyString );
316 
320  const wxString libTableName( const wxString& aLibTableName ) const;
321 
322  wxFileName m_project_name;
324 
327 
330 };
331 
332 
333 //-----<possible futures>---------------------------------------------------------
334 
335 #if 0
336 
347  VTBL_ENTRY bool Value( const wxString& aVariable, wxString* aFetchedValue = NULL );
348 
355  VTBL_ENTRY const wxString Substitute( const wxString& aString );
356 
364  VTBL_ENTRY const wxString SubstituteAndEvaluate( const wxString& aString );
365 #endif
366 
367 #endif // PROJECT_H_
wxConfigBase * configCreate(const SEARCH_STACK &aSList, const wxString &aGroupName, const wxString &aProjectFileName=wxEmptyString)
Function configCreate loads a *.pro file and returns a wxConfigBase.
Definition: project.cpp:291
_ELEM * m_elems[ELEM_COUNT]
Definition: project.h:329
A list of parameters type.
void Clear()
Function Clear clears the _ELEMs and RSTRINGs.
Definition: project.h:238
VTBL_ENTRY void ConfigSave(const SEARCH_STACK &aSList, const wxString &aGroupName, const PARAM_CFG_ARRAY &aParams, const wxString &aFileName=wxEmptyString)
Function ConfigSave saves the current "project" parameters into the wxConfigBase* derivative...
Definition: project.cpp:318
Class PROJECT holds project specific data.
Definition: project.h:57
VTBL_ENTRY const wxString GetProjectFullName() const
Function GetProjectFullName returns the full path and name of the project.
Definition: project.cpp:96
Class SEARCH_STACK looks for files in a number of places.
Definition: search_stack.h:41
VTBL_ENTRY _ELEM * GetElem(ELEM_T aIndex)
Typically wrapped somewhere else in a more meaningful function wrapper.
Definition: project.cpp:205
KICAD_T
Enum KICAD_T is the set of class identification values, stored in EDA_ITEM::m_StructType.
Definition: typeinfo.h:78
virtual KICAD_T Type()=0
VTBL_ENTRY void SetElem(ELEM_T aIndex, _ELEM *aElem)
Definition: project.cpp:217
VTBL_ENTRY const wxString SymbolLibTableName() const
Return the path and file name of this projects symbol library table.
Definition: project.cpp:114
wxFileName m_project_name
<fullpath>/<basename>.pro
Definition: project.h:322
VTBL_ENTRY const wxString AbsolutePath(const wxString &aFileName) const
Function AbsolutePath fixes up aFileName if it is relative to the project&#39;s directory to be an absolu...
Definition: project.cpp:380
Class KIWAY is a minimalistic software bus for communications between various DLLs/DSOs (DSOs) within...
Definition: kiway.h:258
VTBL_ENTRY const wxString FootprintLibTblName() const
Function FootprintLibTblName returns the path and filename of this project&#39;s fp-lib-table, i.e.
Definition: project.cpp:120
VTBL_ENTRY void SetProjectFullName(const wxString &aFullPathAndName)
Function SetProjectFullName sets the: 1) full directory, 2) basename, and 3) extension of the project...
Definition: project.cpp:64
VTBL_ENTRY void ElemsClear()
Function ElemsClear deletes all the _ELEMs and set their pointers to NULL.
Definition: project.cpp:47
PROJECT()
Definition: project.cpp:41
VTBL_ENTRY void SetRString(RSTRING_T aStringId, const wxString &aString)
Function SetRString stores a "retained string", which is any session and project specific string iden...
Definition: project.cpp:171
VTBL_ENTRY FP_LIB_TABLE * PcbFootprintLibs(KIWAY &aKiway)
Return the table of footprint libraries.
A collection of PART_LIB objects.
VTBL_ENTRY const wxString & GetRString(RSTRING_T aStringId)
Function GetRString returns a "retained string", which is any session and project specific string ide...
Definition: project.cpp:186
ELEM_T
Enum ELEM_T is the set of _ELEMs that a PROJECT can hold.
Definition: project.h:204
#define VTBL_ENTRY
Definition: project.h:49
RSTRING_T
Retain a number of project specific wxStrings, enumerated here:
Definition: project.h:163
wxString m_rstrings[RSTRING_COUNT]
Definition: project.h:326
size_t i
Definition: json11.cpp:597
VTBL_ENTRY const wxString GetProjectPath() const
Function GetProjectPath returns the full path of the project.
Definition: project.cpp:102
A PROJECT can hold stuff it knows nothing about, in the form of _ELEM derivatives.
Definition: project.h:67
VTBL_ENTRY bool ConfigLoad(const SEARCH_STACK &aSearchS, const wxString &aGroupName, const PARAM_CFG_ARRAY &aParams, const wxString &aForeignConfigFileName=wxEmptyString)
Function ConfigLoad reads a subset of parameters from the "project" file.
Definition: project.cpp:353
wxString m_pro_date_and_time
Definition: project.h:323
virtual ~_ELEM()
Definition: project.h:70
~PROJECT()
Definition: project.cpp:58
const wxString libTableName(const wxString &aLibTableName) const
Return the full path and file name of the project specific library table aLibTableName.
Definition: project.cpp:126
VTBL_ENTRY const wxString GetProjectName() const
Function GetProjectName returns the short name of the project.
Definition: project.cpp:108