Fix crash when trying to view invalid footprint link.

Fixes: lp:1785218
* https://bugs.launchpad.net/kicad/+bug/1785218
This commit is contained in:
Jeff Young 2018-08-03 17:58:23 +01:00
parent 1b71c723bc
commit 92b3aca0ef
2 changed files with 28 additions and 6 deletions

View File

@ -611,24 +611,46 @@ void FOOTPRINT_VIEWER_FRAME::OnActivate( wxActivateEvent& event )
} }
bool FOOTPRINT_VIEWER_FRAME::ShowModal( wxString* aFootprint, wxWindow* aResultantFocusWindow ) bool FOOTPRINT_VIEWER_FRAME::ShowModal( wxString* aFootprint, wxWindow* aParent )
{ {
if( aFootprint && !aFootprint->IsEmpty() ) if( aFootprint && !aFootprint->IsEmpty() )
{ {
wxString msg;
LIB_TABLE* fpTable = Prj().PcbFootprintLibs();
LIB_ID fpid; LIB_ID fpid;
fpid.Parse( *aFootprint, LIB_ID::ID_PCB, true ); fpid.Parse( *aFootprint, LIB_ID::ID_PCB, true );
if( fpid.IsValid() ) if( fpid.IsValid() )
{ {
setCurNickname( fpid.GetLibNickname() ); wxString nickname = fpid.GetLibNickname();
if( !fpTable->HasLibrary( fpid.GetLibNickname(), false ) )
{
msg.sprintf( _( "The current configuration does not include a library with the\n"
"nickname \"%s\". Use Manage Footprint Libraries\n"
"to edit the configuration." ), nickname );
DisplayErrorMessage( aParent, _( "Footprint library not found." ), msg );
}
else if ( !fpTable->HasLibrary( fpid.GetLibNickname(), true ) )
{
msg.sprintf( _( "The library with the nickname \"%s\" is not enabled\n"
"in the current configuration. Use Manage Footprint Libraries to\n"
"edit the configuration." ), nickname );
DisplayErrorMessage( aParent, _( "Footprint library not enabled." ), msg );
}
else
{
setCurNickname( nickname );
setCurFootprintName( fpid.GetLibItemName() ); setCurFootprintName( fpid.GetLibItemName() );
ReCreateFootprintList(); ReCreateFootprintList();
}
SelectAndViewFootprint( NEW_PART ); SelectAndViewFootprint( NEW_PART );
} }
} }
return KIWAY_PLAYER::ShowModal( aFootprint, aResultantFocusWindow ); return KIWAY_PLAYER::ShowModal( aFootprint, aParent );
} }

View File

@ -78,7 +78,7 @@ public:
* @param aFootprint an optional FPID string to initialize the viewer with and to * @param aFootprint an optional FPID string to initialize the viewer with and to
* return a selected footprint through. * return a selected footprint through.
*/ */
bool ShowModal( wxString* aFootprint, wxWindow* aResultantFocusWindow ) override; bool ShowModal( wxString* aFootprint, wxWindow* aParent ) override;
private: private: