From 297a54fa3ee07b23c7782cda420232df9dd55869 Mon Sep 17 00:00:00 2001 From: Dick Hollenbeck Date: Wed, 10 Apr 2013 15:31:40 -0500 Subject: [PATCH] Make project templates work with KICAD_PTEMPLATES env var. --- kicad/dialogs/dialog_template_selector.cpp | 25 +++++++++++++--------- kicad/prjconfig.cpp | 22 +++++++++++++------ kicad/project_template.h | 2 +- 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/kicad/dialogs/dialog_template_selector.cpp b/kicad/dialogs/dialog_template_selector.cpp index 800b36e2c1..ec8ef90c20 100644 --- a/kicad/dialogs/dialog_template_selector.cpp +++ b/kicad/dialogs/dialog_template_selector.cpp @@ -114,7 +114,7 @@ void TEMPLATE_WIDGET::OnMouse( wxMouseEvent& event ) void DIALOG_TEMPLATE_SELECTOR::onNotebookResize(wxSizeEvent& event) { - for ( size_t i=0; i < m_notebook->GetPageCount(); i++ ) + for( size_t i=0; i < m_notebook->GetPageCount(); i++ ) { m_panels[i]->SetSize( m_notebook->GetSize().GetWidth() - 6, 140 ); m_panels[i]->m_SizerBase->FitInside( m_panels[i] ); @@ -190,24 +190,29 @@ void DIALOG_TEMPLATE_SELECTOR::AddPage( const wxString& aTitle, wxFileName& aPat m_panels.push_back( p ); // Get a list of files under the template path to include as choices... - wxArrayString files; - wxDir dir, sub; + wxArrayString files; + wxDir dir; - if ( dir.Open( aPath.GetPath() ) ) + wxString path = aPath.GetFullPath(); // caller ensures this ends with file separator. + + if( dir.Open( path ) ) { - wxString filename; - bool cont = dir.GetFirst( &filename, wxEmptyString, wxDIR_FILES | wxDIR_DIRS ); + wxDir sub_dir; + wxString sub_name; + bool cont = dir.GetFirst( &sub_name, wxEmptyString, wxDIR_DIRS ); while( cont ) { - if( sub.Open( aPath.GetPathWithSep() + filename ) ) + wxString sub_full = path + sub_name; + if( sub_dir.Open( sub_full ) ) { - files.Add( filename ); - PROJECT_TEMPLATE* pt = new PROJECT_TEMPLATE( aPath.GetPathWithSep() + filename ); + files.Add( sub_name ); + + PROJECT_TEMPLATE* pt = new PROJECT_TEMPLATE( sub_full ); AddTemplate( m_notebook->GetPageCount() - 1, pt ); } - cont = dir.GetNext( &filename ); + cont = dir.GetNext( &sub_name ); } } } diff --git a/kicad/prjconfig.cpp b/kicad/prjconfig.cpp index 58ab903e17..b9fcd22dea 100644 --- a/kicad/prjconfig.cpp +++ b/kicad/prjconfig.cpp @@ -78,11 +78,12 @@ void KICAD_MANAGER_FRAME::CreateNewProject( const wxString aPrjFullFileName, boo { wxString kicadEnv; wxGetEnv( wxT( "KICAD"), &kicadEnv ); - templatePath = kicadEnv + SEP() + wxT("template")+SEP(); + + templatePath = kicadEnv + SEP() + wxT("template") + SEP(); } else { - wxFileName templatePath = wxPathOnly(wxStandardPaths::Get().GetExecutablePath()) + + templatePath = wxPathOnly(wxStandardPaths::Get().GetExecutablePath()) + SEP() + wxT( ".." ) + SEP() + wxT( "share" ) + SEP() + wxT( "template" ) + SEP(); } @@ -97,13 +98,18 @@ void KICAD_MANAGER_FRAME::CreateNewProject( const wxString aPrjFullFileName, boo // Check to see if a custom template location is available and setup a new selection tab // if there is wxString envStr; - wxGetEnv( wxT("KICAD_PTEMPLATES"), &envStr ); - wxFileName envPath = envStr; + wxGetEnv( wxT( "KICAD_PTEMPLATES" ), &envStr ); - if( envStr != wxEmptyString ) + if( envStr ) { + wxChar sep = SEP(); + + if( !envStr.EndsWith( &sep ) ) + envStr += sep; + wxFileName envPath = envStr; - ps->AddPage( _("Portable Templates"), envPath ); + + ps->AddPage( _( "Portable Templates" ), envPath ); } // Show the project template selector dialog @@ -236,7 +242,7 @@ void KICAD_MANAGER_FRAME::OnLoadProject( wxCommandEvent& event ) if( !m_ProjectFileName.FileExists() && !filename.IsSameAs( nameless_prj ) ) { wxString msg; - msg.Printf( _( "KiCad project file <%s> not found" ), + msg.Printf( _( "KiCad project file <%s> not found" ), GetChars( m_ProjectFileName.GetFullPath() ) ); DisplayError( this, msg ); @@ -256,6 +262,7 @@ void KICAD_MANAGER_FRAME::OnLoadProject( wxCommandEvent& event ) SetTitle( title ); UpdateFileHistory( m_ProjectFileName.GetFullPath() ); m_LeftWin->ReCreateTreePrj(); + #ifdef KICAD_USE_FILES_WATCHER // Rebuild the list of watched paths. // however this is possible only when the main loop event handler is running, @@ -263,6 +270,7 @@ void KICAD_MANAGER_FRAME::OnLoadProject( wxCommandEvent& event ) wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED, ID_INIT_WATCHED_PATHS ); wxPostEvent( this, cmd); #endif + wxString msg; msg.Format( _( "Working dir: <%s>\nProject: <%s>\n" ), GetChars( m_ProjectFileName.GetPath() ), diff --git a/kicad/project_template.h b/kicad/project_template.h index c97ba5e4ad..0014703ba9 100644 --- a/kicad/project_template.h +++ b/kicad/project_template.h @@ -96,7 +96,7 @@ wxStandardPaths::GetExecutableDir()/../share/template/ wxStandardPaths::GetUserDataDir()/templates/ - wxGetEnv(wxT("KICAD_TEMPLATES")) + wxGetEnv(wxT("KICAD_PTEMPLATES")) wxGetEnv(wxT("KICAD"))/template/ */