KiCad PCB EDA Suite
eeschema.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) 2004 Jean-Pierre Charras, [email protected]
5 * Copyright (C) 2008 Wayne Stambaugh <[email protected]>
6 * Copyright (C) 2004-2020 KiCad Developers, see change_log.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
26#include <pgm_base.h>
27#include <kiface_base.h>
28#include <confirm.h>
29#include <gestfich.h>
30#include <eda_dde.h>
32#include "eeschema_helpers.h"
33#include <eeschema_settings.h>
34#include <sch_edit_frame.h>
35#include <symbol_edit_frame.h>
36#include <symbol_viewer_frame.h>
37#include <transform.h>
38#include <symbol_lib_table.h>
41#include <kiway.h>
44#include <sexpr/sexpr.h>
45#include <sexpr/sexpr_parser.h>
46#include <kiface_ids.h>
48#include <wx/ffile.h>
50
51#include <schematic.h>
52#include <connection_graph.h>
62#include <sim/sim_plot_frame.h>
63
64#include <wx/crt.h>
65
66// The main sheet of the project
68
69
70namespace SCH {
71
72
73static std::unique_ptr<SCHEMATIC> readSchematicFromFile( const std::string& aFilename )
74{
75 auto pi = SCH_IO_MGR::FindPlugin( SCH_IO_MGR::SCH_KICAD );
76 std::unique_ptr<SCHEMATIC> schematic = std::make_unique<SCHEMATIC>( nullptr );
77
78 auto &manager = Pgm().GetSettingsManager();
79
80 manager.LoadProject( "" );
81 schematic->Reset();
82 schematic->SetProject( &manager.Prj() );
83 schematic->SetRoot( pi->Load( aFilename, schematic.get() ) );
84 schematic->CurrentSheet().push_back( &schematic->Root() );
85
86 SCH_SCREENS screens( schematic->Root() );
87
88 for( SCH_SCREEN* screen = screens.GetFirst(); screen; screen = screens.GetNext() )
89 screen->UpdateLocalLibSymbolLinks();
90
91 SCH_SHEET_LIST sheets = schematic->GetSheets();
92
93 // Restore all of the loaded symbol instances from the root sheet screen.
94 sheets.UpdateSymbolInstanceData( schematic->RootScreen()->GetSymbolInstances() );
95
96 for( SCH_SCREEN* screen = screens.GetFirst(); screen; screen = screens.GetNext() )
97 screen->MigrateSimModels();
98
99 sheets.AnnotatePowerSymbols();
100
101 // NOTE: This is required for multi-unit symbols to be correct
102 for( SCH_SHEET_PATH& sheet : sheets )
103 sheet.UpdateAllScreenReferences();
104
105 // NOTE: SchematicCleanUp is not called; QA schematics must already be clean or else
106 // SchematicCleanUp must be freed from its UI dependencies.
107
108 schematic->ConnectionGraph()->Recalculate( sheets, true );
109
110 return schematic;
111}
112
113
114bool generateSchematicNetlist( const wxString& aFilename, wxString& aNetlist )
115{
116 std::unique_ptr<SCHEMATIC> schematic = readSchematicFromFile( aFilename.ToStdString() );
117 NETLIST_EXPORTER_KICAD exporter( schematic.get() );
118 STRING_FORMATTER formatter;
119
120 exporter.Format( &formatter, GNL_ALL | GNL_OPT_KICAD );
121 aNetlist = formatter.GetString();
122
123 return true;
124}
125
126
127static struct IFACE : public KIFACE_BASE, public UNITS_PROVIDER
128{
129 // Of course all are virtual overloads, implementations of the KIFACE.
130
131 IFACE( const char* aName, KIWAY::FACE_T aType ) :
132 KIFACE_BASE( aName, aType ),
134 {}
135
136 bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits ) override;
137
138 void OnKifaceEnd() override;
139
140 wxWindow* CreateKiWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway,
141 int aCtlBits = 0 ) override
142 {
143 switch( aClassId )
144 {
145 case FRAME_SCH:
146 {
147 SCH_EDIT_FRAME* frame = new SCH_EDIT_FRAME( aKiway, aParent );
148
150
151 if( Kiface().IsSingle() )
153 // only run this under single_top, not under a project manager.
155 }
156
157 return frame;
158 }
159
161 {
162 SYMBOL_EDIT_FRAME* frame = new SYMBOL_EDIT_FRAME( aKiway, aParent );
163 return frame;
164 }
165
166#ifdef KICAD_SPICE
167 case FRAME_SIMULATOR:
168 {
169 SIM_PLOT_FRAME* frame = new SIM_PLOT_FRAME( aKiway, aParent );
170 return frame;
171 }
172#endif
173 case FRAME_SCH_VIEWER:
175 {
176 SYMBOL_VIEWER_FRAME* frame = new SYMBOL_VIEWER_FRAME( aKiway, aParent,
177 FRAME_T( aClassId ) );
178 return frame;
179 }
180
182 InvokeSchEditSymbolLibTable( aKiway, aParent );
183 // Dialog has completed; nothing to return.
184 return nullptr;
185
187 {
190
191 return new PANEL_SYM_DISPLAY_OPTIONS( aParent, cfg );
192 }
193
195 {
196 EDA_BASE_FRAME* frame = aKiway->Player( FRAME_SCH_SYMBOL_EDITOR, false );
197
198 if( !frame )
199 frame = aKiway->Player( FRAME_SCH_VIEWER, false );
200
201 if( !frame )
202 frame = aKiway->Player( FRAME_SCH, false );
203
204 if( frame )
205 return new PANEL_SYM_EDITING_OPTIONS( aParent, frame, frame );
206 else
207 return new PANEL_SYM_EDITING_OPTIONS( aParent, this, nullptr );
208 }
209
210 case PANEL_SYM_COLORS:
211 return new PANEL_SYM_COLOR_SETTINGS( aParent );
212
214 {
217
218 return new PANEL_EESCHEMA_DISPLAY_OPTIONS( aParent, cfg );
219 }
220
222 {
223 EDA_BASE_FRAME* frame = aKiway->Player( FRAME_SCH, false );
224
225 if( !frame )
226 frame = aKiway->Player( FRAME_SCH_SYMBOL_EDITOR, false );
227
228 if( !frame )
229 frame = aKiway->Player( FRAME_SCH_VIEWER, false );
230
231 if( frame )
232 return new PANEL_EESCHEMA_EDITING_OPTIONS( aParent, frame, frame );
233 else
234 return new PANEL_EESCHEMA_EDITING_OPTIONS( aParent, this, nullptr );
235 }
236
238 {
239 EDA_BASE_FRAME* schSettingsProvider = aKiway->Player( FRAME_SCH, false );
240
241 return new PANEL_EESCHEMA_ANNOTATION_OPTIONS( aParent, schSettingsProvider );
242 }
243
244 case PANEL_SCH_COLORS:
245 return new PANEL_EESCHEMA_COLOR_SETTINGS( aParent );
246
248 return new PANEL_TEMPLATE_FIELDNAMES( aParent, nullptr );
249
250 default:
251 return nullptr;
252 }
253 }
254
265 void* IfaceOrAddress( int aDataId ) override
266 {
267 switch( aDataId )
268 {
270 return (void*) generateSchematicNetlist;
271 }
272
273 return nullptr;
274 }
275
281 void SaveFileAs( const wxString& aProjectBasePath, const wxString& aProjectName,
282 const wxString& aNewProjectBasePath, const wxString& aNewProjectName,
283 const wxString& aSrcFilePath, wxString& aErrors ) override;
284
285
286 int HandleJob( JOB* aJob ) override;
287
288private:
289 std::unique_ptr<EESCHEMA_JOBS_HANDLER> m_jobHandler;
290
291} kiface( "eeschema", KIWAY::FACE_SCH );
292
293} // namespace
294
295using namespace SCH;
296
298
299
301
302
303// KIFACE_GETTER's actual spelling is a substitution macro found in kiway.h.
304// KIFACE_GETTER will not have name mangling due to declaration in kiway.h.
305MY_API( KIFACE* ) KIFACE_GETTER( int* aKIFACEversion, int aKiwayVersion, PGM_BASE* aProgram )
306{
308 return &kiface;
309}
310
311
313{
314 wxASSERT( process ); // KIFACE_GETTER has already been called.
315 return *process;
316}
317
318// Similar to PGM_BASE& Pgm(), but return nullptr when a *.ki_face is run from
319// a python script or something else.
321{
322 return process;
323}
324
325
327{
328 // This is process-level-initialization, not project-level-initialization of the DSO.
329 // Do nothing in here pertinent to a project!
332
333 start_common( aCtlBits );
334
336
337 if( !fn.FileExists() )
338 {
339 if( !( aCtlBits & KFCTL_CLI ) )
340 {
341 DIALOG_GLOBAL_SYM_LIB_TABLE_CONFIG fpDialog( nullptr );
342
343 fpDialog.ShowModal();
344 }
345 }
346 else
347 {
348 try
349 {
350 // The global table is not related to a specific project. All projects
351 // will use the same global table. So the KIFACE::OnKifaceStart() contract
352 // of avoiding anything project specific is not violated here.
354 return false;
355 }
356 catch( const IO_ERROR& ioe )
357 {
358 // if we are here, a incorrect global symbol library table was found.
359 // Incorrect global symbol library table is not a fatal error:
360 // the user just has to edit the (partially) loaded table.
361 wxString msg =
362 _( "An error occurred attempting to load the global symbol library table.\n"
363 "Please edit this global symbol library table in Preferences menu." );
364
365 DisplayErrorMessage( nullptr, msg, ioe.What() );
366 }
367 }
368
369 m_jobHandler = std::make_unique<EESCHEMA_JOBS_HANDLER>();
370
371 return true;
372}
373
374
376{
377 end_common();
378}
379
380
381static void traverseSEXPR( SEXPR::SEXPR* aNode,
382 const std::function<void( SEXPR::SEXPR* )>& aVisitor )
383{
384 aVisitor( aNode );
385
386 if( aNode->IsList() )
387 {
388 for( unsigned i = 0; i < aNode->GetNumberOfChildren(); i++ )
389 traverseSEXPR( aNode->GetChild( i ), aVisitor );
390 }
391}
392
393
394void IFACE::SaveFileAs( const wxString& aProjectBasePath, const wxString& aProjectName,
395 const wxString& aNewProjectBasePath, const wxString& aNewProjectName,
396 const wxString& aSrcFilePath, wxString& aErrors )
397{
398 wxFileName destFile( aSrcFilePath );
399 wxString destPath = destFile.GetPathWithSep();
400 wxUniChar pathSep = wxFileName::GetPathSeparator();
401 wxString ext = destFile.GetExt();
402
403 if( destPath.StartsWith( aProjectBasePath + pathSep ) )
404 destPath.Replace( aProjectBasePath, aNewProjectBasePath, false );
405
406 destFile.SetPath( destPath );
407
408 if( ext == LegacySchematicFileExtension ||
412 {
413 if( destFile.GetName() == aProjectName )
414 {
415 destFile.SetName( aNewProjectName );
416 }
417 else if( destFile.GetName() == aNewProjectName )
418 {
419 wxString msg;
420
421 if( !aErrors.empty() )
422 aErrors += wxS( "\n" );
423
424 msg.Printf( _( "Cannot copy file '%s' as it will be overwritten by the new root "
425 "sheet file." ), destFile.GetFullPath() );
426 aErrors += msg;
427 return;
428 }
429
430 // Sheet paths when auto-generated are relative to the root, so those will stay
431 // pointing to whatever they were pointing at.
432 // The author can create their own absolute and relative sheet paths. Absolute
433 // sheet paths aren't an issue, and relative ones will continue to work as long
434 // as the author didn't include any '..'s. If they did, it's still not clear
435 // whether they should be adjusted or not (as the author may be duplicating an
436 // entire tree with several projects within it), so we leave this as an exercise
437 // to the author.
438
439 KiCopyFile( aSrcFilePath, destFile.GetFullPath(), aErrors );
440 }
441 else if( ext == SchematicSymbolFileExtension )
442 {
443 // Symbols are not project-specific. Keep their source names.
444 KiCopyFile( aSrcFilePath, destFile.GetFullPath(), aErrors );
445 }
448 {
449 if( destFile.GetName() == aProjectName + wxS( "-cache" ) )
450 destFile.SetName( aNewProjectName + wxS( "-cache" ) );
451
452 if( destFile.GetName() == aProjectName + wxS( "-rescue" ) )
453 destFile.SetName( aNewProjectName + wxS( "-rescue" ) );
454
455 KiCopyFile( aSrcFilePath, destFile.GetFullPath(), aErrors );
456 }
457 else if( ext == NetlistFileExtension )
458 {
459 bool success = false;
460
461 if( destFile.GetName() == aProjectName )
462 destFile.SetName( aNewProjectName );
463
464 try
465 {
466 SEXPR::PARSER parser;
467 std::unique_ptr<SEXPR::SEXPR> sexpr( parser.ParseFromFile( TO_UTF8( aSrcFilePath ) ) );
468
469 traverseSEXPR( sexpr.get(), [&]( SEXPR::SEXPR* node )
470 {
471 if( node->IsList() && node->GetNumberOfChildren() > 1
472 && node->GetChild( 0 )->IsSymbol()
473 && node->GetChild( 0 )->GetSymbol() == "source" )
474 {
475 auto pathNode = dynamic_cast<SEXPR::SEXPR_STRING*>( node->GetChild( 1 ) );
476 auto symNode = dynamic_cast<SEXPR::SEXPR_SYMBOL*>( node->GetChild( 1 ) );
477 wxString path;
478
479 if( pathNode )
480 path = pathNode->m_value;
481 else if( symNode )
482 path = symNode->m_value;
483
484 if( path == aProjectName + wxS( ".sch" ) )
485 path = aNewProjectName + wxS( ".sch" );
486 else if( path == aProjectBasePath + "/" + aProjectName + wxS( ".sch" ) )
487 path = aNewProjectBasePath + "/" + aNewProjectName + wxS( ".sch" );
488 else if( path.StartsWith( aProjectBasePath ) )
489 path.Replace( aProjectBasePath, aNewProjectBasePath, false );
490
491 if( pathNode )
492 pathNode->m_value = path;
493 else if( symNode )
494 symNode->m_value = path;
495 }
496 } );
497
498 wxFFile destNetList( destFile.GetFullPath(), "wb" );
499
500 if( destNetList.IsOpened() )
501 success = destNetList.Write( sexpr->AsString( 0 ) );
502
503 // wxFFile dtor will close the file
504 }
505 catch( ... )
506 {
507 success = false;
508 }
509
510 if( !success )
511 {
512 wxString msg;
513
514 if( !aErrors.empty() )
515 aErrors += wxS( "\n" );
516
517 msg.Printf( _( "Cannot copy file '%s'." ), destFile.GetFullPath() );
518 aErrors += msg;
519 }
520 }
521 else if( destFile.GetName() == wxS( "sym-lib-table" ) )
522 {
523 SYMBOL_LIB_TABLE symbolLibTable;
524 symbolLibTable.Load( aSrcFilePath );
525
526 for( unsigned i = 0; i < symbolLibTable.GetCount(); i++ )
527 {
528 LIB_TABLE_ROW& row = symbolLibTable.At( i );
529 wxString uri = row.GetFullURI();
530
531 uri.Replace( wxS( "/" ) + aProjectName + wxS( "-cache.lib" ),
532 wxS( "/" ) + aNewProjectName + wxS( "-cache.lib" ) );
533 uri.Replace( wxS( "/" ) + aProjectName + wxS( "-rescue.lib" ),
534 wxS( "/" ) + aNewProjectName + wxS( "-rescue.lib" ) );
535 uri.Replace( wxS( "/" ) + aProjectName + wxS( ".lib" ),
536 wxS( "/" ) + aNewProjectName + wxS( ".lib" ) );
537
538 row.SetFullURI( uri );
539 }
540
541 try
542 {
543 symbolLibTable.Save( destFile.GetFullPath() );
544 }
545 catch( ... )
546 {
547 wxString msg;
548
549 if( !aErrors.empty() )
550 aErrors += "\n";
551
552 msg.Printf( _( "Cannot copy file '%s'." ), destFile.GetFullPath() );
553 aErrors += msg;
554 }
555 }
556 else
557 {
558 wxFAIL_MSG( wxS( "Unexpected filetype for Eeschema::SaveFileAs()" ) );
559 }
560}
561
563{
564 return m_jobHandler->RunJob( aJob );
565}
constexpr EDA_IU_SCALE schIUScale
Definition: base_units.h:111
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
Definition: app_settings.h:110
The base frame for deriving all KiCad main window classes.
static void SetSchEditFrame(SCH_EDIT_FRAME *aSchEditFrame)
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
Definition: ki_exception.h:76
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:28
A KIFACE implementation.
Definition: kiface_base.h:39
void InitSettings(APP_SETTINGS_BASE *aSettings)
Definition: kiface_base.h:95
void end_common()
Common things to do for a top program module, during OnKifaceEnd();.
APP_SETTINGS_BASE * KifaceSettings() const
Definition: kiface_base.h:93
bool start_common(int aCtlBits)
Common things to do for a top program module, during OnKifaceStart().
Definition: kiface_base.cpp:97
bool IsSingle() const
Is this KIFACE running under single_top?
Definition: kiface_base.h:105
void CreateServer(int service, bool local=true)
Definition: eda_dde.cpp:43
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
Definition: kiway.h:274
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
Definition: kiway.cpp:394
FACE_T
Known KIFACE implementations.
Definition: kiway.h:280
@ FACE_SCH
eeschema DSO
Definition: kiway.h:281
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.
Generate the KiCad netlist format supported by Pcbnew.
void Format(OUTPUTFORMATTER *aOutputFormatter, int aCtl)
Output this s-expression netlist into aOutputFormatter.
Container for data for KiCad programs.
Definition: pgm_base.h:95
virtual SETTINGS_MANAGER & GetSettingsManager() const
Definition: pgm_base.h:135
Schematic editor (Eeschema) main window.
Container class that holds multiple SCH_SCREEN objects in a hierarchy.
Definition: sch_screen.h:638
SCH_SCREEN * GetNext()
SCH_SCREEN * GetFirst()
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
void AnnotatePowerSymbols()
Silently annotate the not yet annotated power symbols of the entire hierarchy of the sheet path list.
void UpdateSymbolInstanceData(const std::vector< SCH_SYMBOL_INSTANCE > &aSymbolInstances)
Update all of the symbol instance information using aSymbolInstances.
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
Definition: sch_sheet.h:57
T * GetAppSettings(bool aLoadNow=true)
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.
bool LoadProject(const wxString &aFullPath, bool aSetActive=true)
Loads a project or sets up a new project with a specified path.
std::unique_ptr< SEXPR > ParseFromFile(const std::string &aFilename)
size_t GetNumberOfChildren() const
Definition: sexpr.cpp:70
bool IsList() const
Definition: sexpr.h:49
SEXPR * GetChild(size_t aIndex) const
Definition: sexpr.cpp:48
Implementing SIM_PLOT_FRAME_BASE.
Implement an OUTPUTFORMATTER to a memory buffer.
Definition: richio.h:415
const std::string & GetString()
Definition: richio.h:438
The symbol library editor main window.
static SYMBOL_LIB_TABLE & GetGlobalLibTable()
static wxString GetGlobalTableFileName()
Fetch the global symbol library table file name.
static bool LoadGlobalTable(SYMBOL_LIB_TABLE &aTable)
Load the global symbol library table into aTable.
Symbol library viewer main window.
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
Definition: confirm.cpp:325
This file is part of the common library.
#define _(s)
DDE server & client.
#define KICAD_SCH_PORT_SERVICE_NUMBER
Scripting window listens for commands for other apps.
Definition: eda_dde.h:43
EDA_UNITS
Definition: eda_units.h:43
return & kiface
Definition: eeschema.cpp:308
MY_API(KIFACE *) KIFACE_GETTER(int *aKIFACEversion
int aKiwayVersion
Definition: eeschema.cpp:305
static PGM_BASE * process
Definition: eeschema.cpp:297
SCH_SHEET * g_RootSheet
Definition: eeschema.cpp:67
int PGM_BASE * aProgram
Definition: eeschema.cpp:306
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: eeschema.cpp:312
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
Definition: eeschema.cpp:300
static void traverseSEXPR(SEXPR::SEXPR *aNode, const std::function< void(SEXPR::SEXPR *)> &aVisitor)
Definition: eeschema.cpp:381
PGM_BASE * PgmOrNull()
similar to PGM_BASE& Pgm(), but return a reference that can be nullptr when running a shared lib from...
Definition: eeschema.cpp:320
FRAME_T
The set of EDA_BASE_FRAME derivatives, typically stored in EDA_BASE_FRAME::m_Ident.
Definition: frame_type.h:33
@ FRAME_SCH_SYMBOL_EDITOR
Definition: frame_type.h:35
@ PANEL_SCH_FIELD_NAME_TEMPLATES
Definition: frame_type.h:76
@ FRAME_SCH_VIEWER
Definition: frame_type.h:36
@ PANEL_SCH_DISP_OPTIONS
Definition: frame_type.h:72
@ FRAME_SCH
Definition: frame_type.h:34
@ FRAME_SCH_VIEWER_MODAL
Definition: frame_type.h:37
@ FRAME_SIMULATOR
Definition: frame_type.h:38
@ PANEL_SYM_EDIT_OPTIONS
Definition: frame_type.h:69
@ PANEL_SCH_EDIT_OPTIONS
Definition: frame_type.h:73
@ PANEL_SYM_DISP_OPTIONS
Definition: frame_type.h:68
@ DIALOG_SCH_LIBRARY_TABLE
Definition: frame_type.h:104
@ PANEL_SYM_COLORS
Definition: frame_type.h:70
@ PANEL_SCH_ANNO_OPTIONS
Definition: frame_type.h:74
@ PANEL_SCH_COLORS
Definition: frame_type.h:75
void KiCopyFile(const wxString &aSrcPath, const wxString &aDestPath, wxString &aErrors)
Definition: gestfich.cpp:214
const std::string BackupFileSuffix
const std::string KiCadSymbolLibFileExtension
const std::string LegacySchematicFileExtension
const std::string LegacySymbolDocumentFileExtension
const std::string NetlistFileExtension
const std::string KiCadSchematicFileExtension
const std::string SchematicSymbolFileExtension
const std::string LegacySymbolLibFileExtension
@ KIFACE_NETLIST_SCHEMATIC
Definition: kiface_ids.h:56
#define KFCTL_CLI
Running as CLI app.
Definition: kiway.h:160
#define KIFACE_GETTER
Definition: kiway.h:111
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
Definition: macros.h:96
Definition: eeschema.cpp:70
static std::unique_ptr< SCHEMATIC > readSchematicFromFile(const std::string &aFilename)
Definition: eeschema.cpp:73
bool generateSchematicNetlist(const wxString &aFilename, wxString &aNetlist)
Definition: eeschema.cpp:114
SCH::IFACE KIFACE_BASE, UNITS_PROVIDER kiface("eeschema", KIWAY::FACE_SCH)
#define GNL_ALL
@ GNL_OPT_KICAD
void InvokeSchEditSymbolLibTable(KIWAY *aKiway, wxWindow *aParent)
see class PGM_BASE
bool OnKifaceStart(PGM_BASE *aProgram, int aCtlBits) override
Typically start_common() is called from here.
Implement a participant in the KIWAY alchemy.
Definition: kiway.h:151
void SaveFileAs(const wxString &aProjectBasePath, const wxString &aProjectName, 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: eeschema.cpp:394
bool OnKifaceStart(PGM_BASE *aProgram, int aCtlBits) override
Typically start_common() is called from here.
Definition: eeschema.cpp:326
wxWindow * CreateKiWindow(wxWindow *aParent, int aClassId, KIWAY *aKiway, int aCtlBits=0) override
Create a wxWindow for the current project.
Definition: eeschema.cpp:140
IFACE(const char *aName, KIWAY::FACE_T aType)
Definition: eeschema.cpp:131
void * IfaceOrAddress(int aDataId) override
Return a pointer to the requested object.
Definition: eeschema.cpp:265
std::unique_ptr< EESCHEMA_JOBS_HANDLER > m_jobHandler
Definition: eeschema.cpp:289
void OnKifaceEnd() override
Called just once just before the DSO is to be unloaded.
Definition: eeschema.cpp:375
int HandleJob(JOB *aJob) override
Definition: eeschema.cpp:562
Definition of file extensions used in Kicad.