75#include <wx/filedlg.h>
77#include <wx/process.h>
78#include <wx/snglinst.h>
88#include <ApplicationServices/ApplicationServices.h>
97#define EDITORS_CAPTION _( "Editors" )
98#define PROJECT_FILES_CAPTION _( "Project Files" )
100#define ID_INIT_WATCHED_PATHS 52913
102#define SEP() wxFileName::GetPathSeparator()
137#include <wx/xml/xml.h>
141 const wxPoint& pos,
const wxSize& size ) :
144 m_openSavedWindows( false ),
145 m_restoredFromHistory( false ),
146 m_active_project( false ),
147 m_showHistoryPanel( false ),
148 m_leftWin( nullptr ),
149 m_historyPane( nullptr ),
150 m_launcher( nullptr ),
151 m_lastToolbarIconSize( 0 ),
152 m_pcmButton( nullptr ),
153 m_pcmUpdateCount( 0 )
155 const int defaultLeftWinWidth = FromDIP( 250 );
157 m_leftWinWidth = defaultLeftWinWidth;
158 m_aboutTitle =
"KiCad";
173 CreateStatusBar( 2 );
181 wxIconBundle icon_bundle;
186 icon_bundle.AddIcon( icon );
188 icon_bundle.AddIcon( icon );
190 icon_bundle.AddIcon( icon );
192 icon_bundle.AddIcon( icon );
194 icon_bundle.AddIcon( icon );
199 icon_bundle.AddIcon( icon );
201 icon_bundle.AddIcon( icon );
203 icon_bundle.AddIcon( icon );
205 icon_bundle.AddIcon( icon );
207 icon_bundle.AddIcon( icon );
210 SetIcons( icon_bundle );
226 m_auimgr.SetManagedWindow(
this );
227 m_auimgr.SetFlags( wxAUI_MGR_LIVE_RESIZE );
229 m_auimgr.AddPane( m_tbLeft,
EDA_PANE().VToolbar().Name(
"TopMainToolbar" ).Left().Layer( 2 ) );
236 m_auimgr.AddPane( m_leftWin,
EDA_PANE().Palette().Name(
"ProjectTree" ).Left().Layer( 1 )
238 .MinSize( m_leftWinWidth, -1 ).BestSize( m_leftWinWidth, -1 ) );
241 m_auimgr.AddPane( m_historyPane,
242 EDA_PANE().Palette().Name(
"LocalHistory" ).Left().Layer( 1 ).Position( 1 )
243 .Caption(
_(
"Local History" ) ).PaneBorder(
false )
244 .Floatable(
false ).Movable(
false ).CloseButton(
true ).Hide() );
246 if( m_showHistoryPanel )
247 m_auimgr.GetPane( m_historyPane ).Show();
249 wxSize client_size = GetClientSize();
250 m_notebook =
new wxAuiNotebook(
this, wxID_ANY, wxPoint( client_size.x, client_size.y ),
251 FromDIP( wxSize( 700, 590 ) ),
252 wxAUI_NB_TOP | wxAUI_NB_CLOSE_ON_ALL_TABS | wxAUI_NB_TAB_MOVE
253 | wxAUI_NB_SCROLL_BUTTONS | wxNO_BORDER );
261 m_notebook->Freeze();
262 m_launcher->SetClosable(
false );
264 m_notebook->SetTabCtrlHeight( 0 );
268 .PaneBorder(
false ).MinSize( m_notebook->GetBestSize() ) );
273 m_auimgr.GetPane( m_leftWin ).MinSize( defaultLeftWinWidth, -1 );
276 wxSizer* mainSizer = GetSizer();
279 if( mainSizer &&
config()->m_Window.state.size_x == 0 &&
config()->m_Window.state.size_y == 0 )
282 mainSizer->Fit(
this );
287 SetTitle( wxT(
"KiCad" ) );
292 m_leftWin->SetFocus();
304 DragAcceptFiles(
true );
328 m_pcm->StopBackgroundUpdate();
354 wxAuiNotebook* notebook = (wxAuiNotebook*) evt.GetEventObject();
355 wxWindow* page = notebook->GetPage( evt.GetSelection() );
359 if( panel->GetClosable() )
361 if( !panel->GetCanClose() )
379 const wxString&
name )
394 m_pcm = std::make_shared<PLUGIN_CONTENT_MANAGER>(
395 [
this](
int aUpdateCount )
399 if( aUpdateCount > 0 )
403 _(
"PCM Updates Available" ),
404 wxString::Format(
_(
"%d package update(s) available" ), aUpdateCount ),
457#define ENABLE( x ) ACTION_CONDITIONS().Enable( x )
460 activeProjectCond.
Enable( activeProject );
512 : wxString( wxEmptyString );
521 return fn.GetFullPath();
530 return fn.GetFullPath();
538 fn.SetExt( FILEEXT::PcbFileExtension );
539 return fn.GetFullPath();
548 return fn.GetFullPath();
593 wxString ext = fileName.GetExt();
597 wxString fn = fileName.GetFullPath();
605 wxString gerberFiles;
610 wxString ext = fileName.GetExt();
615 gerberFiles += wxT(
'\"' );
616 gerberFiles += fileName.GetFullPath() + wxT(
'\"' );
617 gerberFiles = gerberFiles.Pad( 1 );
621 wxString fn = fileName.GetFullPath();
627 if( !gerberFiles.IsEmpty() )
631 if( wxFileExists( fullEditorName ) )
633 wxString command = fullEditorName +
" " + gerberFiles;
645 for(
size_t i = 0; i <
m_notebook->GetPageCount(); i++ )
651 if( !panel->GetCanClose() )
661 aEvent.StopPropagation();
667 if( aEvent.CanVeto() )
685 static std::atomic<unsigned int> lock_close_event( 0 );
687 if( ++lock_close_event > 1 )
699 lock_close_event = 0;
713 for(
size_t i = 0; i <
m_notebook->GetPageCount(); i++ )
717 wxFileName jobsetFn(
jobset->GetFilePath() );
718 jobsetFn.MakeRelativeTo(
Prj().GetProjectPath() );
735 if( !
Kiway().PlayersClose(
false ) )
750 if(
Prj().GetLocalSettings().ShouldAutoSave() &&
Prj().GetProjectFile().ShouldAutoSave() )
764 if( !projPath.IsEmpty() &&
Kiway().LocalHistory().HistoryExists( projPath ) )
766 if(
Kiway().LocalHistory().HeadNewerThanLastSave( projPath ) )
769 if(
Kiway().LocalHistory().CommitFullProjectSnapshot( projPath, wxS(
"Close" ) ) )
778 if(
Pgm().GetCommonSettings() &&
Pgm().GetCommonSettings()->m_Backup.enabled )
796 for(
int i = (
int)
m_notebook->GetPageCount() - 1; i >= 0; i-- )
802 if( panel->GetProjectTied() )
815 bool aResaveProjectPreferences )
817 for(
size_t i = 0; i <
m_notebook->GetPageCount(); i++ )
821 if( aFileName.GetFullPath() == panel->GetFilePath() )
831 std::unique_ptr<JOBSET> jobsFile = std::make_unique<JOBSET>( aFileName.GetFullPath().ToStdString() );
833 jobsFile->LoadFromFile();
835 if( aCreate && !aFileName.FileExists() )
837 JOBSET_DESTINATION* dest = jobsFile->AddNewDestination( JOBSET_DESTINATION_T::FOLDER );
839 jobsFile->SaveToFile( wxEmptyString,
true );
845 m_notebook->AddPage( jobPanel, aFileName.GetFullName(),
true );
848 if( aResaveProjectPreferences )
861 if( !aProjectFileName.Exists() )
864 wxString fullPath = aProjectFileName.GetFullPath();
869 wxFileName lockFn( fullPath );
872 bool lockFilePreExisted = lockFn.FileExists();
874 bool lockOverrideGranted =
false;
876 if( lockFilePreExisted )
886 if( !
Pgm().SingleInstance()->IsAnotherRunning() )
890 if( !lockFile.
Valid() )
893 msg.Printf(
_(
"Project '%s' is already open by '%s' at '%s'." ),
900 lockOverrideGranted =
true;
922 if( lockOverrideGranted )
927 if( aProjectFileName.IsDirWritable() )
932 if(
Kiway().LocalHistory().HeadNewerThanLastSave(
Prj().GetProjectPath() ) )
937 _(
"KiCad found unsaved changes from your last session that are newer than "
938 "the saved project files." ),
939 _(
"Recover Unsaved Changes" ),
940 wxYES_NO | wxICON_QUESTION );
942 dlg.SetExtendedMessage(
943 _(
"This can happen if your previous session ended unexpectedly.\n\n"
944 "Choose 'Restore' to recover those changes, or 'Discard' to keep the "
945 "currently saved files." ) );
947 dlg.SetYesNoLabels(
_(
"Restore" ),
_(
"Discard" ) );
949 if( dlg.ShowModal() == wxID_YES )
957 if(
Kiway().LocalHistory().CommitFullProjectSnapshot(
Prj().GetProjectPath(),
958 wxS(
"Declined restore" ) ) )
973 for(
const wxString&
jobset :
Prj().GetLocalSettings().m_OpenJobSets )
975 wxFileName jobsetFn(
jobset );
976 jobsetFn.MakeAbsolute(
Prj().GetProjectPath() );
978 if( jobsetFn.Exists() )
990 wxPostEvent(
this, cmd );
1016 wxCHECK_RET( aProjectFileName.DirExists() && aProjectFileName.IsDirWritable(),
1017 "Project folder must exist and be writable to create a new project." );
1020 if( !aProjectFileName.FileExists() )
1022 wxFileName legacyPro( aProjectFileName );
1025 if( legacyPro.FileExists() )
1030 wxRemoveFile( legacyPro.GetFullPath() );
1035 wxString srcFileName =
sys_search().FindValidPath(
"kicad.kicad_pro" );
1037 wxFileName destFileName( aProjectFileName );
1041 if( !wxFileName::FileExists( srcFileName )
1042 || !wxCopyFile( srcFileName, destFileName.GetFullPath() ) )
1044 wxFFile file( destFileName.GetFullPath(),
"wb" );
1046 if( file.IsOpened() )
1047 file.Write( wxT(
"{\n}\n") );
1057 if( aCreateStubFiles )
1059 wxFileName fn( aProjectFileName.GetFullPath() );
1064 if( !fn.FileExists() )
1066 wxFFile file( fn.GetFullPath(),
"wb" );
1068 if( file.IsOpened() )
1070 file.Write( wxString::Format(
"(kicad_sch\n"
1072 "\t(generator \"eeschema\")\n"
1073 "\t(generator_version \"%s\")\n"
1075 "\t(paper \"A4\")\n"
1077 "\t(sheet_instances\n"
1079 "\t\t\t(page \"1\")\n"
1082 "\t(embedded_fonts no)\n"
1085 KIID().AsString() ) );
1094 wxFileName leg_fn( fn );
1097 if( !fn.FileExists() && !leg_fn.FileExists() )
1099 wxFFile file( fn.GetFullPath(),
"wb" );
1101 if( file.IsOpened() )
1104 file.Write( wxString::Format(
"(kicad_pcb (version %d) (generator \"pcbnew\") (generator_version \"%s\")\n)",
1128 wxFileDialog dlg(
this,
_(
"Edit File in Text Editor" ), default_dir, wxEmptyString, wildcard,
1133 if( dlg.ShowModal() == wxID_CANCEL )
1136 wxString filename = dlg.GetPath();
1138 if( !dlg.GetPath().IsEmpty() && !
Pgm().GetTextEditor().IsEmpty() )
1158 int id =
event.GetId();
1175 if( pageId != wxNOT_FOUND )
1192 m_pcm->ReadEnvVar();
1212 if( !
Prj().IsNullProject() &&
1213 Prj().GetProjectLock() ==
nullptr )
1223 if( !
Pgm().SingleInstance()->IsAnotherRunning() )
1229 if( !lockFile.
Valid() )
1232 msg.Printf(
_(
"Project '%s' is already open by '%s' at '%s'." ), file, lockFile.
GetUsername(),
1247 if( !file.IsEmpty() )
1249 wxFileName fn( file );
1251 title = fn.GetName();
1253 if(
Prj().IsReadOnly() )
1254 title += wxS(
" " ) +
_(
"[Read Only]" );
1258 title =
_(
"[no project loaded]" );
1262 title += wxT(
" \u2014 " ) + wxString( wxS(
"KiCad" ) );
1271 [
this](
const wxString& aProjectPath, std::vector<wxString>& aFiles )
1284 wxCHECK( settings, );
1297 wxCHECK( settings, );
1299 settings->m_LeftWinWidth =
m_leftWin->GetSize().x;
1312 wxString status = wxString::Format(
_(
"Project: %s" ),
Prj().GetProjectFullName() );
1336 if(
Pgm().GetCommonSettings()->m_Session.remember_open_files )
1338 int previousOpenCount =
1339 std::count_if(
Prj().GetLocalSettings().m_files.begin(),
1340 Prj().GetLocalSettings().m_files.end(),
1343 return !f.fileName.EndsWith( FILEEXT::ProjectFileExtension ) && f.open;
1346 if( previousOpenCount > 0 )
1349 previousOpenCount,
this );
1352 std::set<wxString> openedFiles;
1358 if( file.open && !openedFiles.count( file.fileName ) )
1360 progressReporter.
Update( i++, wxString::Format(
_(
"Restoring '%s'" ), file.fileName ) );
1362 openedFiles.insert( file.fileName );
1363 wxFileName fn( file.fileName );
1392 schFrame->OnModify();
1396 pcbFrame->OnModify();
1407 m_pcm->RunBackgroundUpdate();
1410#ifdef KICAD_UPDATE_CHECK
1468 bool show = !pane.IsShown();
1480 if( !
Kiway().PlayersClose(
true ) )
1483 if(
Kiway().LocalHistory().RestoreCommit(
Prj().GetProjectPath(), aHash,
this ) )
constexpr EDA_IU_SCALE unityScale
wxBitmap KiBitmap(BITMAPS aBitmap, int aHeightTag)
Construct a wxBitmap from an image identifier Returns the image from the active theme if the image ha...
wxString GetMajorMinorVersion()
Get only the major and minor version in a string major.minor.
bool IsNightlyVersion()
Check if the build is meant to be nightly.
static TOOL_ACTION saveAs
Manage TOOL_ACTION objects.
void SetConditions(const TOOL_ACTION &aAction, const ACTION_CONDITIONS &aConditions)
Set the conditions the UI elements for activating a specific tool action should use for determining t...
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
wxProgressDialog with the option to also update the application progress on the taskbar
virtual bool Update(int aValue, const wxString &aNewMsg=wxEmptyString, bool *aSkip=nullptr) override
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
void UnregisterStatusBar(KISTATUSBAR *aStatusBar)
Removes status bar from handling.
void RegisterStatusBar(KISTATUSBAR *aStatusBar)
Add a status bar for handling.
Handle actions that are shared between different applications.
The base frame for deriving all KiCad main window classes.
void LoadWindowState(const wxString &aFileName)
void CommonSettingsChanged(int aFlags) override
Notification event that some of the common (suite-wide) settings have changed.
void ShowChangedLanguage() override
Redraw the menus and what not in current language.
virtual void setupUIConditions()
Setup the UI conditions for the various actions and their controls in this frame.
std::vector< wxFileName > m_AcceptedFiles
SETTINGS_MANAGER * GetSettingsManager() const
virtual void RecreateToolbars()
virtual void LoadSettings(APP_SETTINGS_BASE *aCfg)
Load common frame parameters from a configuration file.
ACTION_TOOLBAR * m_tbLeft
std::map< const wxString, TOOL_ACTION * > m_acceptedExts
Associate file extensions with action to execute.
virtual void SaveSettings(APP_SETTINGS_BASE *aCfg)
Save common frame parameters to a configuration data file.
void SetMruPath(const wxString &aPath)
bool m_isClosing
Set by the close window event handler after frames are asked if they can close.
Specialization of the wxAuiPaneInfo class for KiCad panels.
void SetOutputPath(const wxString &aPath)
virtual bool SaveToFile(const wxString &aDirectory="", bool aForce=false)
Calls Store() and then writes the contents of the JSON document to a file.
static TOOL_ACTION viewDroppedGerbers
static TOOL_ACTION editPCB
static TOOL_ACTION loadProject
static TOOL_ACTION showLocalHistory
static TOOL_ACTION editSchematic
static TOOL_ACTION openTextEditor
static TOOL_ACTION archiveProject
static TOOL_ACTION closeProject
static TOOL_ACTION openJobsetFile
static TOOL_ACTION newJobsetFile
Handle actions in the kicad manager frame.
The main KiCad project manager frame.
std::shared_ptr< PLUGIN_CONTENT_MANAGER > m_pcm
void language_change(wxCommandEvent &event)
void SetPcmButton(BITMAP_BUTTON *aButton)
void doCloseWindow() override
void CreateNewProject(const wxFileName &aProjectFileName, bool aCreateStubFiles=true)
Creates a new project by setting up and initial project, schematic, and board files.
wxString m_FileWatcherInfo
const SEARCH_STACK & sys_search() override
Return a SEARCH_STACK pertaining to entire program.
void OnImportEasyEdaProFiles(wxCommandEvent &event)
Open dialog to import EasyEDA Pro schematic and board files.
void ProjectChanged() override
Notification event that the project has changed.
void ShowChangedLanguage() override
Redraw the menus and what not in current language.
const wxString SchLegacyFileName()
wxWindow * GetToolCanvas() const override
Canvas access.
void OnImportEasyEdaFiles(wxCommandEvent &event)
Open dialog to import EasyEDA Std schematic and board files.
void ToggleLocalHistory()
PROJECT_TREE_PANE * m_leftWin
void OnImportAltiumProjectFiles(wxCommandEvent &event)
Open dialog to import Altium project files.
const wxString GetProjectFileName() const
void updatePcmButtonBadge()
KICAD_SETTINGS * kicadSettings() const
const wxString SchFileName()
void OnImportEagleFiles(wxCommandEvent &event)
Open dialog to import Eagle schematic and board files.
wxStatusBar * OnCreateStatusBar(int number, long style, wxWindowID id, const wxString &name) override
Create the status line (like a wxStatusBar).
void OnExit(wxCommandEvent &event)
void OpenJobsFile(const wxFileName &aFileName, bool aCreate=false, bool aResaveProjectPreferences=true)
void LoadProject(const wxFileName &aProjectFileName)
bool canCloseWindow(wxCloseEvent &aCloseEvent) override
void OnSize(wxSizeEvent &event) override
virtual void setupUIConditions() override
Setup the UI conditions for the various actions and their controls in this frame.
void RestoreCommitFromHistory(const wxString &aHash)
void DoWithAcceptedFiles() override
Execute action on accepted dropped file.
void OnOpenFileInTextEditor(wxCommandEvent &event)
APP_SETTINGS_BASE * config() const override
Return the settings object used in SaveSettings(), and is overloaded in KICAD_MANAGER_FRAME.
int m_lastToolbarIconSize
const wxString PcbLegacyFileName()
void OnEditAdvancedCfg(wxCommandEvent &event)
KICAD_MANAGER_FRAME(wxWindow *parent, const wxString &title, const wxPoint &pos, const wxSize &size)
bool CloseProject(bool aSave)
Closes the project, and saves it if aSave is true;.
void onNotebookPageCloseRequest(wxAuiNotebookEvent &evt)
void CommonSettingsChanged(int aFlags) override
Notification event that some of the common (suite-wide) settings have changed.
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
void OnIdle(wxIdleEvent &event)
void onToolbarSizeChanged()
void PrintPrjInfo()
Prints the current working directory name and the project name on the text panel.
void SaveOpenJobSetsToLocalSettings(bool aIsExplicitUserSave=false)
bool m_restoredFromHistory
Set after restore to mark editors dirty.
void onNotebookPageCountChanged(wxAuiNotebookEvent &evt)
LOCAL_HISTORY_PANE * m_historyPane
void OnImportCadstarArchiveFiles(wxCommandEvent &event)
Open dialog to import CADSTAR Schematic and PCB Archive files.
void RefreshProjectTree()
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
BITMAP_BUTTON * m_pcmButton
PANEL_KICAD_LAUNCHER * m_launcher
void HideTabsIfNeeded()
Hides the tabs for Editor notebook if there is only 1 page.
wxString help_name() override
const wxString PcbFileName()
std::unique_ptr< UPDATE_MANAGER > m_updateManager
wxAuiNotebook * m_notebook
std::vector< wxString > m_OpenProjects
void SetEllipsedTextField(const wxString &aText, int aFieldId)
Set the text in a field using wxELLIPSIZE_MIDDLE option to adjust the text size to the field size.
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
KIWAY & Kiway() const
Return a reference to the KIWAY that this object has an opportunity to participate in.
A wxFrame capable of the OpenProjectFiles function, meaning it can load a portion of a KiCad project.
virtual void SetLanguage(int aLanguage)
Change the language and then calls ShowChangedLanguage() on all #KIWAY_PLAYERs.
virtual KIFACE * KiFACE(FACE_T aFaceId, bool doLoad=true)
Return the KIFACE* given a FACE_T.
LOCAL_HISTORY & LocalHistory()
Return the LOCAL_HISTORY associated with this KIWAY.
bool TagSave(const wxString &aProjectPath, const wxString &aFileType)
Tag a manual save in the local history repository.
wxString GetHeadHash(const wxString &aProjectPath)
Return the current head commit hash.
bool RestoreCommit(const wxString &aProjectPath, const wxString &aHash, wxWindow *aParent=nullptr)
Restore the project files to the state recorded by the given commit hash.
bool EnforceSizeLimit(const wxString &aProjectPath, size_t aMaxBytes)
Enforce total size limit by rebuilding trimmed history keeping newest commits whose cumulative unique...
bool Init(const wxString &aProjectPath)
Initialize the local history repository for the given project path.
void UnregisterSaver(const void *aSaverObject)
Unregister a previously registered saver callback.
void RegisterSaver(const void *aSaverObject, const std::function< void(const wxString &, std::vector< wxString > &)> &aSaver)
Register a saver callback invoked during autosave history commits.
bool OverrideLock(bool aRemoveOnRelease=true)
Force the lock, overwriting the data that existed already.
void RegisterStatusBar(KISTATUSBAR *aStatusBar)
Add a status bar for handling.
void CreateOrUpdate(const wxString &aKey, const wxString &aTitle, const wxString &aDescription, const wxString &aHref=wxEmptyString)
Create a notification with the given parameters or updates an existing one with the same key.
void Remove(const wxString &aKey)
Remove a notification by key.
void UnregisterStatusBar(KISTATUSBAR *aStatusBar)
Remove status bar from handling.
static REPORTER & GetInstance()
void SetClosable(bool aYes)
void SetProjectTied(bool aYes)
virtual COMMON_SETTINGS * GetCommonSettings() const
void PreloadDesignBlockLibraries(KIWAY *aKiway)
Starts a background job to preload the global and project design block libraries.
virtual BACKGROUND_JOBS_MONITOR & GetBackgroundJobMonitor() const
void UnregisterLibraryLoadStatusBar(KISTATUSBAR *aStatusBar)
Unregister a status bar from receiving library load warning messages.
void RegisterLibraryLoadStatusBar(KISTATUSBAR *aStatusBar)
Register a status bar to receive library load warning messages.
virtual NOTIFICATIONS_MANAGER & GetNotificationsManager() const
virtual SETTINGS_MANAGER & GetSettingsManager() const
wxString GetHelpFileName()
SEARCH_STACK & SysSearch()
APP_SETTINGS_BASE * PgmSettings()
The project local settings are things that are attached to a particular project, but also might be pa...
bool SaveToFile(const wxString &aDirectory="", bool aForce=false) override
Calls Store() and then writes the contents of the JSON document to a file.
bool ShouldAutoSave() const
std::vector< wxString > m_OpenJobSets
PROJECT_TREE_PANE Window to display the tree files.
void SetProjectLock(LOCKFILE *aLockFile)
virtual void SetReadOnly(bool aReadOnly=true)
virtual const wxString GetProjectFullName() const
Return the full path and name of the project.
virtual const wxString GetProjectPath() const
Return the full path of the project.
void SaveToHistory(const wxString &aProjectPath, std::vector< wxString > &aFiles)
Save project files (.kicad_pro and .kicad_prl) to the .history directory.
virtual PROJECT_LOCAL_SETTINGS & GetLocalSettings() const
virtual void SetLockOverrideGranted(bool aGranted=true)
Look for files in a number of paths.
static bool ShowNever(const SELECTION &aSelection)
Always returns false.
bool SaveProject(const wxString &aFullPath=wxEmptyString, PROJECT *aProject=nullptr)
Save a loaded project.
bool LoadProject(const wxString &aFullPath, bool aSetActive=true)
Load a project or sets up a new project with a specified path.
bool IsProjectOpen() const
Helper for checking if we have a project open.
bool UnloadProject(PROJECT *aProject, bool aSave=true)
Save, unload and unregister the given PROJECT.
std::vector< wxString > GetOpenProjects() const
bool TriggerBackupIfNeeded(REPORTER &aReporter) const
Call BackupProject() if a new backup is needed according to the current backup policy.
bool AskOverrideLock(wxWindow *aParent, const wxString &aMessage)
Display a dialog indicating the file is already open, with an option to reset the lock.
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_MESSAGE_DIALOG
Base window classes and related definitions.
#define KICAD_DEFAULT_DRAWFRAME_STYLE
#define KICAD_MANAGER_FRAME_NAME
EVT_MENU_RANGE(ID_GERBVIEW_DRILL_FILE1, ID_GERBVIEW_DRILL_FILEMAX, GERBVIEW_FRAME::OnDrlFileHistory) EVT_MENU_RANGE(ID_GERBVIEW_ZIP_FILE1
const wxString GERBVIEW_EXE
wxString FindKicadFile(const wxString &shortname)
Search the executable file shortname in KiCad binary path and return full file name if found or short...
static const std::string LegacySchematicFileExtension
static const std::string GerberJobFileExtension
static const std::string GerberFileExtension
static const std::string LockFileExtension
static const std::string ProjectFileExtension
static const std::string LegacyPcbFileExtension
static const std::string LegacyProjectFileExtension
static const std::string KiCadSchematicFileExtension
static const std::string LockFilePrefix
static const std::string DrillFileExtension
static const std::string KiCadPcbFileExtension
static wxString AllFilesWildcard()
static bool IsGerberFileExtension(const wxString &ext)
@ ID_IMPORT_EAGLE_PROJECT
@ ID_IMPORT_EASYEDAPRO_PROJECT
@ ID_IMPORT_CADSTAR_ARCHIVE_PROJECT
@ ID_EDIT_LOCAL_FILE_IN_TEXT_EDITOR
@ ID_IMPORT_EASYEDA_PROJECT
@ ID_IMPORT_ALTIUM_PROJECT
#define ID_INIT_WATCHED_PATHS
#define PROJECT_FILES_CAPTION
KICOMMON_API wxFont GetStatusFont(wxWindow *aWindow)
#define SEXPR_BOARD_FILE_VERSION
Current s-expression file format version. 2 was the last legacy format version.
PGM_BASE & Pgm()
The global program "get" accessor.
#define SEXPR_SCHEMATIC_FILE_VERSION
Schematic file version.
T * GetToolbarSettings(const wxString &aFilename)
KIWAY Kiway(KFCTL_STANDALONE)
std::vector< FAB_LAYER_COLOR > dummy
Functors that can be used to figure out how the action controls should be displayed in the UI and if ...
ACTION_CONDITIONS & Enable(const SELECTION_CONDITION &aCondition)
unsigned long long limit_total_size
Maximum total size of backups (bytes), 0 for unlimited.
std::shared_ptr< JOBS_OUTPUT_HANDLER > m_outputHandler
Implement a participant in the KIWAY alchemy.
virtual void PreloadLibraries(KIWAY *aKiway)
virtual void CancelPreload(bool aBlock=true)
Definition of file extensions used in Kicad.