Remove obsolete symbol library item load code.

This commit is contained in:
Wayne Stambaugh 2017-11-27 10:18:30 -05:00
parent 11eb8aa098
commit 0acdd9f02e
19 changed files with 13 additions and 1009 deletions

View File

@ -833,312 +833,6 @@ bool LIB_PART::Save( OUTPUTFORMATTER& aFormatter )
}
bool LIB_PART::Load( LINE_READER& aLineReader, wxString& aErrorMsg )
{
int unused;
char* p;
char* componentName;
char* prefix = NULL;
char* line;
bool result;
wxString Msg;
line = aLineReader.Line();
p = strtok( line, " \t\r\n" );
if( strcmp( p, "DEF" ) != 0 )
{
aErrorMsg.Printf( wxT( "DEF command expected in line %d, aborted." ),
aLineReader.LineNumber() );
return false;
}
// Read DEF line:
char drawnum = 0;
char drawname = 0;
if( ( componentName = strtok( NULL, " \t\n" ) ) == NULL // Part name:
|| ( prefix = strtok( NULL, " \t\n" ) ) == NULL // Prefix name:
|| ( p = strtok( NULL, " \t\n" ) ) == NULL // NumOfPins:
|| sscanf( p, "%d", &unused ) != 1
|| ( p = strtok( NULL, " \t\n" ) ) == NULL // TextInside:
|| sscanf( p, "%d", &m_pinNameOffset ) != 1
|| ( p = strtok( NULL, " \t\n" ) ) == NULL // DrawNums:
|| sscanf( p, "%c", &drawnum ) != 1
|| ( p = strtok( NULL, " \t\n" ) ) == NULL // DrawNums:
|| sscanf( p, "%c", &drawname ) != 1
|| ( p = strtok( NULL, " \t\n" ) ) == NULL // m_unitCount:
|| sscanf( p, "%d", &m_unitCount ) != 1 )
{
aErrorMsg.Printf( wxT( "Wrong DEF format in line %d, skipped." ),
aLineReader.LineNumber() );
while( (line = aLineReader.ReadLine()) != NULL )
{
p = strtok( line, " \t\n" );
if( p && strcasecmp( p, "ENDDEF" ) == 0 )
break;
}
return false;
}
// Ensure m_unitCount is >= 1 (could be read as 0 in old libraries)
if( m_unitCount < 1 )
m_unitCount = 1;
m_showPinNumbers = ( drawnum == 'N' ) ? false : true;
m_showPinNames = ( drawname == 'N' ) ? false : true;
// Copy part name and prefix.
if( componentName[0] != '~' )
{
SetName( FROM_UTF8( componentName ) );
}
else
{
SetName( FROM_UTF8( &componentName[1] ) );
GetValueField().SetVisible( false );
}
LIB_FIELD& reference = GetReferenceField();
if( strcmp( prefix, "~" ) == 0 )
{
reference.Empty();
reference.SetVisible( false );
}
else
{
reference.SetText( FROM_UTF8( prefix ) );
}
// Copy optional infos
if( ( p = strtok( NULL, " \t\n" ) ) != NULL && *p == 'L' )
m_unitsLocked = true;
if( ( p = strtok( NULL, " \t\n" ) ) != NULL && *p == 'P' )
m_options = ENTRY_POWER;
// Read next lines, until "ENDDEF" is found
while( ( line = aLineReader.ReadLine() ) != NULL )
{
p = strtok( line, " \t\r\n" );
// This is the error flag ( if an error occurs, result = false)
result = true;
if( *line == '#' ) // a comment
continue;
if( p == NULL ) // empty line
continue;
if( line[0] == 'T' && line[1] == 'i' )
result = LoadDateAndTime( aLineReader );
else if( *line == 'F' )
result = LoadField( aLineReader, Msg );
else if( strcmp( p, "ENDDEF" ) == 0 ) // End of component description
goto ok;
else if( strcmp( p, "DRAW" ) == 0 )
result = LoadDrawEntries( aLineReader, Msg );
else if( strncmp( p, "ALIAS", 5 ) == 0 )
{
p = strtok( NULL, "\r\n" );
result = LoadAliases( p, aErrorMsg );
}
else if( strncmp( p, "$FPLIST", 5 ) == 0 )
result = LoadFootprints( aLineReader, Msg );
// End line or block analysis: test for an error
if( !result )
{
if( Msg.IsEmpty() )
aErrorMsg.Printf( wxT( "error occurred at line %d " ), aLineReader.LineNumber() );
else
aErrorMsg.Printf( wxT( "error <%s> occurred at line %d " ),
GetChars( Msg ), aLineReader.LineNumber() );
return false;
}
}
return false;
ok:
// If we are here, this part is O.k. - put it in:
return true;
}
bool LIB_PART::LoadDrawEntries( LINE_READER& aLineReader, wxString& aErrorMsg )
{
char* line;
LIB_ITEM* newEntry = NULL;
while( true )
{
if( !( line = aLineReader.ReadLine() ) )
{
aErrorMsg = wxT( "file ended prematurely loading component draw element" );
return false;
}
if( strncmp( line, "ENDDRAW", 7 ) == 0 )
break;
newEntry = NULL;
switch( line[0] )
{
case 'A': // Arc
newEntry = ( LIB_ITEM* ) new LIB_ARC( this );
break;
case 'C': // Circle
newEntry = ( LIB_ITEM* ) new LIB_CIRCLE( this );
break;
case 'T': // Text
newEntry = ( LIB_ITEM* ) new LIB_TEXT( this );
break;
case 'S': // Square
newEntry = ( LIB_ITEM* ) new LIB_RECTANGLE( this );
break;
case 'X': // Pin Description
newEntry = ( LIB_ITEM* ) new LIB_PIN( this );
break;
case 'P': // Polyline
newEntry = ( LIB_ITEM* ) new LIB_POLYLINE( this );
break;
case 'B': // Bezier Curves
newEntry = ( LIB_ITEM* ) new LIB_BEZIER( this );
break;
case '#': // Comment
continue;
case '\n':
case '\r':
case 0: // empty line
continue;
default:
aErrorMsg.Printf( wxT( "undefined DRAW command %c" ), line[0] );
return false;
}
if( !newEntry->Load( aLineReader, aErrorMsg ) )
{
aErrorMsg.Printf( wxT( "error '%s' in DRAW command %c" ),
GetChars( aErrorMsg ), line[0] );
delete newEntry;
// Flush till end of draw section
do
{
if( !aLineReader.ReadLine() )
{
aErrorMsg = wxT( "file ended prematurely while attempting "
"to flush to end of drawing section." );
return false;
}
} while( strncmp( line, "ENDDRAW", 7 ) != 0 );
return false;
}
else
{
m_drawings.push_back( newEntry );
}
}
return true;
}
bool LIB_PART::LoadAliases( char* aLine, wxString& aErrorMsg )
{
char* text = strtok( aLine, " \t\r\n" );
while( text )
{
m_aliases.push_back( new LIB_ALIAS( FROM_UTF8( text ), this ) );
text = strtok( NULL, " \t\r\n" );
}
return true;
}
bool LIB_PART::LoadField( LINE_READER& aLineReader, wxString& aErrorMsg )
{
LIB_FIELD* field = new LIB_FIELD( this );
if( !field->Load( aLineReader, aErrorMsg ) )
{
delete field;
return false;
}
if( (unsigned) field->GetId() < MANDATORY_FIELDS )
{
LIB_FIELD* fixedField = GetField( field->GetId() );
// this will fire only if somebody broke a constructor or editor.
// MANDATORY_FIELDS are always present in ram resident components, no
// exceptions, and they always have their names set, even fixed fields.
wxASSERT( fixedField );
*fixedField = *field;
if( field->GetId() == VALUE )
SetName( field->GetText() );
delete field;
}
else
{
m_drawings.push_back( field );
}
return true;
}
bool LIB_PART::LoadFootprints( LINE_READER& aLineReader, wxString& aErrorMsg )
{
char* line;
char* p;
while( true )
{
if( !( line = aLineReader.ReadLine() ) )
{
aErrorMsg = wxT( "file ended prematurely while loading footprints" );
return false;
}
p = strtok( line, " \t\r\n" );
if( strcasecmp( p, "$ENDFPLIST" ) == 0 )
break;
m_FootprintList.Add( FROM_UTF8( p ) );
}
return true;
}
const EDA_RECT LIB_PART::GetUnitBoundingBox( int aUnit, int aConvert ) const
{
EDA_RECT bBox;

View File

@ -372,19 +372,6 @@ public:
*/
bool Save( OUTPUTFORMATTER& aFormatter );
/**
* Load part definition from \a aReader.
*
* @param aReader A LINE_READER object to load file from.
* @param aErrorMsg - Description of error on load failure.
* @return True if the load was successful, false if there was an error.
*/
bool Load( LINE_READER& aReader, wxString& aErrorMsg );
bool LoadField( LINE_READER& aReader, wxString& aErrorMsg );
bool LoadDrawEntries( LINE_READER& aReader, wxString& aErrorMsg );
bool LoadAliases( char* aLine, wxString& aErrorMsg );
bool LoadFootprints( LINE_READER& aReader, wxString& aErrorMsg );
bool IsPower() const { return m_options == ENTRY_POWER; }
bool IsNormal() const { return m_options == ENTRY_NORMAL; }

View File

@ -123,58 +123,6 @@ bool LIB_ARC::Save( OUTPUTFORMATTER& aFormatter )
}
bool LIB_ARC::Load( LINE_READER& aLineReader, wxString& aErrorMsg )
{
int startx, starty, endx, endy, cnt;
char tmp[256] = "";
char* line = (char*) aLineReader;
cnt = sscanf( line + 2, "%d %d %d %d %d %d %d %d %255s %d %d %d %d",
&m_Pos.x, &m_Pos.y, &m_Radius, &m_t1, &m_t2, &m_Unit,
&m_Convert, &m_Width, tmp, &startx, &starty, &endx, &endy );
if( cnt < 8 )
{
aErrorMsg.Printf( _( "Arc only had %d parameters of the required 8" ), cnt );
return false;
}
if( tmp[0] == 'F' )
m_Fill = FILLED_SHAPE;
if( tmp[0] == 'f' )
m_Fill = FILLED_WITH_BG_BODYCOLOR;
NORMALIZE_ANGLE_POS( m_t1 );
NORMALIZE_ANGLE_POS( m_t2 );
// Actual Coordinates of arc ends are read from file
if( cnt >= 13 )
{
m_ArcStart.x = startx;
m_ArcStart.y = starty;
m_ArcEnd.x = endx;
m_ArcEnd.y = endy;
}
else
{
// Actual Coordinates of arc ends are not read from file
// (old library), calculate them
m_ArcStart.x = m_Radius;
m_ArcStart.y = 0;
m_ArcEnd.x = m_Radius;
m_ArcEnd.y = 0;
RotatePoint( &m_ArcStart.x, &m_ArcStart.y, -m_t1 );
m_ArcStart.x += m_Pos.x;
m_ArcStart.y += m_Pos.y;
RotatePoint( &m_ArcEnd.x, &m_ArcEnd.y, -m_t2 );
m_ArcEnd.x += m_Pos.x;
m_ArcEnd.y += m_Pos.y;
}
return true;
}
bool LIB_ARC::HitTest( const wxPoint& aRefPoint ) const
{
int mindist = GetPenSize() / 2;

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2004-2017 KiCad Developers, see change_log.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
@ -94,8 +94,6 @@ public:
bool Save( OUTPUTFORMATTER& aFormatter ) override;
bool Load( LINE_READER& aLineReader, wxString& aErrorMsg ) override;
bool HitTest( const wxPoint& aPosition ) const override;
bool HitTest( const wxPoint& aPosition, int aThreshold, const TRANSFORM& aTransform ) const override;

View File

@ -66,68 +66,6 @@ bool LIB_BEZIER::Save( OUTPUTFORMATTER& aFormatter )
}
bool LIB_BEZIER::Load( LINE_READER& aLineReader, wxString& aErrorMsg )
{
char* p;
int i, ccount = 0;
wxPoint pt;
char* line = (char*) aLineReader;
i = sscanf( line + 2, "%d %d %d %d", &ccount, &m_Unit, &m_Convert, &m_Width );
if( i !=4 )
{
aErrorMsg.Printf( _( "Bezier only had %d parameters of the required 4" ), i );
return false;
}
if( ccount <= 0 )
{
aErrorMsg.Printf( _( "Bezier count parameter %d is invalid" ), ccount );
return false;
}
strtok( line + 2, " \t\n" ); // Skip field
strtok( NULL, " \t\n" ); // Skip field
strtok( NULL, " \t\n" ); // Skip field
strtok( NULL, " \t\n" );
for( i = 0; i < ccount; i++ )
{
p = strtok( NULL, " \t\n" );
if( sscanf( p, "%d", &pt.x ) != 1 )
{
aErrorMsg.Printf( _( "Bezier point %d X position not defined" ), i );
return false;
}
p = strtok( NULL, " \t\n" );
if( sscanf( p, "%d", &pt.y ) != 1 )
{
aErrorMsg.Printf( _( "Bezier point %d Y position not defined" ), i );
return false;
}
m_BezierPoints.push_back( pt );
}
m_Fill = NO_FILL;
if( ( p = strtok( NULL, " \t\n" ) ) != NULL )
{
if( p[0] == 'F' )
m_Fill = FILLED_SHAPE;
if( p[0] == 'f' )
m_Fill = FILLED_WITH_BG_BODYCOLOR;
}
return true;
}
EDA_ITEM* LIB_BEZIER::Clone() const
{
return new LIB_BEZIER( *this );

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2004-2017 KiCad Developers, see change_log.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
@ -61,8 +61,6 @@ public:
bool Save( OUTPUTFORMATTER& aFormatter ) override;
bool Load( LINE_READER& aLineReader, wxString& aErrorMsg ) override;
void AddPoint( const wxPoint& aPoint ) { m_BezierPoints.push_back( aPoint ); }
void SetOffset( const wxPoint& aOffset ) override;

View File

@ -64,30 +64,6 @@ bool LIB_CIRCLE::Save( OUTPUTFORMATTER& aFormatter )
}
bool LIB_CIRCLE::Load( LINE_READER& aLineReader, wxString& aErrorMsg )
{
char tmp[256];
char* line = (char*) aLineReader;
int cnt = sscanf( line + 2, "%d %d %d %d %d %d %255s", &m_Pos.x, &m_Pos.y,
&m_Radius, &m_Unit, &m_Convert, &m_Width, tmp );
if( cnt < 6 )
{
aErrorMsg.Printf( _( "Circle only had %d parameters of the required 6" ), cnt );
return false;
}
if( tmp[0] == 'F' )
m_Fill = FILLED_SHAPE;
if( tmp[0] == 'f' )
m_Fill = FILLED_WITH_BG_BODYCOLOR;
return true;
}
bool LIB_CIRCLE::HitTest( const wxPoint& aPosRef ) const
{
int mindist = GetPenSize() / 2;

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2004-2017 KiCad Developers, see change_log.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
@ -59,8 +59,6 @@ public:
bool Save( OUTPUTFORMATTER& aFormatter ) override;
bool Load( LINE_READER& aLineReader, wxString& aErrorMsg ) override;
bool HitTest( const wxPoint& aPosition ) const override;
bool HitTest( const wxPoint& aPosRef, int aThreshold, const TRANSFORM& aTransform ) const override;

View File

@ -2,8 +2,8 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2015 Jean-Pierre Charras, jaen-pierre.charras at wanadoo.fr
* Copyright (C) 2015 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 2004-2015 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2015 Wayne Stambaugh <stambaughw@gmail.com>
* Copyright (C) 2004-2017 KiCad Developers, see change_log.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
@ -227,8 +227,6 @@ public:
*/
virtual bool Save( OUTPUTFORMATTER& aFormatter ) = 0;
virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg ) = 0;
LIB_PART* GetParent() const
{
return (LIB_PART *)m_Parent;

View File

@ -154,132 +154,6 @@ bool LIB_FIELD::Save( OUTPUTFORMATTER& aFormatter )
}
bool LIB_FIELD::Load( LINE_READER& aLineReader, wxString& errorMsg )
{
int cnt;
int x, y, size;
char textOrient;
char textVisible;
char textHJustify;
char textVJustify[256];
char* line = (char*) aLineReader;
char* limit = line + aLineReader.Length();
if( sscanf( line + 1, "%d", &m_id ) != 1 || m_id < 0 )
{
errorMsg = wxT( "invalid field header" );
return false;
}
// Caller did a strtok(), which inserts a nul, so next few bytes are ugly:
// digit(s), a nul, some whitespace, then a double quote.
while( line < limit && *line != '"' )
line++;
if( line == limit )
return false;
line += ReadDelimitedText( &m_Text, line );
// Doctor the *.lib file field which has a "~" in blank fields. New saves will
// not save like this, and eventually these two lines can be removed.
if( m_Text.size() == 1 && m_Text[0] == wxChar( '~' ) )
m_Text.clear();
memset( textVJustify, 0, sizeof( textVJustify ) );
cnt = sscanf( line, " %d %d %d %c %c %c %255s", &x, &y, &size,
&textOrient, &textVisible, &textHJustify, textVJustify );
if( cnt < 5 )
{
errorMsg.Printf( wxT( "field %d does not have the correct number of parameters" ),
m_id );
return false;
}
SetTextPos( wxPoint( x, y ) );
SetTextSize( wxSize( size, size ) );
if( textOrient == 'H' )
SetTextAngle( TEXT_ANGLE_HORIZ );
else if( textOrient == 'V' )
SetTextAngle( TEXT_ANGLE_VERT );
else
{
errorMsg.Printf( wxT( "field %d text orientation parameter <%c> is not valid" ),
textOrient );
return false;
}
if( textVisible == 'V' )
SetVisible( true );
else if( textVisible == 'I' )
SetVisible( false );
else
{
errorMsg.Printf( wxT( "field %d text visible parameter <%c> is not valid" ),
textVisible );
return false;
}
SetHorizJustify( GR_TEXT_HJUSTIFY_CENTER );
SetVertJustify( GR_TEXT_VJUSTIFY_CENTER );
if( cnt >= 6 )
{
if( textHJustify == 'C' )
SetHorizJustify( GR_TEXT_HJUSTIFY_CENTER );
else if( textHJustify == 'L' )
SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT );
else if( textHJustify == 'R' )
SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT );
else
{
errorMsg.Printf(
wxT( "field %d text horizontal justification parameter <%c> is not valid" ),
textHJustify );
return false;
}
if( textVJustify[0] == 'C' )
SetVertJustify( GR_TEXT_VJUSTIFY_CENTER );
else if( textVJustify[0] == 'B' )
SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM );
else if( textVJustify[0] == 'T' )
SetVertJustify( GR_TEXT_VJUSTIFY_TOP );
else
{
errorMsg.Printf(
wxT( "field %d text vertical justification parameter <%c> is not valid" ),
textVJustify[0] );
return false;
}
if( textVJustify[1] == 'I' ) // Italic
SetItalic( true );
if( textVJustify[2] == 'B' ) // Bold
SetBold( true );
}
// fields in RAM must always have names.
if( (unsigned) m_id < MANDATORY_FIELDS )
{
// Fields in RAM must always have names, because we are trying to get
// less dependent on field ids and more dependent on names.
// Plus assumptions are made in the field editors.
m_name = TEMPLATE_FIELDNAME::GetDefaultFieldName( m_id );
}
else
{
ReadDelimitedText( &m_name, line );
}
return true;
}
int LIB_FIELD::GetPenSize() const
{
return GetThickness() == 0 ? GetDefaultLineThickness() : GetThickness();

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2004-2017 KiCad Developers, see change_log.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
@ -141,8 +141,6 @@ public:
bool Save( OUTPUTFORMATTER& aFormatter ) override;
bool Load( LINE_READER& aLineReader, wxString& errorMsg ) override;
/**
* Copy parameters of this field to another field. Pointers are not copied.
*

View File

@ -2,8 +2,8 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2016 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2015 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2015 Wayne Stambaugh <stambaughw@gmail.com>
* Copyright (C) 1992-2017 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
@ -679,219 +679,6 @@ bool LIB_PIN::Save( OUTPUTFORMATTER& aFormatter )
#include <wx/tokenzr.h>
bool LIB_PIN::Load( LINE_READER& aLineReader, wxString& aErrorMsg )
{
char pinAttrs[64];
char pinOrient[64];
char pinType[64];
*pinAttrs = 0;
// We cannot use sscanf, at least on Windows, to parse the pin description.
// The reason is the pin name is free, and use UTF8 encoding.
// We encourtered issues (Windows specific) to read this name for some UTF8
// cyrillic codes
// So, read the pin name (and num) after conversion from UTF8, and read the others
// parameters (in ASCII) using sscanf
// the full line starts by "X ". The pin data starts at line + 2.
wxString utf8line = FROM_UTF8( aLineReader.Line() + 2 );
wxStringTokenizer tokenizer( utf8line, wxT(" \n\r" ) );
int prms_count = tokenizer.CountTokens();
if( prms_count < 11 )
{
aErrorMsg.Printf( wxT( "pin had %d parameters of the required 11 or 12" ), prms_count );
return false;
}
// Extract the pinName (UTF8 encoded)
m_name = tokenizer.GetNextToken();
wxString tmp;
// Extract the pinName (UTF8 encoded accepted, but should be only ASCII8.)
tmp = tokenizer.GetNextToken();
SetNumber( tmp );
// Read other parameters, in pure ASCII
char line[1024];
tmp = tokenizer.GetString();
unsigned len = tmp.Length();
if( len >= sizeof( line ) ) // Should not occur.
len = sizeof( line) - 1;
strncpy( line, TO_UTF8( tmp ), len );
line[len] = 0;
int cnt = sscanf( line, "%d %d %d %63s %d %d %d %d %63s %63s",
&m_position.x, &m_position.y, &m_length, pinOrient, &m_numTextSize,
&m_nameTextSize, &m_Unit, &m_Convert, pinType, pinAttrs );
if( cnt != (prms_count - 2) )
{
aErrorMsg.Printf( wxT( "pin parameters read issue" ) );
return false;
}
m_orientation = pinOrient[0] & 255;
switch( *pinType & 255 )
{
case 'I':
m_type = PIN_INPUT;
break;
case 'O':
m_type = PIN_OUTPUT;
break;
case 'B':
m_type = PIN_BIDI;
break;
case 'T':
m_type = PIN_TRISTATE;
break;
case 'P':
m_type = PIN_PASSIVE;
break;
case 'U':
m_type = PIN_UNSPECIFIED;
break;
case 'W':
m_type = PIN_POWER_IN;
break;
case 'w':
m_type = PIN_POWER_OUT;
break;
case 'C':
m_type = PIN_OPENCOLLECTOR;
break;
case 'E':
m_type = PIN_OPENEMITTER;
break;
case 'N':
m_type = PIN_NC;
break;
default:
aErrorMsg.Printf( wxT( "unknown pin type [%c]" ), *pinType & 255 );
return false;
}
if( prms_count >= 12 ) /* Special Symbol defined */
{
enum
{
INVERTED = 1 << 0,
CLOCK = 1 << 1,
LOWLEVEL_IN = 1 << 2,
LOWLEVEL_OUT = 1 << 3,
FALLING_EDGE = 1 << 4,
NONLOGIC = 1 << 5
};
int flags = 0;
for( int j = strlen( pinAttrs ); j > 0; )
{
switch( pinAttrs[--j] )
{
case '~':
break;
case 'N':
m_attributes |= PIN_INVISIBLE;
break;
case 'I':
flags |= INVERTED;
break;
case 'C':
flags |= CLOCK;
break;
case 'L':
flags |= LOWLEVEL_IN;
break;
case 'V':
flags |= LOWLEVEL_OUT;
break;
case 'F':
flags |= FALLING_EDGE;
break;
case 'X':
flags |= NONLOGIC;
break;
default:
aErrorMsg.Printf( wxT( "unknown pin attribute [%c]" ), pinAttrs[j] );
return false;
}
}
switch( flags )
{
case 0:
m_shape = PINSHAPE_LINE;
break;
case INVERTED:
m_shape = PINSHAPE_INVERTED;
break;
case CLOCK:
m_shape = PINSHAPE_CLOCK;
break;
case INVERTED | CLOCK:
m_shape = PINSHAPE_INVERTED_CLOCK;
break;
case LOWLEVEL_IN:
m_shape = PINSHAPE_INPUT_LOW;
break;
case LOWLEVEL_IN | CLOCK:
m_shape = PINSHAPE_CLOCK_LOW;
break;
case LOWLEVEL_OUT:
m_shape = PINSHAPE_OUTPUT_LOW;
break;
case FALLING_EDGE:
m_shape = PINSHAPE_FALLING_EDGE_CLOCK;
break;
case NONLOGIC:
m_shape = PINSHAPE_NONLOGIC;
break;
default:
aErrorMsg.Printf( wxT( "pin attributes do not give a valid pin shape [%s]" ), pinAttrs );
return false;
}
}
return true;
}
int LIB_PIN::GetPenSize() const
{
return ( m_width == 0 ) ? GetDefaultLineThickness() : m_width;

View File

@ -2,8 +2,8 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2015 Jean-Pierre Charras, jaen-pierre.charras at wanadoo.fr
* Copyright (C) 2015 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 2004-2015 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2015 Wayne Stambaugh <stambaughw@gmail.com>
* Copyright (C) 2004-2017 KiCad Developers, see change_log.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
@ -116,8 +116,6 @@ public:
bool Save( OUTPUTFORMATTER& aFormatter ) override;
bool Load( LINE_READER& aLineReader, wxString& aErrorMsg ) override;
bool HitTest( const wxPoint& aPosition ) const override;
bool HitTest( const wxPoint &aPosRef, int aThreshold, const TRANSFORM& aTransform ) const override;

View File

@ -71,68 +71,6 @@ bool LIB_POLYLINE::Save( OUTPUTFORMATTER& aFormatter )
}
bool LIB_POLYLINE::Load( LINE_READER& aLineReader, wxString& aErrorMsg )
{
char* p;
int i, ccount = 0;
wxPoint pt;
char* line = (char*) aLineReader;
i = sscanf( line + 2, "%d %d %d %d", &ccount, &m_Unit, &m_Convert, &m_Width );
m_Fill = NO_FILL;
if( i < 4 )
{
aErrorMsg.Printf( _( "Polyline only had %d parameters of the required 4" ), i );
return false;
}
if( ccount <= 0 )
{
aErrorMsg.Printf( _( "Polyline count parameter %d is invalid" ), ccount );
return false;
}
strtok( line + 2, " \t\n" ); // Skip field
strtok( NULL, " \t\n" ); // Skip field
strtok( NULL, " \t\n" ); // Skip field
strtok( NULL, " \t\n" );
for( i = 0; i < ccount; i++ )
{
p = strtok( NULL, " \t\n" );
if( p == NULL || sscanf( p, "%d", &pt.x ) != 1 )
{
aErrorMsg.Printf( _( "Polyline point %d X position not defined" ), i );
return false;
}
p = strtok( NULL, " \t\n" );
if( p == NULL || sscanf( p, "%d", &pt.y ) != 1 )
{
aErrorMsg.Printf( _( "Polyline point %d Y position not defined" ), i );
return false;
}
AddPoint( pt );
}
if( ( p = strtok( NULL, " \t\n" ) ) != NULL )
{
if( p[0] == 'F' )
m_Fill = FILLED_SHAPE;
if( p[0] == 'f' )
m_Fill = FILLED_WITH_BG_BODYCOLOR;
}
return true;
}
EDA_ITEM* LIB_POLYLINE::Clone() const
{
return new LIB_POLYLINE( *this );

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2004-2017 KiCad Developers, see change_log.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
@ -60,8 +60,6 @@ public:
bool Save( OUTPUTFORMATTER& aFormatter ) override;
bool Load( LINE_READER& aLineReader, wxString& aErrorMsg ) override;
void AddPoint( const wxPoint& aPoint );
/**

View File

@ -65,31 +65,6 @@ bool LIB_RECTANGLE::Save( OUTPUTFORMATTER& aFormatter )
}
bool LIB_RECTANGLE::Load( LINE_READER& aLineReader, wxString& aErrorMsg )
{
int cnt;
char tmp[256] = "";
char* line = (char*)aLineReader;
cnt = sscanf( line + 2, "%d %d %d %d %d %d %d %255s", &m_Pos.x, &m_Pos.y,
&m_End.x, &m_End.y, &m_Unit, &m_Convert, &m_Width, tmp );
if( cnt < 7 )
{
aErrorMsg.Printf( _( "Rectangle only had %d parameters of the required 7" ), cnt );
return false;
}
if( tmp[0] == 'F' )
m_Fill = FILLED_SHAPE;
if( tmp[0] == 'f' )
m_Fill = FILLED_WITH_BG_BODYCOLOR;
return true;
}
EDA_ITEM* LIB_RECTANGLE::Clone() const
{
return new LIB_RECTANGLE( *this );

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2004-2017 KiCad Developers, see change_log.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
@ -63,8 +63,6 @@ public:
bool Save( OUTPUTFORMATTER& aFormatter ) override;
bool Load( LINE_READER& aLineReader, wxString& aErrorMsg ) override;
bool HitTest( const wxPoint& aPosition ) const override;
bool HitTest( const wxPoint &aPosRef, int aThreshold, const TRANSFORM& aTransform ) const override;

View File

@ -98,101 +98,6 @@ bool LIB_TEXT::Save( OUTPUTFORMATTER& aFormatter )
}
bool LIB_TEXT::Load( LINE_READER& aLineReader, wxString& errorMsg )
{
int cnt, thickness = 0;
char hjustify = 'C', vjustify = 'C';
char buf[256];
char tmp[256];
char* line = (char*) aLineReader;
double angle;
int not_visible;
int x, y, size;
buf[0] = 0;
tmp[0] = 0; // For italic option, Not in old versions
cnt = sscanf( line + 2, "%lf %d %d %d %d %d %d \"%[^\"]\" %255s %d %c %c",
&angle, &x, &y, &size, &not_visible,
&m_Unit, &m_Convert, buf, tmp, &thickness, &hjustify,
&vjustify );
SetVisible( !not_visible );
if( cnt >= 8 ) // if quoted loading failed, load as not quoted
{
m_Text = FROM_UTF8( buf );
// convert two apostrophes back to double quote
m_Text.Replace( wxT( "''" ), wxT( "\"" ) );
}
else
{
cnt = sscanf( line + 2, "%lf %d %d %d %d %d %d %255s %255s %d %c %c",
&angle, &x, &y, &size, &not_visible,
&m_Unit, &m_Convert, buf, tmp, &thickness, &hjustify,
&vjustify );
if( cnt < 8 )
{
errorMsg.Printf( _( "Text only had %d parameters of the required 8" ), cnt );
return false;
}
SetVisible( !not_visible );
/* Convert '~' to spaces (only if text is not quoted). */
m_Text = FROM_UTF8( buf );
m_Text.Replace( wxT( "~" ), wxT( " " ) );
}
SetTextAngle( angle );
SetTextSize( wxSize( size, size ) );
SetTextPos( wxPoint( x, y ) );
if( strncasecmp( tmp, "Italic", 6 ) == 0 )
SetItalic( true );
if( thickness > 0 )
{
SetBold( true );
}
switch( hjustify )
{
case 'L':
SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT );
break;
case 'C':
SetHorizJustify( GR_TEXT_HJUSTIFY_CENTER );
break;
case 'R':
SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT );
break;
}
switch( vjustify )
{
case 'T':
SetVertJustify( GR_TEXT_VJUSTIFY_TOP );
break;
case 'C':
SetVertJustify( GR_TEXT_VJUSTIFY_CENTER );
break;
case 'B':
SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM );
break;
}
return true;
}
bool LIB_TEXT::HitTest( const wxPoint& aPosition ) const
{
return HitTest( aPosition, 0, DefaultTransform );

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2004-2017 KiCad Developers, see change_log.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
@ -80,8 +80,6 @@ public:
bool Save( OUTPUTFORMATTER& aFormatter ) override;
bool Load( LINE_READER& aLineReader, wxString& aErrorMsg ) override;
bool HitTest( const wxPoint& aPosition ) const override;
bool HitTest( const wxPoint &aPosition, int aThreshold, const TRANSFORM& aTransform ) const override;