Fix project handling in eagle project import and ensure the titlebar is correct

Previously it didn't properly close or create a new project for the
Eagle project.

Also, update the titlebar text whenever the project changes (so it is
cleared properly when a project is unloaded).

Fixes https://gitlab.com/kicad/code/kicad/issues/5152
This commit is contained in:
Ian McInerney 2020-08-15 17:43:54 +01:00
parent 4c535c160c
commit 0975f3817a
4 changed files with 62 additions and 58 deletions

View File

@ -48,11 +48,6 @@
void KICAD_MANAGER_FRAME::OnImportEagleFiles( wxCommandEvent& event )
{
// Close other windows.
if( !Kiway().PlayersClose( false ) )
return;
wxString title = _( "Import Eagle Project Files" );
int style = wxFD_OPEN | wxFD_FILE_MUST_EXIST;
wxString default_dir = GetMruPath();
@ -117,8 +112,10 @@ void KICAD_MANAGER_FRAME::OnImportEagleFiles( wxCommandEvent& event )
if( !pro.IsAbsolute() )
pro.MakeAbsolute();
SetProjectFileName( pro.GetFullPath() );
wxString prj_filename = GetProjectFileName();
// Close the project and make the new one
CloseProject( true );
CreateNewProject( pro.GetFullPath(), false /* Don't create stub files */ );
LoadProject( pro );
if( sch.FileExists() )
{

View File

@ -210,27 +210,9 @@ KICAD_SETTINGS* KICAD_MANAGER_FRAME::kicadSettings() const
}
void KICAD_MANAGER_FRAME::SetProjectFileName( const wxString& aFullProjectProFileName )
{
// ensure file name is absolute:
wxFileName fn( aFullProjectProFileName );
if( !fn.IsAbsolute() )
fn.MakeAbsolute();
SetTitle( wxString( "KiCad " ) + GetBuildVersion() );
wxString title = GetTitle() + " " + fn.GetFullPath();
if( !fn.IsDirWritable() )
title += _( " [Read Only]" );
SetTitle( title );
}
const wxString KICAD_MANAGER_FRAME::GetProjectFileName() const
{
return m_active_project ? Prj().GetProjectFullName() : wxString( wxEmptyString );
return Pgm().GetSettingsManager().IsProjectOpen() ? Prj().GetProjectFullName() : wxString( wxEmptyString );
}
@ -394,7 +376,6 @@ void KICAD_MANAGER_FRAME::LoadProject( const wxFileName& aProjectFileName )
m_active_project = true;
Pgm().GetSettingsManager().LoadProject( aProjectFileName.GetFullPath() );
SetProjectFileName( Prj().GetProjectFullName() );
if( aProjectFileName.IsDirWritable() )
SetMruPath( Prj().GetProjectPath() ); // Only set MRU path if we have write access. Why?
@ -418,14 +399,11 @@ void KICAD_MANAGER_FRAME::LoadProject( const wxFileName& aProjectFileName )
}
void KICAD_MANAGER_FRAME::CreateNewProject( const wxFileName& aProjectFileName )
void KICAD_MANAGER_FRAME::CreateNewProject( const wxFileName& aProjectFileName, bool aCreateStubFiles )
{
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() );
// If the project is legacy, convert it
if( !aProjectFileName.FileExists() )
{
@ -460,40 +438,43 @@ void KICAD_MANAGER_FRAME::CreateNewProject( const wxFileName& aProjectFileName )
}
}
// Ensure a "stub" for a schematic root sheet and a board exist.
// Create a "stub" for a schematic root sheet and a board if requested.
// 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( KiCadSchematicFileExtension );
// If a <project>.kicad_sch file does not exist, create a "stub" file ( minimal schematic file )
if( !fn.FileExists() )
if( aCreateStubFiles )
{
wxFile file( fn.GetFullPath(), wxFile::write );
wxFileName fn( aProjectFileName.GetFullPath() );
fn.SetExt( KiCadSchematicFileExtension );
if( file.IsOpened() )
file.Write( wxT( "(kicad_sch (version 20200310) (host eeschema \"unknown\")\n"
"( page \"A4\")\n (lib_symbols)\n"
" (symbol_instances)\n)\n" ) );
// If a <project>.kicad_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( "(kicad_sch (version 20200310) (host eeschema \"unknown\")\n"
"( page \"A4\")\n (lib_symbols)\n"
" (symbol_instances)\n)\n" ) );
// wxFile dtor will close the file
}
// 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 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( !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" ) );
if( file.IsOpened() )
file.Write( wxT( "(kicad_pcb (version 4) (host kicad \"dummy file\") )\n" ) );
// wxFile dtor will close the file
// wxFile dtor will close the file
}
}
UpdateFileHistory( aProjectFileName.GetFullPath() );
@ -561,6 +542,30 @@ void KICAD_MANAGER_FRAME::CommonSettingsChanged( bool aEnvVarsChanged, bool aTex
}
void KICAD_MANAGER_FRAME::ProjectChanged()
{
wxString title = wxS( "KiCad " ) + GetBuildVersion();
wxString file = GetProjectFileName();
if( !file.IsEmpty() )
{
// Ensure file name is absolute
wxFileName fn( file );
if( !fn.IsAbsolute() )
fn.MakeAbsolute();
title += " ";
title += fn.GetFullPath();
if( !fn.IsDirWritable() )
title += _( " [Read Only]" );
}
SetTitle( title );
}
void KICAD_MANAGER_FRAME::ClearMsg()
{
m_messagesBox->Clear();

View File

@ -138,8 +138,9 @@ public:
* If any of these files already exist, they are not overwritten.
*
* @param aProjectFileName is the absolute path of the project file name.
* @param aCreateStubFiles specifies if an empty PCB and schematic should be created
*/
void CreateNewProject( const wxFileName& aProjectFileName );
void CreateNewProject( const wxFileName& aProjectFileName, bool aCreateStubFiles = true );
/**
* Closes the project, and saves it if aSave is true;
@ -154,6 +155,7 @@ public:
void ShowChangedLanguage() override;
void CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVarsChanged ) override;
void ProjectChanged() override;
/**
* Called by sending a event with id = ID_INIT_WATCHED_PATHS
@ -165,7 +167,6 @@ public:
void InstallPreferences( PAGED_DIALOG* aParent, PANEL_HOTKEYS_EDITOR* aHotkeysPanel ) override;
void SetProjectFileName( const wxString& aFullProjectProFileName );
const wxString GetProjectFileName() const;
bool IsProjectActive();

View File

@ -70,10 +70,11 @@ void KICAD_MANAGER_FRAME::ReCreateMenuBar()
fileMenu->AddItem( KICAD_MANAGER_ACTIONS::newProject, SELECTION_CONDITIONS::ShowAlways );
fileMenu->AddItem( KICAD_MANAGER_ACTIONS::newFromTemplate, SELECTION_CONDITIONS::ShowAlways );
fileMenu->AddItem( KICAD_MANAGER_ACTIONS::openProject, SELECTION_CONDITIONS::ShowAlways );
fileMenu->AddItem( KICAD_MANAGER_ACTIONS::closeProject, SELECTION_CONDITIONS::ShowAlways );
fileMenu->AddMenu( openRecentMenu,
FILE_HISTORY::FileHistoryNotEmpty( fileHistory ) );
fileMenu->AddItem( KICAD_MANAGER_ACTIONS::closeProject, SELECTION_CONDITIONS::ShowAlways );
fileMenu->AddSeparator();
fileMenu->AddItem( ACTIONS::saveAs, SELECTION_CONDITIONS::ShowAlways );