Commit 4a7ba869 authored by Dick Hollenbeck's avatar Dick Hollenbeck
Browse files

PROJECT::configCreate() logic changes.

parent c39385a5
Loading
Loading
Loading
Loading
+41 −21
Original line number Diff line number Diff line
@@ -23,18 +23,19 @@
 */


#include <wx/stdpaths.h>

#include <fctsys.h>
#include <macros.h>
#include <gr_basic.h>
#include <pgm_base.h>
#include <project.h>
#include <wx/stdpaths.h>
#include <confirm.h>
#include <kicad_string.h>
#include <config_params.h>
#include <wildcards_and_files_ext.h>



PROJECT::PROJECT()
{
    memset( m_elems, 0, sizeof(m_elems) );
@@ -198,24 +199,21 @@ wxConfigBase* PROJECT::configCreate( const SEARCH_STACK& aSList, const wxString&
            const wxString& aGroupName, bool aForceUseLocalConfig )
{
    wxConfigBase*   cfg = 0;
    wxFileName      fn = aFileName;

    wxFileName      fn = aFileName;
    fn.SetExt( ProjectFileExtension );

    wxString        cur_pro_fn = fn.GetFullPath();

    // is there an edge transition, a change in m_project_filename?
    if( m_project_name != fn )
    if( m_project_name != cur_pro_fn )
    {
        m_pcb_search.Clear();
        m_sch_search.Clear();

        SetProjectFullName( fn.GetFullPath() );

        // to the empty lists, add project dir as first
        m_pcb_search.AddPaths( fn.GetPath() );
        m_sch_search.AddPaths( fn.GetPath() );

        // append all paths from aSList
        add_search_paths( &m_pcb_search, aSList, -1 );
        add_search_paths( &m_sch_search, aSList, -1 );

        // addLibrarySearchPaths( SEARCH_STACK* aSP, wxConfigBase* aCfg )
@@ -231,8 +229,6 @@ wxConfigBase* PROJECT::configCreate( const SEARCH_STACK& aSList, const wxString&
    // Init local config filename
    if( aForceUseLocalConfig || fn.FileExists() )
    {
        wxString cur_pro_fn = fn.GetFullPath();

        cfg = new wxFileConfig( wxEmptyString, wxEmptyString, cur_pro_fn, wxEmptyString );

        cfg->DontCreateOnDemand();
@@ -265,31 +261,43 @@ wxConfigBase* PROJECT::configCreate( const SEARCH_STACK& aSList, const wxString&
        }
        else    // Version incorrect
        {
            wxLogDebug( wxT( "Project file version is zero, not using this old project file, going with template.\n") );
            delete cfg;
            cfg = 0;
        }
    }

    // Search for the template kicad.pro file by using caller's SEARCH_STACK.
    // No suitable pro file was found, either does not exist, or is too old.
    // Use the template kicad.pro file.  Find it by using caller's SEARCH_STACK.

    wxString kicad_pro_template = aSList.FindValidPath( wxT( "kicad.pro" ) );

    if( !kicad_pro_template )
    {
        wxLogDebug( wxT( "Template file <kicad.pro> not found." ) );
        wxLogDebug( wxT( "Template file <kicad.pro> not found using search paths." ) );

        fn = wxFileName( wxStandardPaths::Get().GetDocumentsDir(),
        wxFileName  templ( wxStandardPaths::Get().GetDocumentsDir(),
                            wxT( "kicad" ), ProjectFileExtension );
    }
    else

        if( !templ.IsFileReadable() )
        {
        fn = kicad_pro_template;
            wxString msg = wxString::Format( _( "Unable to find kicad.pro template file." ) );

            DisplayError( NULL, msg );

            return NULL;
        }

    cfg = new wxFileConfig( wxEmptyString, wxEmptyString, wxEmptyString, fn.GetFullPath() );
        kicad_pro_template = templ.GetFullPath();
    }

    // copy the template to cur_pro_fn, and open it at that destination.
    wxCopyFile( kicad_pro_template, cur_pro_fn );
    cfg = new wxFileConfig( wxEmptyString, wxEmptyString, wxEmptyString, cur_pro_fn );

    cfg->DontCreateOnDemand();

    SetProjectFullName( fn.GetFullPath() );
    SetProjectFullName( cur_pro_fn );
    return cfg;
}

@@ -299,6 +307,12 @@ void PROJECT::ConfigSave( const SEARCH_STACK& aSList, const wxString& aFileName
{
    std::auto_ptr<wxConfigBase> cfg( configCreate( aSList, aFileName, aGroupName, FORCE_LOCAL_CONFIG ) );

    if( !cfg.get() )
    {
        // could not find template
        return;
    }

    cfg->SetPath( wxCONFIG_PATH_SEPARATOR );

    cfg->Write( wxT( "update" ), DateAndTime() );
@@ -329,6 +343,12 @@ bool PROJECT::ConfigLoad( const SEARCH_STACK& aSList, const wxString& aFileName,
{
    std::auto_ptr<wxConfigBase> cfg( configCreate( aSList, aFileName, aGroupName, false ) );

    if( !cfg.get() )
    {
        // could not find template
        return false;
    }

    cfg->SetPath( wxCONFIG_PATH_SEPARATOR );

    wxString timestamp = cfg->Read( wxT( "update" ) );
+0 −9
Original line number Diff line number Diff line
@@ -131,15 +131,6 @@ public:
    /// Accessor for Eeschema search stack.
    VTBL_ENTRY SEARCH_STACK&  SchSearchS()      { return m_sch_search; }

    /**
     * Function PcbSearchS
     * returns the obsolete footprint library search stack.
     * Projects created before the FP_LIB_TABLE support will have footprint
     * search paths in the *.pro files.  Projects created after the FP_LIB_TABLE
     * support will not.  This stack is used for conversion from old to new only.
     */
    VTBL_ENTRY SEARCH_STACK&  PcbSearchS()      { return m_pcb_search; }

    VTBL_ENTRY  wxString GetModuleLibraryNickname()     { return m_module_library_nickname; }
    VTBL_ENTRY  void SetModuleLibraryNickname( const wxString& aNickName ) {  m_module_library_nickname = aNickName; }