46#include <wx/snglinst.h> 
   82#include <wx/stdpaths.h> 
   84#include <wx/filedlg.h> 
   85#include <wx/txtstrm.h> 
   86#include <wx/wfstream.h> 
   87#include <wx/zipstrm.h> 
   93#define     USE_INSTRUMENTATION     0 
  107    std::vector<IO_BASE::IO_FILE_DESC> descriptions;
 
  120        wxCHECK( pi, 
false );
 
  127        descriptions.emplace_back( desc );
 
  130    wxString                 fileFiltersStr;
 
  131    std::vector<std::string> allExtensions;
 
  132    std::set<wxString>       allWildcardsSet;
 
  136        if( !fileFiltersStr.IsEmpty() )
 
  137            fileFiltersStr += wxChar( 
'|' );
 
  139        fileFiltersStr += desc.FileFilter();
 
  141        for( 
const std::string& ext : desc.m_FileExtensions )
 
  143            allExtensions.emplace_back( ext );
 
  148    wxString allWildcardsStr;
 
  150    for( 
const wxString& wildcard : allWildcardsSet )
 
  151        allWildcardsStr << wildcard;
 
  159        fileFiltersStr = 
_( 
"All supported formats" ) + wxT( 
"|" ) + allWildcardsStr + wxT( 
"|" )
 
  163    wxFileName fileName( *aFileName );
 
  167    if( fileName.FileExists() )
 
  169        path = fileName.GetPath();
 
  170        name = fileName.GetFullName();
 
  183    wxFileDialog dlg( aParent, kicadFormat ? 
_( 
"Open Board File" ) : 
_( 
"Import Non KiCad Board File" ),
 
  184                      path, 
name, fileFiltersStr, wxFD_OPEN | wxFD_FILE_MUST_EXIST );
 
  189        dlg.SetCustomizeHook( importOptions );
 
  191    if( dlg.ShowModal() == wxID_OK )
 
  193        *aFileName = dlg.GetPath();
 
  194        aParent->
