Eeschema: fixed bug 577083. Also fixed a bad import of predefined fields when loading a component from a library, when this component has some empty fields like footprint and documentation but have user fields not void.
This commit is contained in:
commit
cc1327b462
|
@ -137,10 +137,9 @@ bool LIB_FIELD::Load( char* line, wxString& errorMsg )
|
||||||
char fieldUserName[1024];
|
char fieldUserName[1024];
|
||||||
char* text;
|
char* text;
|
||||||
|
|
||||||
if( sscanf( line + 1, "%d", &m_FieldId ) != 1
|
if( sscanf( line + 1, "%d", &m_FieldId ) != 1 || m_FieldId < 0 )
|
||||||
|| m_FieldId < REFERENCE || m_FieldId >= NUMBER_OF_FIELDS )
|
|
||||||
{
|
{
|
||||||
errorMsg = _( "invalid field number defined" );
|
errorMsg = wxT( "invalid field header" );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,8 +63,6 @@ SCH_COMPONENT::SCH_COMPONENT( LIB_COMPONENT& libComponent,
|
||||||
const wxPoint& pos, bool setNewItemFlag ) :
|
const wxPoint& pos, bool setNewItemFlag ) :
|
||||||
SCH_ITEM( NULL, TYPE_SCH_COMPONENT )
|
SCH_ITEM( NULL, TYPE_SCH_COMPONENT )
|
||||||
{
|
{
|
||||||
size_t i;
|
|
||||||
LIB_FIELD_LIST libFields;
|
|
||||||
|
|
||||||
Init( pos );
|
Init( pos );
|
||||||
|
|
||||||
|
@ -76,32 +74,34 @@ SCH_COMPONENT::SCH_COMPONENT( LIB_COMPONENT& libComponent,
|
||||||
if( setNewItemFlag )
|
if( setNewItemFlag )
|
||||||
m_Flags = IS_NEW | IS_MOVED;
|
m_Flags = IS_NEW | IS_MOVED;
|
||||||
|
|
||||||
|
// Import predefined fields from the library component:
|
||||||
|
LIB_FIELD_LIST libFields;
|
||||||
libComponent.GetFields( libFields );
|
libComponent.GetFields( libFields );
|
||||||
|
|
||||||
for( i = 0; i < libFields.size(); i++ )
|
for( size_t i = 0; i < libFields.size(); i++ )
|
||||||
{
|
{
|
||||||
if( libFields[i].m_Text.IsEmpty() && libFields[i].m_Name.IsEmpty() )
|
if( libFields[i].m_Text.IsEmpty() && libFields[i].m_Name.IsEmpty() )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
int field_idx = libFields[i].m_FieldId;
|
||||||
/* Add extra fields if library component has more than the default
|
/* Add extra fields if library component has more than the default
|
||||||
* number of fields.
|
* number of fields.
|
||||||
*/
|
*/
|
||||||
if( (int) i >= GetFieldCount() )
|
if( field_idx >= GetFieldCount() )
|
||||||
{
|
{
|
||||||
while( (int) i >= GetFieldCount() )
|
while( field_idx >= GetFieldCount() )
|
||||||
{
|
{
|
||||||
SCH_FIELD field( wxPoint( 0, 0 ), GetFieldCount(), this,
|
SCH_FIELD field( wxPoint( 0, 0 ), GetFieldCount(), this,
|
||||||
ReturnDefaultFieldName( i ) );
|
ReturnDefaultFieldName( field_idx ) );
|
||||||
AddField( field );
|
AddField( field );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
SCH_FIELD* schField = GetField( field_idx );
|
||||||
SCH_FIELD* schField = GetField( i );
|
|
||||||
|
|
||||||
schField->m_Pos = m_Pos + libFields[i].m_Pos;
|
schField->m_Pos = m_Pos + libFields[i].m_Pos;
|
||||||
schField->ImportValues( libFields[i] );
|
schField->ImportValues( libFields[i] );
|
||||||
schField->m_Text = libFields[i].m_Text;
|
schField->m_Text = libFields[i].m_Text;
|
||||||
schField->m_Name = ( i < FIELD1 ) ? ReturnDefaultFieldName( i ) :
|
schField->m_Name = ( field_idx < FIELD1 ) ? ReturnDefaultFieldName( field_idx ) :
|
||||||
libFields[i].m_Name;
|
libFields[i].m_Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,9 +156,9 @@ void SCH_COMPONENT::Init( const wxPoint& pos )
|
||||||
m_Transform[1][0] = 0;
|
m_Transform[1][0] = 0;
|
||||||
m_Transform[1][1] = -1;
|
m_Transform[1][1] = -1;
|
||||||
|
|
||||||
m_Fields.reserve( NUMBER_OF_FIELDS );
|
m_Fields.reserve( DEFAULT_NUMBER_OF_FIELDS );
|
||||||
|
|
||||||
for( int i = 0; i < NUMBER_OF_FIELDS; ++i )
|
for( int i = 0; i < DEFAULT_NUMBER_OF_FIELDS; ++i )
|
||||||
{
|
{
|
||||||
SCH_FIELD field( pos, i, this, ReturnDefaultFieldName( i ) );
|
SCH_FIELD field( pos, i, this, ReturnDefaultFieldName( i ) );
|
||||||
|
|
||||||
|
@ -1174,7 +1174,7 @@ bool SCH_COMPONENT::Matches( wxFindReplaceData& aSearchData, void * aAuxData )
|
||||||
if( !( aSearchData.GetFlags() & FR_SEARCH_ALL_FIELDS ) )
|
if( !( aSearchData.GetFlags() & FR_SEARCH_ALL_FIELDS ) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
for( size_t i = VALUE+1; i < NUMBER_OF_FIELDS; i++ )
|
for( size_t i = VALUE+1; i < m_Fields.size(); i++ )
|
||||||
{
|
{
|
||||||
if( GetField( i )->Matches( aSearchData, aAuxData ) )
|
if( GetField( i )->Matches( aSearchData, aAuxData ) )
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -35,6 +35,8 @@ struct Error
|
||||||
/**
|
/**
|
||||||
* Enum NumFieldType
|
* Enum NumFieldType
|
||||||
* is the numbered set of all fields a SCH_COMPONENT can hold
|
* is the numbered set of all fields a SCH_COMPONENT can hold
|
||||||
|
* Note more than 8 user fields are allowed, but for efficiency reasons
|
||||||
|
* the defualt number of users fields is 8
|
||||||
*/
|
*/
|
||||||
enum NumFieldType {
|
enum NumFieldType {
|
||||||
REFERENCE = 0, ///< Field Reference of part, i.e. "IC21"
|
REFERENCE = 0, ///< Field Reference of part, i.e. "IC21"
|
||||||
|
@ -51,7 +53,7 @@ enum NumFieldType {
|
||||||
FIELD7,
|
FIELD7,
|
||||||
FIELD8,
|
FIELD8,
|
||||||
|
|
||||||
NUMBER_OF_FIELDS
|
DEFAULT_NUMBER_OF_FIELDS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -421,7 +421,7 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::InitBuffers( void )
|
||||||
m_LibEntry->GetFields( fields );
|
m_LibEntry->GetFields( fields );
|
||||||
|
|
||||||
// copy all the fields to a work area
|
// copy all the fields to a work area
|
||||||
m_FieldsBuf.reserve(NUMBER_OF_FIELDS);
|
m_FieldsBuf.reserve(DEFAULT_NUMBER_OF_FIELDS);
|
||||||
|
|
||||||
// Creates a working copy of fields
|
// Creates a working copy of fields
|
||||||
for( size_t i = 0; i < fields.size(); i++ )
|
for( size_t i = 0; i < fields.size(); i++ )
|
||||||
|
@ -430,7 +430,7 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::InitBuffers( void )
|
||||||
// Display 12 fields (or more), and add missing fields
|
// Display 12 fields (or more), and add missing fields
|
||||||
LIB_FIELD blank( 2 );
|
LIB_FIELD blank( 2 );
|
||||||
unsigned fcount = m_FieldsBuf.size();
|
unsigned fcount = m_FieldsBuf.size();
|
||||||
for( unsigned ii = 2; ii < NUMBER_OF_FIELDS; ii++ )
|
for( unsigned ii = 2; ii < DEFAULT_NUMBER_OF_FIELDS; ii++ )
|
||||||
{
|
{
|
||||||
unsigned jj;
|
unsigned jj;
|
||||||
for ( jj = 2; jj < fcount; jj ++ )
|
for ( jj = 2; jj < fcount; jj ++ )
|
||||||
|
@ -449,7 +449,7 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::InitBuffers( void )
|
||||||
|
|
||||||
// Now, all fields with Id 0 to NUMBER_OF_FIELDS-1 exist
|
// Now, all fields with Id 0 to NUMBER_OF_FIELDS-1 exist
|
||||||
// init default fields names
|
// init default fields names
|
||||||
for( int ii = 0; ii < NUMBER_OF_FIELDS; ii++ )
|
for( unsigned ii = 0; ii < m_FieldsBuf.size(); ii++ )
|
||||||
{
|
{
|
||||||
if( m_FieldsBuf[ii].m_Name.IsEmpty() || ii < FIELD1 )
|
if( m_FieldsBuf[ii].m_Name.IsEmpty() || ii < FIELD1 )
|
||||||
m_FieldsBuf[ii].m_Name = ReturnDefaultFieldName( ii );
|
m_FieldsBuf[ii].m_Name = ReturnDefaultFieldName( ii );
|
||||||
|
|
|
@ -54,7 +54,7 @@ static void PlotLibPart( PLOTTER* plotter, SCH_COMPONENT* DrawLibItem )
|
||||||
Entry->Plot( plotter, DrawLibItem->m_Multi, DrawLibItem->m_Convert,
|
Entry->Plot( plotter, DrawLibItem->m_Multi, DrawLibItem->m_Convert,
|
||||||
DrawLibItem->m_Pos, TransMat );
|
DrawLibItem->m_Pos, TransMat );
|
||||||
bool isMulti = Entry->GetPartCount() > 1;
|
bool isMulti = Entry->GetPartCount() > 1;
|
||||||
for( int fieldId = 0; fieldId < NUMBER_OF_FIELDS; fieldId++ )
|
for( int fieldId = 0; fieldId < DrawLibItem->GetFieldCount(); fieldId++ )
|
||||||
{
|
{
|
||||||
PlotTextField( plotter, DrawLibItem, fieldId, isMulti, 0 );
|
PlotTextField( plotter, DrawLibItem, fieldId, isMulti, 0 );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue