KiCad PCB EDA Suite
cvpcb.cpp
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) 2007 Jean-Pierre Charras, jp..charras at wanadoo.fr
5  * Copyright (C) 2014 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
6  * Copyright (C) 1992-2014 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 
30 #include <fctsys.h>
31 #include <macros.h>
32 #include <fp_lib_table.h>
33 #include <kiface_i.h>
34 #include <pgm_base.h>
35 #include <confirm.h>
36 
37 #include <cvpcb.h>
38 #include <cvpcb_mainframe.h>
40 #include <cvpcb_id.h>
41 
42 #include <build_version.h>
43 
44 #include <wx/snglinst.h>
45 
46 // Constant string definitions for CvPcb
47 const wxString EquFileExtension( wxT( "equ" ) );
48 
49 
50 namespace CV {
51 
52 static struct IFACE : public KIFACE_I
53 {
54  // Of course all are virtual overloads, implementations of the KIFACE.
55 
56  IFACE( const char* aName, KIWAY::FACE_T aType ) :
57  KIFACE_I( aName, aType )
58  {}
59 
60  bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits ) override;
61 
62  void OnKifaceEnd() override;
63 
64  wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 ) override
65  {
66  switch( aClassId )
67  {
68  case FRAME_CVPCB:
69  return new CVPCB_MAINFRAME( aKiway, aParent );
70 
72  return new DISPLAY_FOOTPRINTS_FRAME( aKiway, aParent );
73 
74  default:
75  ;
76  }
77 
78  return NULL;
79  }
80 
92  void* IfaceOrAddress( int aDataId ) override
93  {
94  return NULL;
95  }
96 
97 } kiface( "cvpcb", KIWAY::FACE_CVPCB );
98 
99 } // namespace
100 
101 using namespace CV;
102 
103 
105 
106 
107 KIFACE_I& Kiface() { return kiface; }
108 
109 
110 // KIFACE_GETTER's actual spelling is a substitution macro found in kiway.h.
111 // KIFACE_GETTER will not have name mangling due to declaration in kiway.h.
112 MY_API( KIFACE* ) KIFACE_GETTER( int* aKIFACEversion, int aKIWAYversion, PGM_BASE* aProgram )
113 {
114  process = (PGM_BASE*) aProgram;
115  return &kiface;
116 }
117 
118 
120 {
121  wxASSERT( process ); // KIFACE_GETTER has already been called.
122  return *process;
123 }
124 
125 
127 
129 
130 
131 // A short lived implementation. cvpcb will get combine into pcbnew shortly, so
132 // we skip setting KISYSMOD here for now. User should set the environment
133 // variable.
134 
135 bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
136 {
137  // This is process level, not project level, initialization of the DSO.
138 
139  // Do nothing in here pertinent to a project!
140 
141  start_common( aCtlBits );
142 
143  /* Now that there are no *.mod files in the standard library, this function
144  has no utility. User should simply set the variable manually.
145  Looking for *.mod files which do not exist is fruitless.
146 
147  // SetFootprintLibTablePath();
148  */
149 
150  try
151  {
152  // The global table is not related to a specific project. All projects
153  // will use the same global table. So the KIFACE::OnKifaceStart() contract
154  // of avoiding anything project specific is not violated here.
155 
156  if( !FP_LIB_TABLE::LoadGlobalTable( GFootprintTable ) )
157  {
158  DisplayInfoMessage( NULL, _(
159  "You have run CvPcb for the first time using the "
160  "new footprint library table method for finding "
161  "footprints.\nCvPcb has either copied the default "
162  "table or created an empty table in your home "
163  "folder.\nYou must first configure the library "
164  "table to include all footprint libraries not "
165  "included with KiCad.\nSee the \"Footprint Library "
166  "Table\" section of the CvPcb documentation for "
167  "more information." ) );
168  }
169  }
170  catch( const IO_ERROR& ioe )
171  {
173  nullptr,
174  _( "An error occurred attempting to load the global footprint library table" ),
175  ioe.What() );
176  return false;
177  }
178 
179  return true;
180 }
181 
183 {
184  end_common();
185 }
Class KIFACE_I is a KIFACE (I)mplementation, with some features useful for DSOs which implement a KIF...
Definition: kiface_i.h:37
bool start_common(int aCtlBits)
Common things to do for a top program module, during OnKifaceStart().
Definition: kiface_i.cpp:90
FP_LIB_TABLE GFootprintTable
!!!!!!!!!!!!!! This code is obsolete because of the merge into pcbnew, don&#39;t bother with it...
Definition: cvpcb.cpp:128
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Function DisplayErrorMessage displays an error message with aMessage.
Definition: confirm.cpp:259
This file is part of the common library.
Class PGM_BASE keeps program (whole process) data for KiCad programs.
Definition: pgm_base.h:149
Definition: cvpcb.cpp:50
void * IfaceOrAddress(int aDataId) override
Function IfaceOrAddress return a pointer to the requested object.
Definition: cvpcb.cpp:92
KIFACE_I & Kiface()
Global KIFACE_I "get" accessor.
Definition: cvpcb.cpp:107
Class DISPLAY_FOOTPRINTS_FRAME is used to display footprints.
This file contains miscellaneous commonly used macros and functions.
void OnKifaceEnd() override
Function OnKifaceEnd is called just once just before the DSO is to be unloaded.
Definition: cvpcb.cpp:182
KIFACE * KIFACE_GETTER(int *aKIFACEversion, int aKIWAYversion, PGM_BASE *aProgram)
No name mangling. Each KIFACE (DSO/DLL) will implement this once.
static bool LoadGlobalTable(FP_LIB_TABLE &aTable)
Function LoadGlobalTable loads the global footprint library table into aTable.
void end_common()
Common things to do for a top program module, during OnKifaceEnd();.
Definition: kiface_i.cpp:100
CV::IFACE KIFACE_I kiface("cvpcb", KIWAY::FACE_CVPCB)
static PGM_BASE * process
Definition: cvpcb.cpp:104
Class KIWAY is a minimalistic software bus for communications between various DLLs/DSOs (DSOs) within...
Definition: kiway.h:258
FACE_T
Known KIFACE implementations.
Definition: kiway.h:264
int aKIWAYversion
Definition: cvpcb.cpp:112
bool OnKifaceStart(PGM_BASE *aProgram, int aCtlBits) override
Function OnKifaceStart is called just once shortly after the DSO is loaded.
Definition: cvpcb.cpp:135
virtual const wxString What() const
A composite of Problem() and Where()
Definition: exceptions.cpp:33
see class PGM_BASE
IFACE(const char *aName, KIWAY::FACE_T aType)
Definition: cvpcb.cpp:56
Class KIFACE is used by a participant in the KIWAY alchemy.
Definition: kiway.h:151
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: cvpcb.cpp:119
void DisplayInfoMessage(wxWindow *aParent, const wxString &aMessage, const wxString &aExtraInfo)
Function DisplayInfoMessage displays an informational message box with aMessage.
Definition: confirm.cpp:277
Struct IO_ERROR is a class used to hold an error message and may be used when throwing exceptions con...
Definition: ki_exception.h:76
MY_API(KIFACE *) KIFACE_GETTER(int *aKIFACEversion
const wxString EquFileExtension(wxT("equ"))
int PGM_BASE * aProgram
Definition: cvpcb.cpp:113
The CvPcb application main window.
wxWindow * CreateWindow(wxWindow *aParent, int aClassId, KIWAY *aKiway, int aCtlBits=0) override
Function CreateWindow creates a wxWindow for the current project.
Definition: cvpcb.cpp:64