Browse Source
Initial global footprint library table fixes.
Initial global footprint library table fixes.
Fix bug when pcbnew is launched from a folder containing an existing fp-lib-table file by using same method as setting the initial global symbol library table. Fixes lp:1810169 https://bugs.launchpad.net/kicad/+bug/1810169 Fixes lp:1738871 https://bugs.launchpad.net/kicad/+bug/1738871pull/13/head
4 changed files with 211 additions and 30 deletions
-
1pcbnew/CMakeLists.txt
-
142pcbnew/dialogs/dialog_global_fp_lib_table_config.cpp
-
38pcbnew/dialogs/dialog_global_fp_lib_table_config.h
-
60pcbnew/pcbnew.cpp
@ -0,0 +1,142 @@ |
|||
/*
|
|||
* This program source code file is part of KiCad, a free EDA CAD application. |
|||
* |
|||
* Copyright (C) 2019 Wayne Stambaugh <stambaughw@gmail.com> |
|||
* Copyright (C) 2019 KiCad Developers, see AUTHORS.txt for contributors. |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify it |
|||
* under the terms of the GNU General Public License as published by the |
|||
* Free Software Foundation, either version 3 of the License, or (at your |
|||
* option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, but |
|||
* WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|||
* General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License along |
|||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
#include "dialog_global_fp_lib_table_config.h"
|
|||
|
|||
#include <confirm.h>
|
|||
#include <kiface_i.h>
|
|||
#include <macros.h>
|
|||
|
|||
#include "fp_lib_table.h"
|
|||
|
|||
|
|||
DIALOG_GLOBAL_FP_LIB_TABLE_CONFIG::DIALOG_GLOBAL_FP_LIB_TABLE_CONFIG( wxWindow* aParent ) : |
|||
DIALOG_GLOBAL_LIB_TABLE_CONFIG( aParent, "footprint" ) |
|||
{ |
|||
} |
|||
|
|||
|
|||
DIALOG_GLOBAL_FP_LIB_TABLE_CONFIG::~DIALOG_GLOBAL_FP_LIB_TABLE_CONFIG() |
|||
{ |
|||
} |
|||
|
|||
|
|||
wxFileName DIALOG_GLOBAL_FP_LIB_TABLE_CONFIG::GetGlobalTableFileName() |
|||
{ |
|||
return FP_LIB_TABLE::GetGlobalTableFileName(); |
|||
} |
|||
|
|||
|
|||
bool DIALOG_GLOBAL_FP_LIB_TABLE_CONFIG::TransferDataFromWindow() |
|||
{ |
|||
// Create an empty table if requested by the user.
|
|||
if( m_emptyRb->GetValue() ) |
|||
{ |
|||
FP_LIB_TABLE emptyTable; |
|||
|
|||
try |
|||
{ |
|||
emptyTable.Save( FP_LIB_TABLE::GetGlobalTableFileName() ); |
|||
} |
|||
catch( const IO_ERROR& ioe ) |
|||
{ |
|||
DisplayError( this, |
|||
wxString::Format( _( "Error occurred writing empty footprint library " |
|||
"table file.\n\n%s" ), |
|||
FP_LIB_TABLE::GetGlobalTableFileName(), |
|||
ioe.What() ) ); |
|||
return false; |
|||
} |
|||
|
|||
return true; |
|||
} |
|||
|
|||
wxString fileName = m_filePicker1->GetPath(); |
|||
|
|||
if( fileName.IsEmpty() ) |
|||
{ |
|||
DisplayError( this, _( "Please select a footprint library table file." ) ); |
|||
return false; |
|||
} |
|||
|
|||
wxFileName fn = fileName; |
|||
|
|||
// Make sure the footprint library table to copy actually exists.
|
|||
if( !fn.FileExists() ) |
|||
{ |
|||
DisplayError( this, |
|||
wxString::Format( _( "File \"%s\" not found." ), fn.GetFullPath() ) ); |
|||
return false; |
|||
} |
|||
|
|||
// Make sure the footprint library table to copy is a valid footprint library table file.
|
|||
FP_LIB_TABLE tmpTable; |
|||
|
|||
try |
|||
{ |
|||
tmpTable.Load( fn.GetFullPath() ); |
|||
} |
|||
catch( const IO_ERROR& ioe ) |
|||
{ |
|||
DisplayError( this, |
|||
wxString::Format( _( "File \"%s\" is not a valid footprint library table " |
|||
"file.\n\n%s" ), fn.GetFullPath(), ioe.What() ) ); |
|||
return false; |
|||
} |
|||
|
|||
// Create the config path if it doesn't already exist.
|
|||
wxFileName fpTableFileName = FP_LIB_TABLE::GetGlobalTableFileName(); |
|||
|
|||
if( !fpTableFileName.DirExists() && !fpTableFileName.Mkdir( 0x777, wxPATH_MKDIR_FULL ) ) |
|||
{ |
|||
DisplayError( this, |
|||
wxString::Format( _( "Cannot create global library table path \"%s\"." ), |
|||
fpTableFileName.GetPath() ) ); |
|||
return false; |
|||
} |
|||
|
|||
// Copy the global footprint library table file to the user config.
|
|||
if( !::wxCopyFile( fn.GetFullPath(), fpTableFileName.GetFullPath() ) ) |
|||
{ |
|||
DisplayError( this, |
|||
wxString::Format( _( "Cannot copy global footprint library table " |
|||
"file:\n\n \"%s\"\n\n:to:\n\n\"%s\"." ), |
|||
fn.GetFullPath(), fpTableFileName.GetFullPath() ) ); |
|||
return false; |
|||
} |
|||
|
|||
// Load the successfully copied footprint library table file. This should not fail
|
|||
// since the file was tested above. Check for failure anyway to keep the compiler
|
|||
// from complaining.
|
|||
try |
|||
{ |
|||
if( !FP_LIB_TABLE::LoadGlobalTable( GFootprintTable ) ) |
|||
return false; |
|||
} |
|||
catch( const IO_ERROR& ioe ) |
|||
{ |
|||
DisplayError( this, |
|||
wxString::Format( _( "Error occurred loading global footprint library table:" |
|||
"\n\n%s" ), ioe.What() ) ); |
|||
return false; |
|||
} |
|||
|
|||
return true; |
|||
} |
@ -0,0 +1,38 @@ |
|||
/* |
|||
* This program source code file is part of KiCad, a free EDA CAD application. |
|||
* |
|||
* Copyright (C) 2019 Wayne Stambaugh <stambaughw@gmail.com> |
|||
* Copyright (C) 2019 KiCad Developers, see AUTHORS.txt for contributors. |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify it |
|||
* under the terms of the GNU General Public License as published by the |
|||
* Free Software Foundation, either version 3 of the License, or (at your |
|||
* option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, but |
|||
* WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|||
* General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License along |
|||
* with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
*/ |
|||
|
|||
#ifndef _DIALOG_GLOBAL_FP_LIB_TABLE_CONFIG_H_ |
|||
#define _DIALOG_GLOBAL_FP_LIB_TABLE_CONFIG_H_ |
|||
|
|||
#include "dialog_global_lib_table_config.h" |
|||
|
|||
|
|||
class DIALOG_GLOBAL_FP_LIB_TABLE_CONFIG : public DIALOG_GLOBAL_LIB_TABLE_CONFIG |
|||
{ |
|||
public: |
|||
DIALOG_GLOBAL_FP_LIB_TABLE_CONFIG( wxWindow* aParent ); |
|||
virtual ~DIALOG_GLOBAL_FP_LIB_TABLE_CONFIG(); |
|||
|
|||
bool TransferDataFromWindow() override; |
|||
|
|||
virtual wxFileName GetGlobalTableFileName() override; |
|||
}; |
|||
|
|||
#endif // _DIALOG_GLOBAL_FP_LIB_TABLE_CONFIG_H_ |
Write
Preview
Loading…
Cancel
Save
Reference in new issue