KiCad PCB EDA Suite
SCH::IFACE Struct Reference
Inheritance diagram for SCH::IFACE:
KIFACE_I KIFACE

Public Member Functions

 IFACE (const char *aName, KIWAY::FACE_T aType)
 
bool OnKifaceStart (PGM_BASE *aProgram, int aCtlBits) override
 Typically start_common() is called from here. More...
 
void OnKifaceEnd () override
 Called just once just before the DSO is to be unloaded. More...
 
wxWindow * CreateWindow (wxWindow *aParent, int aClassId, KIWAY *aKiway, int aCtlBits=0) override
 Create a wxWindow for the current project. More...
 
void * IfaceOrAddress (int aDataId) override
 Function IfaceOrAddress return a pointer to the requested object. More...
 
void SaveFileAs (const wxString &aProjectBasePath, const wxString &aProjectName, const wxString &aNewProjectBasePath, const wxString &aNewProjectName, const wxString &aSrcFilePath, wxString &aErrors) override
 Function SaveFileAs Saving a file under a different name is delegated to the various KIFACEs because the project doesn't know the internal format of the various files (which may have paths in them that need updating). More...
 
const wxString Name ()
 
APP_SETTINGS_BASEKifaceSettings () const
 
void InitSettings (APP_SETTINGS_BASE *aSettings)
 
int StartFlags () const
 Return whatever was passed as aCtlBits to OnKifaceStart(). More...
 
bool IsSingle () const
 Is this KIFACE_I running under single_top? More...
 
const wxString & GetHelpFileName () const
 Return just the basename portion of the current help file. More...
 
SEARCH_STACKKifaceSearch ()
 Only for DSO specific 'non-library' files. More...
 

Protected Member Functions

bool start_common (int aCtlBits)
 Common things to do for a top program module, during OnKifaceStart(). More...
 
void end_common ()
 Common things to do for a top program module, during OnKifaceEnd();. More...
 

Detailed Description

Definition at line 114 of file eeschema.cpp.

Constructor & Destructor Documentation

◆ IFACE()

SCH::IFACE::IFACE ( const char *  aName,
KIWAY::FACE_T  aType 
)
inline

Definition at line 118 of file eeschema.cpp.

118  :
119  KIFACE_I( aName, aType )
120  {}
KIFACE_I(const char *aKifaceName, KIWAY::FACE_T aId)
Definition: kiface_i.h:64

Member Function Documentation

◆ CreateWindow()

wxWindow* SCH::IFACE::CreateWindow ( wxWindow *  aParent,
int  aClassId,
KIWAY aKIWAY,
int  aCtlBits = 0 
)
inlineoverridevirtual

Create a wxWindow for the current project.

The caller must cast the return value into the known type.

Parameters
aParentmay be NULL or is otherwise the parent to connect under. If NULL then caller may want to connect the returned wxWindow into some hierarchy after this function returns.
aClassIdidentifies which wxFrame or wxDialog to retrieve, using a value known to the implementing KIFACE.
aKIWAYtells the window which KIWAY (and PROJECT) it is a participant in.
aCtlBitsconsists of bit flags from the set of KFCTL_* #defines above.
Returns
the window created and if not NULL, should be cast into the known type using and old school cast. dynamic_cast is problematic since it needs typeinfo probably not contained in the caller's link image.

Implements KIFACE_I.

Definition at line 126 of file eeschema.cpp.

