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 The 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>
52#include <panel_edit_options.h>
62#include <python_scripting.h>
63
64#include "invoke_pcb_dialog.h"
66#include "pcbnew_jobs_handler.h"
67
71#include <toolbars_pcb_editor.h>
72
73#include <wx/crt.h>
74
75/* init functions defined by swig */
76
77extern "C" PyObject* PyInit__pcbnew( void );
78
79namespace PCB {
80
81static struct IFACE : public KIFACE_BASE, public UNITS_PROVIDER
82{
83 // Of course all are virtual overloads, implementations of the KIFACE.
84
85 IFACE( const char* aName, KIWAY::FACE_T aType ) :
86 KIFACE_BASE( aName, aType ),
88 {}
89
90 bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits, KIWAY* aKiway ) override;
91
92 void Reset() override;
93
94 void OnKifaceEnd() override;
95
96 wxWindow* CreateKiWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 ) override
97 {
98 switch( aClassId )
99 {
100 case FRAME_PCB_EDITOR:
101 {
102 auto frame = new PCB_EDIT_FRAME( aKiway, aParent );
103
104 // give the scripting helpers access to our frame
106
107 if( Kiface().IsSingle() )
108 {
109 // only run this under single_top, not under a project manager.
110 frame->CreateServer( KICAD_PCB_PORT_SERVICE_NUMBER );
111 }
112
113 return frame;
114 }
115
117 return new FOOTPRINT_EDIT_FRAME( aKiway, aParent );
118
120 return new FOOTPRINT_VIEWER_FRAME( aKiway, aParent );
121
123 return new FOOTPRINT_CHOOSER_FRAME( aKiway, aParent );
124
126 return new FOOTPRINT_WIZARD_FRAME( aKiway, aParent, FRAME_T( aClassId ) );
127
129 return FOOTPRINT_PREVIEW_PANEL::New( aKiway, aParent, this );
130
132 {
133 DIALOG_CONFIGURE_PATHS dlg( aParent );
134
135 // The dialog's constructor probably failed to set its Kiway because the
136 // dynamic_cast fails when aParent was allocated by a separate compilation
137 // module. So set it directly.
138 dlg.SetKiway( &dlg, aKiway );
139
140 // Use QuasiModal so that HTML help window will work
141 if( dlg.ShowQuasiModal() == wxID_OK )
143
144 // Dialog has completed; nothing to return.
145 return nullptr;
146 }
147
149 InvokePcbLibTableEditor( aKiway, aParent );
150 // Dialog has completed; nothing to return.
151 return nullptr;
152
154 return new PANEL_DISPLAY_OPTIONS( aParent, GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>( "fpedit" ) );
155
156 case PANEL_FP_GRIDS:
157 {
159 EDA_BASE_FRAME* frame = aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
160
161 if( !frame )
162 frame = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
163
164 if( !frame )
165 frame = aKiway->Player( FRAME_PCB_EDITOR, false );
166
167 if( frame )
168 SetUserUnits( frame->GetUserUnits() );
169
170 return new PANEL_GRID_SETTINGS( aParent, this, frame, cfg, FRAME_FOOTPRINT_EDITOR );
171 }
172
176
178 {
179 EDA_BASE_FRAME* frame = aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
180
181 if( !frame )
182 frame = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
183
184 if( !frame )
185 frame = aKiway->Player( FRAME_PCB_EDITOR, false );
186
187 if( frame )
188 SetUserUnits( frame->GetUserUnits() );
189
190 return new PANEL_EDIT_OPTIONS( aParent, this, frame, true );
191 }
192
194 {
195 EDA_BASE_FRAME* frame = aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
196
197 if( !frame )
198 frame = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
199
200 if( !frame )
201 frame = aKiway->Player( FRAME_PCB_EDITOR, false );
202
203 if( frame )
204 SetUserUnits( frame->GetUserUnits() );
205
206 return new PANEL_FP_EDITOR_FIELD_DEFAULTS( aParent );
207 }
208
210 {
211 EDA_BASE_FRAME* frame = aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
212
213 if( !frame )
214 frame = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
215
216 if( !frame )
217 frame = aKiway->Player( FRAME_PCB_EDITOR, false );
218
219 if( frame )
220 SetUserUnits( frame->GetUserUnits() );
221
222 return new PANEL_FP_EDITOR_GRAPHICS_DEFAULTS( aParent, this );
223 }
224
226 {
229
230 std::vector<TOOL_ACTION*> actions;
231 std::vector<ACTION_TOOLBAR_CONTROL*> controls;
232
234 actions.push_back( action );
235
237 controls.push_back( control );
238
239 return new PANEL_TOOLBAR_CUSTOMIZATION( aParent, cfg, tb, actions, controls );
240 }
241
242 case PANEL_FP_COLORS:
243 return new PANEL_FP_EDITOR_COLOR_SETTINGS( aParent );
244
246 return new PANEL_DISPLAY_OPTIONS( aParent, GetAppSettings<PCBNEW_SETTINGS>( "pcbnew" ) );
247
248 case PANEL_PCB_GRIDS:
249 {
251 EDA_BASE_FRAME* frame = aKiway->Player( FRAME_PCB_EDITOR, false );
252
253 if( !frame )
254 frame = aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
255
256 if( !frame )
257 frame = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
258
259 if( frame )
260 SetUserUnits( frame->GetUserUnits() );
261
262 return new PANEL_GRID_SETTINGS( aParent, this, frame, cfg, FRAME_PCB_EDITOR );
263 }
264
266 return new PANEL_PCBNEW_DISPLAY_ORIGIN( aParent, GetAppSettings<PCBNEW_SETTINGS>( "pcbnew" ),
268
270 {
271 EDA_BASE_FRAME* frame = aKiway->Player( FRAME_PCB_EDITOR, false );
272
273 if( !frame )
274 frame = aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
275
276 if( !frame )
277 frame = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
278
279 if( frame )
280 SetUserUnits( frame->GetUserUnits() );
281
282 return new PANEL_EDIT_OPTIONS( aParent, this, frame, false );
283 }
284
285 case PANEL_PCB_COLORS:
286 {
287 BOARD* board = nullptr;
288 EDA_BASE_FRAME* boardProvider = aKiway->Player( FRAME_PCB_EDITOR, false );
289
290 if( boardProvider )
291 board = static_cast<PCB_EDIT_FRAME*>( boardProvider )->GetBoard();
292
293 return new PANEL_PCBNEW_COLOR_SETTINGS( aParent, board );
294 }
295
297 {
298 APP_SETTINGS_BASE* cfg = GetAppSettings<PCBNEW_SETTINGS>( "pcbnew" );
299 TOOLBAR_SETTINGS* tb = GetToolbarSettings<PCB_EDIT_TOOLBAR_SETTINGS>( "pcbnew-toolbars" );
300
301 std::vector<TOOL_ACTION*> actions;
302 std::vector<ACTION_TOOLBAR_CONTROL*> controls;
305 actions.push_back( action );
306
308 controls.push_back( control );
310 return new PANEL_TOOLBAR_CUSTOMIZATION( aParent, cfg, tb, actions, controls );
311 }
314 return new PANEL_PCBNEW_ACTION_PLUGINS( aParent );
315
317 return new PANEL_3D_DISPLAY_OPTIONS( aParent );
318
319 case PANEL_3DV_OPENGL:
320 return new PANEL_3D_OPENGL_OPTIONS( aParent );
321
323 return new PANEL_3D_RAYTRACING_OPTIONS( aParent );
324
326 {
329
330 std::vector<TOOL_ACTION*> actions;
331 std::vector<ACTION_TOOLBAR_CONTROL*> controls;
332
334 actions.push_back( action );
335
337 controls.push_back( control );
338
339 return new PANEL_TOOLBAR_CUSTOMIZATION( aParent, cfg, tb, actions, controls );
340 }
341
342 default:
343 return nullptr;
344 }
345 }
346
357 void* IfaceOrAddress( int aDataId ) override
358 {
359 switch( aDataId )
360 {
361 // Return a pointer to the global instance of the footprint list.
363 return (void*) &GFootprintList;
364
365 // Return a new FP_LIB_TABLE with the global table installed as a fallback.
367 return (void*) new FP_LIB_TABLE( &GFootprintTable );
368
369 // Return a pointer to the global instance of the global footprint table.
371 return (void*) &GFootprintTable;
372
374 return reinterpret_cast<void*>( PyInit__pcbnew );
375
376 default:
377 return nullptr;
378 }
379 }
380
386 void SaveFileAs( const wxString& aProjectBasePath, const wxString& aSrcProjectName,
387 const wxString& aNewProjectBasePath, const wxString& aNewProjectName,
388 const wxString& aSrcFilePath, wxString& aErrors ) override;
389
390 int HandleJob( JOB* aJob, REPORTER* aReporter, PROGRESS_REPORTER* aProgressReporter ) override;
391
392 bool HandleJobConfig( JOB* aJob, wxWindow* aParent ) override;
393
394private:
395 bool loadGlobalLibTable();
396
397 std::unique_ptr<PCBNEW_JOBS_HANDLER> m_jobHandler;
398
399} kiface( "pcbnew", KIWAY::FACE_PCB );
400
401} // namespace
402
403
404using namespace PCB;
405
406
408
409
410// KIFACE_GETTER's actual spelling is a substitution macro found in kiway.h.
411// KIFACE_GETTER will not have name mangling due to declaration in kiway.h.
412KIFACE_API KIFACE* KIFACE_GETTER( int* aKIFACEversion, int aKiwayVersion, PGM_BASE* aProgram )
413{
414 return &kiface;
415}
416
417
422
427
428
429bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits, KIWAY* aKiway )
430{
431 // This is process-level-initialization, not project-level-initialization of the DSO.
432 // Do nothing in here pertinent to a project!
434
435 SETTINGS_MANAGER& mgr = aProgram->GetSettingsManager();
436
439
440 // We intentionally register KifaceSettings after FOOTPRINT_EDITOR_SETTINGS and EDA_3D_VIEWER_SETTINGS
441 // In legacy configs, many settings were in a single editor config and the migration routine
442 // for the main editor file will try and call into the now separate settings stores
443 // to move the settings into them
445
446 // Register the footprint editor settings as well because they share a KiFACE and need to be
447 // loaded prior to use to avoid threading deadlocks
449
450 start_common( aCtlBits );
451
452 if( !loadGlobalLibTable() )
453 {
454 // we didnt get anywhere deregister the settings
455 mgr.FlushAndRelease( GetAppSettings<CVPCB_SETTINGS>( "cvpcb" ), false );
456 mgr.FlushAndRelease( KifaceSettings(), false );
458 mgr.FlushAndRelease( GetAppSettings<EDA_3D_VIEWER_SETTINGS>( "3d_viewer" ), false );
459
460 return false;
461 }
462
463 m_jobHandler = std::make_unique<PCBNEW_JOBS_HANDLER>( aKiway );
464
466 {
467 m_jobHandler->SetReporter( &CLI_REPORTER::GetInstance() );
468 m_jobHandler->SetProgressReporter( &CLI_PROGRESS_REPORTER::GetInstance() );
469 }
470
471 return true;
472}
473
474
476{
478}
479
480
482{
483 wxFileName fn = FP_LIB_TABLE::GetGlobalTableFileName();
484
485 if( !fn.FileExists() )
486 {
487 }
488 else
489 {
490 try
491 {
492 // The global table is not related to a specific project. All projects
493 // will use the same global table. So the KIFACE::OnKifaceStart() contract
494 // of avoiding anything project specific is not violated here.
496 return false;
497 }
498 catch( const IO_ERROR& ioe )
499 {
500 // if we are here, a incorrect global footprint library table was found.
501 // Incorrect global symbol library table is not a fatal error:
502 // the user just has to edit the (partially) loaded table.
503 wxString msg = _( "An error occurred attempting to load the global footprint library "
504 "table.\n"
505 "Please edit this global footprint library table in Preferences "
506 "menu." );
507
508 DisplayErrorMessage( nullptr, msg, ioe.What() );
509 }
510 }
511
512 return true;
513}
514
515
517{
518 end_common();
519}
520
521
522void IFACE::SaveFileAs( const wxString& aProjectBasePath, const wxString& aSrcProjectName,
523 const wxString& aNewProjectBasePath, const wxString& aNewProjectName,
524 const wxString& aSrcFilePath, wxString& aErrors )
525{
526 wxFileName destFile( aSrcFilePath );
527 wxString destPath = destFile.GetPathWithSep();
528 wxUniChar pathSep = wxFileName::GetPathSeparator();
529 wxString ext = destFile.GetExt();
530
531 if( destPath.StartsWith( aProjectBasePath + pathSep ) )
532 destPath.Replace( aProjectBasePath, aNewProjectBasePath, false );
533
534 wxString srcProjectFootprintLib = pathSep + aSrcProjectName + wxT( ".pretty" ) + pathSep;
535 wxString newProjectFootprintLib = pathSep + aNewProjectName + wxT( ".pretty" ) + pathSep;
536
537 destPath.Replace( srcProjectFootprintLib, newProjectFootprintLib, true );
538
539 destFile.SetPath( destPath );
540
543 {
544 if( destFile.GetName() == aSrcProjectName )
545 destFile.SetName( aNewProjectName );
546
547 KiCopyFile( aSrcFilePath, destFile.GetFullPath(), aErrors );
548 }
549 else if( ext == FILEEXT::LegacyPcbFileExtension )
550 {
551 if( destFile.GetName() == aSrcProjectName )
552 destFile.SetName( aNewProjectName );
553
554 KiCopyFile( aSrcFilePath, destFile.GetFullPath(), aErrors );
555 }
558 {
559 // Footprints are not project-specific. Keep their source names.
560 KiCopyFile( aSrcFilePath, destFile.GetFullPath(), aErrors );
561 }
563 {
564 // TODO
565 }
566 else if( ext == wxT( "rpt" ) )
567 {
568 // DRC must be the "gold standard". Since we can't guarantee that there aren't
569 // any non-deterministic cases in the save-as algorithm, we don't want to certify
570 // the result with the source's DRC report. Therefore copy it under the old
571 // name.
572 KiCopyFile( aSrcFilePath, destFile.GetFullPath(), aErrors );
573 }
574 else if( destFile.GetName() == FILEEXT::FootprintLibraryTableFileName )
575 {
576 try
577 {
578 FP_LIB_TABLE fpLibTable;
579 fpLibTable.Load( aSrcFilePath );
580
581 for( unsigned i = 0; i < fpLibTable.GetCount(); i++ )
582 {
583 LIB_TABLE_ROW& row = fpLibTable.At( i );
584 wxString uri = row.GetFullURI();
585
586 uri.Replace( wxT( "/" ) + aSrcProjectName + wxT( ".pretty" ),
587 wxT( "/" ) + aNewProjectName + wxT( ".pretty" ) );
588
589 row.SetFullURI( uri );
590 }
591
592 fpLibTable.Save( destFile.GetFullPath() );
593 }
594 catch( ... )
595 {
596 wxString msg;
597
598 if( !aErrors.empty() )
599 aErrors += wxT( "\n" );
600
601 msg.Printf( _( "Cannot copy file '%s'." ), destFile.GetFullPath() );
602 aErrors += msg;
603 }
604 }
605 else
606 {
607 wxFAIL_MSG( wxT( "Unexpected filetype for Pcbnew::SaveFileAs()" ) );
608 }
609}
610
611
612int IFACE::HandleJob( JOB* aJob, REPORTER* aReporter, PROGRESS_REPORTER* aProgressReporter )
613{
614 return m_jobHandler->RunJob( aJob, aReporter, aProgressReporter );
615}
616
617
618bool IFACE::HandleJobConfig( JOB* aJob, wxWindow* aParent )
619{
620 return m_jobHandler->HandleJobConfig( aJob, aParent );
621}
constexpr EDA_IU_SCALE pcbIUScale
Definition base_units.h:112
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
static std::list< TOOL_ACTION * > & GetActionList()
Return list of TOOL_ACTIONs.
Class to hold basic information about controls that can be added to the toolbars.
static std::list< ACTION_TOOLBAR_CONTROL * > & GetCustomControlList()
Get the list of custom controls that could be used on toolbars.
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
static PROGRESS_REPORTER & GetInstance()
static REPORTER & GetInstance()
Definition reporter.cpp:129
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.
virtual const wxString What() const
A composite of Problem() and Where()
An simple container class that lets us dispatch output jobs to kifaces.
Definition job.h:183
A KIFACE implementation.
Definition kiface_base.h:39
KIFACE_BASE(const char *aKifaceName, KIWAY::FACE_T aId)
Definition kiface_base.h:67
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();.
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().
int m_start_flags
flags provided in OnKifaceStart()
bool IsSingle() const
Is this KIFACE running under single_top?
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:292
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
Definition kiway.cpp:403
FACE_T
Known KIFACE implementations.
Definition kiway.h:298
@ FACE_PCB
pcbnew DSO
Definition kiway.h:300
virtual void CommonSettingsChanged(int aFlags=0)
Call CommonSettingsChanged() on all KIWAY_PLAYERs.
Definition kiway.cpp:600
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:106
virtual SETTINGS_MANAGER & GetSettingsManager() const
Definition pgm_base.h:128
A progress reporter interface for use in multi-threaded environments.
A pure virtual class used to derive REPORTER objects from.
Definition reporter.h:73
T * RegisterSettings(T *aSettings, bool aLoadNow=true)
Take 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.
Represent a single user action.
UNITS_PROVIDER(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnits)
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:202
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:48
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:96
@ FRAME_PCB_EDITOR
Definition frame_type.h:42
@ PANEL_3DV_TOOLBARS
Definition frame_type.h:106
@ FRAME_FOOTPRINT_VIEWER
Definition frame_type.h:45
@ PANEL_3DV_OPENGL
Definition frame_type.h:104
@ PANEL_FP_DEFAULT_GRAPHICS_VALUES
Definition frame_type.h:92
@ PANEL_PCB_TOOLBARS
Definition frame_type.h:99
@ PANEL_PCB_ORIGINS_AXES
Definition frame_type.h:101
@ FRAME_FOOTPRINT_WIZARD
Definition frame_type.h:46
@ PANEL_PCB_EDIT_OPTIONS
Definition frame_type.h:97
@ PANEL_FP_DISPLAY_OPTIONS
Definition frame_type.h:86
@ PANEL_PCB_COLORS
Definition frame_type.h:98
@ PANEL_3DV_RAYTRACING
Definition frame_type.h:105
@ DIALOG_PCB_LIBRARY_TABLE
Definition frame_type.h:124
@ FRAME_FOOTPRINT_PREVIEW
Definition frame_type.h:48
@ FRAME_FOOTPRINT_CHOOSER
Definition frame_type.h:44
@ PANEL_FP_GRIDS
Definition frame_type.h:87
@ PANEL_FP_ORIGINS_AXES
Definition frame_type.h:93
@ PANEL_PCB_DISPLAY_OPTS
Definition frame_type.h:95
@ DIALOG_CONFIGUREPATHS
Definition frame_type.h:121
@ PANEL_FP_COLORS
Definition frame_type.h:89
@ PANEL_FP_DEFAULT_FIELDS
Definition frame_type.h:91
@ FRAME_FOOTPRINT_EDITOR
Definition frame_type.h:43
@ PANEL_FP_EDIT_OPTIONS
Definition frame_type.h:88
@ PANEL_FP_TOOLBARS
Definition frame_type.h:90
@ PANEL_PCB_ACTION_PLUGINS
Definition frame_type.h:100
@ PANEL_3DV_DISPLAY_OPTIONS
Definition frame_type.h:103
void KiCopyFile(const wxString &aSrcPath, const wxString &aDestPath, wxString &aErrors)
Definition gestfich.cpp:290
static const std::string LegacyPcbFileExtension
static const std::string FootprintLibraryTableFileName
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
@ 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:164
#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:407
void ScriptingSetPcbEditFrame(PCB_EDIT_FRAME *aPcbEditFrame)
BOARD * GetBoard()
see class PGM_BASE
T * GetToolbarSettings(const wxString &aFilename)
T * GetAppSettings(const char *aFilename)
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:155
bool OnKifaceStart(PGM_BASE *aProgram, int aCtlBits, KIWAY *aKiway) override
Typically start_common() is called from here.
Definition pcbnew.cpp:429
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:522
void * IfaceOrAddress(int aDataId) override
Return a pointer to the requested object.
Definition pcbnew.cpp:357
void Reset() override
Reloads global state.
Definition pcbnew.cpp:475
wxWindow * CreateKiWindow(wxWindow *aParent, int aClassId, KIWAY *aKiway, int aCtlBits=0) override
Create a wxWindow for the current project.
Definition pcbnew.cpp:96
IFACE(const char *aName, KIWAY::FACE_T aType)
Definition pcbnew.cpp:85
int HandleJob(JOB *aJob, REPORTER *aReporter, PROGRESS_REPORTER *aProgressReporter) override
Definition pcbnew.cpp:612
bool loadGlobalLibTable()
Definition pcbnew.cpp:481
std::unique_ptr< PCBNEW_JOBS_HANDLER > m_jobHandler
Definition pcbnew.cpp:397
bool HandleJobConfig(JOB *aJob, wxWindow *aParent) override
Definition pcbnew.cpp:618
void OnKifaceEnd() override
Called just once just before the DSO is to be unloaded.
Definition pcbnew.cpp:516
#define ENVVARS_CHANGED
Definition of file extensions used in Kicad.