void KICAD_MANAGER_FRAME::CreateNewProject( const wxFileName& aProjectFileName ) { wxCHECK_RET( aProjectFileName.DirExists() && aProjectFileName.IsDirWritable(), "Project folder must exist and be writable to create a new project." ); // Init project filename. This clears all elements from the project object. SetProjectFileName( aProjectFileName.GetFullPath() ); // Copy kicad.pro file from template folder. if( !aProjectFileName.FileExists() ) { wxString srcFileName = sys_search().FindValidPath( "kicad.pro" ); // Create a minimal project (.pro) file if the template project file could not be copied. if( !wxFileName::FileExists( srcFileName ) || !wxCopyFile( srcFileName, aProjectFileName.GetFullPath() ) ) { Prj().ConfigSave( PgmTop().SysSearch(), GeneralGroupName, s_KicadManagerParams ); } } // Ensure a "stub" for a schematic root sheet and a board exist. // It will avoid messages from the schematic editor or the board editor to create a new file // And forces the user to create main files under the right name for the project manager wxFileName fn( aProjectFileName.GetFullPath() ); fn.SetExt( SchematicFileExtension ); // If a <project>.sch file does not exist, create a "stub" file ( minimal schematic file ) if( !fn.FileExists() ) { wxFile file( fn.GetFullPath(), wxFile::write ); if( file.IsOpened() ) file.Write( wxT( "EESchema Schematic File Version 2\n" "EELAYER 25 0\nEELAYER END\n$EndSCHEMATC\n" ) ); // wxFile dtor will close the file } // If a <project>.kicad_pcb or <project>.brd file does not exist, // create a .kicad_pcb "stub" file fn.SetExt( KiCadPcbFileExtension ); wxFileName leg_fn( fn ); leg_fn.SetExt( LegacyPcbFileExtension ); if( !fn.FileExists() && !leg_fn.FileExists() ) { wxFile file( fn.GetFullPath(), wxFile::write ); if( file.IsOpened() ) file.Write( wxT( "(kicad_pcb (version 4) (host kicad \"dummy file\") )\n" ) ); // wxFile dtor will close the file } }
void KICAD_MANAGER_FRAME::LoadProject( const wxFileName& aProjectFileName ) { // The project file should be valid by the time we get here or something has gone wrong. if( !aProjectFileName.Exists() ) return; // Any open KIFACE's must be closed if they are not part of the new project. // (We never want a KIWAY_PLAYER open on a KIWAY that isn't in the same project.) // User is prompted here to close those KIWAY_PLAYERs: if( !Kiway().PlayersClose( false ) ) return; SetTitle( wxString( "KiCad " ) + GetBuildVersion() ); // Save the project file for the currently loaded project. if( m_active_project ) Prj().ConfigLoad( PgmTop().SysSearch(), GeneralGroupName, s_KicadManagerParams ); m_active_project = true; ClearMsg(); SetProjectFileName( aProjectFileName.GetFullPath() ); Prj().ConfigLoad( PgmTop().SysSearch(), GeneralGroupName, s_KicadManagerParams ); wxString title = GetTitle() + " " + aProjectFileName.GetFullPath(); if( !aProjectFileName.IsDirWritable() ) title += _( " [Read Only]" ); else SetMruPath( Prj().GetProjectPath() ); // Only set MRU path if we have write access. Why? SetTitle( title ); UpdateFileHistory( aProjectFileName.GetFullPath(), &PgmTop().GetFileHistory() ); m_LeftWin->ReCreateTreePrj(); // Rebuild the list of watched paths. // however this is possible only when the main loop event handler is running, // so we use it to run the rebuild function. wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED, ID_INIT_WATCHED_PATHS ); wxPostEvent( this, cmd ); PrintPrjInfo(); }
bool IsWritable() const { return m_lib_path.IsOk() && m_lib_path.IsDirWritable(); }