mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-14 18:23:15 +02:00
Fix missing project file when creating a new project.
Fixes lp:1714522 https://bugs.launchpad.net/kicad/+bug/1714522
This commit is contained in:
parent
d190aa423f
commit
8d14751352
@ -219,6 +219,16 @@ public:
|
|||||||
void OnUpdatePreferredPdfBrowser( wxUpdateUIEvent& event );
|
void OnUpdatePreferredPdfBrowser( wxUpdateUIEvent& event );
|
||||||
void OnUpdateRequiresProject( wxUpdateUIEvent& event );
|
void OnUpdateRequiresProject( wxUpdateUIEvent& event );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new project by setting up and initial project, schematic, and board files.
|
||||||
|
*
|
||||||
|
* The project file is copied from the kicad.pro template file if possible. Otherwise,
|
||||||
|
* a minimal project file is created from an empty project. A minimal schematic and
|
||||||
|
* board file are created to prevent the schematic and board editors from complaining.
|
||||||
|
* If any of these files already exist, they are not overwritten.
|
||||||
|
*
|
||||||
|
* @param aProjectFileName is the absolute path of the project file name.
|
||||||
|
*/
|
||||||
void CreateNewProject( const wxFileName& aProjectFileName );
|
void CreateNewProject( const wxFileName& aProjectFileName );
|
||||||
void LoadProject( const wxFileName& aProjectFileName );
|
void LoadProject( const wxFileName& aProjectFileName );
|
||||||
|
|
||||||
|
@ -110,9 +110,22 @@ void KICAD_MANAGER_FRAME::CreateNewProject( const wxFileName& aProjectFileName )
|
|||||||
wxCHECK_RET( aProjectFileName.DirExists() && aProjectFileName.IsDirWritable(),
|
wxCHECK_RET( aProjectFileName.DirExists() && aProjectFileName.IsDirWritable(),
|
||||||
"Project folder must exist and be writable to create a new project." );
|
"Project folder must exist and be writable to create a new project." );
|
||||||
|
|
||||||
// Init project filename
|
// Init project filename. This clears all elements from the project object.
|
||||||
SetProjectFileName( aProjectFileName.GetFullPath() );
|
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.
|
// 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
|
// 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
|
// And forces the user to create main files under the right name for the project manager
|
||||||
@ -186,28 +199,35 @@ void KICAD_MANAGER_FRAME::OnNewProject( wxCommandEvent& aEvent )
|
|||||||
if( !pro.IsAbsolute() )
|
if( !pro.IsAbsolute() )
|
||||||
pro.MakeAbsolute();
|
pro.MakeAbsolute();
|
||||||
|
|
||||||
// Check if the project directory is empty.
|
// Append a new directory with the same name of the project file.
|
||||||
|
pro.AppendDir( pro.GetName() );
|
||||||
|
|
||||||
|
// Check if the project directory is empty if it already exists.
|
||||||
wxDir directory( pro.GetPath() );
|
wxDir directory( pro.GetPath() );
|
||||||
|
|
||||||
if( directory.HasFiles() )
|
if( !pro.DirExists() )
|
||||||
{
|
{
|
||||||
wxString msg = _( "The selected directory is not empty. We recommend you "
|
if( !pro.Mkdir() )
|
||||||
"create projects in their own clean directory.\n\nDo you "
|
|
||||||
"want to create a new empty directory for the project?" );
|
|
||||||
|
|
||||||
if( IsOK( this, msg ) )
|
|
||||||
{
|
{
|
||||||
// Append a new directory with the same name of the project file
|
wxString msg;
|
||||||
// and try to create it
|
msg.Printf( _( "Directory '%s' could not be created.\n\n"
|
||||||
pro.AppendDir( pro.GetName() );
|
"Please make sure you have write permissions and try again." ),
|
||||||
|
pro.GetPath() );
|
||||||
if( !wxMkdir( pro.GetPath() ) )
|
DisplayErrorMessage( this, msg );
|
||||||
// There was a problem, undo
|
return;
|
||||||
pro.RemoveLastDir();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if( directory.HasFiles() )
|
||||||
|
{
|
||||||
|
wxString msg = _( "The selected directory is not empty. It is recommended that you "
|
||||||
|
"create projects in their own empty directory.\n\nDo you "
|
||||||
|
"want to continue?" );
|
||||||
|
|
||||||
CreateNewProject( pro.GetFullPath() );
|
if( !IsOK( this, msg ) )
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateNewProject( pro );
|
||||||
LoadProject( pro );
|
LoadProject( pro );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user