81 auto pi = SCH_IO_MGR::FindPlugin( SCH_IO_MGR::SCH_KICAD );
82 std::unique_ptr<SCHEMATIC> schematic = std::make_unique<SCHEMATIC>(
nullptr );
88 schematic->SetProject( &manager.Prj() );
89 schematic->SetRoot( pi->LoadSchematicFile( aFilename, schematic.get() ) );
90 schematic->CurrentSheet().push_back( &schematic->Root() );
95 screen->UpdateLocalLibSymbolLinks();
102 if( schematic->RootScreen()->GetFileFormatVersionAtLoad() < 20230221 )
105 screen->FixLegacyPowerSymbolMismatches();
109 screen->MigrateSimModels();
115 sheet.UpdateAllScreenReferences();
120 schematic->ConnectionGraph()->Recalculate( sheets,
true );
150 void Reset()
override;
155 int aCtlBits = 0 )
override
342 void SaveFileAs(
const wxString& aProjectBasePath,
const wxString& aProjectName,
343 const wxString& aNewProjectBasePath,
const wxString& aNewProjectName,
344 const wxString& aSrcFilePath, wxString& aErrors )
override;
402 m_jobHandler = std::make_unique<EESCHEMA_JOBS_HANDLER>( aKiway );
424 if( !fn.FileExists() )
453 _(
"An error occurred attempting to load the global symbol library table.\n"
454 "Please edit this global symbol library table in Preferences menu." );
470 if( !fn.FileExists() )
473 emptyTable.
Save( fn.GetFullPath() );
489 _(
"An error occurred attempting to load the global design block library table.\n"
490 "Please edit this global design block library table in Preferences menu." );
519 const wxString& aNewProjectBasePath,
const wxString& aNewProjectName,
520 const wxString& aSrcFilePath, wxString& aErrors )
522 wxFileName destFile( aSrcFilePath );
523 wxString destPath = destFile.GetPathWithSep();
524 wxUniChar pathSep = wxFileName::GetPathSeparator();
525 wxString ext = destFile.GetExt();
527 if( destPath.StartsWith( aProjectBasePath + pathSep ) )
528 destPath.Replace( aProjectBasePath, aNewProjectBasePath,
false );
530 destFile.SetPath( destPath );
537 if( destFile.GetName() == aProjectName )
539 destFile.SetName( aNewProjectName );
541 else if( destFile.GetName() == aNewProjectName )
545 if( !aErrors.empty() )
546 aErrors += wxS(
"\n" );
548 msg.Printf(
_(
"Cannot copy file '%s' as it will be overwritten by the new root "
549 "sheet file." ), destFile.GetFullPath() );
563 KiCopyFile( aSrcFilePath, destFile.GetFullPath(), aErrors );
568 KiCopyFile( aSrcFilePath, destFile.GetFullPath(), aErrors );
574 if( destFile.GetName() == aProjectName + wxS(
"-cache" ) )
575 destFile.SetName( aNewProjectName + wxS(
"-cache" ) );
577 if( destFile.GetName() == aProjectName + wxS(
"-rescue" ) )
578 destFile.SetName( aNewProjectName + wxS(
"-rescue" ) );
580 KiCopyFile( aSrcFilePath, destFile.GetFullPath(), aErrors );
584 bool success =
false;
586 if( destFile.GetName() == aProjectName )
587 destFile.SetName( aNewProjectName );
596 if( node->IsList() && node->GetNumberOfChildren() > 1
597 && node->GetChild( 0 )->IsSymbol()
598 && node->GetChild( 0 )->GetSymbol() ==
"source" )
600 auto pathNode = dynamic_cast<SEXPR::SEXPR_STRING*>( node->GetChild( 1 ) );
601 auto symNode = dynamic_cast<SEXPR::SEXPR_SYMBOL*>( node->GetChild( 1 ) );
605 path = pathNode->m_value;
607 path = symNode->m_value;
609 if( path == aProjectName + wxS(
".sch" ) )
610 path = aNewProjectName + wxS(
".sch" );
611 else if( path == aProjectBasePath +
"/" + aProjectName + wxS(
".sch" ) )
612 path = aNewProjectBasePath +
"/" + aNewProjectName + wxS(
".sch" );
613 else if( path.StartsWith( aProjectBasePath ) )
614 path.Replace( aProjectBasePath, aNewProjectBasePath, false );
617 pathNode->m_value = path;
619 symNode->m_value = path;
623 wxFFile destNetList( destFile.GetFullPath(),
"wb" );
625 if( destNetList.IsOpened() )
626 success = destNetList.Write( sexpr->AsString( 0 ) );
639 if( !aErrors.empty() )
640 aErrors += wxS(
"\n" );
642 msg.Printf(
_(
"Cannot copy file '%s'." ), destFile.GetFullPath() );
646 else if( destFile.GetName() == wxS(
"sym-lib-table" ) )
649 symbolLibTable.
Load( aSrcFilePath );
651 for(
unsigned i = 0; i < symbolLibTable.
GetCount(); i++ )
656 uri.Replace( wxS(
"/" ) + aProjectName + wxS(
"-cache.lib" ),
657 wxS(
"/" ) + aNewProjectName + wxS(
"-cache.lib" ) );
658 uri.Replace( wxS(
"/" ) + aProjectName + wxS(
"-rescue.lib" ),
659 wxS(
"/" ) + aNewProjectName + wxS(
"-rescue.lib" ) );
660 uri.Replace( wxS(
"/" ) + aProjectName + wxS(
".lib" ),
661 wxS(
"/" ) + aNewProjectName + wxS(
".lib" ) );
668 symbolLibTable.
Save( destFile.GetFullPath() );
674 if( !aErrors.empty() )
677 msg.Printf(
_(
"Cannot copy file '%s'." ), destFile.GetFullPath() );
683 wxFAIL_MSG( wxS(
"Unexpected filetype for Eeschema::SaveFileAs()" ) );
constexpr EDA_IU_SCALE schIUScale
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
static PROGRESS_REPORTER & GetInstance()
static REPORTER & GetInstance()
static wxString GetGlobalTableFileName()
static bool LoadGlobalTable(DESIGN_BLOCK_LIB_TABLE &aTable)
Load the global design block library table into aTable.
static DESIGN_BLOCK_LIB_TABLE & GetGlobalLibTable()
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.
virtual const wxString What() const
A composite of Problem() and Where()
An simple container class that lets us dispatch output jobs to kifaces.
void InitSettings(APP_SETTINGS_BASE *aSettings)
void end_common()
Common things to do for a top program module, during OnKifaceEnd();.
APP_SETTINGS_BASE * KifaceSettings() const
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 CreateServer(int service, bool local=true)
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
FACE_T
Known KIFACE implementations.
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.
virtual SETTINGS_MANAGER & GetSettingsManager() const
Schematic editor (Eeschema) main window.
Container class that holds multiple SCH_SCREEN objects in a hierarchy.
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.
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.
bool LoadProject(const wxString &aFullPath, bool aSetActive=true)
Loads a project or sets up a new project with a specified path.
void FlushAndRelease(JSON_SETTINGS *aSettings, bool aSave=true)
If the given settings object is registered, save it to disk and unregister it.
std::unique_ptr< SEXPR > ParseFromFile(const std::string &aFilename)
size_t GetNumberOfChildren() const
SEXPR * GetChild(size_t aIndex) const
The SIMULATOR_FRAME holds the main user-interface for running simulations.
Symbol library viewer main window.
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.
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.
This file is part of the common library.
#define KICAD_SCH_PORT_SERVICE_NUMBER
Scripting window listens for commands for other apps.
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
static void traverseSEXPR(SEXPR::SEXPR *aNode, const std::function< void(SEXPR::SEXPR *)> &aVisitor)
@ FRAME_SCH_SYMBOL_EDITOR
@ PANEL_SCH_FIELD_NAME_TEMPLATES
@ DIALOG_SCH_LIBRARY_TABLE
@ DIALOG_DESIGN_BLOCK_LIBRARY_TABLE
void KiCopyFile(const wxString &aSrcPath, const wxString &aDestPath, wxString &aErrors)
static const std::string LegacySchematicFileExtension
static const std::string NetlistFileExtension
static const std::string SchematicSymbolFileExtension
static const std::string KiCadSchematicFileExtension
static const std::string LegacySymbolLibFileExtension
static const std::string KiCadSymbolLibFileExtension
static const std::string BackupFileSuffix
static const std::string LegacySymbolDocumentFileExtension
@ KIFACE_NETLIST_SCHEMATIC
#define KFCTL_CLI
Running as CLI app.
static std::unique_ptr< SCHEMATIC > readSchematicFromFile(const std::string &aFilename)
SCH::IFACE KIFACE_BASE, UNITS_PROVIDER kiface("eeschema", KIWAY::FACE_SCH)
bool generateSchematicNetlist(const wxString &aFilename, std::string &aNetlist)
void InvokeEditDesignBlockLibTable(KIWAY *aKiway, wxWindow *aParent)
void InvokeSchEditSymbolLibTable(KIWAY *aKiway, wxWindow *aParent)
PGM_BASE & Pgm()
The global Program "get" accessor.
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
bool OnKifaceStart(PGM_BASE *aProgram, int aCtlBits, KIWAY *aKiway) override
Typically start_common() is called from here.
Implement a participant in the KIWAY alchemy.
bool OnKifaceStart(PGM_BASE *aProgram, int aCtlBits, KIWAY *aKiway) override
Typically start_common() is called from here.
bool loadGlobalDesignBlockLibTable()
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 ...
wxWindow * CreateKiWindow(wxWindow *aParent, int aClassId, KIWAY *aKiway, int aCtlBits=0) override
Create a wxWindow for the current project.
IFACE(const char *aName, KIWAY::FACE_T aType)
void Reset() override
Reloads global state.
void * IfaceOrAddress(int aDataId) override
Return a pointer to the requested object.
std::unique_ptr< EESCHEMA_JOBS_HANDLER > m_jobHandler
bool loadGlobalLibTable()
bool HandleJobConfig(JOB *aJob, wxWindow *aParent) override
void OnKifaceEnd() override
Called just once just before the DSO is to be unloaded.
int HandleJob(JOB *aJob) override
Definition of file extensions used in Kicad.