127  {
128  switch( aClassId )
129  {
130  case FRAME_SCH:
131  {
132  SCH_EDIT_FRAME* frame = new SCH_EDIT_FRAME( aKiway, aParent );
133 
134  if( Kiface().IsSingle() )
135  {
136  // only run this under single_top, not under a project manager.
138  }
139 
140  return frame;
141  }
142 
144  {
145  SYMBOL_EDIT_FRAME* frame = new SYMBOL_EDIT_FRAME( aKiway, aParent );
146  return frame;
147  }
148 
149 #ifdef KICAD_SPICE
150  case FRAME_SIMULATOR:
151  {
152  SIM_PLOT_FRAME* frame = new SIM_PLOT_FRAME( aKiway, aParent );
153  return frame;
154  }
155 #endif
156  case FRAME_SCH_VIEWER:
158  {
159  SYMBOL_VIEWER_FRAME* frame = new SYMBOL_VIEWER_FRAME( aKiway, aParent,
160  FRAME_T( aClassId ) );
161  return frame;
162  }
163 
165  InvokeSchEditSymbolLibTable( aKiway, aParent );
166  // Dialog has completed; nothing to return.
167  return nullptr;
168 
169  default:
170  return NULL;
171  }
172  }
FRAME_T
The set of EDA_BASE_FRAME derivatives, typically stored in EDA_BASE_FRAME::m_Ident.
Definition: frame_type.h:32
void InvokeSchEditSymbolLibTable(KIWAY *aKiway, wxWindow *aParent)
Symbol library viewer main window.
Schematic editor (Eeschema) main window.
#define KICAD_SCH_PORT_SERVICE_NUMBER
Definition: eda_dde.h:43
#define NULL
bool IsSingle() const
Is this KIFACE_I running under single_top?
Definition: kiface_i.h:104
Implementing SIM_PLOT_FRAME_BASE.
KIFACE_I & Kiface()
Global KIFACE_I "get" accessor.
Definition: eeschema.cpp:211
void CreateServer(int service, bool local=true)
Definition: eda_dde.cpp:48
The symbol library editor main window.

References EDA_DRAW_FRAME::CreateServer(), DIALOG_SCH_LIBRARY_TABLE, FRAME_SCH, FRAME_SCH_SYMBOL_EDITOR, FRAME_SCH_VIEWER, FRAME_SCH_VIEWER_MODAL, FRAME_SIMULATOR, InvokeSchEditSymbolLibTable(), KIFACE_I::IsSingle(), KICAD_SCH_PORT_SERVICE_NUMBER, and Kiface().

◆ end_common()

void KIFACE_I::end_common ( )
protectedinherited

Common things to do for a top program module, during OnKifaceEnd();.

Definition at line 94 of file kiface_i.cpp.

95 {
96  m_bm.End();
97 }
BIN_MOD m_bm
Definition: kiface_i.h:118
void End()
Definition: bin_mod.cpp:50

References BIN_MOD::End(), and KIFACE_I::m_bm.

Referenced by KIFACE_I::OnKifaceEnd(), PCBCALC::IFACE::OnKifaceEnd(), PGE::IFACE::OnKifaceEnd(), CV::IFACE::OnKifaceEnd(), GERBV::IFACE::OnKifaceEnd(), PCB::IFACE::OnKifaceEnd(), and OnKifaceEnd().

◆ GetHelpFileName()

const wxString& KIFACE_I::GetHelpFileName ( ) const
inlineinherited

Return just the basename portion of the current help file.

Definition at line 109 of file kiface_i.h.

109 { return m_bm.m_help_file; }
BIN_MOD m_bm
Definition: kiface_i.h:118
wxString m_help_file
Definition: bin_mod.h:58

References KIFACE_I::m_bm, and BIN_MOD::m_help_file.

Referenced by EDA_BASE_FRAME::help_name().

◆ IfaceOrAddress()

void* SCH::IFACE::IfaceOrAddress ( int  aDataId)
inlineoverridevirtual

Function IfaceOrAddress return a pointer to the requested object.

The safest way to use this is to retrieve a pointer to a static instance of an interface, similar to how the KIFACE interface is exported. But if you know what you are doing use it to retrieve anything you want.

Parameters
aDataIdidentifies which object you want the address of.
Returns
void* - and must be cast into the know type.

Implements KIFACE_I.

Definition at line 182 of file eeschema.cpp.

183  {
184  switch( aDataId )
185  {
187  return (void*) generateSchematicNetlist;
188  }
189  return NULL;
190  }
bool generateSchematicNetlist(const wxString &aFilename, wxString &aNetlist)
Definition: eeschema.cpp:101
#define NULL

References SCH::generateSchematicNetlist(), KIFACE_NETLIST_SCHEMATIC, and NULL.

◆ InitSettings()

void KIFACE_I::InitSettings ( APP_SETTINGS_BASE aSettings)
inlineinherited

Definition at line 94 of file kiface_i.h.

94 { m_bm.InitSettings( aSettings ); }
BIN_MOD m_bm
Definition: kiface_i.h:118
void InitSettings(APP_SETTINGS_BASE *aPtr)
Takes ownership of a new application settings object.
Definition: bin_mod.h:53

References BIN_MOD::InitSettings(), and KIFACE_I::m_bm.

Referenced by BMP2CMP::IFACE::CreateWindow(), PCBCALC::IFACE::OnKifaceStart(), PGE::IFACE::OnKifaceStart(), CV::IFACE::OnKifaceStart(), GERBV::IFACE::OnKifaceStart(), PCB::IFACE::OnKifaceStart(), and OnKifaceStart().

◆ IsSingle()

◆ KifaceSearch()

SEARCH_STACK& KIFACE_I::KifaceSearch ( )
inlineinherited

Only for DSO specific 'non-library' files.

(The library search path is in the PROJECT class.)

Definition at line 113 of file kiface_i.h.

113 { return m_bm.m_search; }
BIN_MOD m_bm
Definition: kiface_i.h:118
SEARCH_STACK m_search
Definition: bin_mod.h:60

References KIFACE_I::m_bm, and BIN_MOD::m_search.

Referenced by CVPCB_MAINFRAME::buildEquivalenceList(), DS_DATA_MODEL::MakeFullFileName(), DS_DATA_MODEL::MakeShortFileName(), and EDA_BASE_FRAME::sys_search().

◆ KifaceSettings()

◆ Name()

const wxString KIFACE_I::Name ( )
inlineinherited

Definition at line 87 of file kiface_i.h.

88  {
89  return wxString::FromUTF8( m_bm.m_name );
90  }
BIN_MOD m_bm
Definition: kiface_i.h:118
const char * m_name
name of this binary module, static C string.
Definition: bin_mod.h:55

References KIFACE_I::m_bm, and BIN_MOD::m_name.

◆ OnKifaceEnd()

void IFACE::OnKifaceEnd ( )
overridevirtual

Called just once just before the DSO is to be unloaded.

It is called before static C++ destructors are called. A default implementation is supplied.

Reimplemented from KIFACE_I.

Definition at line 282 of file eeschema.cpp.

283 {
284  end_common();
285 }
void end_common()
Common things to do for a top program module, during OnKifaceEnd();.
Definition: kiface_i.cpp:94

References KIFACE_I::end_common().

◆ OnKifaceStart()

bool IFACE::OnKifaceStart ( PGM_BASE aProgram,
int  aCtlBits 
)
overridevirtual

Typically start_common() is called from here.

Implements KIFACE_I.

Definition at line 237 of file eeschema.cpp.

