mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-04-18 17:19:17 +00:00
Jettison FP_LIB_TABLE::ConvertFromLegacy() into a static function, where it
was used locally. Then comment it out in favor of a newer strategy for filling in nicknames in cvpcb. Add MODULE* FootprintLoadWithOptionalNickname( const FPID& aFootprintId ) throw( IO_ERROR, PARSE_ERROR ); from code found elsewhere.
This commit is contained in:
parent
d053e5615b
commit
4011953455
common
cvpcb
eeschema
include
new
pagelayout_editor
pcb_calculator
pcbnew
dialogs
exporters
files.cppgithub
io_mgr.hioascii.cpp.notuseditem_io.cpp.notusedlibrairi.cpploadcmp.cppmoduleframe.cppnetlist.cppspecctra_export.cppspecctra_import.cppspecctra_test.cpptools
@ -638,164 +638,41 @@ const wxString FP_LIB_TABLE::ExpandSubstitutions( const wxString& aString )
|
||||
|
||||
bool FP_LIB_TABLE::IsEmpty( bool aIncludeFallback )
|
||||
{
|
||||
if( !aIncludeFallback || (fallBack == NULL) )
|
||||
if( !aIncludeFallback || !fallBack )
|
||||
return rows.empty();
|
||||
|
||||
return fallBack->IsEmpty() && rows.empty();
|
||||
return rows.empty() && fallBack->IsEmpty( true );
|
||||
}
|
||||
|
||||
|
||||
bool FP_LIB_TABLE::ConvertFromLegacy( SEARCH_STACK& aSStack, NETLIST& aNetList,
|
||||
const wxArrayString& aLibNames, REPORTER* aReporter ) throw( IO_ERROR )
|
||||
MODULE* FP_LIB_TABLE::FootprintLoadWithOptionalNickname( const FPID& aFootprintId )
|
||||
throw( IO_ERROR, PARSE_ERROR )
|
||||
{
|
||||
wxString msg;
|
||||
FPID lastFPID;
|
||||
COMPONENT* component;
|
||||
MODULE* module = 0;
|
||||
bool retv = true;
|
||||
wxString nickname = aFootprintId.GetLibNickname();
|
||||
wxString fpname = aFootprintId.GetFootprintName();
|
||||
|
||||
if( aNetList.IsEmpty() )
|
||||
return true;
|
||||
|
||||
aNetList.SortByFPID();
|
||||
|
||||
wxString libPath;
|
||||
|
||||
PLUGIN::RELEASER pi( IO_MGR::PluginFind( IO_MGR::LEGACY ) );
|
||||
|
||||
for( unsigned ii = 0; ii < aNetList.GetCount(); ii++ )
|
||||
if( nickname.size() )
|
||||
{
|
||||
component = aNetList.GetComponent( ii );
|
||||
|
||||
// The footprint hasn't been assigned yet so ignore it.
|
||||
if( component->GetFPID().empty() )
|
||||
continue;
|
||||
|
||||
if( component->GetFPID() != lastFPID )
|
||||
{
|
||||
module = NULL;
|
||||
|
||||
for( unsigned ii = 0; ii < aLibNames.GetCount(); ii++ )
|
||||
{
|
||||
wxFileName fn( wxEmptyString, aLibNames[ii], LegacyFootprintLibPathExtension );
|
||||
|
||||
libPath = aSStack.FindValidPath( fn.GetFullPath() );
|
||||
|
||||
if( !libPath )
|
||||
{
|
||||
if( aReporter )
|
||||
{
|
||||
msg.Printf( _( "Cannot find footprint library file '%s' in any of the "
|
||||
"KiCad legacy library search paths.\n" ),
|
||||
GetChars( fn.GetFullPath() ) );
|
||||
aReporter->Report( msg );
|
||||
}
|
||||
|
||||
retv = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
module = pi->FootprintLoad( libPath, component->GetFPID().GetFootprintName() );
|
||||
|
||||
if( module )
|
||||
{
|
||||
lastFPID = component->GetFPID();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( !module )
|
||||
{
|
||||
if( aReporter )
|
||||
{
|
||||
msg.Printf( _( "Component `%s` footprint '%s' was not found in any legacy "
|
||||
"library.\n" ),
|
||||
GetChars( component->GetReference() ),
|
||||
GetChars( component->GetFPID().Format() ) );
|
||||
aReporter->Report( msg );
|
||||
}
|
||||
|
||||
// Clear the footprint assignment since the old library lookup method is no
|
||||
// longer valid.
|
||||
FPID emptyFPID;
|
||||
|
||||
component->SetFPID( emptyFPID );
|
||||
retv = false;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
wxString libNickname;
|
||||
|
||||
FP_LIB_TABLE* cur = this;
|
||||
|
||||
do
|
||||
{
|
||||
cur->ensureIndex();
|
||||
|
||||
for( unsigned i = 0; i < cur->rows.size(); i++ )
|
||||
{
|
||||
wxString uri = cur->rows[i].GetFullURI( true );
|
||||
|
||||
if( wxFileName::GetPathSeparator() == wxChar( '\\' )
|
||||
&& uri.Find( wxChar( '/' ) ) >= 0 )
|
||||
{
|
||||
uri.Replace( wxT( "/"), wxT( "\\" ) );
|
||||
}
|
||||
#ifdef __WINDOWS__
|
||||
if( uri.CmpNoCase( libPath ) )
|
||||
#else
|
||||
if( uri == libPath )
|
||||
#endif
|
||||
{
|
||||
libNickname = cur->rows[i].GetNickName();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
} while( ( cur = cur->fallBack ) != 0 && libNickname.IsEmpty() );
|
||||
|
||||
if( libNickname.IsEmpty() )
|
||||
{
|
||||
if( aReporter )
|
||||
{
|
||||
msg.Printf( _( "Component '%s' footprint '%s' legacy library path '%s' "
|
||||
"was not found in the footprint library table.\n" ),
|
||||
GetChars( component->GetReference() ),
|
||||
GetChars( component->GetFPID().Format() ) );
|
||||
aReporter->Report( msg );
|
||||
}
|
||||
|
||||
retv = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
FPID newFPID = lastFPID;
|
||||
newFPID.SetLibNickname( libNickname );
|
||||
|
||||
if( !newFPID.IsValid() )
|
||||
{
|
||||
if( aReporter )
|
||||
{
|
||||
msg.Printf( _( "Component '%s' FPID '%s' is not valid.\n" ),
|
||||
GetChars( component->GetReference() ),
|
||||
GetChars( newFPID.Format() ) );
|
||||
aReporter->Report( msg );
|
||||
}
|
||||
|
||||
retv = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// The footprint name should already be set.
|
||||
component->SetFPID( newFPID );
|
||||
}
|
||||
}
|
||||
}
|
||||
return FootprintLoad( nickname, fpname );
|
||||
}
|
||||
|
||||
return retv;
|
||||
// nickname is empty, sequentially search (alphabetically) all libs/nicks for first match:
|
||||
else
|
||||
{
|
||||
std::vector<wxString> nicks = GetLogicalLibs();
|
||||
|
||||
// Search each library going through libraries alphabetically.
|
||||
for( unsigned i = 0; i<nicks.size(); ++i )
|
||||
{
|
||||
// FootprintLoad() returns NULL on not found, does not throw exception
|
||||
// unless there's an IO_ERROR.
|
||||
MODULE* ret = FootprintLoad( nicks[i], fpname );
|
||||
if( ret )
|
||||
return ret;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -827,17 +704,14 @@ bool FP_LIB_TABLE::LoadGlobalTable( FP_LIB_TABLE& aTable ) throw (IO_ERROR, PARS
|
||||
// The fallback is to create an empty global footprint table for the user to populate.
|
||||
if( fileName.IsEmpty() || !::wxCopyFile( fileName, fn.GetFullPath(), false ) )
|
||||
{
|
||||
FP_LIB_TABLE emptyTable;
|
||||
FILE_OUTPUTFORMATTER sf( fn.GetFullPath() );
|
||||
FP_LIB_TABLE emptyTable;
|
||||
|
||||
emptyTable.Format( &sf, 0 );
|
||||
emptyTable.Save( fn.GetFullPath() );
|
||||
}
|
||||
}
|
||||
|
||||
FILE_LINE_READER reader( fn.GetFullPath() );
|
||||
FP_LIB_TABLE_LEXER lexer( &reader );
|
||||
aTable.Load( fn.GetFullPath() );
|
||||
|
||||
aTable.Parse( &lexer );
|
||||
return tableExists;
|
||||
}
|
||||
|
||||
|
@ -744,7 +744,7 @@ void WORKSHEET_LAYOUT::SetDefaultLayout()
|
||||
{
|
||||
lp_parser.Parse( this );
|
||||
}
|
||||
catch( IO_ERROR ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
wxLogMessage( ioe.errorText );
|
||||
}
|
||||
@ -765,7 +765,7 @@ void WORKSHEET_LAYOUT::SetPageLayout( const char* aPageLayout, bool Append )
|
||||
{
|
||||
lp_parser.Parse( this );
|
||||
}
|
||||
catch( IO_ERROR ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
wxLogMessage( ioe.errorText );
|
||||
}
|
||||
@ -828,7 +828,7 @@ void WORKSHEET_LAYOUT::SetPageLayout( const wxString& aFullFileName, bool Append
|
||||
{
|
||||
lp_parser.Parse( this );
|
||||
}
|
||||
catch( IO_ERROR ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
wxLogMessage( ioe.errorText );
|
||||
}
|
||||
|
@ -490,7 +490,7 @@ MODULE* DISPLAY_FOOTPRINTS_FRAME::Get_Module( const wxString& aFootprintName )
|
||||
|
||||
footprint = FootprintLibs()->FootprintLoad( FROM_UTF8( nickname.c_str() ), FROM_UTF8( fpname.c_str() ) );
|
||||
}
|
||||
catch( IO_ERROR ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
DisplayError( this, ioe.errorText );
|
||||
return NULL;
|
||||
|
@ -846,7 +846,7 @@ int CVPCB_MAINFRAME::ReadSchematicNetlist()
|
||||
else
|
||||
wxMessageBox( _( "Unknown netlist format." ), wxEmptyString, wxOK | wxICON_ERROR );
|
||||
}
|
||||
catch( IO_ERROR& ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
msg = wxString::Format( _( "Error loading netlist.\n%s" ), ioe.errorText.GetData() );
|
||||
wxMessageBox( msg, _( "Netlist Load Error" ), wxOK | wxICON_ERROR );
|
||||
|
@ -171,6 +171,164 @@ static bool missingLegacyLibs( FP_LIB_TABLE* aTbl, SEARCH_STACK& aSStack,
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
|
||||
/*
|
||||
|
||||
This code block was based on two major assumptions that are no longer true:
|
||||
1) Footprint library basenames would remain the same.
|
||||
(But no, basenames have been renamed in the github repo.)
|
||||
2) *.mod files would still be around and merely reside in the FP_LIB_TABLE.
|
||||
(But no, they have been converted to *.pretty.)
|
||||
|
||||
There is a newer replacement code block in the #else region.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Function convertFromLegacy
|
||||
* converts the footprint names in \a aNetList from the legacy format to the #FPID format.
|
||||
*
|
||||
* @param aNetList is the #NETLIST object to convert.
|
||||
* @param aLibNames is the list of legacy footprint library names from the currently loaded
|
||||
* project.
|
||||
* @param aReporter is the #REPORTER object to dump messages into.
|
||||
* @return true if all footprint names were successfully converted to a valid FPID.
|
||||
*/
|
||||
static bool convertFromLegacy( FP_LIB_TABLE* aTbl, SEARCH_STACK& aSStack, NETLIST& aNetList,
|
||||
const wxArrayString& aLibNames, REPORTER* aReporter = NULL ) throw( IO_ERROR )
|
||||
{
|
||||
wxString msg;
|
||||
FPID lastFPID;
|
||||
COMPONENT* component;
|
||||
MODULE* module = 0;
|
||||
bool retv = true;
|
||||
|
||||
if( aNetList.IsEmpty() )
|
||||
return true;
|
||||
|
||||
aNetList.SortByFPID();
|
||||
|
||||
wxString libPath;
|
||||
|
||||
PLUGIN::RELEASER pi( IO_MGR::PluginFind( IO_MGR::LEGACY ) );
|
||||
|
||||
for( unsigned ii = 0; ii < aNetList.GetCount(); ii++ )
|
||||
{
|
||||
component = aNetList.GetComponent( ii );
|
||||
|
||||
// The footprint hasn't been assigned yet so ignore it.
|
||||
if( component->GetFPID().empty() )
|
||||
continue;
|
||||
|
||||
if( component->GetFPID() != lastFPID )
|
||||
{
|
||||
module = NULL;
|
||||
|
||||
for( unsigned ii = 0; ii < aLibNames.GetCount(); ii++ )
|
||||
{
|
||||
wxFileName fn( wxEmptyString, aLibNames[ii], LegacyFootprintLibPathExtension );
|
||||
|
||||
libPath = aSStack.FindValidPath( fn.GetFullPath() );
|
||||
|
||||
if( !libPath )
|
||||
{
|
||||
if( aReporter )
|
||||
{
|
||||
msg.Printf( _( "Cannot find footprint library file '%s' in any of the "
|
||||
"KiCad legacy library search paths.\n" ),
|
||||
GetChars( fn.GetFullPath() ) );
|
||||
aReporter->Report( msg );
|
||||
}
|
||||
|
||||
retv = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
module = pi->FootprintLoad( libPath, component->GetFPID().GetFootprintName() );
|
||||
|
||||
if( module )
|
||||
{
|
||||
lastFPID = component->GetFPID();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( !module )
|
||||
{
|
||||
if( aReporter )
|
||||
{
|
||||
msg.Printf( _( "Component '%s' footprint '%s' was not found in any legacy "
|
||||
"library.\n" ),
|
||||
GetChars( component->GetReference() ),
|
||||
GetChars( component->GetFPID().Format() ) );
|
||||
aReporter->Report( msg );
|
||||
}
|
||||
|
||||
// Clear the footprint assignment since the old library lookup method is no
|
||||
// longer valid.
|
||||
FPID emptyFPID;
|
||||
|
||||
component->SetFPID( emptyFPID );
|
||||
retv = false;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
wxString libNickname;
|
||||
|
||||
const FP_LIB_TABLE::ROW* row;
|
||||
|
||||
if( ( row = aTbl->FindRowByURI( libPath ) ) != NULL )
|
||||
libNickname = row->GetNickName();
|
||||
|
||||
if( libNickname.IsEmpty() )
|
||||
{
|
||||
if( aReporter )
|
||||
{
|
||||
msg.Printf( _( "Component '%s' with footprint '%s' and legacy library path '%s' "
|
||||
"was not found in the footprint library table.\n" ),
|
||||
GetChars( component->GetReference() ),
|
||||
GetChars( component->GetFPID().Format() ),
|
||||
GetChars( libPath )
|
||||
);
|
||||
aReporter->Report( msg );
|
||||
}
|
||||
|
||||
retv = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
FPID newFPID = lastFPID;
|
||||
newFPID.SetLibNickname( libNickname );
|
||||
|
||||
if( !newFPID.IsValid() )
|
||||
{
|
||||
if( aReporter )
|
||||
{
|
||||
msg.Printf( _( "Component '%s' FPID '%s' is not valid.\n" ),
|
||||
GetChars( component->GetReference() ),
|
||||
GetChars( newFPID.Format() ) );
|
||||
aReporter->Report( msg );
|
||||
}
|
||||
|
||||
retv = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// The footprint name should already be set.
|
||||
component->SetFPID( newFPID );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return retv;
|
||||
}
|
||||
|
||||
|
||||
bool CVPCB_MAINFRAME::ReadNetListAndLinkFiles()
|
||||
{
|
||||
COMPONENT* component;
|
||||
@ -242,7 +400,7 @@ bool CVPCB_MAINFRAME::ReadNetListAndLinkFiles()
|
||||
|
||||
SEARCH_STACK& search = Prj().SchSearchS();
|
||||
|
||||
if( !FootprintLibs()->ConvertFromLegacy( search, m_netlist, m_ModuleLibNames, &reporter ) )
|
||||
if( !convertFromLegacy( FootprintLibs(), search, m_netlist, m_ModuleLibNames, &reporter ) )
|
||||
{
|
||||
HTML_MESSAGE_BOX dlg( this, wxEmptyString );
|
||||
|
||||
@ -300,6 +458,193 @@ bool CVPCB_MAINFRAME::ReadNetListAndLinkFiles()
|
||||
return true;
|
||||
}
|
||||
|
||||
#else // new strategy
|
||||
|
||||
|
||||
/// Return true if the resultant FPID has a certain nickname. The guess
|
||||
/// is only made if this footprint resides in only one library.
|
||||
/// @return int - 0 on success, 1 on not found, 2 on ambiguous i.e. multiple matches
|
||||
static int guessNickname( FP_LIB_TABLE* aTbl, FPID* aFootprintId )
|
||||
{
|
||||
if( aFootprintId->GetLibNickname().size() )
|
||||
return 0;
|
||||
|
||||
wxString nick;
|
||||
wxString fpname = aFootprintId->GetFootprintName();
|
||||
|
||||
std::vector<wxString> nicks = aTbl->GetLogicalLibs();
|
||||
|
||||
// Search each library going through libraries alphabetically.
|
||||
for( unsigned libNdx = 0; libNdx<nicks.size(); ++libNdx )
|
||||
{
|
||||
wxArrayString fpnames = aTbl->FootprintEnumerate( nicks[libNdx] );
|
||||
|
||||
for( unsigned nameNdx = 0; nameNdx<fpnames.size(); ++nameNdx )
|
||||
{
|
||||
if( fpname == fpnames[nameNdx] )
|
||||
{
|
||||
if( !nick )
|
||||
nick = nicks[libNdx];
|
||||
else
|
||||
return 2; // duplicate, the guess would not be certain
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( nick.size() )
|
||||
{
|
||||
aFootprintId->SetLibNickname( nick );
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
bool CVPCB_MAINFRAME::ReadNetListAndLinkFiles()
|
||||
{
|
||||
wxString msg;
|
||||
bool hasMissingNicks = false;
|
||||
FP_LIB_TABLE* tbl = FootprintLibs();
|
||||
|
||||
ReadSchematicNetlist();
|
||||
|
||||
if( m_ListCmp == NULL )
|
||||
return false;
|
||||
|
||||
LoadProjectFile( m_NetlistFileName.GetFullPath() );
|
||||
LoadFootprintFiles();
|
||||
BuildFOOTPRINTS_LISTBOX();
|
||||
BuildLIBRARY_LISTBOX();
|
||||
|
||||
m_ListCmp->Clear();
|
||||
m_undefinedComponentCnt = 0;
|
||||
|
||||
if( m_netlist.AnyFootprintsLinked() )
|
||||
{
|
||||
for( unsigned i = 0; i < m_netlist.GetCount(); i++ )
|
||||
{
|
||||
COMPONENT* component = m_netlist.GetComponent( i );
|
||||
|
||||
if( component->GetFPID().empty() )
|
||||
continue;
|
||||
|
||||
if( component->GetFPID().IsLegacy() )
|
||||
hasMissingNicks = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Check if footprint links were generated before the footprint library table was implemented.
|
||||
if( hasMissingNicks )
|
||||
{
|
||||
msg = wxT(
|
||||
"Some of the assigned footprints are legacy entries (are missing lib nicknames). "
|
||||
"Would you like CvPcb to attempt to convert them to the new required FPID format? "
|
||||
"(If you answer no, then these assignments will be cleared out and you will "
|
||||
"have to re-assign these footprints yourself.)"
|
||||
);
|
||||
|
||||
if( IsOK( this, msg ) )
|
||||
{
|
||||
msg.Clear();
|
||||
|
||||
for( unsigned i = 0; i < m_netlist.GetCount(); i++ )
|
||||
{
|
||||
COMPONENT* component = m_netlist.GetComponent( i );
|
||||
|
||||
if( component->GetFPID().IsLegacy() )
|
||||
{
|
||||
int guess = guessNickname( tbl, (FPID*) &component->GetFPID() );
|
||||
|
||||
switch( guess )
|
||||
{
|
||||
case 0:
|
||||
DBG(printf("%s: guessed OK ref:%s fpid:%s\n", __func__,
|
||||
TO_UTF8( component->GetReference() ), component->GetFPID().Format().c_str() );)
|
||||
m_modified = true;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
msg += wxString::Format( _(
|
||||
"Component '%s' footprint '%s' was <b>not found</b> in any library.\n" ),
|
||||
GetChars( component->GetReference() ),
|
||||
GetChars( component->GetFPID().GetFootprintName() )
|
||||
);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
msg += wxString::Format( _(
|
||||
"Component '%s' footprint '%s' was found in <b>multiple</b> libraries.\n" ),
|
||||
GetChars( component->GetReference() ),
|
||||
GetChars( component->GetFPID().GetFootprintName() )
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( msg.size() )
|
||||
{
|
||||
HTML_MESSAGE_BOX dlg( this, wxEmptyString );
|
||||
|
||||
dlg.MessageSet( wxT( "The following errors occurred attempting to convert the "
|
||||
"footprint assignments:\n\n" ) );
|
||||
dlg.ListSet( msg );
|
||||
dlg.MessageSet( wxT( "\nYou will need to reassign them manually if you want them "
|
||||
"to be updated correctly the next time you import the "
|
||||
"netlist in Pcbnew." ) );
|
||||
dlg.ShowModal();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Clear the legacy footprint assignments.
|
||||
for( unsigned i = 0; i < m_netlist.GetCount(); i++ )
|
||||
{
|
||||
COMPONENT* component = m_netlist.GetComponent( i );
|
||||
|
||||
if( component->GetFPID().IsLegacy() )
|
||||
{
|
||||
component->SetFPID( FPID() /* empty */ );
|
||||
m_modified = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for( unsigned i = 0; i < m_netlist.GetCount(); i++ )
|
||||
{
|
||||
COMPONENT* component = m_netlist.GetComponent( i );
|
||||
|
||||
msg.Printf( CMP_FORMAT, m_ListCmp->GetCount() + 1,
|
||||
GetChars( component->GetReference() ),
|
||||
GetChars( component->GetValue() ),
|
||||
GetChars( FROM_UTF8( component->GetFPID().Format().c_str() ) ) );
|
||||
|
||||
m_ListCmp->AppendLine( msg );
|
||||
|
||||
if( component->GetFPID().empty() )
|
||||
{
|
||||
m_undefinedComponentCnt += 1;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if( !m_netlist.IsEmpty() )
|
||||
m_ListCmp->SetSelection( 0, true );
|
||||
|
||||
DisplayStatus();
|
||||
|
||||
UpdateTitle();
|
||||
|
||||
UpdateFileHistory( m_NetlistFileName.GetFullPath() );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
int CVPCB_MAINFRAME::SaveCmpLinkFile( const wxString& aFullFileName )
|
||||
{
|
||||
|
@ -136,7 +136,7 @@ bool LIB_ALIAS::SaveDoc( OUTPUTFORMATTER& aFormatter )
|
||||
|
||||
aFormatter.Print( 0, "$ENDCMP\n" );
|
||||
}
|
||||
catch( IO_ERROR ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -731,7 +731,7 @@ bool CMP_LIBRARY::Save( OUTPUTFORMATTER& aFormatter )
|
||||
|
||||
aFormatter.Print( 0, "#\n#End Library\n" );
|
||||
}
|
||||
catch( IO_ERROR ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
success = false;
|
||||
}
|
||||
@ -756,7 +756,7 @@ bool CMP_LIBRARY::SaveDocs( OUTPUTFORMATTER& aFormatter )
|
||||
|
||||
aFormatter.Print( 0, "#\n#End Doc Library\n" );
|
||||
}
|
||||
catch( IO_ERROR ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
success = false;
|
||||
}
|
||||
|
@ -249,7 +249,7 @@ void DIALOG_BOM::installPluginsList()
|
||||
{
|
||||
cfg_parser.Parse();
|
||||
}
|
||||
catch( IO_ERROR ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
// wxLogMessage( ioe.errorText );
|
||||
}
|
||||
|
@ -668,7 +668,7 @@ void SCH_EDIT_FRAME::LoadSettings( wxConfigBase* aCfg )
|
||||
{
|
||||
m_TemplateFieldNames.Parse( &lexer );
|
||||
}
|
||||
catch( IO_ERROR& e )
|
||||
catch( const IO_ERROR& e )
|
||||
{
|
||||
// @todo show error msg
|
||||
DBG( printf( "templatefieldnames parsing error: '%s'\n",
|
||||
|
@ -1049,7 +1049,7 @@ bool NETLIST_EXPORT_TOOL::WriteKiCadNetList( const wxString& aOutFileName )
|
||||
|
||||
xroot->Format( &formatter, 0 );
|
||||
}
|
||||
catch( IO_ERROR ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
DisplayError( NULL, ioe.errorText );
|
||||
return false;
|
||||
|
@ -225,14 +225,14 @@ void LIB_EDIT_FRAME::SaveOneSymbol()
|
||||
formatter.Print( 0, "ENDDRAW\n" );
|
||||
formatter.Print( 0, "ENDDEF\n" );
|
||||
}
|
||||
catch( IO_ERROR ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
msg.Printf( _( "An error occurred attempting to save symbol file '%s'" ),
|
||||
GetChars( fn.GetFullPath() ) );
|
||||
DisplayError( this, msg );
|
||||
}
|
||||
}
|
||||
catch( IO_ERROR ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
DisplayError( this, ioe.errorText );
|
||||
return;
|
||||
|
@ -38,6 +38,7 @@ class wxFileName;
|
||||
class OUTPUTFORMATTER;
|
||||
class MODULE;
|
||||
class FP_LIB_TABLE_LEXER;
|
||||
class FPID;
|
||||
class NETLIST;
|
||||
class REPORTER;
|
||||
class SEARCH_STACK;
|
||||
@ -455,6 +456,21 @@ public:
|
||||
|
||||
//-----</PLUGIN API SUBSET, REBASED ON aNickname>---------------------------
|
||||
|
||||
/**
|
||||
* Function FootprintLoadWithOptionalNickname
|
||||
* loads a footprint having @a aFootprintId with possibly an empty nickname.
|
||||
*
|
||||
* @param aFootprintId the [nickname] & fooprint name of the footprint to load.
|
||||
*
|
||||
* @return MODULE* - if found caller owns it, else NULL if not found.
|
||||
*
|
||||
* @throw IO_ERROR if the library cannot be found or read. No exception
|
||||
* is thrown in the case where aFootprintName cannot be found.
|
||||
* @throw PARSE_ERROR if @a aFootprintId is not parsed OK.
|
||||
*/
|
||||
MODULE* FootprintLoadWithOptionalNickname( const FPID& aFootprintId )
|
||||
throw( IO_ERROR, PARSE_ERROR );
|
||||
|
||||
/**
|
||||
* Function GetDescription
|
||||
* returns the library desicription from @a aNickname, or an empty string
|
||||
@ -499,19 +515,6 @@ public:
|
||||
*/
|
||||
bool IsEmpty( bool aIncludeFallback = true );
|
||||
|
||||
/**
|
||||
* Function ConvertFromLegacy
|
||||
* converts the footprint names in \a aNetList from the legacy format to the #FPID format.
|
||||
*
|
||||
* @param aNetList is the #NETLIST object to convert.
|
||||
* @param aLibNames is the list of legacy footprint library names from the currently loaded
|
||||
* project.
|
||||
* @param aReporter is the #REPORTER object to dump messages into.
|
||||
* @return true if all footprint names were successfully converted to a valid FPID.
|
||||
*/
|
||||
bool ConvertFromLegacy( SEARCH_STACK& aSStack, NETLIST& aNetList,
|
||||
const wxArrayString& aLibNames, REPORTER* aReporter = NULL ) throw( IO_ERROR );
|
||||
|
||||
/**
|
||||
* Function ExpandSubstitutions
|
||||
* replaces any environment variable references with their values and is
|
||||
|
@ -153,7 +153,6 @@ public:
|
||||
*/
|
||||
bool IsValid() const { return !nickname.empty() && !footprint.empty(); }
|
||||
|
||||
|
||||
/**
|
||||
* Function IsLegacy
|
||||
* @return true if the #FPID only has the #footprint name defined.
|
||||
|
@ -78,7 +78,7 @@ typedef const PTREE CPTREE;
|
||||
* PTREE doc;
|
||||
* Scan( &doc, &lexer );
|
||||
* }
|
||||
* catch( IO_ERROR ioe )
|
||||
* catch( const IO_ERROR& ioe )
|
||||
* {
|
||||
* fprintf( stderr, "%s\n", TO_UTF8( ioe.errorText ) );
|
||||
* }
|
||||
|
@ -716,7 +716,7 @@ void DIR_LIB_SOURCE::Test( int argc, char** argv )
|
||||
printf( "std::exception\n" );
|
||||
}
|
||||
|
||||
catch( IO_ERROR& ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
printf( "exception: %s\n", (const char*) ioe.errorText.ToUTF8() ) );
|
||||
}
|
||||
|
@ -118,7 +118,7 @@ int main( int argc, char** argv )
|
||||
|
||||
printf( "%*s^\n", ioe.byteIndex>=1 ? ioe.byteIndex-1 : 0, "" );
|
||||
}
|
||||
catch( IO_ERROR& ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
printf( "%s\n", (const char*) ioe.errorText.ToUTF8() );
|
||||
}
|
||||
|
@ -98,7 +98,7 @@ public:
|
||||
m_fileout = new FILE_OUTPUTFORMATTER( aFilename );
|
||||
m_out = m_fileout;
|
||||
}
|
||||
catch( IO_ERROR ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
wxMessageBox( ioe.errorText, _("Error writing page layout descr file" ) );
|
||||
}
|
||||
@ -125,7 +125,7 @@ public:
|
||||
m_writer = new STRING_FORMATTER();
|
||||
m_out = m_writer;
|
||||
}
|
||||
catch( IO_ERROR ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
wxMessageBox( ioe.errorText, _("Error writing page layout descr file" ) );
|
||||
}
|
||||
|
@ -66,13 +66,16 @@ bool PCB_CALCULATOR_FRAME::ReadDataFile()
|
||||
{
|
||||
datafile_parser.Parse( datafile );
|
||||
}
|
||||
catch( IO_ERROR& ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
delete datafile;
|
||||
ioe.errorText += '\n';
|
||||
ioe.errorText += _("Data file error.");
|
||||
|
||||
wxMessageBox( ioe.errorText );
|
||||
wxString msg = ioe.errorText;
|
||||
|
||||
msg += wxChar('\n');
|
||||
msg += _("Data file error.");
|
||||
|
||||
wxMessageBox( msg );
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -99,7 +102,7 @@ bool PCB_CALCULATOR_FRAME::WriteDataFile()
|
||||
while( nestlevel-- )
|
||||
formatter.Print( nestlevel, ")\n" );
|
||||
}
|
||||
catch( IO_ERROR ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -426,7 +426,7 @@ bool DIALOG_NETLIST::verifyFootprints( const wxString& aNetlistFilename,
|
||||
std::auto_ptr< NETLIST_READER > nlr( netlistReader );
|
||||
netlistReader->LoadNetlist();
|
||||
}
|
||||
catch( IO_ERROR& ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
msg.Printf( _( "Error loading netlist file:\n%s" ), ioe.errorText.GetData() );
|
||||
wxMessageBox( msg, _( "Netlist Load Error" ), wxOK | wxICON_ERROR );
|
||||
|
@ -403,7 +403,7 @@ bool Export_IDF3( BOARD* aPcb, const wxString& aFullFileName, double aUseThou )
|
||||
|
||||
idfBoard.Finish();
|
||||
}
|
||||
catch( IO_ERROR ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
wxLogDebug( wxT( "An error occurred attemping export to IDFv3.\n\nError: %s" ),
|
||||
GetChars( ioe.errorText ) );
|
||||
|
@ -713,7 +713,7 @@ bool PCB_EDIT_FRAME::DoGenFootprintsReport( const wxString& aFullFilename, bool
|
||||
fprintf( rptfile, "$EndMODULE %s\n\n", TO_UTF8 (Module->GetReference() ) );
|
||||
}
|
||||
}
|
||||
catch( IO_ERROR ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
DisplayError( NULL, ioe.errorText );
|
||||
}
|
||||
|
@ -404,7 +404,7 @@ bool PCB_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in
|
||||
SetBoard( loadedBoard );
|
||||
}
|
||||
}
|
||||
catch( IO_ERROR ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
wxString msg = wxString::Format( _( "Error loading board.\n%s" ),
|
||||
ioe.errorText.GetData() );
|
||||
@ -692,7 +692,7 @@ bool PCB_EDIT_FRAME::SavePcbFile( const wxString& aFileName, bool aCreateBackupF
|
||||
|
||||
pi->Save( pcbFileName.GetFullPath(), GetBoard(), NULL );
|
||||
}
|
||||
catch( IO_ERROR ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
wxString msg = wxString::Format( _( "Error saving board.\n%s" ),
|
||||
ioe.errorText.GetData() );
|
||||
|
@ -570,7 +570,7 @@ int main( int argc, char** argv )
|
||||
printf("[%d]:%s\n", i, TO_UTF8( fps[i] ) );
|
||||
}
|
||||
}
|
||||
catch( IO_ERROR ioe )
|
||||
catch( const IO_ERROR& ioe )
|
||||
{
|
||||
printf( "%s\n", TO_UTF8(ioe.errorText) );
|
||||
}
|
||||
|
@ -204,7 +204,7 @@ public:
|
||||
* or
|
||||
* IO_MGR::Save(...);
|
||||
* }
|
||||
* catch( IO_ERROR ioe )
|
||||
* catch( const IO_ERROR& ioe )
|
||||
* {
|
||||
* // grab text from ioe, show in error window.
|
||||
* }
|
||||
|
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user