90 SCH_IO* pi = SCH_IO_MGR::FindPlugin( SCH_IO_MGR::SCH_KICAD );
91 std::unique_ptr<SCHEMATIC> schematic = std::make_unique<SCHEMATIC>(
nullptr );
100 schematic->SetProject( &manager.
Prj() );
104 std::vector<SCH_SHEET*> topLevelSheets = schematic->GetTopLevelSheets();
106 if( !topLevelSheets.empty() )
108 schematic->CurrentSheet().push_back( topLevelSheets[0] );
110 "Set current sheet to first top-level sheet: %s, path: %s",
111 topLevelSheets[0]->GetName(),
112 schematic->CurrentSheet().Path().AsString() );
116 wxLogWarning(
"No top-level sheets found after loading schematic!" );
122 screen->UpdateLocalLibSymbolLinks();
129 if( schematic->RootScreen()->GetFileFormatVersionAtLoad() < 20230221 )
132 screen->FixLegacyPowerSymbolMismatches();
136 screen->MigrateSimModels();
142 sheet.UpdateAllScreenReferences();
150 schematic->ConnectionGraph()->Recalculate( sheets,
true );
182 void Reset()
override;
228 bool cancelled =
false;
283 return new PANEL_SYM_EDITING_OPTIONS( aParent,
this, frame );
291 std::vector<TOOL_ACTION*> actions;
292 std::vector<ACTION_TOOLBAR_CONTROL*> controls;
295 actions.push_back( action );
298 controls.push_back( control );
300 return new PANEL_TOOLBAR_CUSTOMIZATION( aParent, cfg, tb, actions, controls );
304 return new PANEL_SYM_COLOR_SETTINGS( aParent );
323 return new PANEL_GRID_SETTINGS( aParent,
this, frame, cfg,
FRAME_SCH );
339 return new PANEL_EESCHEMA_EDITING_OPTIONS( aParent,
this, frame );
347 std::vector<TOOL_ACTION*> actions;
348 std::vector<ACTION_TOOLBAR_CONTROL*> controls;
351 actions.push_back( action );
354 controls.push_back( control );
356 return new PANEL_TOOLBAR_CUSTOMIZATION( aParent, cfg, tb, actions, controls );
360 return new PANEL_EESCHEMA_COLOR_SETTINGS( aParent );
363 return new PANEL_TEMPLATE_FIELDNAMES( aParent,
nullptr );
379 return new PANEL_SIMULATOR_PREFERENCES( aParent );
412 void SaveFileAs(
const wxString& aProjectBasePath,
const wxString& aProjectName,
413 const wxString& aNewProjectBasePath,
const wxString& aNewProjectName,
414 const wxString& aSrcFilePath, wxString& aErrors )
override;
468 m_jobHandler = std::make_unique<EESCHEMA_JOBS_HANDLER>( aKiway );
487 constexpr static int interval = 150;
488 constexpr static int timeLimit = 120000;
499 [
this, aKiway]() ->
void
501 std::shared_ptr<BACKGROUND_JOB_REPORTER> reporter =
508 reporter->Report(
_(
"Loading Symbol Libraries" ) );
519 std::this_thread::sleep_for( std::chrono::milliseconds( interval ) );
523 float progress = *loadStatus;
524 reporter->SetCurrentProgress( progress );
531 reporter->SetCurrentProgress( 1 );
537 if( elapsed > timeLimit )
547 std::string payload =
"";
573 const wxString& aNewProjectBasePath,
const wxString& aNewProjectName,
574 const wxString& aSrcFilePath, wxString& aErrors )
576 wxFileName destFile( aSrcFilePath );
577 wxString destPath = destFile.GetPathWithSep();
578 wxUniChar pathSep = wxFileName::GetPathSeparator();
579 wxString ext = destFile.GetExt();
581 if( destPath.StartsWith( aProjectBasePath + pathSep ) )
582 destPath.Replace( aProjectBasePath, aNewProjectBasePath,
false );
584 destFile.SetPath( destPath );
591 if( destFile.GetName() == aProjectName )
593 destFile.SetName( aNewProjectName );
595 else if( destFile.GetName() == aNewProjectName )
599 if( !aErrors.empty() )
600 aErrors += wxS(
"\n" );
602 msg.Printf(
_(
"Cannot copy file '%s' as it will be overwritten by the new root "
603 "sheet file." ), destFile.GetFullPath() );
609 [&](
const std::string& token, wxString& value ) ->
bool
611 if( token ==
"project" && value == aProjectName )
613 value = aNewProjectName;
624 KiCopyFile( aSrcFilePath, destFile.GetFullPath(), aErrors );
630 if( destFile.GetName() == aProjectName + wxS(
"-cache" ) )
631 destFile.SetName( aNewProjectName + wxS(
"-cache" ) );
633 if( destFile.GetName() == aProjectName + wxS(
"-rescue" ) )
634 destFile.SetName( aNewProjectName + wxS(
"-rescue" ) );
636 KiCopyFile( aSrcFilePath, destFile.GetFullPath(), aErrors );
640 if( destFile.GetName() == aProjectName )
641 destFile.SetName( aNewProjectName );
644 [&](
const std::string& token, wxString& value ) ->
bool
646 if( token ==
"source" )
648 for( const wxString& extension : { wxString( wxT(
".sch" ) ), wxString( wxT(
".kicad_sch" ) ) } )
650 if( value == aProjectName + extension )
652 value = aNewProjectName + extension;
655 else if( value == aProjectBasePath +
"/" + aProjectName + extension )
657 value = aNewProjectBasePath +
"/" + aNewProjectName + extension;
660 else if( value.StartsWith( aProjectBasePath ) )
662 value.Replace( aProjectBasePath, aNewProjectBasePath, false );
674 wxFileName libTableFn( aSrcFilePath );
676 libTable.SetPath( destFile.GetFullPath() );
679 for( LIBRARY_TABLE_ROW& row : libTable.Rows() )
681 wxString uri = row.URI();
683 uri.Replace( wxS(
"/" ) + aProjectName + wxS(
"-cache.lib" ),
684 wxS(
"/" ) + aNewProjectName + wxS(
"-cache.lib" ) );
685 uri.Replace( wxS(
"/" ) + aProjectName + wxS(
"-rescue.lib" ),
686 wxS(
"/" ) + aNewProjectName + wxS(
"-rescue.lib" ) );
687 uri.Replace( wxS(
"/" ) + aProjectName + wxS(
".lib" ),
688 wxS(
"/" ) + aNewProjectName + wxS(
".lib" ) );
693 libTable.Save().map_error(
694 [&](
const LIBRARY_ERROR& aError )
698 if( !aErrors.empty() )
699 aErrors += wxT(
"\n" );
701 msg.Printf(
_(
"Cannot copy file '%s'." ), destFile.GetFullPath() );
707 wxFAIL_MSG( wxS(
"Unexpected filetype for Eeschema::SaveFileAs()" ) );
714 return m_jobHandler->RunJob( aJob, aReporter, aProgressReporter );
constexpr EDA_IU_SCALE schIUScale
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
static std::list< TOOL_ACTION * > & GetActionList()
Return list of TOOL_ACTIONs.
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
std::shared_ptr< BACKGROUND_JOB > Create(const wxString &aName)
Creates a background job with the given name.
void Remove(std::shared_ptr< BACKGROUND_JOB > job)
Removes the given background job from any lists and frees it.
static PROGRESS_REPORTER & GetInstance()
static REPORTER & GetInstance()
The base frame for deriving all KiCad main window classes.
static void SetSchEditFrame(SCH_EDIT_FRAME *aSchEditFrame)
An simple container class that lets us dispatch output jobs to kifaces.
KIFACE_BASE(const char *aKifaceName, KIWAY::FACE_T aId)
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)
bool Destroy() override
Our version of Destroy() which is virtual from wxWidgets.
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.
virtual void ExpressMail(FRAME_T aDestination, MAIL_T aCommand, std::string &aPayload, wxWindow *aSource=nullptr, bool aFromOtherThread=false)
Send aPayload to aDestination from aSource.
FACE_T
Known KIFACE implementations.
virtual PROJECT & Prj() const
Return the PROJECT associated with this KIWAY.
std::optional< float > AsyncLoadProgress() const
Returns async load progress between 0.0 and 1.0, or nullopt if load is not in progress.
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 BACKGROUND_JOBS_MONITOR & GetBackgroundJobMonitor() const
virtual SETTINGS_MANAGER & GetSettingsManager() const
A progress reporter interface for use in multi-threaded environments.
static SYMBOL_LIBRARY_ADAPTER * SymbolLibAdapter(PROJECT *aProject)
Accessor for project symbol library manager adapter.
A pure virtual class used to derive REPORTER objects from.
Schematic editor (Eeschema) main window.
Base class that schematic file and library loading and saving plugins should derive from.
virtual SCH_SHEET * LoadSchematicFile(const wxString &aFileName, SCHEMATIC *aSchematic, SCH_SHEET *aAppendToMe=nullptr, const std::map< std::string, UTF8 > *aProperties=nullptr)
Load information from some input file format that this SCH_IO implementation knows about,...
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 * RegisterSettings(T *aSettings, bool aLoadNow=true)
Take ownership of the pointer passed in.
bool LoadProject(const wxString &aFullPath, bool aSetActive=true)
Load a project or sets up a new project with a specified path.
PROJECT & Prj() const
A helper while we are not MDI-capable – return the one and only project.
The SIMULATOR_FRAME holds the main user-interface for running simulations.
Simple error container for failure to init the simulation engine and ultimately abort the frame const...
Symbol library viewer main window.
The symbol library editor main window.
An interface to the global shared library manager that is schematic-specific and linked to one projec...
void AsyncLoad() override
Loads all available libraries for this adapter type in the background.
Symbol library viewer main window.
UNITS_PROVIDER(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnits)
EDA_UNITS GetUserUnits() const
void SetUserUnits(EDA_UNITS aUnits)
This file is part of the common library.
#define KICAD_SCH_PORT_SERVICE_NUMBER
Eeschema listens on this port for commands from Pcbnew.
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
@ FRAME_SCH_SYMBOL_EDITOR
@ PANEL_SCH_FIELD_NAME_TEMPLATES
@ DIALOG_SCH_LIBRARY_TABLE
@ DIALOG_DESIGN_BLOCK_LIBRARY_TABLE
void CopySexprFile(const wxString &aSrcPath, const wxString &aDestPath, std::function< bool(const std::string &token, wxString &value)> aCallback, wxString &aErrors)
void KiCopyFile(const wxString &aSrcPath, const wxString &aDestPath, wxString &aErrors)
static const std::string LegacySchematicFileExtension
static const std::string NetlistFileExtension
static const std::string SymbolLibraryTableFileName
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
const wxChar *const traceSchCurrentSheet
Flag to enable debug output of current sheet tracking in the schematic editor.
@ 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.
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.
std::future< void > m_libraryPreloadReturn
bool OnKifaceStart(PGM_BASE *aProgram, int aCtlBits, KIWAY *aKiway) override
Typically start_common() is called from here.
std::shared_ptr< BACKGROUND_JOB > m_libraryPreloadBackgroundJob
void PreloadLibraries(KIWAY *aKiway) override
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 ...
void ProjectChanged() override
wxWindow * CreateKiWindow(wxWindow *aParent, int aClassId, KIWAY *aKiway, int aCtlBits=0) override
Create a wxWindow for the current project.
std::atomic_bool m_libraryPreloadAbort
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.
int HandleJob(JOB *aJob, REPORTER *aReporter, PROGRESS_REPORTER *aProgressReporter) override
std::unique_ptr< EESCHEMA_JOBS_HANDLER > m_jobHandler
std::atomic_bool m_libraryPreloadInProgress
bool HandleJobConfig(JOB *aJob, wxWindow *aParent) override
void OnKifaceEnd() override
Called just once just before the DSO is to be unloaded.
thread_pool & GetKiCadThreadPool()
Get a reference to the current thread pool.
BS::priority_thread_pool thread_pool
wxLogTrace helper definitions.
Definition of file extensions used in Kicad.