238 {
239  // This is process-level-initialization, not project-level-initialization of the DSO.
240  // Do nothing in here pertinent to a project!
243 
244  start_common( aCtlBits );
245 
247 
248  if( !fn.FileExists() )
249  {
251 
252  fpDialog.ShowModal();
253  }
254  else
255  {
256  try
257  {
258  // The global table is not related to a specific project. All projects
259  // will use the same global table. So the KIFACE::OnKifaceStart() contract
260  // of avoiding anything project specific is not violated here.
262  return false;
263  }
264  catch( const IO_ERROR& ioe )
265  {
266  // if we are here, a incorrect global symbol library table was found.
267  // Incorrect global symbol library table is not a fatal error:
268  // the user just has to edit the (partially) loaded table.
269  wxString msg = _(
270  "An error occurred attempting to load the global symbol library table.\n"
271  "Please edit this global symbol library table in Preferences menu."
272  );
273 
274  DisplayErrorMessage( NULL, msg, ioe.What() );
275  }
276  }
277 
278  return true;
279 }
virtual SETTINGS_MANAGER & GetSettingsManager() const
Definition: pgm_base.h:166
static SYMBOL_LIB_TABLE & GetGlobalLibTable()
bool start_common(int aCtlBits)
Common things to do for a top program module, during OnKifaceStart().
Definition: kiface_i.cpp:84
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
Definition: confirm.cpp:265
APP_SETTINGS_BASE * KifaceSettings() const
Definition: kiface_i.h:92
int PGM_BASE * aProgram
Definition: eeschema.cpp:217
static bool LoadGlobalTable(SYMBOL_LIB_TABLE &aTable)
Load the global symbol library table into aTable.
#define NULL
virtual const wxString What() const
A composite of Problem() and Where()
Definition: exceptions.cpp:29
JSON_SETTINGS * RegisterSettings(JSON_SETTINGS *aSettings, bool aLoadNow=true)
Takes ownership of the pointer passed in.
#define _(s)
Definition: 3d_actions.cpp:33
void InitSettings(APP_SETTINGS_BASE *aSettings)
Definition: kiface_i.h:94
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
Definition: ki_exception.h:75
static wxString GetGlobalTableFileName()
Fetch the global symbol library table file name.

References _, aProgram, DisplayErrorMessage(), SYMBOL_LIB_TABLE::GetGlobalLibTable(), SYMBOL_LIB_TABLE::GetGlobalTableFileName(), PGM_BASE::GetSettingsManager(), KIFACE_I::InitSettings(), KIFACE_I::KifaceSettings(), SYMBOL_LIB_TABLE::LoadGlobalTable(), NULL, SETTINGS_MANAGER::RegisterSettings(), KIFACE_I::start_common(), and IO_ERROR::What().

◆ SaveFileAs()

void IFACE::SaveFileAs ( const wxString &  aProjectBasePath,
const wxString &  aProjectName,
const wxString &  aNewProjectBasePath,
const wxString &  aNewProjectName,
const wxString &  aSrcFilePath,
wxString &  aErrors 
)
overridevirtual

Function SaveFileAs Saving a file under a different name is delegated to the various KIFACEs because the project doesn't know the internal format of the various files (which may have paths in them that need updating).

Reimplemented from KIFACE.

Definition at line 300 of file eeschema.cpp.

