KiCad PCB EDA Suite
Loading...
Searching...
No Matches
pcbnew.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) 2016 Jean-Pierre Charras, jp.charras at wanadoo.fr
5 * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <[email protected]>
6 * Copyright (C) 1992-2023 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
27#include <pgm_base.h>
29#include <confirm.h>
30#include <kiface_base.h>
31#include <kiface_ids.h>
32#include <pcb_edit_frame.h>
33#include <eda_dde.h>
34#include <macros.h>
35#include <wx/snglinst.h>
36#include <gestfich.h>
37#include <paths.h>
38#include <pcbnew_settings.h>
42#include <fp_lib_table.h>
48#include <footprint_info_impl.h>
53#include <panel_edit_options.h>
62#include <python_scripting.h>
63
64#include "invoke_pcb_dialog.h"
66#include "pcbnew_jobs_handler.h"
67
68#include <wx/crt.h>
69
70/* init functions defined by swig */
71
72extern "C" PyObject* PyInit__pcbnew( void );
73
74namespace PCB {
75
76static struct IFACE : public KIFACE_BASE, public UNITS_PROVIDER
77{
78 // Of course all are virtual overloads, implementations of the KIFACE.
79
80 IFACE( const char* aName, KIWAY::FACE_T aType ) :
81 KIFACE_BASE( aName, aType ),
83 {}
84
85 bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits, KIWAY* aKiway ) override;
86
87 void Reset() override;
88
89 void OnKifaceEnd() override;
90
91 wxWindow* CreateKiWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway,
92 int aCtlBits = 0 ) override
93 {
94 switch( aClassId )
95 {
97 {
98 auto frame = new PCB_EDIT_FRAME( aKiway, aParent );
99
100 // give the scripting helpers access to our frame
102
103 if( Kiface().IsSingle() )
104 {
105 // only run this under single_top, not under a project manager.
106 frame->CreateServer( KICAD_PCB_PORT_SERVICE_NUMBER );
107 }
108
109 return frame;
110 }
111
113 return new FOOTPRINT_EDIT_FRAME( aKiway, aParent );
114
116 return new FOOTPRINT_VIEWER_FRAME( aKiway, aParent );
117
119 return new FOOTPRINT_CHOOSER_FRAME( aKiway, aParent );
120
122 return new FOOTPRINT_WIZARD_FRAME( aKiway, aParent, FRAME_T( aClassId ) );
123
125 return FOOTPRINT_PREVIEW_PANEL::New( aKiway, aParent, this );
126
128 {
129 DIALOG_CONFIGURE_PATHS dlg( aParent );
130
131 // The dialog's constructor probably failed to set its Kiway because the
132 // dynamic_cast fails when aParent was allocated by a separate compilation
133 // module. So set it directly.
134 dlg.SetKiway( &dlg, aKiway );
135
136 // Use QuasiModal so that HTML help window will work
137 if( dlg.ShowQuasiModal() == wxID_OK )
138 aKiway->CommonSettingsChanged( true, false );
139
140 // Dialog has completed; nothing to return.
141 return nullptr;
142 }
143
145 InvokePcbLibTableEditor( aKiway, aParent );
146 // Dialog has completed; nothing to return.
147 return nullptr;
148
150 {
153
154 return new PANEL_PCB_DISPLAY_OPTIONS( aParent, cfg );
155 }
156
157 case PANEL_FP_GRIDS:
158 {
161 EDA_BASE_FRAME* frame = aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
162
163 if( !frame )
164 frame = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
165
166 if( !frame )
167 frame = aKiway->Player( FRAME_PCB_EDITOR, false );
168
169 if( frame )
170 SetUserUnits( frame->GetUserUnits() );
171
172 return new PANEL_GRID_SETTINGS( aParent, this, frame, cfg, FRAME_FOOTPRINT_EDITOR );
173 }
174
176 {
179
180 return new PANEL_PCBNEW_DISPLAY_ORIGIN( aParent, cfg, FRAME_FOOTPRINT_EDITOR );
181 }
182
184 {
185 EDA_BASE_FRAME* frame = aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
186
187 if( !frame )
188 frame = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
189
190 if( !frame )
191 frame = aKiway->Player( FRAME_PCB_EDITOR, false );
192
193 if( frame )
194 SetUserUnits( frame->GetUserUnits() );
195
196 return new PANEL_EDIT_OPTIONS( aParent, this, frame, true );
197 }
198
200 {
201 EDA_BASE_FRAME* frame = aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
202
203 if( !frame )
204 frame = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
205
206 if( !frame )
207 frame = aKiway->Player( FRAME_PCB_EDITOR, false );
208
209 if( frame )
210 SetUserUnits( frame->GetUserUnits() );
211
212 return new PANEL_FP_EDITOR_DEFAULTS( aParent, this );
213 }
214
215 case PANEL_FP_COLORS:
216 return new PANEL_FP_EDITOR_COLOR_SETTINGS( aParent );
217
219 {
222
223 return new PANEL_PCB_DISPLAY_OPTIONS( aParent, cfg );
224 }
225
226 case PANEL_PCB_GRIDS:
227 {
230 EDA_BASE_FRAME* frame = aKiway->Player( FRAME_PCB_EDITOR, false );
231
232 if( !frame )
233 frame = aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
234
235 if( !frame )
236 frame = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
237
238 if( frame )
239 SetUserUnits( frame->GetUserUnits() );
240
241 return new PANEL_GRID_SETTINGS( aParent, this, frame, cfg, FRAME_PCB_EDITOR );
242 }
243
245 {
248
249 return new PANEL_PCBNEW_DISPLAY_ORIGIN( aParent, cfg, FRAME_PCB_EDITOR );
250 }
251
253 {
254 EDA_BASE_FRAME* frame = aKiway->Player( FRAME_PCB_EDITOR, false );
255
256 if( !frame )
257 frame = aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
258
259 if( !frame )
260 frame = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
262 if( frame )
264
265 return new PANEL_EDIT_OPTIONS( aParent, this, frame, false );
267
269 {
270 BOARD* board = nullptr;
271 EDA_BASE_FRAME* boardProvider = aKiway->Player( FRAME_PCB_EDITOR, false );
272
273 if( boardProvider )
274 board = static_cast<PCB_EDIT_FRAME*>( boardProvider )->GetBoard();
275
276 return new PANEL_PCBNEW_COLOR_SETTINGS( aParent, board );
277 }
278
280 return new PANEL_PCBNEW_ACTION_PLUGINS( aParent );
281
283 return new PANEL_3D_DISPLAY_OPTIONS( aParent );
284
285 case PANEL_3DV_OPENGL:
286 return new PANEL_3D_OPENGL_OPTIONS( aParent );
287
289 return new PANEL_3D_RAYTRACING_OPTIONS( aParent );
290
291 default:
292 return nullptr;
293 }
294 }
295
306 void* IfaceOrAddress( int aDataId ) override
307 {
308 switch( aDataId )
309 {
310 // Return a pointer to the global instance of the footprint list.
312 return (void*) &GFootprintList;
313
314 // Return a new FP_LIB_TABLE with the global table installed as a fallback.
316 return (void*) new FP_LIB_TABLE( &GFootprintTable );
317
318 // Return a pointer to the global instance of the global footprint table.
320 return (void*) &GFootprintTable;
321
323 return reinterpret_cast<void*>( PyInit__pcbnew );
324
325 default:
326 return nullptr;
327 }
328 }
329
335 void SaveFileAs( const wxString& aProjectBasePath, const wxString& aSrcProjectName,
336 const wxString& aNewProjectBasePath, const wxString& aNewProjectName,
337 const wxString& aSrcFilePath, wxString& aErrors ) override;
338
339 int HandleJob( JOB* aJob ) override;
340
341 bool HandleJobConfig( JOB* aJob, wxWindow* aParent ) override;
342
343private:
344 bool loadGlobalLibTable();
345
346 std::unique_ptr<PCBNEW_JOBS_HANDLER> m_jobHandler;
347
348} kiface( "pcbnew", KIWAY::FACE_PCB );
349
350} // namespace
351
352
353using namespace PCB;
354
355
357
358
359// KIFACE_GETTER's actual spelling is a substitution macro found in kiway.h.
360// KIFACE_GETTER will not have name mangling due to declaration in kiway.h.
361KIFACE_API KIFACE* KIFACE_GETTER( int* aKIFACEversion, int aKiwayVersion, PGM_BASE* aProgram )
362{
363 return &kiface;
364}
365
366
371
376
377
378bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits, KIWAY* aKiway )
379{
380 // This is process-level-initialization, not project-level-initialization of the DSO.
381 // Do nothing in here pertinent to a project!
385
386 // We intentionally register KifaceSettings after FOOTPRINT_EDITOR_SETTINGS and EDA_3D_VIEWER_SETTINGS
387 // In legacy configs, many settings were in a single editor config and the migration routine
388 // for the main editor file will try and call into the now separate settings stores
389 // to move the settings into them
391
392 // Register the footprint editor settings as well because they share a KiFACE and need to be
393 // loaded prior to use to avoid threading deadlocks
395
396 start_common( aCtlBits );
397
398 if( !loadGlobalLibTable() )
399 {
400 // we didnt get anywhere deregister the
402 aProgram->GetSettingsManager().GetAppSettings<CVPCB_SETTINGS>(), false );
403
404 aProgram->GetSettingsManager().FlushAndRelease( KifaceSettings(), false );
405
408
411
412 return false;
413 }
414
415 m_jobHandler = std::make_unique<PCBNEW_JOBS_HANDLER>( aKiway );
416
418 {
419 m_jobHandler->SetReporter( &CLI_REPORTER::GetInstance() );
420 m_jobHandler->SetProgressReporter( &CLI_PROGRESS_REPORTER::GetInstance() );
421 }
422
423 return true;
424}
425
426
428{
430}
431
432
434{
435 wxFileName fn = FP_LIB_TABLE::GetGlobalTableFileName();
436
437 if( !fn.FileExists() )
438 {
439 if( !( m_start_flags & KFCTL_CLI ) )
440 {
441 // Ensure the splash screen does not hide the dialog:
442 Pgm().HideSplash();
443
444 DIALOG_GLOBAL_FP_LIB_TABLE_CONFIG fpDialog( nullptr );
445
446 if( fpDialog.ShowModal() != wxID_OK )
447 return false;
448 }
449 }
450 else
451 {
452 try
453 {
454 // The global table is not related to a specific project. All projects
455 // will use the same global table. So the KIFACE::OnKifaceStart() contract
456 // of avoiding anything project specific is not violated here.
458 return false;
459 }
460 catch( const IO_ERROR& ioe )
461 {
462 // if we are here, a incorrect global footprint library table was found.
463 // Incorrect global symbol library table is not a fatal error:
464 // the user just has to edit the (partially) loaded table.
465 wxString msg = _( "An error occurred attempting to load the global footprint library "
466 "table.\n"
467 "Please edit this global footprint library table in Preferences "
468 "menu." );
469
470 DisplayErrorMessage( nullptr, msg, ioe.What() );
471 }
472 }
473
474 return true;
475}
476
477
479{
480 end_common();
481}
482
483
484void IFACE::SaveFileAs( const wxString& aProjectBasePath, const wxString& aSrcProjectName,
485 const wxString& aNewProjectBasePath, const wxString& aNewProjectName,
486 const wxString& aSrcFilePath, wxString& aErrors )
487{
488 wxFileName destFile( aSrcFilePath );
489 wxString destPath = destFile.GetPathWithSep();
490 wxUniChar pathSep = wxFileName::GetPathSeparator();
491 wxString ext = destFile.GetExt();
492
493 if( destPath.StartsWith( aProjectBasePath + pathSep ) )
494 destPath.Replace( aProjectBasePath, aNewProjectBasePath, false );
495
496 wxString srcProjectFootprintLib = pathSep + aSrcProjectName + wxT( ".pretty" ) + pathSep;
497 wxString newProjectFootprintLib = pathSep + aNewProjectName + wxT( ".pretty" ) + pathSep;
498
499 destPath.Replace( srcProjectFootprintLib, newProjectFootprintLib, true );
500
501 destFile.SetPath( destPath );
502
505 {
506 if( destFile.GetName() == aSrcProjectName )
507 destFile.SetName( aNewProjectName );
508
509 KiCopyFile( aSrcFilePath, destFile.GetFullPath(), aErrors );
510 }
511 else if( ext == FILEEXT::LegacyPcbFileExtension )
512 {
513 if( destFile.GetName() == aSrcProjectName )
514 destFile.SetName( aNewProjectName );
515
516 KiCopyFile( aSrcFilePath, destFile.GetFullPath(), aErrors );
517 }
520 {
521 // Footprints are not project-specific. Keep their source names.
522 KiCopyFile( aSrcFilePath, destFile.GetFullPath(), aErrors );
523 }
525 {
526 // TODO
527 }
528 else if( ext == wxT( "rpt" ) )
529 {
530 // DRC must be the "gold standard". Since we can't guarantee that there aren't
531 // any non-deterministic cases in the save-as algorithm, we don't want to certify
532 // the result with the source's DRC report. Therefore copy it under the old
533 // name.
534 KiCopyFile( aSrcFilePath, destFile.GetFullPath(), aErrors );
535 }
536 else if( destFile.GetName() == wxT( "fp-lib-table" ) )
537 {
538 try
539 {
540 FP_LIB_TABLE fpLibTable;
541 fpLibTable.Load( aSrcFilePath );
542
543 for( unsigned i = 0; i < fpLibTable.GetCount(); i++ )
544 {
545 LIB_TABLE_ROW& row = fpLibTable.At( i );
546 wxString uri = row.GetFullURI();
547
548 uri.Replace( wxT( "/" ) + aSrcProjectName + wxT( ".pretty" ),
549 wxT( "/" ) + aNewProjectName + wxT( ".pretty" ) );
550
551 row.SetFullURI( uri );
552 }
553
554 fpLibTable.Save( destFile.GetFullPath() );
555 }
556 catch( ... )
557 {
558 wxString msg;
559
560 if( !aErrors.empty() )
561 aErrors += wxT( "\n" );
562
563 msg.Printf( _( "Cannot copy file '%s'." ), destFile.GetFullPath() );
564 aErrors += msg;
565 }
566 }
567 else
568 {
569 wxFAIL_MSG( wxT( "Unexpected filetype for Pcbnew::SaveFileAs()" ) );
570 }
571}
572
573
575{
576 return m_jobHandler->RunJob( aJob );
577}
578
579
580bool IFACE::HandleJobConfig( JOB* aJob, wxWindow* aParent )
581{
582 return m_jobHandler->HandleJobConfig( aJob, aParent );
583}
constexpr EDA_IU_SCALE pcbIUScale
Definition: base_units.h:108
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
Definition: app_settings.h:92
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:290
static PROGRESS_REPORTER & GetInstance()
static REPORTER & GetInstance()
Definition: reporter.cpp:142
int ShowQuasiModal()
The base frame for deriving all KiCad main window classes.
static FOOTPRINT_PREVIEW_PANEL * New(KIWAY *aKiway, wxWindow *aParent, UNITS_PROVIDER *aUnitsProvider)
Component library viewer main window.
static bool LoadGlobalTable(FP_LIB_TABLE &aTable)
Load the global footprint library table into aTable.
static wxString GetGlobalTableFileName()
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
Definition: ki_exception.h:77
virtual const wxString What() const
A composite of Problem() and Where()
Definition: exceptions.cpp:30
An simple container class that lets us dispatch output jobs to kifaces.
Definition: job.h:79
A KIFACE implementation.
Definition: kiface_base.h:39
void InitSettings(APP_SETTINGS_BASE *aSettings)
Definition: kiface_base.h:97
void end_common()
Common things to do for a top program module, during OnKifaceEnd();.
Definition: kiface_base.cpp:42
APP_SETTINGS_BASE * KifaceSettings() const
Definition: kiface_base.h:95
bool start_common(int aCtlBits)
Common things to do for a top program module, during OnKifaceStart().
Definition: kiface_base.cpp:32
int m_start_flags
flags provided in OnKifaceStart()
Definition: kiface_base.h:125
bool IsSingle() const
Is this KIFACE running under single_top?
Definition: kiface_base.h:107
void SetKiway(wxWindow *aDest, KIWAY *aKiway)
It is only used for debugging, since "this" is not a wxWindow*.
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
Definition: kiway.h:284
virtual void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged)
Call CommonSettingsChanged() on all KIWAY_PLAYERs.
Definition: kiway.cpp:617
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
Definition: kiway.cpp:406
FACE_T
Known KIFACE implementations.
Definition: kiway.h:290
@ FACE_PCB
pcbnew DSO
Definition: kiway.h:292
Hold a record identifying a library accessed by the appropriate plug in object in the LIB_TABLE.
void SetFullURI(const wxString &aFullURI)
Change the full URI for the library.
const wxString GetFullURI(bool aSubstituted=false) const
Return the full location specifying URI for the LIB, either in original UI form or in environment var...
LIB_TABLE_ROW & At(unsigned aIndex)
Get the 'n'th LIB_TABLE_ROW object.
void Load(const wxString &aFileName)
Load the library table using the path defined by aFileName aFallBackTable.
unsigned GetCount() const
Get the number of rows contained in the table.
void Save(const wxString &aFileName) const
Write this library table to aFileName in s-expression form.
The main frame for Pcbnew.
Container for data for KiCad programs.
Definition: pgm_base.h:102
virtual SETTINGS_MANAGER & GetSettingsManager() const
Definition: pgm_base.h:142
void HideSplash()
Definition: pgm_base.cpp:446
T * GetAppSettings()
Returns a handle to the a given settings by type If the settings have already been loaded,...
T * RegisterSettings(T *aSettings, bool aLoadNow=true)
Takes ownership of the pointer passed in.
void FlushAndRelease(JSON_SETTINGS *aSettings, bool aSave=true)
If the given settings object is registered, save it to disk and unregister it.
EDA_UNITS GetUserUnits() const
void SetUserUnits(EDA_UNITS aUnits)
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
Definition: confirm.cpp:195
This file is part of the common library.
FP_LIB_TABLE GFootprintTable
The global footprint library table.
Definition: cvpcb.cpp:150
#define _(s)
DDE server & client.
#define KICAD_PCB_PORT_SERVICE_NUMBER
< Pcbnew listens on this port for commands from Eeschema
Definition: eda_dde.h:40
EDA_UNITS
Definition: eda_units.h:46
FOOTPRINT_LIST_IMPL GFootprintList
The global footprint info table.
Definition: cvpcb.cpp:156
FRAME_T
The set of EDA_BASE_FRAME derivatives, typically stored in EDA_BASE_FRAME::m_Ident.
Definition: frame_type.h:33
@ PANEL_PCB_GRIDS
Definition: frame_type.h:93
@ FRAME_PCB_EDITOR
Definition: frame_type.h:42
@ FRAME_FOOTPRINT_VIEWER
Definition: frame_type.h:45
@ PANEL_3DV_OPENGL
Definition: frame_type.h:100
@ PANEL_PCB_ORIGINS_AXES
Definition: frame_type.h:97
@ FRAME_FOOTPRINT_WIZARD
Definition: frame_type.h:46
@ PANEL_PCB_EDIT_OPTIONS
Definition: frame_type.h:94
@ PANEL_FP_DISPLAY_OPTIONS
Definition: frame_type.h:85
@ PANEL_PCB_COLORS
Definition: frame_type.h:95
@ PANEL_3DV_RAYTRACING
Definition: frame_type.h:101
@ DIALOG_PCB_LIBRARY_TABLE
Definition: frame_type.h:117
@ FRAME_FOOTPRINT_PREVIEW
Definition: frame_type.h:48
@ FRAME_FOOTPRINT_CHOOSER
Definition: frame_type.h:44
@ PANEL_FP_GRIDS
Definition: frame_type.h:86
@ PANEL_FP_ORIGINS_AXES
Definition: frame_type.h:90
@ PANEL_PCB_DISPLAY_OPTS
Definition: frame_type.h:92
@ DIALOG_CONFIGUREPATHS
Definition: frame_type.h:114
@ PANEL_FP_COLORS
Definition: frame_type.h:88
@ FRAME_FOOTPRINT_EDITOR
Definition: frame_type.h:43
@ PANEL_FP_EDIT_OPTIONS
Definition: frame_type.h:87
@ PANEL_PCB_ACTION_PLUGINS
Definition: frame_type.h:96
@ PANEL_FP_DEFAULT_VALUES
Definition: frame_type.h:89
@ PANEL_3DV_DISPLAY_OPTIONS
Definition: frame_type.h:99
void KiCopyFile(const wxString &aSrcPath, const wxString &aDestPath, wxString &aErrors)
Definition: gestfich.cpp:309
static const std::string LegacyPcbFileExtension
static const std::string BackupFileSuffix
static const std::string LegacyFootprintLibPathExtension
static const std::string FootprintAssignmentFileExtension
static const std::string KiCadFootprintFileExtension
static const std::string KiCadPcbFileExtension
#define KIFACE_API
Definition: import_export.h:61
@ KIFACE_SCRIPTING_LEGACY
Definition: kiface_ids.h:57
@ KIFACE_FOOTPRINT_LIST
Return a pointer to the global instance of FOOTPRINT_LIST from pcbnew.
Definition: kiface_ids.h:39
@ KIFACE_GLOBAL_FOOTPRINT_TABLE
Return the global FP_LIB_TABLE.
Definition: kiface_ids.h:53
@ KIFACE_NEW_FOOTPRINT_TABLE
Return a new FP_LIB_TABLE with the global table installed as a fallback.
Definition: kiface_ids.h:46
#define KFCTL_CLI
Running as CLI app.
Definition: kiway.h:160
#define KIFACE_GETTER
Definition: kiway.h:110
This file contains miscellaneous commonly used macros and functions.
PCB::IFACE KIFACE_BASE, UNITS_PROVIDER kiface("pcbnew", KIWAY::FACE_PCB)
void InvokePcbLibTableEditor(KIWAY *aKiway, wxWindow *aCaller)
Function InvokePcbLibTableEditor shows the modal DIALOG_FP_LIB_TABLE for purposes of editing the glob...
PyObject * PyInit__pcbnew(void)
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
Definition: pcbnew.cpp:356
FP_LIB_TABLE GFootprintTable
The global footprint library table.
Definition: pcbnew.cpp:370
FOOTPRINT_LIST_IMPL GFootprintList
The global footprint info table.
Definition: pcbnew.cpp:375
void ScriptingSetPcbEditFrame(PCB_EDIT_FRAME *aPcbEditFrame)
BOARD * GetBoard()
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: pgm_base.cpp:1060
see class PGM_BASE
bool OnKifaceStart(PGM_BASE *aProgram, int aCtlBits, KIWAY *aKiway) override
Typically start_common() is called from here.
Implement a participant in the KIWAY alchemy.
Definition: kiway.h:151
bool OnKifaceStart(PGM_BASE *aProgram, int aCtlBits, KIWAY *aKiway) override
Typically start_common() is called from here.
Definition: pcbnew.cpp:378
void SaveFileAs(const wxString &aProjectBasePath, const wxString &aSrcProjectName, const wxString &aNewProjectBasePath, const wxString &aNewProjectName, const wxString &aSrcFilePath, wxString &aErrors) override
Saving a file under a different name is delegated to the various KIFACEs because the project doesn't ...
Definition: pcbnew.cpp:484
void * IfaceOrAddress(int aDataId) override
Return a pointer to the requested object.
Definition: pcbnew.cpp:306
void Reset() override
Reloads global state.
Definition: pcbnew.cpp:427
wxWindow * CreateKiWindow(wxWindow *aParent, int aClassId, KIWAY *aKiway, int aCtlBits=0) override
Create a wxWindow for the current project.
Definition: pcbnew.cpp:91
IFACE(const char *aName, KIWAY::FACE_T aType)
Definition: pcbnew.cpp:80
bool loadGlobalLibTable()
Definition: pcbnew.cpp:433
std::unique_ptr< PCBNEW_JOBS_HANDLER > m_jobHandler
Definition: pcbnew.cpp:346
bool HandleJobConfig(JOB *aJob, wxWindow *aParent) override
Definition: pcbnew.cpp:580
void OnKifaceEnd() override
Called just once just before the DSO is to be unloaded.
Definition: pcbnew.cpp:478
int HandleJob(JOB *aJob) override
Definition: pcbnew.cpp:574
Definition of file extensions used in Kicad.