FIX: regression loading of SMD pads within EAGLE_PLUGIN::FootprintLoad().

FIX: unique renaming of eagle footprints by substituting illegal : and / with URL encoding technique.
ADD: window resize border to DisplayError() windows.
This commit is contained in:
Dick Hollenbeck 2013-11-20 10:35:03 -06:00
parent 53f33d3941
commit 8df7407b80
4 changed files with 54 additions and 23 deletions

View File

@ -52,9 +52,9 @@ public:
};
private:
void OnSaveAndExit( wxCommandEvent& event ) { EndModal( wxID_YES ); }
void OnCancel( wxCommandEvent& event ) { EndModal( wxID_CANCEL ); }
void OnExitNoSave( wxCommandEvent& event ) { EndModal( wxID_NO ); }
void OnSaveAndExit( wxCommandEvent& event ) { EndModal( wxID_YES ); }
void OnCancel( wxCommandEvent& event ) { EndModal( wxID_CANCEL ); }
void OnExitNoSave( wxCommandEvent& event ) { EndModal( wxID_NO ); }
};
@ -73,10 +73,14 @@ void DisplayError( wxWindow* parent, const wxString& text, int displaytime )
if( displaytime > 0 )
dialog = new wxMessageDialog( parent, text, _( "Warning" ),
wxOK | wxCENTRE | wxICON_INFORMATION );
wxOK | wxCENTRE | wxICON_INFORMATION
| wxRESIZE_BORDER
);
else
dialog = new wxMessageDialog( parent, text, _( "Error" ),
wxOK | wxCENTRE | wxICON_ERROR );
wxOK | wxCENTRE | wxICON_ERROR
| wxRESIZE_BORDER
);
dialog->ShowModal();
dialog->Destroy();

View File

@ -40,7 +40,7 @@
#include <fp_lib_table_lexer.h>
#include <invoke_pcb_dialog.h>
#include <grid_tricks.h>
#include <confirm.h>
/// grid column order is established by this sequence
enum COL_ORDER
@ -244,7 +244,7 @@ protected:
}
catch( PARSE_ERROR& pe )
{
// @todo tell what line and offset
DisplayError( NULL, pe.errorText );
parsed = false;
}

View File

@ -97,17 +97,28 @@ const wxChar* traceEaglePlugin = wxT( "KicadEaglePlugin" );
/// Test footprint name for kicad legality, fix if needed and return true if fixing was required.
static bool fix_eagle_package_name( string* aName )
{
string result;
bool changed = false;
for( string::iterator it = aName->begin(); it != aName->end(); ++it )
{
switch( *it ) // for mapping, I always prefer a tabular switch presentation:
switch( *it )
{
case ':': *it = '_'; changed = true; break;
case '/': *it = '-'; changed = true; break;
case ':':
case '/':
// replace *it with %xx, as in URL encoding
StrPrintf( &result, "%%%02x", *it );
changed = true;
break;
default:
result += *it;
}
}
if( changed )
*aName = result;
return changed;
}
@ -1292,9 +1303,6 @@ void EAGLE_PLUGIN::loadDesignRules( CPTREE& aDesignRules )
void EAGLE_PLUGIN::loadLayerDefs( CPTREE& aLayers )
{
if( m_board == NULL )
return;
typedef std::vector<ELAYER> ELAYERS;
typedef ELAYERS::const_iterator EITER;
@ -1333,17 +1341,21 @@ void EAGLE_PLUGIN::loadLayerDefs( CPTREE& aLayers )
}
#endif
m_board->SetCopperLayerCount( cu.size() );
for( EITER it = cu.begin(); it != cu.end(); ++it )
// Set the layer names and cu count iff we're loading a board.
if( m_board )
{
LAYER_NUM layer = kicad_layer( it->number );
m_board->SetCopperLayerCount( cu.size() );
// these function provide their own protection against UNDEFINED_LAYER:
m_board->SetLayerName( layer, FROM_UTF8( it->name.c_str() ) );
m_board->SetLayerType( layer, LT_SIGNAL );
for( EITER it = cu.begin(); it != cu.end(); ++it )
{
LAYER_NUM layer = kicad_layer( it->number );
// could map the colors here
// these function provide their own protection against UNDEFINED_LAYER:
m_board->SetLayerName( layer, FROM_UTF8( it->name.c_str() ) );
m_board->SetLayerType( layer, LT_SIGNAL );
// could map the colors here
}
}
}
@ -1625,13 +1637,15 @@ void EAGLE_PLUGIN::loadLibrary( CPTREE& aLib, const string* aLibName )
// add the templating MODULE to the MODULE template factory "m_templates"
std::pair<MODULE_ITER, bool> r = m_templates.insert( key, m );
if( !r.second )
if( !r.second
// && !( m_props && m_props->Value( "ignore_duplicates" ) )
)
{
wxString lib = aLibName ? FROM_UTF8( aLibName->c_str() ) : m_lib_path;
wxString pkg = FROM_UTF8( pack_name.c_str() );
wxString emsg = wxString::Format(
_( "<package> name:'%s' duplicated in eagle <library>:'%s'" ),
_( "<package> name: '%s' duplicated in eagle <library>: '%s'" ),
GetChars( pkg ),
GetChars( lib )
);
@ -2876,6 +2890,17 @@ MODULE* EAGLE_PLUGIN::FootprintLoad( const wxString& aLibraryPath, const wxStrin
}
void EAGLE_PLUGIN::FootprintLibOptions( PROPERTIES* aListToAppendTo ) const
{
/*
(*aListToAppendTo)["ignore_duplicates"] = wxString( _(
"Ignore duplicately named footprints within the same Eagle library. "
"Only the first similarly named footprint will be loaded."
)).utf8_str();
*/
}
/*
void EAGLE_PLUGIN::Save( const wxString& aFileName, BOARD* aBoard, const PROPERTIES* aProperties )
{

View File

@ -95,6 +95,8 @@ public:
return false; // until someone writes others like FootprintSave(), etc.
}
void FootprintLibOptions( PROPERTIES* aProperties ) const;
/*
void Save( const wxString& aFileName, BOARD* aBoard, const PROPERTIES* aProperties = NULL );