303 {
304  wxFileName destFile( aSrcFilePath );
305  wxString destPath = destFile.GetPathWithSep();
306  wxUniChar pathSep = wxFileName::GetPathSeparator();
307  wxString ext = destFile.GetExt();
308 
309  if( destPath.StartsWith( aProjectBasePath + pathSep ) )
310  destPath.Replace( aProjectBasePath, aNewProjectBasePath, false );
311 
312  destFile.SetPath( destPath );
313 
316  {
317  if( destFile.GetName() == aProjectName )
318  destFile.SetName( aNewProjectName );
319 
320  // Sheet paths when auto-generated are relative to the root, so those will stay
321  // pointing to whatever they were pointing at.
322  // The author can create their own absolute and relative sheet paths. Absolute
323  // sheet paths aren't an issue, and relative ones will continue to work as long
324  // as the author didn't include any '..'s. If they did, it's still not clear
325  // whether they should be adjusted or not (as the author may be duplicating an
326  // entire tree with several projects within it), so we leave this as an exercise
327  // to the author.
328 
329  KiCopyFile( aSrcFilePath, destFile.GetFullPath(), aErrors );
330  }
331  else if( ext == SchematicSymbolFileExtension )
332  {
333  // Symbols are not project-specific. Keep their source names.
334  KiCopyFile( aSrcFilePath, destFile.GetFullPath(), aErrors );
335  }
338  {
339  if( destFile.GetName() == aProjectName + "-cache" )
340  destFile.SetName( aNewProjectName + "-cache" );
341 
342  KiCopyFile( aSrcFilePath, destFile.GetFullPath(), aErrors );
343  }
344  else if( ext == NetlistFileExtension )
345  {
346  bool success = false;
347 
348  if( destFile.GetName() == aProjectName )
349  destFile.SetName( aNewProjectName );
350 
351  try
352  {
353  SEXPR::PARSER parser;
354  std::unique_ptr<SEXPR::SEXPR> sexpr( parser.ParseFromFile( TO_UTF8( aSrcFilePath ) ) );
355 
356  traverseSEXPR( sexpr.get(), [&]( SEXPR::SEXPR* node )
357  {
358  if( node->IsList() && node->GetNumberOfChildren() > 1
359  && node->GetChild( 0 )->IsSymbol()
360  && node->GetChild( 0 )->GetSymbol() == "source" )
361  {
362  auto pathNode = dynamic_cast<SEXPR::SEXPR_STRING*>( node->GetChild( 1 ) );
363  auto symNode = dynamic_cast<SEXPR::SEXPR_SYMBOL*>( node->GetChild( 1 ) );
364  wxString path;
365 
366  if( pathNode )
367  path = pathNode->m_value;
368  else if( symNode )
369  path = symNode->m_value;
370 
371  if( path == aProjectName + ".sch" )
372  path = aNewProjectName + ".sch";
373  else if( path == aProjectBasePath + "/" + aProjectName + ".sch" )
374  path = aNewProjectBasePath + "/" + aNewProjectName + ".sch";
375  else if( path.StartsWith( aProjectBasePath ) )
376  path.Replace( aProjectBasePath, aNewProjectBasePath, false );
377 
378  if( pathNode )
379  pathNode->m_value = path;
380  else if( symNode )
381  symNode->m_value = path;
382  }
383  } );
384 
385  wxFFile destNetList( destFile.GetFullPath(), "wb" );
386 
387  if( destNetList.IsOpened() )
388  success = destNetList.Write( sexpr->AsString( 0 ) );
389 
390  // wxFFile dtor will close the file
391  }
392  catch( ... )
393  {
394  success = false;
395  }
396 
397  if( !success )
398  {
399  wxString msg;
400 
401  if( !aErrors.empty() )
402  aErrors += "\n";
403 
404  msg.Printf( _( "Cannot copy file \"%s\"." ), destFile.GetFullPath() );
405  aErrors += msg;
406  }
407  }
408  else if( destFile.GetName() == "sym-lib-table" )
409  {
410  SYMBOL_LIB_TABLE symbolLibTable;
411  symbolLibTable.Load( aSrcFilePath );
412 
413  for( unsigned i = 0; i < symbolLibTable.GetCount(); i++ )
414  {
415  LIB_TABLE_ROW& row = symbolLibTable.At( i );
416  wxString uri = row.GetFullURI();
417 
418  uri.Replace( "/" + aProjectName + "-cache.lib", "/" + aNewProjectName + "-cache.lib" );
419  uri.Replace( "/" + aProjectName + "-rescue.lib", "/" + aNewProjectName + "-rescue.lib" );
420  uri.Replace( "/" + aProjectName + ".lib", "/" + aNewProjectName + ".lib" );
421 
422  row.SetFullURI( uri );
423  }
424 
425  try
426  {
427  symbolLibTable.Save( destFile.GetFullPath() );
428  }
429  catch( ... )
430  {
431  wxString msg;
432 
433  if( !aErrors.empty() )
434  aErrors += "\n";
435 
436  msg.Printf( _( "Cannot copy file \"%s\"." ), destFile.GetFullPath() );
437  aErrors += msg;
438  }
439  }
440  else
441  {
442  wxFAIL_MSG( "Unexpected filetype for Eeschema::SaveFileAs()" );
443  }
444 }
const std::string NetlistFileExtension
static void traverseSEXPR(SEXPR::SEXPR *aNode, const std::function< void(SEXPR::SEXPR *)> &aVisitor)
Definition: eeschema.cpp:287
Hold a record identifying a library accessed by the appropriate plug in object in the LIB_TABLE.
const std::string LegacySymbolLibFileExtension
std::unique_ptr< SEXPR > ParseFromFile(const std::string &aFilename)
const std::string BackupFileSuffix
unsigned GetCount() const
Get the number of rows contained in the table.
void KiCopyFile(const wxString &aSrcPath, const wxString &aDestPath, wxString &aErrors)
Definition: gestfich.cpp:363
const std::string SchematicSymbolFileExtension
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...
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
Definition: macros.h:96
const std::string LegacySymbolDocumentFileExtension
void Load(const wxString &aFileName)
Load the library table using the path defined by aFileName aFallBackTable.
const std::string LegacySchematicFileExtension
void SetFullURI(const wxString &aFullURI)
Change the full URI for the library.
LIB_TABLE_ROW & At(unsigned aIndex)
Get the 'n'th LIB_TABLE_ROW object.
#define _(s)
Definition: 3d_actions.cpp:33
const std::string KiCadSchematicFileExtension
void Save(const wxString &aFileName) const
Write this library table to aFileName in s-expression form.
const std::string KiCadSymbolLibFileExtension

