Fix a few issues with Close Projects MR
Store list of previously open projects only in kicad.json Keep all management of open projects in SETTINGS_MANAGER Also add kicadSettings() for convenience
This commit is contained in:
parent
bc357dff8a
commit
79e40cf765
|
@ -751,6 +751,17 @@ PROJECT* SETTINGS_MANAGER::GetProject( const wxString& aFullPath ) const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<wxString> SETTINGS_MANAGER::GetOpenProjects() const
|
||||||
|
{
|
||||||
|
std::vector<wxString> ret;
|
||||||
|
|
||||||
|
for( const std::pair<const wxString, std::unique_ptr<PROJECT>>& pair : m_projects )
|
||||||
|
ret.emplace_back( pair.first );
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool SETTINGS_MANAGER::SaveProject( const wxString& aFullPath )
|
bool SETTINGS_MANAGER::SaveProject( const wxString& aFullPath )
|
||||||
{
|
{
|
||||||
wxString path = aFullPath;
|
wxString path = aFullPath;
|
||||||
|
|
|
@ -128,8 +128,6 @@ public:
|
||||||
{
|
{
|
||||||
bool first_run_shown;
|
bool first_run_shown;
|
||||||
int max_undo_items;
|
int max_undo_items;
|
||||||
std::vector<wxString> open_projects; // using a vector if in the future
|
|
||||||
// we want to open multiple projects at once.
|
|
||||||
std::vector<wxString> file_history;
|
std::vector<wxString> file_history;
|
||||||
int units;
|
int units;
|
||||||
};
|
};
|
||||||
|
|
|
@ -213,6 +213,11 @@ public:
|
||||||
*/
|
*/
|
||||||
PROJECT* GetProject( const wxString& aFullPath ) const;
|
PROJECT* GetProject( const wxString& aFullPath ) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a list of open projects
|
||||||
|
*/
|
||||||
|
std::vector<wxString> GetOpenProjects() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Saves a loaded project.
|
* Saves a loaded project.
|
||||||
* @param aFullPath is the project name to save. If empty, will save the first loaded project.
|
* @param aFullPath is the project name to save. If empty, will save the first loaded project.
|
||||||
|
|
|
@ -133,15 +133,18 @@ bool PGM_KICAD::OnPgmInit()
|
||||||
|
|
||||||
Kiway.SetTop( frame );
|
Kiway.SetTop( frame );
|
||||||
|
|
||||||
|
KICAD_SETTINGS* settings = static_cast<KICAD_SETTINGS*>( PgmSettings() );
|
||||||
|
|
||||||
wxString projToLoad;
|
wxString projToLoad;
|
||||||
|
|
||||||
if( App().argc > 1 )
|
if( App().argc > 1 )
|
||||||
{
|
{
|
||||||
projToLoad = App().argv[1];
|
projToLoad = App().argv[1];
|
||||||
}
|
}
|
||||||
else if( frame->GetOpenProjects().size() ) // Check that there was a file open.
|
else if( settings->m_OpenProjects.size() ) // Check that there was a file open.
|
||||||
{
|
{
|
||||||
wxString last_pro = frame->PopOpenProjects();
|
wxString last_pro = settings->m_OpenProjects.front();
|
||||||
|
settings->m_OpenProjects.erase( settings->m_OpenProjects.begin() );
|
||||||
|
|
||||||
if( !wxFileExists( last_pro ) )
|
if( !wxFileExists( last_pro ) )
|
||||||
{
|
{
|
||||||
|
@ -159,6 +162,7 @@ bool PGM_KICAD::OnPgmInit()
|
||||||
if( !projToLoad.empty() )
|
if( !projToLoad.empty() )
|
||||||
{
|
{
|
||||||
wxFileName fn( projToLoad );
|
wxFileName fn( projToLoad );
|
||||||
|
|
||||||
if( fn.Exists() )
|
if( fn.Exists() )
|
||||||
{
|
{
|
||||||
fn.MakeAbsolute();
|
fn.MakeAbsolute();
|
||||||
|
|
|
@ -176,6 +176,9 @@ KICAD_MANAGER_FRAME::KICAD_MANAGER_FRAME( wxWindow* parent, const wxString& titl
|
||||||
|
|
||||||
KICAD_MANAGER_FRAME::~KICAD_MANAGER_FRAME()
|
KICAD_MANAGER_FRAME::~KICAD_MANAGER_FRAME()
|
||||||
{
|
{
|
||||||
|
KICAD_SETTINGS* settings = kicadSettings();
|
||||||
|
settings->m_OpenProjects = GetSettingsManager()->GetOpenProjects();
|
||||||
|
|
||||||
// Shutdown all running tools
|
// Shutdown all running tools
|
||||||
if( m_toolManager )
|
if( m_toolManager )
|
||||||
m_toolManager->ShutdownAllTools();
|
m_toolManager->ShutdownAllTools();
|
||||||
|
@ -202,6 +205,14 @@ APP_SETTINGS_BASE* KICAD_MANAGER_FRAME::config() const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
KICAD_SETTINGS* KICAD_MANAGER_FRAME::kicadSettings() const
|
||||||
|
{
|
||||||
|
KICAD_SETTINGS* ret = dynamic_cast<KICAD_SETTINGS*>( config() );
|
||||||
|
wxASSERT( ret );
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void KICAD_MANAGER_FRAME::SetProjectFileName( const wxString& aFullProjectProFileName )
|
void KICAD_MANAGER_FRAME::SetProjectFileName( const wxString& aFullProjectProFileName )
|
||||||
{
|
{
|
||||||
// ensure file name is absolute:
|
// ensure file name is absolute:
|
||||||
|
@ -220,53 +231,9 @@ void KICAD_MANAGER_FRAME::SetProjectFileName( const wxString& aFullProjectProFil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::vector<wxString> KICAD_MANAGER_FRAME::GetOpenProjects()
|
|
||||||
{
|
|
||||||
KICAD_SETTINGS* conf = dynamic_cast<KICAD_SETTINGS*>( config() );
|
|
||||||
|
|
||||||
if( conf == NULL )
|
|
||||||
{
|
|
||||||
// Build an empty vector to return
|
|
||||||
std::vector<wxString> dummy;
|
|
||||||
return dummy;
|
|
||||||
}
|
|
||||||
|
|
||||||
return conf->m_System.open_projects;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
wxString KICAD_MANAGER_FRAME::PopOpenProjects()
|
|
||||||
{
|
|
||||||
KICAD_SETTINGS* conf = dynamic_cast<KICAD_SETTINGS*>( config() );
|
|
||||||
|
|
||||||
if( conf == NULL )
|
|
||||||
{
|
|
||||||
return wxString( "" );
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<wxString>* vector = &( conf->m_System.open_projects );
|
|
||||||
|
|
||||||
if( vector->size() > 0 )
|
|
||||||
{
|
|
||||||
wxString value = vector->front();
|
|
||||||
vector->erase( vector->begin() );
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return wxString( "" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const wxString KICAD_MANAGER_FRAME::GetProjectFileName() const
|
const wxString KICAD_MANAGER_FRAME::GetProjectFileName() const
|
||||||
{
|
{
|
||||||
if( m_active_project )
|
return m_active_project ? Prj().GetProjectFullName() : wxString( wxEmptyString );
|
||||||
return Prj().GetProjectFullName();
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return wxString( "" );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -387,21 +354,6 @@ bool KICAD_MANAGER_FRAME::CloseProject( bool aSave )
|
||||||
// Save the project file for the currently loaded project.
|
// Save the project file for the currently loaded project.
|
||||||
if( m_active_project )
|
if( m_active_project )
|
||||||
{
|
{
|
||||||
// Remove the project from the list of active projects
|
|
||||||
std::vector<wxString>::iterator ptr;
|
|
||||||
std::vector<wxString>* prjList;
|
|
||||||
|
|
||||||
prjList = &( config()->m_System.open_projects );
|
|
||||||
|
|
||||||
for( ptr = prjList->begin(); ptr < prjList->end(); ptr++ )
|
|
||||||
{
|
|
||||||
if( *ptr == Prj().GetProjectFullName() )
|
|
||||||
{
|
|
||||||
prjList->erase( ptr );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
|
SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
|
||||||
|
|
||||||
mgr.TriggerBackupIfNeeded( NULL_REPORTER::GetInstance() );
|
mgr.TriggerBackupIfNeeded( NULL_REPORTER::GetInstance() );
|
||||||
|
@ -439,10 +391,6 @@ void KICAD_MANAGER_FRAME::LoadProject( const wxFileName& aProjectFileName )
|
||||||
Pgm().GetSettingsManager().LoadProject( aProjectFileName.GetFullPath() );
|
Pgm().GetSettingsManager().LoadProject( aProjectFileName.GetFullPath() );
|
||||||
SetProjectFileName( Prj().GetProjectFullName() );
|
SetProjectFileName( Prj().GetProjectFullName() );
|
||||||
|
|
||||||
std::vector<wxString>::iterator ptr;
|
|
||||||
ptr = config()->m_System.open_projects.begin();
|
|
||||||
config()->m_System.open_projects.insert( ptr, Prj().GetProjectFullName() );
|
|
||||||
|
|
||||||
if( aProjectFileName.IsDirWritable() )
|
if( aProjectFileName.IsDirWritable() )
|
||||||
SetMruPath( Prj().GetProjectPath() ); // Only set MRU path if we have write access. Why?
|
SetMruPath( Prj().GetProjectPath() ); // Only set MRU path if we have write access. Why?
|
||||||
|
|
||||||
|
|
|
@ -100,12 +100,6 @@ public:
|
||||||
void RecreateBaseHToolbar();
|
void RecreateBaseHToolbar();
|
||||||
void RecreateLauncher();
|
void RecreateLauncher();
|
||||||
|
|
||||||
std::vector<wxString> GetOpenProjects();
|
|
||||||
/**
|
|
||||||
* Get element at index 0, and remove it.
|
|
||||||
*/
|
|
||||||
wxString PopOpenProjects();
|
|
||||||
|
|
||||||
wxString GetCurrentFileName() const override
|
wxString GetCurrentFileName() const override
|
||||||
{
|
{
|
||||||
return GetProjectFileName();
|
return GetProjectFileName();
|
||||||
|
@ -190,6 +184,8 @@ public:
|
||||||
private:
|
private:
|
||||||
APP_SETTINGS_BASE* config() const override;
|
APP_SETTINGS_BASE* config() const override;
|
||||||
|
|
||||||
|
KICAD_SETTINGS* kicadSettings() const;
|
||||||
|
|
||||||
const SEARCH_STACK& sys_search() override;
|
const SEARCH_STACK& sys_search() override;
|
||||||
|
|
||||||
wxString help_name() override;
|
wxString help_name() override;
|
||||||
|
|
|
@ -29,8 +29,9 @@ const int kicadSchemaVersion = 0;
|
||||||
KICAD_SETTINGS::KICAD_SETTINGS() : APP_SETTINGS_BASE( "kicad", kicadSchemaVersion )
|
KICAD_SETTINGS::KICAD_SETTINGS() : APP_SETTINGS_BASE( "kicad", kicadSchemaVersion )
|
||||||
{
|
{
|
||||||
m_params.emplace_back( new PARAM<int>( "appearance.left_frame_width", &m_LeftWinWidth, 200 ) );
|
m_params.emplace_back( new PARAM<int>( "appearance.left_frame_width", &m_LeftWinWidth, 200 ) );
|
||||||
m_params.emplace_back(
|
|
||||||
new PARAM_LIST<wxString>( "system.open_projects", &m_System.open_projects, {} ) );
|
m_params.emplace_back( new PARAM_LIST<wxString>( "system.open_projects",
|
||||||
|
&m_OpenProjects, {} ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,8 @@ public:
|
||||||
|
|
||||||
int m_LeftWinWidth;
|
int m_LeftWinWidth;
|
||||||
|
|
||||||
|
std::vector<wxString> m_OpenProjects;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
virtual std::string getLegacyFrameName() const override { return "KicadFrame"; }
|
virtual std::string getLegacyFrameName() const override { return "KicadFrame"; }
|
||||||
|
|
Loading…
Reference in New Issue