SetMruPath( wxFileName( dlg.GetPath() ).GetPath() );
 
 
  220    wxFileName  fn = *aFileName;
 
  224    wxFileDialog dlg( aParent, 
_( 
"Save Board File As" ), fn.GetPath(), fn.GetFullName(), wildcard,
 
  225                      wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
 
  231        dlg.SetCustomizeHook( newProjectHook );
 
  233    if( dlg.ShowModal() != wxID_OK )
 
  236    *aFileName = dlg.GetPath();
 
  242        *aCreateProject = 
true;
 
 
  254        if( !wxFileName::IsFileReadable( fn ) )
 
 
  274    if( !
Kiface().IsSingle() )
 
  278    wxString fileName = 
m_frame->Prj().AbsolutePath( 
m_frame->GetBoard()->GetFileName() );
 
  281        m_frame->OpenProjectFiles( std::vector<wxString>( 1, fileName ), open_ctl );
 
 
  294           m_frame->OpenProjectFiles( std::vector<wxString>( 1, fileName ), open_ctl );
 
 
  302    wxFileName fn = 
m_frame->Prj().AbsolutePath( 
m_frame->GetBoard()->GetFileName() );
 
  304    if( !
IsOK( 
m_frame, wxString::Format( 
_( 
"Revert '%s' to last version saved?" ), fn.GetFullPath() ) ) )
 
  307    m_frame->GetScreen()->SetContentModified( 
false );    
 
 
  320    if( !
Kiface().IsSingle() )
 
  323    if( 
m_frame->IsContentModified() )
 
  325        wxFileName fileName = 
m_frame->GetBoard()->GetFileName();
 
  326        wxString   saveMsg = 
_( 
"Current board will be closed, save changes to '%s' before " 
  332                                       return m_frame->SaveBoard();
 
  338    else if( !
m_frame->GetBoard()->IsEmpty() )
 
  340        if( !
IsOK( 
m_frame, 
_( 
"Current Board will be closed. Continue?" ) ) )
 
  344    m_frame->SaveProjectLocalSettings();
 
  346    m_frame->GetBoard()->ClearProject();
 
  349    if( !
m_frame->Clear_Pcb( 
false ) )
 
  352    m_frame->LoadProjectSettings();
 
 
  366        if( !
GetBoard()->GetFileName().IsEmpty() )
 
  380    wxFileName::SplitPath( 
GetBoard()->GetFileName(), 
nullptr, 
nullptr, &orig_name, 
nullptr );
 
  382    if( orig_name.IsEmpty() )
 
  385    wxFileName savePath( 
Prj().GetProjectFullName() );
 
  387    if( !savePath.IsOk() || !savePath.IsDirWritable() )
 
  391        if( !savePath.IsOk() || !savePath.IsDirWritable() )
 
  396    wxString    filename = fn.GetFullPath();
 
  397    bool        createProject = 
false;
 
  398    bool        success = 
false;
 
  408            success = 
SavePcbFile( filename, aSaveAs, createProject );
 
 
  429    for( 
int i = 0; i < collector.
GetCount(); i++ )
 
  433            int itemWidth = 
static_cast<PCB_SHAPE*
>( collector[i] )->GetWidth();
 
  435            if( edgeWidth != -1 && edgeWidth != itemWidth )
 
  438                edgeWidth = std::max( edgeWidth, itemWidth );
 
  442                edgeWidth = itemWidth;
 
  447    if( mixed && aShowUserMsg )
 
  451                            _( 
"If the zones on this board are refilled the Copper Edge " 
  452                               "Clearance setting will be used (see Board Setup > Design " 
  453                               "Rules > Constraints).\n This may result in different fills " 
  454                               "from previous KiCad versions which used the line thicknesses " 
  455                               "of the board boundary on the Edge Cuts layer." ) );
 
  458    return std::max( 0, edgeWidth / 2 );
 
 
  465    if( aFileSet.size() != 1 )
 
  467        UTF8 msg = 
StrPrintf( 
"Pcbnew:%s() takes a single filename", __func__ );
 
  472    wxString   fullFileName( aFileSet[0] );
 
  473    wxFileName wx_filename( fullFileName );
 
  481    wxASSERT_MSG( wx_filename.IsAbsolute(), wxT( 
"Path is not absolute!" ) );
 
  483    std::unique_ptr<LOCKFILE> lock = std::make_unique<LOCKFILE>( fullFileName );
 
  485    if( !lock->Valid() && lock->IsLockedByMe() )
 
  491        if( !
Pgm().SingleInstance()->IsAnotherRunning() )
 
  492            lock->OverrideLock();
 
  497        msg.Printf( 
_( 
"PCB '%s' is already open by '%s' at '%s'." ),
 
  498                    wx_filename.GetFullName(),
 
  500                    lock->GetHostname() );
 
  505        lock->OverrideLock();
 
  520    wxFileName pro = fullFileName;
 
  523    bool is_new = !wxFileName::IsFileReadable( fullFileName );
 
  531        msg.Printf( 
_( 
"PCB '%s' does not exist. Do you wish to create it?" ), fullFileName );
 
  533        if( !
IsOK( 
this, msg ) )
 
  553        progressReporter.Hide();
 
  604        BOARD*              loadedBoard = 
nullptr;   
 
  610                                                      this, std::placeholders::_1 ) );
 
  617                                                     std::placeholders::_1 ) );
 
  621        bool failedLoad = 
false;
 
  631            std::map<std::string, UTF8> props;
 
  640            pi->SetQueryUserCallback(
 
  641                    [&]( wxString aTitle, 
int aIcon, wxString aMessage, wxString aAction ) -> 
bool 
  643                        KIDIALOG dlg( 
nullptr, aMessage, aTitle, wxOK | wxCANCEL | aIcon );
 
  645                        if( !aAction.IsEmpty() )
 
  646                            dlg.SetOKLabel( aAction );
 
  653#if USE_INSTRUMENTATION 
  657            if( 
config()->m_System.show_import_issues )
 
  662            pi->SetProgressReporter( &progressReporter );
 
  663            loadedBoard = pi->LoadBoard( fullFileName, 
nullptr, &props, &
Prj() );
 
  665#if USE_INSTRUMENTATION 
  667            printf( 
"PCB_IO::Load(): %u usecs\n", stopTime - startTime );
 
  672            msg.Printf( 
_( 
"Error loading PCB '%s'." ), fullFileName );
 
  673            progressReporter.Hide();
 
  680            if( ioe.
Problem() != wxT( 
"CANCEL" ) )
 
  682                msg.Printf( 
_( 
"Error loading PCB '%s'." ), fullFileName );
 
  683                progressReporter.Hide();
 
  689        catch( 
const std::bad_alloc& )
 
  691            msg.Printf( 
_( 
"Memory exhausted loading PCB '%s'" ), fullFileName );
 
  692            progressReporter.Hide();
 
  698        if( failedLoad || !loadedBoard )
 
  718        SetBoard( loadedBoard, 
false, &progressReporter );
 
  721            GFootprintList.ReadCacheFromFile( 
Prj().GetProjectPath() + wxT( 
"fp-info-cache" ) );
 
  760            m_infoBar->ShowMessage( 
_( 
"Could not load component class assignment rules" ),
 
  777                && loadedBoard->
GetGenerator().Lower() != wxT( 
"gerbview" ) ) )
 
  781            m_infoBar->ShowMessage( 
_( 
"This file was created by an older version of KiCad. " 
  782                                       "It will be converted to the new format when saved." ),
 
  792            wxFileName loadedBoardFn( fullFileName );
 
  793            wxString   libNickName = loadedBoardFn.GetName();
 
  798            std::vector<FOOTPRINT*> loadedFootprints = pi->GetImportedCachedLibraryFootprints();
 
  805            if( newLibPath.Length() > 0 )
 
  809                for( 
FOOTPRINT* footprint : loadedFootprints )
 
  813                        if( !footprint->GetFPID().GetLibItemName().empty() ) 
 
  815                            footprint->SetReference( 
"REF**" );
 
  816                            piSexpr->FootprintSave( newLibPath, footprint );
 
  822                        wxLogError( 
_( 
"Error saving footprint %s to project specific library." )
 
  824                                    footprint->GetFPID().GetUniStringLibItemName(),
 
  831                wxString        rel_path, env_path;
 
  833                wxASSERT_MSG( wxGetEnv( project_env, &env_path ),
 
  834                              wxT( 
"There is no project variable?" ) );
 
  836                wxString 
result( newLibPath );
 
  838                if( 
result.Replace( env_path, wxT( 
"$(" ) + project_env + wxT( 
")" ) ) )
 
  842                                                              wxT( 
"KiCad" ), wxEmptyString );
 
  853                    wxLogError( 
_( 
"Error saving project specific footprint library table." )
 
  861                    LIB_ID libId = footprint->GetFPID();
 
  867                    footprint->SetFPID( libId );
 
  878            fname = previousBoardFileName;
 
  884            fn.SetPath( 
Prj().GetProjectPath() );
 
  885            fn.SetName( 
Prj().GetProjectName() );
 
  888            fname = fn.GetFullPath();
 
  902    std::vector<ZONE*> toFill;
 
  928#if 0 && defined(DEBUG) 
 
  952                                  bool aChangeProject )
 
  955    wxFileName pcbFileName = aFileName;
 
  965        wxString msg = wxString::Format( 
_( 
"Insufficient permissions to write file '%s'." ),
 
  966                                         pcbFileName.GetFullPath() );
 
  973    wxFileName projectFile( pcbFileName );
 
  974    wxFileName rulesFile( pcbFileName );
 
  980    if( projectFile.FileExists() )
 
  984    else if( aChangeProject )
 
  992    if( currentRules.FileExists() && !rulesFile.FileExists() && aChangeProject )
 
  993        KiCopyFile( currentRules.GetFullPath(), rulesFile.GetFullPath(), msg );
 
  997        DisplayError( 
this, wxString::Format( 
_( 
"Error saving custom rules file '%s'." ),
 
  998                                              rulesFile.GetFullPath() ) );
 
 1001    if( projectFile.FileExists() )
 
 1018        pi->SaveBoard( pcbFileName.GetFullPath(), 
GetBoard(), 
nullptr );
 
 1022        DisplayError( 
this, wxString::Format( 
_( 
"Error saving board file '%s'.\n%s" ),
 
 1023                                              pcbFileName.GetFullPath(),
 
 1028    if( !
Kiface().IsSingle() )
 
 1035            SetStatusText( upperTxt, 1 );
 
 1042    LockFile( pcbFileName.GetFullPath() );
 
 1048    lowerTxt.Printf( 
_( 
"File '%s' saved." ), pcbFileName.GetFullPath() );
 
 1050    SetStatusText( lowerTxt, 0 );
 
 
 1076    wxFileName pcbFileName( aFileName );
 
 1082            DisplayError( 
this, wxString::Format( 
_( 
"Insufficient permissions to write file '%s'." ),
 
 1083                                                  pcbFileName.GetFullPath() ) );
 
 1098        wxASSERT( pcbFileName.IsAbsolute() );
 
 1100        pi->SaveBoard( pcbFileName.GetFullPath(), 
GetBoard(), 
nullptr );
 
 1106            DisplayError( 
this, wxString::Format( 
_( 
"Error saving board file '%s'.\n%s" ),
 
 1107                                                  pcbFileName.GetFullPath(),
 
 1114    wxFileName projectFile( pcbFileName );
 
 1115    wxFileName rulesFile( pcbFileName );
 
 1121    if( aCreateProject && !projectFile.FileExists() )
 
 1126    if( aCreateProject && currentRules.FileExists() && !rulesFile.FileExists() )
 
 1127        KiCopyFile( currentRules.GetFullPath(), rulesFile.GetFullPath(), msg );
 
 1129    if( !msg.IsEmpty() && !aHeadless )
 
 1131        DisplayError( 
this, wxString::Format( 
_( 
"Error saving custom rules file '%s'." ),
 
 1132                                              rulesFile.GetFullPath() ) );
 
 
 1140                                 const std::map<std::string, UTF8>* aProperties )
 
 
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
 
void SetContentModified(bool aModified=true)
 
int m_CopperEdgeClearance
 
int GenerateODBPPFiles(const TOOL_EVENT &aEvent)
 
int New(const TOOL_EVENT &aEvent)
 
int Revert(const TOOL_EVENT &aEvent)
 
int GenIPC2581File(const TOOL_EVENT &aEvent)
 
int Open(const TOOL_EVENT &aEvent)
 
int OpenNonKicadBoard(const TOOL_EVENT &aEvent)
 
Information pertinent to a Pcbnew printed circuit board.
 
bool m_LegacyDesignSettingsLoaded
True if the legacy board design settings were loaded from a file.
 
GAL_SET m_LegacyVisibleItems
 
LENGTH_DELAY_CALCULATION * GetLengthCalculation() const
Returns the track length calculator.
 
void SetFileName(const wxString &aFileName)
 
bool BuildConnectivity(PROGRESS_REPORTER *aReporter=nullptr)
Build or rebuild the board connectivity database for the board, especially the list of connected item...
 
void SynchronizeNetsAndNetClasses(bool aResetTrackAndViaSizes)
Copy NETCLASS info to each NET, based on NET membership in a NETCLASS.
 
LSET m_LegacyVisibleLayers
Visibility settings stored in board prior to 6.0, only used for loading legacy files.
 
void SetProject(PROJECT *aProject, bool aReferenceOnly=false)
Link a board to a given project.
 
const wxString & GetFileName() const
 
int GetFileFormatVersionAtLoad() const
 
const wxString & GetGenerator() const
Adds an item to the container.
 
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
 
void SynchronizeProperties()
Copy the current project's text variables into the boards property cache.
 
COMPONENT_CLASS_MANAGER & GetComponentClassManager()
Gets the component class manager.
 
bool SynchronizeComponentClasses(const std::unordered_set< wxString > &aNewSheetPaths) const
Copy component class / component class generator information from the project settings.
 
bool m_LegacyCopperEdgeClearanceLoaded
 
int GetCount() const
Return the number of objects in the list.
 
void RebuildRequiredCaches(FOOTPRINT *aFootprint=nullptr) const
Rebuilds any caches that may be required by custom assignment rules.
 
static void GenerateODBPPFiles(const JOB_EXPORT_PCB_ODB &aJob, BOARD *aBoard, PCB_EDIT_FRAME *aParentFrame=nullptr, PROGRESS_REPORTER *aProgressReporter=nullptr, REPORTER *aErrorReporter=nullptr)
 
wxString GetOutputPath() const
 
int GetCompressFormat() const
 
wxString GetUnitsString() const
 
Class DIALOG_HTML_REPORTER.
 
WX_HTML_REPORT_BOX * m_Reporter
 
static std::vector< IMPORT_PROJECT_DESC > RunModal(wxWindow *aParent, const std::vector< IMPORT_PROJECT_DESC > &aProjectDesc)
Create and show a dialog (modal) and returns the data from it after completion.
 
static std::map< wxString, PCB_LAYER_ID > RunModal(wxWindow *aParent, const std::vector< INPUT_LAYER_DESC > &aLayerDesc)
Create and show a dialog (modal) and returns the data from it after completion.
 
Create and handle a window for the 3d viewer connected to a Kiway and a pcbboard.
 
void NewDisplay(bool aForceImmediateRedraw=false)
Reload and refresh (rebuild) the 3D scene.
 
virtual APP_SETTINGS_BASE * config() const
Return the settings object used in SaveSettings(), and is overloaded in KICAD_MANAGER_FRAME.
 
wxTimer * m_autoSaveTimer
 
void UpdateFileHistory(const wxString &FullFileName, FILE_HISTORY *aFileHistory=nullptr)
Update the list of recently opened files.
 
wxString GetMruPath() const
 
bool IsWritable(const wxFileName &aFileName, bool aVerbose=true)
Check if aFileName can be written.
 
virtual void ClearFileHistory()
Remove all files from the file history.
 
wxString GetFileFromHistory(int cmdId, const wxString &type, FILE_HISTORY *aFileHistory=nullptr)
Fetch the file name from the file history list.
 
void SetMruPath(const wxString &aPath)
 
WX_INFOBAR * GetInfoBar()
 
std::unique_ptr< LOCKFILE > m_file_checker
 
bool LockFile(const wxString &aFileName)
Mark a schematic file as being in use.
 
bool GetCreateNewProject() const
Gets the selected state of the copy subsheets option.
 
bool IsAttachedToDialog() const
 
bool GetShowIssues() const
 
Hold a record identifying a library accessed by the appropriate footprint library #PLUGIN object in t...
 
static const std::vector< KICAD_T > AllBoardItems
A scan list for all editable board items.
 
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()
 
virtual const wxString Problem() const
what was the problem?
 
ODB_COMPRESSION m_compressionMode
 
void SetConfiguredOutputPath(const wxString &aPath)
Sets the configured output path for the job, this path is always saved to file.
 
Helper class to create more flexible dialogs, including 'do not show again' checkbox handling.
 
void DoNotShowCheckbox(wxString file, int line)
Shows the 'do not show again' checkbox.
 
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
 
LOCAL_HISTORY & LocalHistory()
Return the LOCAL_HISTORY associated with this KIWAY.
 
Plugin class for import plugins that support remappable layers.
 
void SynchronizeTuningProfileProperties() const
Ensure time domain properties provider is synced with board / project settings if required.
 
A logical library item identifier and consists of various portions much like a URI.
 
int SetLibNickname(const UTF8 &aLibNickname)
Override the logical library name portion of the LIB_ID to aLibNickname.
 
const UTF8 & GetLibItemName() const
 
bool InsertRow(LIB_TABLE_ROW *aRow, bool doReplace=false)
Adds aRow if it does not already exist or if doReplace is true.
 
void Save(const wxString &aFileName) const
Write this library table to aFileName in s-expression form.
 
bool TagSave(const wxString &aProjectPath, const wxString &aFileType)
Tag a manual save in the local history repository.
 
bool Init(const wxString &aProjectPath)
Initialize the local history repository for the given project path.
 
bool CommitFullProjectSnapshot(const wxString &aProjectPath, const wxString &aTitle)
Commit a snapshot of the entire project directory (excluding the .history directory and ignored trans...
 
static REPORTER & GetInstance()
 
static wxString GetDefaultUserProjectsPath()
Gets the default path we point users to create projects.
 
static TOOL_ACTION repairBoard
 
static TOOL_ACTION rehatchShapes
 
wxString GetDesignRulesPath()
Return the absolute path to the design rules file for the currently-loaded board.
 
wxString CreateNewProjectLibrary(const wxString &aDialogTitle, const wxString &aLibName)
 
const VECTOR2I GetPageSizeIU() const override
Works off of GetPageSettings() to return the size of the paper page in the internal units of this par...
 
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
 
PCB_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
 
EDA_3D_VIEWER_FRAME * Get3DViewerFrame()
 
virtual void UpdateStatusBar() override
Update the status bar information.
 
The main frame for Pcbnew.
 
void LoadDrawingSheet()
Load the drawing sheet file.
 
void ResolveDRCExclusions(bool aCreateMarkers)
If aCreateMarkers then create DRC exclusion markers from the serialized data.
 
void SetBoard(BOARD *aBoard, PROGRESS_REPORTER *aReporter=nullptr) override
Set the #m_Pcb member in such as way as to ensure deleting any previous BOARD.
 
void OnModify() override
Must be called after a board change to set the modified flag.
 
void OnClearFileHistory(wxCommandEvent &aEvent)
 
bool SaveBoard(bool aSaveAs=false, bool aSaveCopy=false)
 
bool OpenProjectFiles(const std::vector< wxString > &aFileSet, int aCtl=0) override
Load a KiCad board (.kicad_pcb) from aFileName.
 
void SaveProjectLocalSettings() override
Save changes to the project local settings.
 
bool SavePcbCopy(const wxString &aFileName, bool aCreateProject=false, bool aHeadless=false)
Write the board data structures to aFileName.
 
bool IsContentModified() const override
Get if the current board has been modified but not saved.
 
bool LoadProjectSettings()
Load the current project's file configuration settings which are pertinent to this PCB_EDIT_FRAME ins...
 
bool Clear_Pcb(bool doAskAboutUnsavedChanges, bool aFinal=false)
Delete all and reinitialize the current board.
 
void OnBoardLoaded()
Update the state of the GUI after a new board is loaded or created.
 
void UpdateTitle()
Set the main window title bar text.
 
int inferLegacyEdgeClearance(BOARD *aBoard, bool aShowUserMsg=true)
 
const std::map< std::string, UTF8 > * m_importProperties
 
bool SavePcbFile(const wxString &aFileName, bool addToHistory=true, bool aChangeProject=true)
Write the board data structures to a aFileName.
 
bool importFile(const wxString &aFileName, int aFileType, const std::map< std::string, UTF8 > *aProperties=nullptr)
Load the given filename but sets the path to the current project path.
 
void saveProjectSettings() override
Save any design-related project settings associated with this frame.
 
void OnFileHistory(wxCommandEvent &event)
 
static PLUGIN_REGISTRY * Instance()
 
static PCB_IO * PluginFind(PCB_FILE_T aFileType)
Return a #PLUGIN which the caller can use to import, export, save, or load design documents.
 
PCB_FILE_T
The set of file types that the PCB_IO_MGR knows about, and for which there has been a plugin written,...
 
@ KICAD_SEXP
S-expression Pcbnew file format.
 
@ LEGACY
Legacy Pcbnew file formats prior to s-expression.
 
static PCB_FILE_T FindPluginTypeFromBoardPath(const wxString &aFileName, int aCtl=0)
Return a plugin type given a path for a board file.
 
Collect all BOARD_ITEM objects on a given layer.
 
void Collect(BOARD_ITEM *aBoard, const std::vector< KICAD_T > &aTypes)
Test a BOARD_ITEM using this class's Inspector method, which does the collection.
 
void SetLayerId(PCB_LAYER_ID aLayerId)
 
Plugin class for import plugins that support choosing a project.
 
LSET m_VisibleLayers
Board settings.
 
GAL_SET m_VisibleItems
The GAL layers (aka items) that are turned on for viewing (.
 
static FP_LIB_TABLE * PcbFootprintLibs(PROJECT *aProject)
Return the table of footprint libraries without Kiway.
 
virtual void SetReadOnly(bool aReadOnly=true)
 
virtual const wxString GetProjectFullName() const
Return the full path and name of the project.
 
virtual PROJECT_LOCAL_SETTINGS & GetLocalSettings() const
 
virtual const wxString FootprintLibTblName() const
Returns the path and filename of this project's footprint library table.
 
virtual bool IsNullProject() const
Check if this project is a null project (i.e.
 
virtual bool HasMessage() const
Returns true if any messages were reported.
 
void SaveProjectAs(const wxString &aFullPath, PROJECT *aProject=nullptr)
Set the currently loaded project path and saves it (pointers remain valid).
 
void SaveProjectCopy(const wxString &aFullPath, PROJECT *aProject=nullptr)
Save a copy of the current project under the given path.
 
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 UnloadProject(PROJECT *aProject, bool aSave=true)
Save, unload and unregister the given PROJECT.
 
PROJECT & Prj() const
A helper while we are not MDI-capable – return the one and only project.
 
An 8 bit string that is assuredly encoded in UTF8, and supplies special conversion support to and fro...
 
static void ResolvePossibleSymlinks(wxFileName &aFilename)
 
void Flush()
Build the HTML messages page.
 
bool HasMessage() const override
Returns true if any messages were reported.
 
@ OUTDATED_SAVE
OUTDATED_SAVE Messages that should be cleared on save.
 
@ GENERIC
GENERIC Are messages that do not have special handling.
 
void Dismiss() override
Dismisses the infobar and updates the containing layout and AUI manager (if one is provided).
 
Multi-thread safe progress reporter dialog, intended for use of tasks that parallel reporting back of...
 
A wrapper for reporting to a wxString object.
 
const wxString & GetMessages() const
 
wxString EnsureFileExtension(const wxString &aFilename, const wxString &aExtension)
It's annoying to throw up nag dialogs when the extension isn't right.
 
bool AskOverrideLock(wxWindow *aParent, const wxString &aMessage)
Display a dialog indicating the file is already open, with an option to reset the lock.
 
bool IsOK(wxWindow *aParent, const wxString &aMessage)
Display a yes/no dialog with aMessage and returns the user response.
 
void DisplayInfoMessage(wxWindow *aParent, const wxString &aMessage, const wxString &aExtraInfo)
Display an informational message box with aMessage.
 
bool HandleUnsavedChanges(wxWindow *aParent, const wxString &aMessage, const std::function< bool()> &aSaveFunction)
Display a dialog with Save, Cancel and Discard Changes buttons.
 
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
 
void DisplayError(wxWindow *aParent, const wxString &aText)
Display an error or warning message box with aMessage.
 
This file is part of the common library.
 
Declaration of the eda_3d_viewer class.
 
void KiCopyFile(const wxString &aSrcPath, const wxString &aDestPath, wxString &aErrors)
 
#define WIN_STRING_DIR_SEP
 
#define UNIX_STRING_DIR_SEP
 
static const std::string ProjectFileExtension
 
static const std::string LegacyPcbFileExtension
 
static const std::string DesignRulesFileExtension
 
static const std::string KiCadPcbFileExtension
 
static wxString PcbFileWildcard()
 
std::unique_ptr< T > IO_RELEASER
Helper to hold and release an IO_BASE object when exceptions are thrown.
 
#define THROW_IO_ERROR(msg)
macro which captures the "call site" values of FILE_, __FUNCTION & LINE
 
#define KICTL_CREATE
caller thinks requested project files may not exist.
 
#define KICTL_REVERT
reverting to a previously-saved (KiCad) file.
 
#define KICTL_IMPORT_LIB
import all footprints into a project library.
 
#define KICTL_KICAD_ONLY
chosen file is from KiCad according to user
 
#define KICTL_NONKICAD_ONLY
chosen file is non-KiCad according to user
 
@ GAL_LAYER_ID_BITMASK_END
This is the end of the layers used for visibility bit masks in legacy board files.
 
#define GAL_LAYER_INDEX(x)
Use this macro to convert a GAL layer to a 0-indexed offset from LAYER_VIAS.
 
This file contains miscellaneous commonly used macros and functions.
 
#define SEXPR_BOARD_FILE_VERSION
Current s-expression file format version. 2 was the last legacy format version.
 
bool AskLoadBoardFileName(PCB_EDIT_FRAME *aParent, wxString *aFileName, int aCtl=0)
Show a wxFileDialog asking for a BOARD filename to open.
 
bool AskSaveBoardFileName(PCB_EDIT_FRAME *aParent, wxString *aFileName, bool *aCreateProject)
Put up a wxFileDialog asking for a BOARD filename to save.
 
SETTINGS_MANAGER * GetSettingsManager()
 
PGM_BASE & Pgm()
The global program "get" accessor.
 
int64_t GetRunningMicroSecs()
An alternate way to calculate an elapsed time (in microsecondes) to class PROF_COUNTER.
 
#define PROJECT_VAR_NAME
A variable name whose value holds the current project directory.
 
#define NAMELESS_PROJECT
default name for nameless projects
 
int StrPrintf(std::string *result, const char *format,...)
This is like sprintf() but the output is appended to a std::string instead of to a character array.
 
KIWAY Kiway(KFCTL_STANDALONE)
 
bool show_import_issues
Stored value for "show import issues" when importing non-KiCad designs to this application.
 
Container that describes file type info.
 
std::vector< std::string > m_FileExtensions
Filter used for file pickers if m_IsFile is true.
 
bool m_CanRead
Whether the IO can read this file type.
 
wxString result
Test unit parsing edge cases and error handling.
 
wxLogTrace helper definitions.
 
@ PCB_SHAPE_T
class PCB_SHAPE, a segment not on copper layers
 
wxString AddFileExtListToFilter(const std::vector< std::string > &aExts)
Build the wildcard extension file dialog wildcard filter to add to the base message dialog.
 
wxString formatWildcardExt(const wxString &aWildcard)
Format wildcard extension to support case sensitive file dialogs.
 
Definition of file extensions used in Kicad.