References _, LIB_TABLE::At(), BackupFileSuffix, LIB_TABLE::GetCount(), LIB_TABLE_ROW::GetFullURI(), KiCadSchematicFileExtension, KiCadSymbolLibFileExtension, KiCopyFile(), LegacySchematicFileExtension, LegacySymbolDocumentFileExtension, LegacySymbolLibFileExtension, LIB_TABLE::Load(), NetlistFileExtension, SEXPR::PARSER::ParseFromFile(), path, LIB_TABLE::Save(), SchematicSymbolFileExtension, LIB_TABLE_ROW::SetFullURI(), TO_UTF8, and traverseSEXPR().

◆ start_common()

bool KIFACE_I::start_common ( int  aCtlBits)
protectedinherited

Common things to do for a top program module, during OnKifaceStart().

Definition at line 84 of file kiface_i.cpp.

85 {
86  m_start_flags = aCtlBits;
87  m_bm.Init();
89 
90  return true;
91 }
KIWAY::FACE_T m_id
Definition: kiface_i.h:116
void Init()
Definition: bin_mod.cpp:38
BIN_MOD m_bm
Definition: kiface_i.h:118
int m_start_flags
flags provided in OnKifaceStart()
Definition: kiface_i.h:120
SEARCH_STACK m_search
Definition: bin_mod.h:60
static void setSearchPaths(SEARCH_STACK *aDst, KIWAY::FACE_T aId)
Initialize aDst SEARCH_STACK with KIFACE (DSO) specific settings.
Definition: kiface_i.cpp:33

References BIN_MOD::Init(), KIFACE_I::m_bm, KIFACE_I::m_id, BIN_MOD::m_search, KIFACE_I::m_start_flags, and setSearchPaths().

Referenced by BMP2CMP::IFACE::OnKifaceStart(), PCBCALC::IFACE::OnKifaceStart(), IFACE::OnKifaceStart(), PGE::IFACE::OnKifaceStart(), CV::IFACE::OnKifaceStart(), GERBV::IFACE::OnKifaceStart(), PCB::IFACE::OnKifaceStart(), and OnKifaceStart().

◆ StartFlags()

int KIFACE_I::StartFlags ( ) const
inlineinherited

Return whatever was passed as aCtlBits to OnKifaceStart().

Definition at line 99 of file kiface_i.h.

99 { return m_start_flags; }
int m_start_flags
flags provided in OnKifaceStart()
Definition: kiface_i.h:120

References KIFACE_I::m_start_flags.


The documentation for this struct was generated from the following file: