Commit 3fed7b9d authored by Wayne Stambaugh's avatar Wayne Stambaugh

Component library object encapsulation work.

parent a6a34f35
......@@ -4,6 +4,16 @@ KiCad ChangeLog 2010
Please add newer entries at the top, list the date and your name with
email address.
2010-dec-07 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
================================================================================
++EESchema
* Finish encapsulating LIB_FIELD object.
* Encapsulated all members currently in use in LIB_PIN object.
++Common
* Add SetModified() helper to EDA_BaseStruct object that checks for a parent
object and sets it's modified status as well.
2010-dec-02 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
================================================================================
++EESchema
......
......@@ -20,9 +20,7 @@ enum textbox {
};
/******************************************************************************/
EDA_BaseStruct::EDA_BaseStruct( EDA_BaseStruct* parent, KICAD_T idType )
/******************************************************************************/
{
InitVars();
m_StructType = idType;
......@@ -30,9 +28,7 @@ EDA_BaseStruct::EDA_BaseStruct( EDA_BaseStruct* parent, KICAD_T idType )
}
/********************************************/
EDA_BaseStruct::EDA_BaseStruct( KICAD_T idType )
/********************************************/
{
InitVars();
m_StructType = idType;
......@@ -51,9 +47,7 @@ EDA_BaseStruct::EDA_BaseStruct( const EDA_BaseStruct& base )
}
/********************************************/
void EDA_BaseStruct::InitVars()
/********************************************/
{
m_StructType = TYPE_NOT_INIT;
Pnext = NULL; // Linked list: Link (next struct)
......@@ -69,6 +63,16 @@ void EDA_BaseStruct::InitVars()
}
void EDA_BaseStruct::SetModified()
{
m_Flags |= IS_CHANGED;
// If this a child object, then the parent modification state also needs to be set.
if( m_Parent )
m_Parent->SetModified();
}
// see base_struct.h
SEARCH_RESULT EDA_BaseStruct::IterateForward( EDA_BaseStruct* listStart,
INSPECTOR* inspector,
......
......@@ -898,7 +898,7 @@ static LIB_PIN* GetNextPinPosition( SCH_COMPONENT* aDrawLibItem,
/* Calculate the pin position (according to the component orientation)
*/
aPosition = DefaultTransform.TransformCoordinate( Pin->m_Pos ) + CmpPosition;
aPosition = DefaultTransform.TransformCoordinate( Pin->GetPosition() ) + CmpPosition;
return Pin;
}
......
......@@ -756,7 +756,7 @@ static bool IsTerminalPoint( SCH_SCREEN* screen, const wxPoint& pos, int layer )
{
// Calculate the exact position of the connection point of the pin,
// depending on orientation of the component.
itempos = LibItem->GetScreenCoord( pin->m_Pos );
itempos = LibItem->GetScreenCoord( pin->GetPosition() );
itempos.x += LibItem->m_Pos.x;
itempos.y += LibItem->m_Pos.y;
if( ( itempos.x == pos.x ) && ( itempos.y == pos.y ) )
......
......@@ -417,11 +417,11 @@ void LIB_COMPONENT::RemoveDrawItem( LIB_DRAW_ITEM* aItem, WinEDA_DrawPanel* aPan
{
LIB_FIELD* field = (LIB_FIELD*) aItem;
if( field->m_FieldId < MANDATORY_FIELDS )
if( field->GetId() < MANDATORY_FIELDS )
{
wxLogWarning( _( "An attempt was made to remove the %s field \
from component %s in library %s." ),
GetChars( field->m_Name ), GetChars( GetName() ),
GetChars( field->GetName() ), GetChars( GetName() ),
GetChars( GetLibraryName() ) );
return;
}
......@@ -609,7 +609,7 @@ bool LIB_COMPONENT::Save( FILE* aFile )
// fieldnames.
if( !fields[i].m_Text.IsEmpty() )
{
fields[i].m_FieldId = fieldId++;
fields[i].SetId( fieldId++ );
if( !fields[i].Save( aFile ) )
return false;
}
......@@ -916,9 +916,9 @@ bool LIB_COMPONENT::LoadField( char* aLine, wxString& aErrorMsg )
return false;
}
if( field->m_FieldId < MANDATORY_FIELDS )
if( field->GetId() < MANDATORY_FIELDS )
{
LIB_FIELD* fixedField = GetField( field->m_FieldId );
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
......@@ -927,7 +927,7 @@ bool LIB_COMPONENT::LoadField( char* aLine, wxString& aErrorMsg )
*fixedField = *field;
if( field->m_FieldId == VALUE )
if( field->GetId() == VALUE )
m_name = field->m_Text;
SAFE_DELETE( field );
......@@ -1055,7 +1055,7 @@ void LIB_COMPONENT::GetFields( LIB_FIELD_LIST& aList )
continue;
field = ( LIB_FIELD* ) &item;
if( (unsigned) field->m_FieldId < MANDATORY_FIELDS )
if( (unsigned) field->GetId() < MANDATORY_FIELDS )
continue; // was added above
aList.push_back( *field );
......@@ -1072,7 +1072,7 @@ LIB_FIELD* LIB_COMPONENT::GetField( int aId )
LIB_FIELD* field = ( LIB_FIELD* ) &item;
if( field->m_FieldId == aId )
if( field->GetId() == aId )
return field;
}
......@@ -1089,7 +1089,7 @@ LIB_FIELD* LIB_COMPONENT::FindField( const wxString& aFieldName )
LIB_FIELD* field = ( LIB_FIELD* ) &item;
if( field->m_Name == aFieldName )
if( field->GetName() == aFieldName )
return field;
}
......@@ -1262,7 +1262,7 @@ void LIB_COMPONENT::DeleteSelectedItems()
{
#if 0 // Set to 1 to allows fields deletion on block delete or other global command
LIB_FIELD& field = ( LIB_FIELD& ) *item;
if( (field.m_FieldId == REFERENCE) || (field.m_FieldId == VALUE) ||
if( (field.GetId() == REFERENCE) || (field.m_FieldId == VALUE) ||
(field.m_Attributs & TEXT_NO_VISIBLE) )
#endif
item->m_Selected = 0;
......
......@@ -130,7 +130,8 @@ void WinEDA_SchematicFrame::SendMessageToPCBNEW( EDA_BaseStruct* objectToSync,
break;
Pin = (LIB_PIN*) objectToSync;
if( Pin->m_PinNum )
if( Pin->GetNumber() )
{
wxString pinnum;
Pin->ReturnPinStringNum( pinnum );
......
......@@ -64,10 +64,11 @@ LIB_PIN* WinEDA_SchematicFrame::LocatePinEnd( SCH_ITEM* DrawList, const wxPoint&
wxPoint pinpos;
Pin = LocateAnyPin( DrawList, pos, &DrawLibItem );
if( !Pin )
return NULL;
pinpos = Pin->m_Pos;
pinpos = Pin->GetPosition();
if( DrawLibItem == NULL )
NEGATE( pinpos.y ); // In libraries Y axis is bottom to top
......@@ -78,5 +79,6 @@ LIB_PIN* WinEDA_SchematicFrame::LocatePinEnd( SCH_ITEM* DrawList, const wxPoint&
if( pos == pinpos )
return Pin;
return NULL;
}
......@@ -249,7 +249,7 @@ An alias %s already exists!\nCannot update this component" ),
// back into the component
for( unsigned i = MANDATORY_FIELDS; i < m_FieldsBuf.size(); )
{
if( m_FieldsBuf[i].m_Name.IsEmpty() || m_FieldsBuf[i].m_Text.IsEmpty() )
if( m_FieldsBuf[i].GetName().IsEmpty() || m_FieldsBuf[i].m_Text.IsEmpty() )
{
m_FieldsBuf.erase( m_FieldsBuf.begin() + i );
continue;
......@@ -262,7 +262,7 @@ An alias %s already exists!\nCannot update this component" ),
for( unsigned i=0; i<m_FieldsBuf.size(); ++i )
{
printf( "save[%d].name:'%s' value:'%s'\n", i,
CONV_TO_UTF8( m_FieldsBuf[i].m_Name ),
CONV_TO_UTF8( m_FieldsBuf[i].GetName() ),
CONV_TO_UTF8( m_FieldsBuf[i].m_Text ) );
}
#endif
......@@ -296,7 +296,7 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::addFieldButtonHandler( wxCommandEvent&
LIB_FIELD blank( fieldNdx );
m_FieldsBuf.push_back( blank );
m_FieldsBuf[fieldNdx].m_Name = TEMPLATE_FIELDNAME::GetDefaultFieldName(fieldNdx);
m_FieldsBuf[fieldNdx].SetName( TEMPLATE_FIELDNAME::GetDefaultFieldName( fieldNdx ) );
setRowItem( fieldNdx, m_FieldsBuf[fieldNdx] );
......@@ -423,7 +423,7 @@ static LIB_FIELD* findfield( const LIB_FIELD_LIST& aList, const wxString& aField
for( unsigned i=0; i<aList.size(); ++i )
{
if( aFieldName == aList[i].m_Name )
if( aFieldName == aList[i].GetName() )
{
field = &aList[i]; // best to avoid casting here.
break;
......@@ -437,7 +437,7 @@ LIB_FIELD* DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::findField( const wxString& aField
{
for( unsigned i=0; i<m_FieldsBuf.size(); ++i )
{
if( aFieldName == m_FieldsBuf[i].m_Name )
if( aFieldName == m_FieldsBuf[i].GetName() )
return &m_FieldsBuf[i];
}
return NULL;
......@@ -455,7 +455,7 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::InitBuffers()
#if defined(DEBUG)
for( unsigned i=0; i<cmpFields.size(); ++i )
{
printf( "cmpFields[%d].name:%s\n", i, CONV_TO_UTF8( cmpFields[i].m_Name ) );
printf( "cmpFields[%d].name:%s\n", i, CONV_TO_UTF8( cmpFields[i].GetName() ) );
}
#endif
......@@ -483,7 +483,7 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::InitBuffers()
// fixed fields:
for( int i=0; i<MANDATORY_FIELDS; ++i )
{
D( printf( "add fixed:%s\n", CONV_TO_UTF8( cmpFields[i].m_Name ) ); )
D( printf( "add fixed:%s\n", CONV_TO_UTF8( cmpFields[i].GetName() ) ); )
m_FieldsBuf.push_back( cmpFields[i] );
}
......@@ -510,7 +510,7 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::InitBuffers()
{
D( printf( "add template:%s\n", CONV_TO_UTF8( it->m_Name ) ); )
fld.m_Name = it->m_Name;
fld.SetName( it->m_Name );
fld.m_Text = it->m_Value; // empty? ok too.
if( !it->m_Visible )
......@@ -520,7 +520,7 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::InitBuffers()
}
else
{
D( printf( "match template:%s\n", CONV_TO_UTF8( libField->m_Name )); )
D( printf( "match template:%s\n", CONV_TO_UTF8( libField->GetName() ) ); )
fld = *libField; // copy values from component, m_Name too
}
......@@ -532,11 +532,11 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::InitBuffers()
for( unsigned i=MANDATORY_FIELDS; i<cmpFields.size(); ++i )
{
LIB_FIELD* cmp = &cmpFields[i];
LIB_FIELD* buf = findField( cmp->m_Name );
LIB_FIELD* buf = findField( cmp->GetName() );
if( !buf )
{
D( printf( "add cmp:%s\n", CONV_TO_UTF8( cmp->m_Name )); )
D( printf( "add cmp:%s\n", CONV_TO_UTF8( cmp->GetName() ) ); )
m_FieldsBuf.push_back( *cmp );
}
}
......@@ -578,7 +578,7 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::setRowItem( int aFieldNdx, const LIB_FI
fieldListCtrl->SetItem( ndx, COLUMN_TEXT, wxEmptyString );
}
fieldListCtrl->SetItem( aFieldNdx, COLUMN_FIELD_NAME, aField.m_Name );
fieldListCtrl->SetItem( aFieldNdx, COLUMN_FIELD_NAME, aField.GetName() );
fieldListCtrl->SetItem( aFieldNdx, COLUMN_TEXT, aField.m_Text );
// recompute the column widths here, after setting texts
......@@ -629,17 +629,19 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::copySelectedFieldToPanel()
// Field names have become more important than field ids, so we cannot
// mangle the names in the buffer but we can do so in the panel.
if( field.m_FieldId == VALUE )
{ // This field is the lib name and the default value when loading this component in schematic
// The value is now not editable here (in this dialog) because changing it is equivalent to create
// a new component or alias. This is handles in libedir, not in this dialog.
fieldNameTextCtrl->SetValue( field.m_Name + wxT( " / " ) + _( "Chip Name" ) );
if( field.GetId() == VALUE )
{
// This field is the lib name and the default value when loading this component in
// schematic. The value is now not editable here (in this dialog) because changing
// it is equivalent to create a new component or alias. This is handles in libedir,
// not in this dialog.
fieldNameTextCtrl->SetValue( field.GetName() + wxT( " / " ) + _( "Chip Name" ) );
fieldValueTextCtrl->Enable( false );
}
else
{
fieldValueTextCtrl->Enable( true );
fieldNameTextCtrl->SetValue( field.m_Name );
fieldNameTextCtrl->SetValue( field.GetName() );
}
// if fieldNdx == REFERENCE, VALUE, FOOTPRINT, or DATASHEET, then disable field name editing
......@@ -731,8 +733,8 @@ bool DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::copyPanelToSelectedField()
// FieldNameTextCtrl has a tricked value in it for VALUE index, do not copy it back.
// It has the "Chip Name" appended.
if( field.m_FieldId >= MANDATORY_FIELDS )
field.m_Name = fieldNameTextCtrl->GetValue();
if( field.GetId() >= MANDATORY_FIELDS )
field.SetName( fieldNameTextCtrl->GetValue() );
setRowItem( fieldNdx, field ); // update fieldListCtrl
......
......@@ -100,6 +100,7 @@ void WinEDA_SchematicFrame::EditCmpFieldText( SCH_FIELD* Field, wxDC* DC )
SCH_COMPONENT* Cmp = (SCH_COMPONENT*) Field->GetParent();
fieldNdx = Field->m_FieldId;
if( fieldNdx == VALUE )
{
Entry = CMP_LIBRARY::FindLibraryComponent( Cmp->m_ChipName );
......
......@@ -147,10 +147,12 @@ SCH_ITEM* WinEDA_SchematicFrame::FindComponentAndItem( const wxString& component
pos = pSch->m_Pos; /* temporary: will be changed if
* the pin is found */
pin = pSch->GetPin( text_to_find );
if( pin == NULL )
break;
NotFound = FALSE;
pos += pin->m_Pos;
pos += pin->GetPosition();
break;
case 2: // find reference
......
......@@ -301,6 +301,8 @@ public:
*/
wxPoint GetPosition() const { return DoGetPosition(); }
void SetPosition( const wxPoint& aPosition ) { DoMove( aPosition ); }
/**
* Mirror the draw object along the horizontal (X) axis about a point.
*
......
......@@ -47,8 +47,7 @@ LIB_FIELD::LIB_FIELD(LIB_COMPONENT * aParent, int idfield ) :
}
LIB_FIELD::LIB_FIELD( int idfield ) :
LIB_DRAW_ITEM( COMPONENT_FIELD_DRAW_TYPE, NULL )
LIB_FIELD::LIB_FIELD( int idfield ) : LIB_DRAW_ITEM( COMPONENT_FIELD_DRAW_TYPE, NULL )
{
Init( idfield );
}
......@@ -56,14 +55,14 @@ LIB_FIELD::LIB_FIELD( int idfield ) :
LIB_FIELD::LIB_FIELD( const LIB_FIELD& field ) : LIB_DRAW_ITEM( field )
{
m_FieldId = field.m_FieldId;
m_id = field.m_id;
m_Pos = field.m_Pos;
m_Size = field.m_Size;
m_Thickness = field.m_Thickness;
m_Orient = field.m_Orient;
m_Attributs = field.m_Attributs;
m_Text = field.m_Text;
m_Name = field.m_Name;
m_name = field.m_name;
m_HJustify = field.m_HJustify;
m_VJustify = field.m_VJustify;
m_Italic = field.m_Italic;
......@@ -78,7 +77,7 @@ LIB_FIELD::~LIB_FIELD()
void LIB_FIELD::Init( int id )
{
m_FieldId = id;
m_id = id;
m_Size.x = m_Size.y = DEFAULT_SIZE_TEXT;
m_typeName = _( "Field" );
m_Orient = TEXT_ORIENT_HORIZ;
......@@ -88,7 +87,7 @@ void LIB_FIELD::Init( int id )
// 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( id );
m_name = TEMPLATE_FIELDNAME::GetDefaultFieldName( id );
}
......@@ -98,12 +97,14 @@ bool LIB_FIELD::Save( FILE* ExportFile )
wxString text = m_Text;
hjustify = 'C';
if( m_HJustify == GR_TEXT_HJUSTIFY_LEFT )
hjustify = 'L';
else if( m_HJustify == GR_TEXT_HJUSTIFY_RIGHT )
hjustify = 'R';
vjustify = 'C';
if( m_VJustify == GR_TEXT_VJUSTIFY_BOTTOM )
vjustify = 'B';
else if( m_VJustify == GR_TEXT_VJUSTIFY_TOP )
......@@ -113,7 +114,7 @@ bool LIB_FIELD::Save( FILE* ExportFile )
text = wxT( "~" );
if( fprintf( ExportFile, "F%d \"%s\" %d %d %d %c %c %c %c%c%c",
m_FieldId, CONV_TO_UTF8( text ), m_Pos.x, m_Pos.y, m_Size.x,
m_id, CONV_TO_UTF8( text ), m_Pos.x, m_Pos.y, m_Size.x,
m_Orient == 0 ? 'H' : 'V',
(m_Attributs & TEXT_NO_VISIBLE ) ? 'I' : 'V',
hjustify, vjustify,
......@@ -126,11 +127,11 @@ bool LIB_FIELD::Save( FILE* ExportFile )
* Just because default name depends on the language and can change from
* a country to an other
*/
wxString defName = TEMPLATE_FIELDNAME::GetDefaultFieldName( m_FieldId );
wxString defName = TEMPLATE_FIELDNAME::GetDefaultFieldName( m_id );
if( m_FieldId >= FIELD1 && !m_Name.IsEmpty()
&& m_Name != defName
&& fprintf( ExportFile, " \"%s\"", CONV_TO_UTF8( m_Name ) ) < 0 )
if( m_id >= FIELD1 && !m_name.IsEmpty()
&& m_name != defName
&& fprintf( ExportFile, " \"%s\"", CONV_TO_UTF8( m_name ) ) < 0 )
return false;
if( fprintf( ExportFile, "\n" ) < 0 )
......@@ -150,7 +151,7 @@ bool LIB_FIELD::Load( char* line, wxString& errorMsg )
char fieldUserName[1024];
char* text;
if( sscanf( line + 1, "%d", &m_FieldId ) != 1 || m_FieldId < 0 )
if( sscanf( line + 1, "%d", &m_id ) != 1 || m_id < 0 )
{
errorMsg = wxT( "invalid field header" );
return false;
......@@ -191,7 +192,7 @@ bool LIB_FIELD::Load( char* line, wxString& errorMsg )
if( cnt < 5 )
{
errorMsg.Printf( wxT( "field %d does not have the correct number of parameters" ),
m_FieldId );
m_id );
return false;
}
......@@ -260,17 +261,17 @@ bool LIB_FIELD::Load( char* line, wxString& errorMsg )
}
// fields in RAM must always have names.
if( m_FieldId < MANDATORY_FIELDS )
if( 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_FieldId );
m_name = TEMPLATE_FIELDNAME::GetDefaultFieldName( m_id );
}
else
{
ReadDelimitedText( fieldUserName, line, sizeof( fieldUserName ) );
m_Name = CONV_FROM_UTF8( fieldUserName );
m_name = CONV_FROM_UTF8( fieldUserName );
}
return true;
......@@ -369,13 +370,15 @@ bool LIB_FIELD::HitTest( const wxPoint& refPos )
bool LIB_FIELD::HitTest( wxPoint aPosRef, int aThreshold, const TRANSFORM& aTransform )
{
int extraCharCount = 0;
// Reference designator text has one or 2 additional character (displays
// U? or U?A)
if( m_FieldId == REFERENCE )
if( m_id == REFERENCE )
{
extraCharCount++;
m_Text.Append('?');
LIB_COMPONENT* parent = (LIB_COMPONENT*)m_Parent;
if ( parent && ( parent->GetPartCount() > 1 ) )
{
m_Text.Append('A');
......@@ -386,6 +389,7 @@ bool LIB_FIELD::HitTest( wxPoint aPosRef, int aThreshold, const TRANSFORM& aTran
wxPoint physicalpos = aTransform.TransformCoordinate( m_Pos );
wxPoint tmp = m_Pos;
m_Pos = physicalpos;
/* The text orientation may need to be flipped if the
* transformation matrix causes xy axes to be flipped.
* this simple algo works only for schematic matrix (rot 90 or/and mirror)
......@@ -405,9 +409,10 @@ bool LIB_FIELD::HitTest( wxPoint aPosRef, int aThreshold, const TRANSFORM& aTran
return hit;
}
LIB_DRAW_ITEM* LIB_FIELD::DoGenCopy()
{
LIB_FIELD* newfield = new LIB_FIELD( m_FieldId );
LIB_FIELD* newfield = new LIB_FIELD( m_id );
Copy( newfield );
......@@ -429,7 +434,7 @@ void LIB_FIELD::Copy( LIB_FIELD* Target ) const
Target->m_Orient = m_Orient;
Target->m_Attributs = m_Attributs;
Target->m_Text = m_Text;
Target->m_Name = m_Name;
Target->m_name = m_name;
Target->m_HJustify = m_HJustify;
Target->m_VJustify = m_VJustify;
Target->m_Italic = m_Italic;
......@@ -443,8 +448,8 @@ int LIB_FIELD::DoCompare( const LIB_DRAW_ITEM& other ) const
const LIB_FIELD* tmp = ( LIB_FIELD* ) &other;
if( m_FieldId != tmp->m_FieldId )
return m_FieldId - tmp->m_FieldId;
if( m_id != tmp->m_id )
return m_id - tmp->m_id;
int result = m_Text.CmpNoCase( tmp->m_Text );
......@@ -511,7 +516,7 @@ void LIB_FIELD::DoPlot( PLOTTER* plotter, const wxPoint& offset, bool fill,
*/
wxString LIB_FIELD::GetFullText( int unit )
{
if( m_FieldId != REFERENCE )
if( m_id != REFERENCE )
return m_Text;
wxString text = m_Text;
......@@ -547,7 +552,7 @@ int LIB_FIELD::GetDefaultColor()
{
int color;
switch( m_FieldId )
switch( m_id )
{
case REFERENCE:
color = ReturnLayerColor( LAYER_REFERENCEPART );
......@@ -579,11 +584,11 @@ void LIB_FIELD::Rotate()
}
wxString LIB_FIELD::GetName()
wxString LIB_FIELD::GetName() const
{
wxString name;
switch( m_FieldId )
switch( m_id )
{
case REFERENCE:
name = _( "Reference" );
......@@ -602,16 +607,30 @@ wxString LIB_FIELD::GetName()
break;
default:
if( m_Name.IsEmpty() )
name.Printf( _( "Field%d" ), m_FieldId );
if( m_name.IsEmpty() )
name.Printf( _( "Field%d" ), m_id );
else
name = m_Name;
name = m_name;
}
return name;
}
void LIB_FIELD::SetName( const wxString& aName )
{
// Mandatory field names are fixed.
if( m_id > MANDATORY_FIELDS )
return;
if( m_name != aName )
{
m_name = aName;
SetModified();
}
}
void LIB_FIELD::SetText( const wxString& aText )
{
if( aText == m_Text )
......@@ -619,7 +638,7 @@ void LIB_FIELD::SetText( const wxString& aText )
wxString oldName = m_Text;
if( m_FieldId == VALUE && m_Parent != NULL )
if( m_id == VALUE && m_Parent != NULL )
{
LIB_COMPONENT* parent = GetParent();
......@@ -729,4 +748,3 @@ void LIB_FIELD::DisplayInfo( WinEDA_DrawFrame* aFrame )
// Display field text:
aFrame->AppendMsgPanel( _( "Value" ), m_Text, BROWN );
}
......@@ -5,7 +5,6 @@
#ifndef CLASS_LIBENTRY_FIELDS_H
#define CLASS_LIBENTRY_FIELDS_H
//#include "general.h"
#include "lib_draw_item.h"
......@@ -18,6 +17,9 @@
*/
class LIB_FIELD : public LIB_DRAW_ITEM, public EDA_TextStruct
{
int m_id; ///< @see enum NumFieldType
wxString m_name; ///< Name (not the field text value itself, that is .m_Text)
wxString m_savedText; ///< Temporary storage for the string when edition.
bool m_rotate; ///< Flag to indicate a rotation occurred while editing.
bool m_updateText; ///< Flag to indicate text change occurred while editing.
......@@ -35,11 +37,6 @@ class LIB_FIELD : public LIB_DRAW_ITEM, public EDA_TextStruct
*/
void calcEdit( const wxPoint& aPosition );
public:
int m_FieldId; ///< @see enum NumFieldType
wxString m_Name; ///< Name (not the field text value itself, that is .m_Text)
public:
LIB_FIELD( int idfield = 2 );
......@@ -62,11 +59,28 @@ public:
*
* The first four field IDs are reserved and therefore always return their respective
* names. The user definable fields will return FieldN where N is the ID of the field
* when the m_Name member is empty.
* when the m_name member is empty.
*
* @return Name of the field.
*/
wxString GetName();
wxString GetName() const;
/**
* Function SetName
*
* Sets a user definable field name to \a aName.
*
* Reserved fields such as value and reference are not renamed. If the field name is
* changed, the field modified flag is set. If the field is the child of a component,
* the parent component's modified flag is also set.
*
* @param aName - User defined field name.
*/
void SetName( const wxString& aName );
int GetId() { return m_id; }
void SetId( int aId ) { m_id = aId; }
/**
* Function GetPenSize virtual pure
......@@ -133,9 +147,9 @@ public:
void operator=( const LIB_FIELD& field )
{
m_FieldId = field.m_FieldId;
m_id = field.m_id;
m_Text = field.m_Text;
m_Name = field.m_Name;
m_name = field.m_name;
m_Pos = field.m_Pos;
m_Size = field.m_Size;
m_Thickness = field.m_Thickness;
......
......@@ -134,8 +134,8 @@ static const char ** s_icons_Pins_Electrical_Type[] =
pintype_noconnect_xpm
};
#define PIN_ELECTRICAL_TYPE_CNT ( sizeof( pin_electrical_type_names ) / \
sizeof( wxString ) )
#define PIN_ELECTRICAL_TYPE_CNT ( sizeof( pin_electrical_type_names ) / sizeof( wxString ) )
const wxChar* MsgPinElectricType[] =
......@@ -162,15 +162,15 @@ extern void PlotPinSymbol( PLOTTER* plotter, const wxPoint& pos,
LIB_PIN::LIB_PIN( LIB_COMPONENT * aParent ) :
LIB_DRAW_ITEM( COMPONENT_PIN_DRAW_TYPE, aParent )
{
m_PinLen = 300; /* default Pin len */
m_Orient = PIN_RIGHT; /* Pin oprient: Up, Down, Left, Right */
m_PinShape = NONE; /* Pin shape, bitwise. */
m_PinType = PIN_UNSPECIFIED; /* electrical type of pin */
m_Attributs = 0; /* bit 0 != 0: pin invisible */
m_PinNum = 0; /* pin number ( i.e. 4 codes ASCII ) */
m_length = 300; /* default Pin len */
m_orientation = PIN_RIGHT; /* Pin orient: Up, Down, Left, Right */
m_shape = NONE; /* Pin shape, bitwise. */
m_type = PIN_UNSPECIFIED; /* electrical type of pin */
m_attributes = 0; /* bit 0 != 0: pin invisible */
m_number = 0; /* pin number ( i.e. 4 codes ASCII ) */
m_PinNumSize = 50;
m_PinNameSize = 50; /* Default size for pin name and num */
m_Width = 0;
m_width = 0;
m_typeName = _( "Pin" );
m_PinNumShapeOpt = 0;
m_PinNameShapeOpt = 0;
......@@ -181,33 +181,33 @@ LIB_PIN::LIB_PIN( LIB_COMPONENT * aParent ) :
LIB_PIN::LIB_PIN( const LIB_PIN& pin ) : LIB_DRAW_ITEM( pin )
{
m_Pos = pin.m_Pos;
m_PinLen = pin.m_PinLen;
m_Orient = pin.m_Orient;
m_PinShape = pin.m_PinShape;
m_PinType = pin.m_PinType;
m_Attributs = pin.m_Attributs;
m_PinNum = pin.m_PinNum;
m_position = pin.m_position;
m_length = pin.m_length;
m_orientation = pin.m_orientation;
m_shape = pin.m_shape;
m_type = pin.m_type;
m_attributes = pin.m_attributes;
m_number = pin.m_number;
m_PinNumSize = pin.m_PinNumSize;
m_PinNameSize = pin.m_PinNameSize;
m_PinNumShapeOpt = pin.m_PinNumShapeOpt;
m_PinNameShapeOpt = pin.m_PinNameShapeOpt;
m_PinNumPositionOpt = pin.m_PinNumPositionOpt;
m_PinNamePositionOpt = pin.m_PinNamePositionOpt;
m_Width = pin.m_Width;
m_PinName = pin.m_PinName;
m_width = pin.m_width;
m_name = pin.m_name;
}
void LIB_PIN::SetName( const wxString& name )
void LIB_PIN::SetName( const wxString& aName )
{
wxString tmp = ( name.IsEmpty() ) ? wxT( "~" ) : name;
wxString tmp = ( aName.IsEmpty() ) ? wxT( "~" ) : aName;
tmp.Replace( wxT( " " ), wxT( "_" ) );
if( m_PinName != tmp )
if( m_name != tmp )
{
m_PinName = tmp;
m_Flags |= IS_CHANGED;
m_name = tmp;
SetModified();
}
if( GetParent() == NULL )
......@@ -218,12 +218,11 @@ void LIB_PIN::SetName( const wxString& name )
for( size_t i = 0; i < pinList.size(); i++ )
{
if( ( pinList[i]->m_Flags & IS_LINKED ) == 0
|| pinList[i]->m_PinName == m_PinName )
if( ( pinList[i]->m_Flags & IS_LINKED ) == 0 || pinList[i]->m_name == m_name )
continue;
pinList[i]->m_PinName = m_PinName;
pinList[i]->m_Flags |= IS_CHANGED;
pinList[i]->m_name = m_name;
SetModified();
}
}
......@@ -233,7 +232,7 @@ void LIB_PIN::SetNameTextSize( int size )
if( size != m_PinNameSize )
{
m_PinNameSize = size;
m_Flags |= IS_CHANGED;
SetModified();
}
if( GetParent() == NULL )
......@@ -244,12 +243,11 @@ void LIB_PIN::SetNameTextSize( int size )
for( size_t i = 0; i < pinList.size(); i++ )
{
if( ( pinList[i]->m_Flags & IS_LINKED ) == 0
|| pinList[i]->m_PinNameSize == size )
if( ( pinList[i]->m_Flags & IS_LINKED ) == 0 || pinList[i]->m_PinNameSize == size )
continue;
pinList[i]->m_PinNameSize = size;
pinList[i]->m_Flags |= IS_CHANGED;
SetModified();
}
}
......@@ -258,10 +256,10 @@ void LIB_PIN::SetNumber( const wxString& number )
{
wxString tmp = ( number.IsEmpty() ) ? wxT( "~" ) : number;
tmp.Replace( wxT( " " ), wxT( "_" ) );
long oldNumber = m_PinNum;
long oldNumber = m_number;
SetPinNumFromString( tmp );
if( m_PinNum != oldNumber )
if( m_number != oldNumber )
{
m_Flags |= IS_CHANGED;
}
......@@ -277,7 +275,7 @@ void LIB_PIN::SetNumberTextSize( int size )
if( size != m_PinNumSize )
{
m_PinNumSize = size;
m_Flags |= IS_CHANGED;
SetModified();
}
if( GetParent() == NULL )
......@@ -288,22 +286,21 @@ void LIB_PIN::SetNumberTextSize( int size )
for( size_t i = 0; i < pinList.size(); i++ )
{
if( ( pinList[i]->m_Flags & IS_LINKED ) == 0
|| pinList[i]->m_PinNumSize == size )
if( ( pinList[i]->m_Flags & IS_LINKED ) == 0 || pinList[i]->m_PinNumSize == size )
continue;
pinList[i]->m_PinNumSize = size;
pinList[i]->m_Flags |= IS_CHANGED;
SetModified();
}
}
void LIB_PIN::SetOrientation( int orientation )
{
if( m_Orient != orientation )
if( m_orientation != orientation )
{
m_Orient = orientation;
m_Flags |= IS_CHANGED;
m_orientation = orientation;
SetModified();
}
if( GetParent() == NULL )
......@@ -314,22 +311,21 @@ void LIB_PIN::SetOrientation( int orientation )
for( size_t i = 0; i < pinList.size(); i++ )
{
if( ( pinList[i]->m_Flags & IS_LINKED ) == 0
|| pinList[i]->m_Orient == orientation )
if( ( pinList[i]->m_Flags & IS_LINKED ) == 0 || pinList[i]->m_orientation == orientation )
continue;
pinList[i]->m_Orient = orientation;
pinList[i]->m_Flags |= IS_CHANGED;
pinList[i]->m_orientation = orientation;
SetModified();
}
}
void LIB_PIN::SetDrawStyle( int style )
void LIB_PIN::SetShape( int aShape )
{
if( m_PinShape != style )
if( m_shape != aShape )
{
m_PinShape = style;
m_Flags |= IS_CHANGED;
m_shape = aShape;
SetModified();
}
if( GetParent() == NULL )
......@@ -340,22 +336,21 @@ void LIB_PIN::SetDrawStyle( int style )
for( size_t i = 0; i < pinList.size(); i++ )
{
if( ( pinList[i]->m_Flags & IS_LINKED ) == 0
|| pinList[i]->m_PinShape == style )
if( ( pinList[i]->m_Flags & IS_LINKED ) == 0 || pinList[i]->m_shape == aShape )
continue;
pinList[i]->m_PinShape = style;
pinList[i]->m_Flags |= IS_CHANGED;
pinList[i]->m_shape = aShape;
SetModified();
}
}
void LIB_PIN::SetElectricalType( int type )
void LIB_PIN::SetType( int aType )
{
if( m_PinType != type )
if( m_type != aType )
{
m_PinType = type;
m_Flags |= IS_CHANGED;
m_type = aType;
SetModified();
}
if( GetParent() == NULL )
......@@ -366,22 +361,21 @@ void LIB_PIN::SetElectricalType( int type )
for( size_t i = 0; i < pinList.size(); i++ )
{
if( ( pinList[i]->m_Flags & IS_LINKED ) == 0
|| pinList[i]->m_PinType == type )
if( ( pinList[i]->m_Flags & IS_LINKED ) == 0 || pinList[i]->m_type == aType )
continue;
pinList[i]->m_PinType = type;
pinList[i]->m_Flags |= IS_CHANGED;
pinList[i]->m_type = aType;
SetModified();
}
}
void LIB_PIN::SetLength( int length )
{
if( m_PinLen != length )
if( m_length != length )
{
m_PinLen = length;
m_Flags |= IS_CHANGED;
m_length = length;
SetModified();
}
if( GetParent() == NULL )
......@@ -394,11 +388,11 @@ void LIB_PIN::SetLength( int length )
{
if( ( pinList[i]->m_Flags & IS_LINKED ) == 0
|| pinList[i]->m_Convert != m_Convert
|| pinList[i]->m_PinLen == length )
|| pinList[i]->m_length == length )
continue;
pinList[i]->m_PinLen = length;
pinList[i]->m_Flags |= IS_CHANGED;
pinList[i]->m_length = length;
SetModified();
}
}
......@@ -409,7 +403,7 @@ void LIB_PIN::SetPartNumber( int part )
return;
m_Unit = part;
m_Flags |= IS_CHANGED;
SetModified();
if( m_Unit == 0 )
{
......@@ -423,8 +417,8 @@ void LIB_PIN::SetPartNumber( int part )
if( pin->m_Flags == 0 || pin == this
|| ( m_Convert && ( m_Convert != pin->m_Convert ) )
|| ( m_Pos != pin->m_Pos )
|| ( pin->m_Orient != m_Orient ) )
|| ( m_position != pin->m_position )
|| ( pin->m_orientation != m_orientation ) )
continue;
GetParent()->RemoveDrawItem( (LIB_DRAW_ITEM*) pin );
......@@ -454,8 +448,8 @@ void LIB_PIN::SetConversion( int style )
if( ( pin->m_Flags & IS_LINKED ) == 0
|| ( pin == this )
|| ( m_Unit && ( m_Unit != pin->m_Unit ) )
|| ( m_Pos != pin->m_Pos )
|| ( pin->m_Orient != m_Orient ) )
|| ( m_position != pin->m_position )
|| ( pin->m_orientation != m_orientation ) )
continue;
GetParent()->RemoveDrawItem( (LIB_DRAW_ITEM*) pin );
......@@ -470,11 +464,11 @@ void LIB_PIN::SetVisible( bool visible )
return;
if( visible )
m_Attributs &= ~PINNOTDRAW;
m_attributes &= ~PINNOTDRAW;
else
m_Attributs |= PINNOTDRAW;
m_attributes |= PINNOTDRAW;
m_Flags |= IS_CHANGED;
SetModified();
if( GetParent() == NULL )
return;
......@@ -484,16 +478,15 @@ void LIB_PIN::SetVisible( bool visible )
for( size_t i = 0; i < pinList.size(); i++ )
{
if( ( pinList[i]->m_Flags & IS_LINKED ) == 0
|| pinList[i]->IsVisible() == visible )
if( ( pinList[i]->m_Flags & IS_LINKED ) == 0 || pinList[i]->IsVisible() == visible )
continue;
if( visible )
pinList[i]->m_Attributs &= ~PINNOTDRAW;
pinList[i]->m_attributes &= ~PINNOTDRAW;
else
pinList[i]->m_Attributs |= PINNOTDRAW;
pinList[i]->m_attributes |= PINNOTDRAW;
pinList[i]->m_Flags |= IS_CHANGED;
SetModified();
}
}
......@@ -512,8 +505,8 @@ void LIB_PIN::EnableEditMode( bool enable, bool editPinByPin )
if( pinList[i] == this )
continue;
if( ( pinList[i]->m_Pos == m_Pos )
&& ( pinList[i]->m_Orient == m_Orient )
if( ( pinList[i]->m_position == m_position )
&& ( pinList[i]->m_orientation == m_orientation )
&& ( !( m_Flags & IS_NEW ) )
&& editPinByPin == false
&& enable )
......@@ -532,7 +525,7 @@ void LIB_PIN::EnableEditMode( bool enable, bool editPinByPin )
*/
bool LIB_PIN::HitTest( const wxPoint& aRefPos )
{
int mindist = m_Width ? m_Width / 2 : g_DrawDefaultLineThickness / 2;
int mindist = m_width ? m_width / 2 : g_DrawDefaultLineThickness / 2;
// Have a minimal tolerance for hit test
if( mindist < 3 )
......@@ -551,7 +544,7 @@ bool LIB_PIN::HitTest( const wxPoint& aRefPos )
*/
bool LIB_PIN::HitTest( wxPoint aRefPos, int aThreshold, const TRANSFORM& aTransform )
{
wxPoint pinPos = aTransform.TransformCoordinate( m_Pos );
wxPoint pinPos = aTransform.TransformCoordinate( m_position );
wxPoint pinEnd = aTransform.TransformCoordinate( ReturnPinEndPoint() );
return TestSegmentHit( aRefPos, pinPos, pinEnd, aThreshold );
......@@ -563,7 +556,7 @@ bool LIB_PIN::Save( FILE* ExportFile )
wxString StringPinNum;
int Etype;
switch( m_PinType )
switch( m_type )
{
default:
case PIN_INPUT:
......@@ -616,9 +609,9 @@ bool LIB_PIN::Save( FILE* ExportFile )
if( StringPinNum.IsEmpty() )
StringPinNum = wxT( "~" );
if( !m_PinName.IsEmpty() )
if( !m_name.IsEmpty() )
{
if( fprintf( ExportFile, "X %s", CONV_TO_UTF8( m_PinName ) ) < 0 )
if( fprintf( ExportFile, "X %s", CONV_TO_UTF8( m_name ) ) < 0 )
return false;
}
else
......@@ -628,35 +621,35 @@ bool LIB_PIN::Save( FILE* ExportFile )
}
if( fprintf( ExportFile, " %s %d %d %d %c %d %d %d %d %c",
CONV_TO_UTF8( StringPinNum ), m_Pos.x, m_Pos.y,
(int) m_PinLen, (int) m_Orient, m_PinNumSize, m_PinNameSize,
CONV_TO_UTF8( StringPinNum ), m_position.x, m_position.y,
(int) m_length, (int) m_orientation, m_PinNumSize, m_PinNameSize,
m_Unit, m_Convert, Etype ) < 0 )
return false;
if( ( m_PinShape ) || ( m_Attributs & PINNOTDRAW ) )
if( ( m_shape ) || ( m_attributes & PINNOTDRAW ) )
{
if( fprintf( ExportFile, " " ) < 0 )
return false;
}
if( m_Attributs & PINNOTDRAW
if( m_attributes & PINNOTDRAW
&& fprintf( ExportFile, "N" ) < 0 )
return false;
if( m_PinShape & INVERT
if( m_shape & INVERT
&& fprintf( ExportFile, "I" ) < 0 )
return false;
if( m_PinShape & CLOCK
if( m_shape & CLOCK
&& fprintf( ExportFile, "C" ) < 0 )
return false;
if( m_PinShape & LOWLEVEL_IN
if( m_shape & LOWLEVEL_IN
&& fprintf( ExportFile, "L" ) < 0 )
return false;
if( m_PinShape & LOWLEVEL_OUT
if( m_shape & LOWLEVEL_OUT
&& fprintf( ExportFile, "V" ) < 0 )
return false;
if( m_PinShape & CLOCK_FALL
if( m_shape & CLOCK_FALL
&& fprintf( ExportFile, "F" ) < 0 )
return false;
if( m_PinShape & NONLOGIC
if( m_shape & NONLOGIC
&& fprintf( ExportFile, "X" ) < 0 )
return false;
......@@ -681,7 +674,7 @@ bool LIB_PIN::Load( char* line, wxString& errorMsg )
*pinAttrs = 0;
i = sscanf( line + 2, "%s %s %d %d %d %s %d %d %d %d %s %s", pinName,
pinNum, &m_Pos.x, &m_Pos.y, &m_PinLen, pinOrient, &m_PinNumSize,
pinNum, &m_position.x, &m_position.y, &m_length, pinOrient, &m_PinNumSize,
&m_PinNameSize, &m_Unit, &m_Convert, pinType, pinAttrs );
if( i < 11 )
......@@ -690,54 +683,54 @@ bool LIB_PIN::Load( char* line, wxString& errorMsg )
return false;
}
m_Orient = pinOrient[0] & 255;
strncpy( (char*) &m_PinNum, pinNum, 4 );
m_PinName = CONV_FROM_UTF8( pinName );
m_orientation = pinOrient[0] & 255;
strncpy( (char*) &m_number, pinNum, 4 );
m_name = CONV_FROM_UTF8( pinName );
switch( *pinType & 255 )
{
case 'I':
m_PinType = PIN_INPUT;
m_type = PIN_INPUT;
break;
case 'O':
m_PinType = PIN_OUTPUT;
m_type = PIN_OUTPUT;
break;
case 'B':
m_PinType = PIN_BIDI;
m_type = PIN_BIDI;
break;
case 'T':
m_PinType = PIN_TRISTATE;
m_type = PIN_TRISTATE;
break;
case 'P':
m_PinType = PIN_PASSIVE;
m_type = PIN_PASSIVE;
break;
case 'U':
m_PinType = PIN_UNSPECIFIED;
m_type = PIN_UNSPECIFIED;
break;
case 'W':
m_PinType = PIN_POWER_IN;
m_type = PIN_POWER_IN;
break;
case 'w':
m_PinType = PIN_POWER_OUT;
m_type = PIN_POWER_OUT;
break;
case 'C':
m_PinType = PIN_OPENCOLLECTOR;
m_type = PIN_OPENCOLLECTOR;
break;
case 'E':
m_PinType = PIN_OPENEMITTER;
m_type = PIN_OPENEMITTER;
break;
case 'N':
m_PinType = PIN_NC;
m_type = PIN_NC;
break;
default:
......@@ -755,31 +748,31 @@ bool LIB_PIN::Load( char* line, wxString& errorMsg )
break;
case 'N':
m_Attributs |= PINNOTDRAW;
m_attributes |= PINNOTDRAW;
break;
case 'I':
m_PinShape |= INVERT;
m_shape |= INVERT;
break;
case 'C':
m_PinShape |= CLOCK;
m_shape |= CLOCK;
break;
case 'L':
m_PinShape |= LOWLEVEL_IN;
m_shape |= LOWLEVEL_IN;
break;
case 'V':
m_PinShape |= LOWLEVEL_OUT;
m_shape |= LOWLEVEL_OUT;
break;
case 'F':
m_PinShape |= CLOCK_FALL;
m_shape |= CLOCK_FALL;
break;
case 'X':
m_PinShape |= NONLOGIC;
m_shape |= NONLOGIC;
break;
default:
......@@ -799,7 +792,7 @@ bool LIB_PIN::Load( char* line, wxString& errorMsg )
*/
int LIB_PIN::GetPenSize()
{
return ( m_Width == 0 ) ? g_DrawDefaultLineThickness : m_Width;
return ( m_width == 0 ) ? g_DrawDefaultLineThickness : m_width;
}
......@@ -815,7 +808,7 @@ void LIB_PIN::drawGraphic( WinEDA_DrawPanel* aPanel,
// in g_InvisibleItemColor because we must see them.
WinEDA_SchematicFrame* frame = (WinEDA_SchematicFrame*) wxGetApp().GetTopWindow();
if( ( m_Attributs & PINNOTDRAW ) )
if( m_attributes & PINNOTDRAW )
{
if( frame->m_LibeditFrame && frame->m_LibeditFrame->IsActive() )
aColor = g_InvisibleItemColor;
......@@ -833,7 +826,7 @@ void LIB_PIN::drawGraphic( WinEDA_DrawPanel* aPanel,
int orient = ReturnPinDrawOrient( aTransform );
/* Calculate the pin position */
wxPoint pos1 = aTransform.TransformCoordinate( m_Pos ) + aOffset;
wxPoint pos1 = aTransform.TransformCoordinate( m_position ) + aOffset;
/* Drawing from the pin and the special symbol combination */
DrawPinSymbol( aPanel, aDC, pos1, orient, aDrawMode, aColor );
......@@ -871,7 +864,7 @@ void LIB_PIN::DrawPinSymbol( WinEDA_DrawPanel* aPanel,
int MapX1, MapY1, x1, y1;
int color;
int width = GetPenSize( );
int posX = aPinPos.x, posY = aPinPos.y, len = m_PinLen;
int posX = aPinPos.x, posY = aPinPos.y, len = m_length;
BASE_SCREEN* screen = aPanel->GetScreen();
color = ReturnLayerColor( LAYER_PIN );
......@@ -913,7 +906,7 @@ void LIB_PIN::DrawPinSymbol( WinEDA_DrawPanel* aPanel,
break;
}
if( m_PinShape & INVERT )
if( m_shape & INVERT )
{
GRCircle( &aPanel->m_ClipBox, aDC, MapX1 * INVERT_PIN_RADIUS + x1,
MapY1 * INVERT_PIN_RADIUS + y1,
......@@ -923,7 +916,7 @@ void LIB_PIN::DrawPinSymbol( WinEDA_DrawPanel* aPanel,
MapY1 * INVERT_PIN_RADIUS * 2 + y1 );
GRLineTo( &aPanel->m_ClipBox, aDC, posX, posY, width, color );
}
else if( m_PinShape & CLOCK_FALL ) /* an alternative for Inverted Clock */
else if( m_shape & CLOCK_FALL ) /* an alternative for Inverted Clock */
{
GRMoveTo( x1 + MapY1 * CLOCK_PIN_DIM,
y1 - MapX1 * CLOCK_PIN_DIM );
......@@ -949,7 +942,7 @@ void LIB_PIN::DrawPinSymbol( WinEDA_DrawPanel* aPanel,
GRLineTo( &aPanel->m_ClipBox, aDC, posX, posY, width, color );
}
if( m_PinShape & CLOCK )
if( m_shape & CLOCK )
{
if( MapY1 == 0 ) /* MapX1 = +- 1 */
{
......@@ -985,7 +978,7 @@ void LIB_PIN::DrawPinSymbol( WinEDA_DrawPanel* aPanel,
}
}
if( m_PinShape & LOWLEVEL_IN ) /* IEEE symbol "Active Low Input" */
if( m_shape & LOWLEVEL_IN ) /* IEEE symbol "Active Low Input" */
{
if( MapY1 == 0 ) /* MapX1 = +- 1 */
{
......@@ -1008,7 +1001,7 @@ void LIB_PIN::DrawPinSymbol( WinEDA_DrawPanel* aPanel,
}
if( m_PinShape & LOWLEVEL_OUT ) /* IEEE symbol "Active Low Output" */
if( m_shape & LOWLEVEL_OUT ) /* IEEE symbol "Active Low Output" */
{
if( MapY1 == 0 ) /* MapX1 = +- 1 */
{
......@@ -1031,7 +1024,7 @@ void LIB_PIN::DrawPinSymbol( WinEDA_DrawPanel* aPanel,
color );
}
}
else if( m_PinShape & NONLOGIC ) /* NonLogic pin symbol */
else if( m_shape & NONLOGIC ) /* NonLogic pin symbol */
{
GRMoveTo( x1 - (MapX1 + MapY1) * NONLOGIC_PIN_DIM,
y1 - (MapY1 - MapX1) * NONLOGIC_PIN_DIM );
......@@ -1054,7 +1047,7 @@ void LIB_PIN::DrawPinSymbol( WinEDA_DrawPanel* aPanel,
/* Draw the pin end target (active end of the pin)
*/
#define NCSYMB_PIN_DIM TARGET_PIN_DIAM
if( m_PinType == PIN_NC ) // Draw a N.C. symbol
if( m_type == PIN_NC ) // Draw a N.C. symbol
{
GRLine( &aPanel->m_ClipBox, aDC,
posX-NCSYMB_PIN_DIM, posY-NCSYMB_PIN_DIM,
......@@ -1068,10 +1061,9 @@ void LIB_PIN::DrawPinSymbol( WinEDA_DrawPanel* aPanel,
/* Draw but do not print the pin end target 1 pixel width
*/
else if( !screen->m_IsPrinting )
GRCircle( &aPanel->m_ClipBox,
aDC, posX, posY,
TARGET_PIN_DIAM,
0, color );
{
GRCircle( &aPanel->m_ClipBox, aDC, posX, posY, TARGET_PIN_DIAM, 0, color );
}
}
......@@ -1118,24 +1110,29 @@ void LIB_PIN::DrawPinTexts( WinEDA_DrawPanel* panel,
/* Create the pin num string */
ReturnPinStringNum( StringPinNum );
x1 = pin_pos.x; y1 = pin_pos.y;
x1 = pin_pos.x;
y1 = pin_pos.y;
switch( orient )
{
case PIN_UP:
y1 -= m_PinLen; break;
y1 -= m_length;
break;
case PIN_DOWN:
y1 += m_PinLen; break;
y1 += m_length;
break;
case PIN_LEFT:
x1 -= m_PinLen; break;
x1 -= m_length;
break;
case PIN_RIGHT:
x1 += m_PinLen; break;
x1 += m_length;
break;
}
if( m_PinName.IsEmpty() )
if( m_name.IsEmpty() )
DrawPinName = FALSE;
if( TextInside ) /* Draw the text inside, but the pin numbers outside. */
......@@ -1149,7 +1146,7 @@ void LIB_PIN::DrawPinTexts( WinEDA_DrawPanel* panel,
{
x = x1 + TextInside;
DrawGraphicText( panel, DC, wxPoint( x, y1 ), NameColor,
m_PinName,
m_name,
TEXT_ORIENT_HORIZ,
PinNameSize,
GR_TEXT_HJUSTIFY_LEFT,
......@@ -1160,7 +1157,7 @@ void LIB_PIN::DrawPinTexts( WinEDA_DrawPanel* panel,
{
x = x1 - TextInside;
DrawGraphicText( panel, DC, wxPoint( x, y1 ), NameColor,
m_PinName,
m_name,
TEXT_ORIENT_HORIZ,
PinNameSize,
GR_TEXT_HJUSTIFY_RIGHT,
......@@ -1190,7 +1187,7 @@ void LIB_PIN::DrawPinTexts( WinEDA_DrawPanel* panel,
if( DrawPinName )
DrawGraphicText( panel, DC, wxPoint( x1, y ), NameColor,
m_PinName,
m_name,
TEXT_ORIENT_VERT, PinNameSize,
GR_TEXT_HJUSTIFY_RIGHT,
GR_TEXT_VJUSTIFY_CENTER, nameLineWidth,
......@@ -1211,7 +1208,7 @@ void LIB_PIN::DrawPinTexts( WinEDA_DrawPanel* panel,
if( DrawPinName )
DrawGraphicText( panel, DC, wxPoint( x1, y ), NameColor,
m_PinName,
m_name,
TEXT_ORIENT_VERT, PinNameSize,
GR_TEXT_HJUSTIFY_LEFT,
GR_TEXT_VJUSTIFY_CENTER, nameLineWidth,
......@@ -1237,7 +1234,7 @@ void LIB_PIN::DrawPinTexts( WinEDA_DrawPanel* panel,
{
x = (x1 + pin_pos.x) / 2;
DrawGraphicText( panel, DC, wxPoint( x, y1 - TXTMARGE ),
NameColor, m_PinName,
NameColor, m_name,
TEXT_ORIENT_HORIZ, PinNameSize,
GR_TEXT_HJUSTIFY_CENTER,
GR_TEXT_VJUSTIFY_BOTTOM, nameLineWidth,
......@@ -1260,7 +1257,7 @@ void LIB_PIN::DrawPinTexts( WinEDA_DrawPanel* panel,
{
y = (y1 + pin_pos.y) / 2;
DrawGraphicText( panel, DC, wxPoint( x1 - TXTMARGE, y ),
NameColor, m_PinName,
NameColor, m_name,
TEXT_ORIENT_VERT, PinNameSize,
GR_TEXT_HJUSTIFY_CENTER,
GR_TEXT_VJUSTIFY_BOTTOM, nameLineWidth,
......@@ -1317,23 +1314,23 @@ void LIB_PIN::PlotPinTexts( PLOTTER *plotter,
switch( orient )
{
case PIN_UP:
y1 -= m_PinLen;
y1 -= m_length;
break;
case PIN_DOWN:
y1 += m_PinLen;
y1 += m_length;
break;
case PIN_LEFT:
x1 -= m_PinLen;
x1 -= m_length;
break;
case PIN_RIGHT:
x1 += m_PinLen;
x1 += m_length;
break;
}
if( m_PinName.IsEmpty() )
if( m_name.IsEmpty() )
DrawPinName = FALSE;
/* Draw the text inside, but the pin numbers outside. */
......@@ -1347,7 +1344,7 @@ void LIB_PIN::PlotPinTexts( PLOTTER *plotter,
{
x = x1 + TextInside;
plotter->text( wxPoint( x, y1 ), NameColor,
m_PinName,
m_name,
TEXT_ORIENT_HORIZ,
PinNameSize,
GR_TEXT_HJUSTIFY_LEFT,
......@@ -1360,7 +1357,7 @@ void LIB_PIN::PlotPinTexts( PLOTTER *plotter,
if( DrawPinName )
plotter->text( wxPoint( x, y1 ),
NameColor, m_PinName, TEXT_ORIENT_HORIZ,
NameColor, m_name, TEXT_ORIENT_HORIZ,
PinNameSize,
GR_TEXT_HJUSTIFY_RIGHT,
GR_TEXT_VJUSTIFY_CENTER,
......@@ -1386,7 +1383,7 @@ void LIB_PIN::PlotPinTexts( PLOTTER *plotter,
if( DrawPinName )
plotter->text( wxPoint( x1, y ), NameColor,
m_PinName,
m_name,
TEXT_ORIENT_VERT, PinNameSize,
GR_TEXT_HJUSTIFY_RIGHT,
GR_TEXT_VJUSTIFY_CENTER,
......@@ -1407,7 +1404,7 @@ void LIB_PIN::PlotPinTexts( PLOTTER *plotter,
if( DrawPinName )
plotter->text( wxPoint( x1, y ), NameColor,
m_PinName,
m_name,
TEXT_ORIENT_VERT, PinNameSize,
GR_TEXT_HJUSTIFY_LEFT,
GR_TEXT_VJUSTIFY_CENTER,
......@@ -1433,7 +1430,7 @@ void LIB_PIN::PlotPinTexts( PLOTTER *plotter,
{
x = (x1 + pin_pos.x) / 2;
plotter->text( wxPoint( x, y1 - TXTMARGE ),
NameColor, m_PinName,
NameColor, m_name,
TEXT_ORIENT_HORIZ, PinNameSize,
GR_TEXT_HJUSTIFY_CENTER,
GR_TEXT_VJUSTIFY_BOTTOM,
......@@ -1456,7 +1453,7 @@ void LIB_PIN::PlotPinTexts( PLOTTER *plotter,
{
y = ( y1 + pin_pos.y ) / 2;
plotter->text( wxPoint( x1 - TXTMARGE, y ),
NameColor, m_PinName,
NameColor, m_name,
TEXT_ORIENT_VERT, PinNameSize,
GR_TEXT_HJUSTIFY_CENTER,
GR_TEXT_VJUSTIFY_BOTTOM,
......@@ -1480,24 +1477,24 @@ void LIB_PIN::PlotPinTexts( PLOTTER *plotter,
/* return the pin end position, for a component in normal orient */
wxPoint LIB_PIN::ReturnPinEndPoint() const
{
wxPoint pos = m_Pos;
wxPoint pos = m_position;
switch( m_Orient )
switch( m_orientation )
{
case PIN_UP:
pos.y += m_PinLen;
pos.y += m_length;
break;
case PIN_DOWN:
pos.y -= m_PinLen;
pos.y -= m_length;
break;
case PIN_LEFT:
pos.x -= m_PinLen;
pos.x -= m_length;
break;
case PIN_RIGHT:
pos.x += m_PinLen;
pos.x += m_length;
break;
}
......@@ -1514,9 +1511,9 @@ wxPoint LIB_PIN::ReturnPinEndPoint() const
int LIB_PIN::ReturnPinDrawOrient( const TRANSFORM& aTransform )
{
int orient;
wxPoint end; // position of a end pin starting at 0,0 according to its orientation, lenght = 1
wxPoint end; // position of pin end starting at 0,0 according to its orientation, length = 1
switch( m_Orient )
switch( m_orientation )
{
case PIN_UP:
end.y = 1;
......@@ -1565,7 +1562,7 @@ int LIB_PIN::ReturnPinDrawOrient( const TRANSFORM& aTransform )
*/
void LIB_PIN::ReturnPinStringNum( wxString& aStringBuffer ) const
{
aStringBuffer = ReturnPinStringNum( m_PinNum );
aStringBuffer = ReturnPinStringNum( m_number );
}
......@@ -1610,7 +1607,7 @@ void LIB_PIN::SetPinNumFromString( wxString& buffer )
ascii_buf[ii] &= 0xFF;
}
strncpy( (char*) &m_PinNum, ascii_buf, 4 );
strncpy( (char*) &m_number, ascii_buf, 4 );
}
......@@ -1618,13 +1615,13 @@ LIB_DRAW_ITEM* LIB_PIN::DoGenCopy()
{
LIB_PIN* newpin = new LIB_PIN( GetParent() );
newpin->m_Pos = m_Pos;
newpin->m_PinLen = m_PinLen;
newpin->m_Orient = m_Orient;
newpin->m_PinShape = m_PinShape;
newpin->m_PinType = m_PinType;
newpin->m_Attributs = m_Attributs;
newpin->m_PinNum = m_PinNum;
newpin->m_position = m_position;
newpin->m_length = m_length;
newpin->m_orientation = m_orientation;
newpin->m_shape = m_shape;
newpin->m_type = m_type;
newpin->m_attributes = m_attributes;
newpin->m_number = m_number;
newpin->m_PinNumSize = m_PinNumSize;
newpin->m_PinNameSize = m_PinNameSize;
newpin->m_PinNumShapeOpt = m_PinNumShapeOpt;
......@@ -1634,8 +1631,8 @@ LIB_DRAW_ITEM* LIB_PIN::DoGenCopy()
newpin->m_Unit = m_Unit;
newpin->m_Convert = m_Convert;
newpin->m_Flags = m_Flags;
newpin->m_Width = m_Width;
newpin->m_PinName = m_PinName;
newpin->m_width = m_width;
newpin->m_name = m_name;
return (LIB_DRAW_ITEM*) newpin;
}
......@@ -1647,19 +1644,19 @@ int LIB_PIN::DoCompare( const LIB_DRAW_ITEM& other ) const
const LIB_PIN* tmp = ( LIB_PIN* ) &other;
if( m_PinNum != tmp->m_PinNum )
return m_PinNum - tmp->m_PinNum;
if( m_number != tmp->m_number )
return m_number - tmp->m_number;
int result = m_PinName.CmpNoCase( tmp->m_PinName );
int result = m_name.CmpNoCase( tmp->m_name );
if( result != 0 )
return result;
if( m_Pos.x != tmp->m_Pos.x )
return m_Pos.x - tmp->m_Pos.x;
if( m_position.x != tmp->m_position.x )
return m_position.x - tmp->m_position.x;
if( m_Pos.y != tmp->m_Pos.y )
return m_Pos.y - tmp->m_Pos.y;
if( m_position.y != tmp->m_position.y )
return m_position.y - tmp->m_position.y;
return 0;
}
......@@ -1667,7 +1664,7 @@ int LIB_PIN::DoCompare( const LIB_DRAW_ITEM& other ) const
void LIB_PIN::DoOffset( const wxPoint& offset )
{
m_Pos += offset;
m_position += offset;
}
......@@ -1675,47 +1672,61 @@ bool LIB_PIN::DoTestInside( EDA_Rect& rect ) const
{
wxPoint end = ReturnPinEndPoint();
return rect.Inside( m_Pos.x, -m_Pos.y ) || rect.Inside( end.x, -end.y );
return rect.Inside( m_position.x, -m_position.y ) || rect.Inside( end.x, -end.y );
}
void LIB_PIN::DoMove( const wxPoint& newPosition )
{
m_Pos = newPosition;
if( m_position != newPosition )
{
m_position = newPosition;
SetModified();
}
}
void LIB_PIN::DoMirrorHorizontal( const wxPoint& center )
{
m_Pos.x -= center.x;
m_Pos.x *= -1;
m_Pos.x += center.x;
if( m_Orient == PIN_RIGHT )
m_Orient = PIN_LEFT;
else if( m_Orient == PIN_LEFT )
m_Orient = PIN_RIGHT;
m_position.x -= center.x;
m_position.x *= -1;
m_position.x += center.x;
if( m_orientation == PIN_RIGHT )
m_orientation = PIN_LEFT;
else if( m_orientation == PIN_LEFT )
m_orientation = PIN_RIGHT;
}
void LIB_PIN::DoPlot( PLOTTER* plotter, const wxPoint& offset, bool fill,
const TRANSFORM& aTransform )
{
if( m_Attributs & PINNOTDRAW )
if( m_attributes & PINNOTDRAW )
return;
int orient = ReturnPinDrawOrient( aTransform );
wxPoint pos = aTransform.TransformCoordinate( m_Pos ) + offset;
wxPoint pos = aTransform.TransformCoordinate( m_position ) + offset;
plotter->set_current_line_width( GetPenSize() );
PlotPinSymbol( plotter, pos, m_PinLen, orient, m_PinShape );
PlotPinSymbol( plotter, pos, m_length, orient, m_shape );
PlotPinTexts( plotter, pos, orient, GetParent()->GetPinNameOffset(),
GetParent()->ShowPinNumbers(), GetParent()->ShowPinNames(),
GetPenSize() );
}
void LIB_PIN::DoSetWidth( int aWidth )
{
if( m_width != aWidth )
{
m_width = aWidth;
SetModified();
}
}
/**
* Function DisplayInfo
* Displays info (pin num and name, orientation ...
......@@ -1727,9 +1738,9 @@ void LIB_PIN::DisplayInfo( WinEDA_DrawFrame* frame )
LIB_DRAW_ITEM::DisplayInfo( frame );
frame->AppendMsgPanel( _( "Name" ), m_PinName, DARKCYAN );
frame->AppendMsgPanel( _( "Name" ), m_name, DARKCYAN );
if( m_PinNum == 0 )
if( m_number == 0 )
Text = wxT( "?" );
else
ReturnPinStringNum( Text );
......@@ -1737,9 +1748,9 @@ void LIB_PIN::DisplayInfo( WinEDA_DrawFrame* frame )
frame->AppendMsgPanel( _( "Number" ), Text, DARKCYAN );
frame->AppendMsgPanel( _( "Type" ),
wxGetTranslation( pin_electrical_type_names[ m_PinType ] ),
wxGetTranslation( pin_electrical_type_names[ m_type ] ),
RED );
Text = wxGetTranslation(pin_style_names[ GetStyleCodeIndex( m_PinShape ) ]);
Text = wxGetTranslation(pin_style_names[ GetStyleCodeIndex( m_shape ) ]);
frame->AppendMsgPanel( _( "Style" ), Text, BLUE );
if( IsVisible() )
Text = _( "Yes" );
......@@ -1748,10 +1759,10 @@ void LIB_PIN::DisplayInfo( WinEDA_DrawFrame* frame )
frame->AppendMsgPanel( _( "Visible" ), Text, DARKGREEN );
/* Display pin length */
Text = ReturnStringFromValue( g_UserUnit, m_PinLen, EESCHEMA_INTERNAL_UNIT, true );
Text = ReturnStringFromValue( g_UserUnit, m_length, EESCHEMA_INTERNAL_UNIT, true );
frame->AppendMsgPanel( _( "Length" ), Text, MAGENTA );
Text = wxGetTranslation(pin_orientation_names[ GetOrientationCodeIndex( m_Orient ) ]);
Text = wxGetTranslation(pin_orientation_names[ GetOrientationCodeIndex( m_orientation ) ]);
frame->AppendMsgPanel( _( "Orientation" ), Text, DARKMAGENTA );
}
......@@ -1762,7 +1773,7 @@ void LIB_PIN::DisplayInfo( WinEDA_DrawFrame* frame )
*/
EDA_Rect LIB_PIN::GetBoundingBox()
{
wxPoint pt = m_Pos;
wxPoint pt = m_position;
pt.y *= -1; // Reverse the Y axis, according to the schematic orientation
......@@ -1888,7 +1899,7 @@ const char*** LIB_PIN::GetStyleSymbols()
void LIB_PIN::Show( int nestLevel, std::ostream& os )
{
NestedSpace( nestLevel, os ) << '<' << GetClass().Lower().mb_str()
<< " num=\"" << GetNumber().mb_str()
<< " num=\"" << GetNumberString().mb_str()
<< '"' << "/>\n";
......
......@@ -80,6 +80,18 @@ enum DrawPinOrient {
class LIB_PIN : public LIB_DRAW_ITEM
{
wxPoint m_position; ///< Position of the pin.
int m_length; ///< Length of the pin.
int m_orientation; ///< Pin orientation (Up, Down, Left, Right)
int m_shape; ///< Bitwise ORed of pin shapes (see enum DrawPinShape)
int m_width; ///< Line width of the pin.
int m_type; ///< Electrical type of the pin. See enum ElectricPinType.
int m_attributes; ///< Set bit 0 to indicate pin is invisible.
wxString m_name;
long m_number; ///< Pin number defined as 4 ASCII characters like "12", "anod",
///< "G6", or "12". It is stored as "12\0\0" and does not
///< depend on endian type.
/**
* Draw the pin.
*/
......@@ -87,15 +99,6 @@ class LIB_PIN : public LIB_DRAW_ITEM
int aColor, int aDrawMode, void* aData, const TRANSFORM& aTransform );
public:
int m_PinLen; /* Pin length */
int m_Orient; /* Pin orientation (Up, Down, Left, Right) */
int m_PinShape; /* Bitwise ORed: Pin shape (see enum DrawPinShape) */
int m_PinType; /* Electrical pin properties */
int m_Attributs; /* bit 0 != 0: pin invisible */
long m_PinNum; /* Pin number: 4 ASCII code like "12" or "anod"
* or "G6" "12" is stored as "12\0\0" ans does not
* depend on endian type*/
wxString m_PinName;
int m_PinNumSize;
int m_PinNameSize; /* Pin num and Pin name sizes */
......@@ -107,10 +110,6 @@ public:
char m_PinNumPositionOpt;
char m_PinNamePositionOpt;
wxPoint m_Pos; /* Position or centre (Arc and Circle) or start
* point (segments) */
int m_Width; /* Line width */
public:
LIB_PIN( LIB_COMPONENT * aParent );
LIB_PIN( const LIB_PIN& aPin );
......@@ -165,17 +164,13 @@ public:
* Pin numbers are coded as a long or 4 ASCII characters. Used to print
* or draw the pin number.
*
* @param aStringBuffer - the wxString to store the pin num as an unicode
* string
* @param aStringBuffer - the wxString to store the pin num as an unicode string
*/
void ReturnPinStringNum( wxString& aStringBuffer ) const;
long GetNumber() const { return m_number; }
wxString GetNumber()
{
return ReturnPinStringNum( m_PinNum );
}
wxString GetNumberString() const { return ReturnPinStringNum( m_number ); }
/**
* Function ReturnPinStringNum (static function)
......@@ -188,6 +183,8 @@ public:
void SetPinNumFromString( wxString& aBuffer );
wxString GetName() const { return m_name; }
/**
* Set the pin name.
*
......@@ -227,25 +224,29 @@ public:
*/
void SetNumberTextSize( int aSize );
int GetOrientation() const { return m_orientation; }
/**
* Set orientation on the pin.
*
* This will also update the orientation of the pins marked by
* EnableEditMode().
* This will also update the orientation of the pins marked by EnableEditMode().
*
* @param aOrientation - The orientation of the pin.
*/
void SetOrientation( int aOrientation );
int GetShape() const { return m_shape; }
/**
* Set the draw style of the pin.
* Set the shape of the pin to \a aShape.
*
* This will also update the draw style of the pins marked by
* EnableEditMode().
* This will also update the draw style of the pins marked by EnableEditMode().
*
* @param aStyle - The draw style of the pin.
* @param aShape - The draw shape of the pin. See enum DrawPinShape.
*/
void SetDrawStyle( int aStyle );
void SetShape( int aShape );
int GetType() const { return m_type; }
/**
* Set the electrical type of the pin.
......@@ -255,7 +256,7 @@ public:
*
* @param aType - The electrical type of the pin.
*/
void SetElectricalType( int aType );
void SetType( int aType );
/**
* Set the pin length.
......@@ -266,6 +267,8 @@ public:
*/
void SetLength( int aLength );
int GetLength() { return m_length; }
/**
* Set the pin part number.
*
......@@ -320,7 +323,7 @@ public:
*
* @return True if draw object is visible otherwise false.
*/
bool IsVisible() { return ( m_Attributs & PINNOTDRAW ) == 0; }
bool IsVisible() { return ( m_attributes & PINNOTDRAW ) == 0; }
/**
* @return the size of the "pen" that be used to draw or plot this item.
......@@ -436,12 +439,12 @@ protected:
virtual void DoOffset( const wxPoint& aOffset );
virtual bool DoTestInside( EDA_Rect& aRect ) const;
virtual void DoMove( const wxPoint& aPosition );
virtual wxPoint DoGetPosition() const { return m_Pos; }
virtual wxPoint DoGetPosition() const { return m_position; }
virtual void DoMirrorHorizontal( const wxPoint& aCenter );
virtual void DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
const TRANSFORM& aTransform );
virtual int DoGetWidth() const { return m_Width; }
virtual void DoSetWidth( int aWidth ) { m_Width = aWidth; }
virtual int DoGetWidth() const { return m_width; }
virtual void DoSetWidth( int aWidth );
};
......
......@@ -30,7 +30,7 @@ void LIB_EDIT_FRAME::EditField( wxDC* DC, LIB_FIELD* aField )
// Editing the component value field is equivalent to creating a new component based
// on the current component. Set the dialog message to inform the user.
if( aField->m_FieldId == VALUE )
if( aField->GetId() == VALUE )
{
caption = _( "Component Name" );
title = _( "Enter a name to create a new component based on this one." );
......@@ -51,7 +51,7 @@ void LIB_EDIT_FRAME::EditField( wxDC* DC, LIB_FIELD* aField )
text.Replace( wxT( " " ), wxT( "_" ) );
if( ( aField->m_FieldId == REFERENCE || aField->m_FieldId == VALUE ) && text.IsEmpty ( ) )
if( ( aField->GetId() == REFERENCE || aField->GetId() == VALUE ) && text.IsEmpty ( ) )
{
title.Printf( _( "A %s field cannot be empty." ), GetChars(aField->GetName().Lower() ) );
DisplayError( this, title );
......@@ -64,7 +64,7 @@ void LIB_EDIT_FRAME::EditField( wxDC* DC, LIB_FIELD* aField )
* the old one. Rename the component and remove any conflicting aliases to prevent name
* errors when updating the library.
*/
if( aField->m_FieldId == VALUE )
if( aField->GetId() == VALUE )
{
wxString msg;
......
......@@ -445,7 +445,7 @@ static bool sortPinsByNum( NETLIST_OBJECT* aPin1, NETLIST_OBJECT* aPin2 )
static bool sortPinsByNumber( LIB_PIN* aPin1, LIB_PIN* aPin2 )
{
// return "lhs < rhs"
return RefDesStringCompare( aPin1->GetNumber(), aPin2->GetNumber() ) < 0;
return RefDesStringCompare( aPin1->GetNumberString(), aPin2->GetNumberString() ) < 0;
}
......@@ -758,7 +758,7 @@ XNODE* EXPORT_HELP::makeGenericLibParts()
{
XNODE* xfield;
xfields->AddChild( xfield = node( sField, fieldList[i].m_Text ) );
xfield->AddAttribute( sName, fieldList[i].m_Name );
xfield->AddAttribute( sName, fieldList[i].GetName() );
}
}
......@@ -778,7 +778,7 @@ XNODE* EXPORT_HELP::makeGenericLibParts()
XNODE* pin;
pins->AddChild( pin = node( sPin ) );
pin->AddAttribute( sNum, pinList[i]->GetNumber() );
pin->AddAttribute( sNum, pinList[i]->GetNumberString() );
// caution: construction work site here, drive slowly
}
......@@ -1489,7 +1489,7 @@ bool EXPORT_HELP::addPinToComponentPinList( SCH_COMPONENT* aComponent,
if( pin->m_Link != aComponent )
continue;
if( pin->m_PinNum != aPin->m_PinNum )
if( pin->m_PinNum != aPin->GetNumber() )
continue;
// most expensive test at the end.
......
......@@ -641,7 +641,7 @@ static void AddConnectedObjects( SCH_SHEET_PATH* sheetlist,
if( pin->GetConvert() && ( pin->GetConvert() != DrawLibItem->m_Convert ) )
continue;
wxPoint pos2 = DrawLibItem->m_Transform.TransformCoordinate( pin->m_Pos ) +
wxPoint pos2 = DrawLibItem->m_Transform.TransformCoordinate( pin->GetPosition() ) +
DrawLibItem->m_Pos;
new_item = new NETLIST_OBJECT();
......@@ -650,15 +650,14 @@ static void AddConnectedObjects( SCH_SHEET_PATH* sheetlist,
new_item->m_SheetList = *sheetlist;
new_item->m_Type = NET_PIN;
new_item->m_Link = DrawLibItem;
new_item->m_ElectricalType = pin->m_PinType;
new_item->m_PinNum = pin->m_PinNum;
new_item->m_Label = pin->m_PinName;
new_item->m_ElectricalType = pin->GetType();
new_item->m_PinNum = pin->GetNumber();
new_item->m_Label = pin->GetName();
new_item->m_Start = new_item->m_End = pos2;
aNetItemBuffer.push_back( new_item );
if( ( (int) pin->m_PinType == (int) PIN_POWER_IN )
&& ( pin->m_Attributs & PINNOTDRAW ) )
if( ( (int) pin->GetType() == (int) PIN_POWER_IN ) && !pin->IsVisible() )
{
/* There is an associated PIN_LABEL. */
new_item = new NETLIST_OBJECT();
......@@ -666,7 +665,7 @@ static void AddConnectedObjects( SCH_SHEET_PATH* sheetlist,
new_item->m_Comp = NULL;
new_item->m_SheetList = *sheetlist;
new_item->m_Type = NET_PINLABEL;
new_item->m_Label = pin->m_PinName;
new_item->m_Label = pin->GetName();
new_item->m_Start = pos2;
new_item->m_End = new_item->m_Start;
......
......@@ -51,12 +51,13 @@ void LIB_EDIT_FRAME::OnRotatePin( wxCommandEvent& event )
LIB_PIN* pin = (LIB_PIN*) m_drawItem;
// Save old pin orientation
LastPinOrient = pin -> m_Orient;
LastPinOrient = pin->GetOrientation();
if( !pin->InEditMode() )
SaveCopyInUndoList( pin->GetParent() );
// Get the actual pin orientation index
int orientationIndex = pin -> GetOrientationCodeIndex(pin -> m_Orient);
int orientationIndex = pin->GetOrientationCodeIndex( pin->GetOrientation() );
// Compute the next orientation, swap lower two bits for the right order
orientationIndex = ((orientationIndex & 2) >> 1) | ((orientationIndex & 1) << 1);
......@@ -64,7 +65,7 @@ void LIB_EDIT_FRAME::OnRotatePin( wxCommandEvent& event )
orientationIndex = ((orientationIndex & 2) >> 1) | ((orientationIndex & 1) << 1);
// Set the new orientation
pin->SetOrientation(pin->GetOrientationCode(orientationIndex));
pin->SetOrientation( pin->GetOrientationCode( orientationIndex ) );
OnModify( );
pin->DisplayInfo( this );
......@@ -86,23 +87,23 @@ void LIB_EDIT_FRAME::OnEditPin( wxCommandEvent& event )
wxString units = GetUnitsLabel( g_UserUnit );
dlg.SetOrientationList( LIB_PIN::GetOrientationNames(), LIB_PIN::GetOrientationSymbols() );
dlg.SetOrientation( LIB_PIN::GetOrientationCodeIndex( pin->m_Orient ) );
dlg.SetOrientation( LIB_PIN::GetOrientationCodeIndex( pin->GetOrientation() ) );
dlg.SetStyleList( LIB_PIN::GetStyleNames(), LIB_PIN::GetStyleSymbols() );
dlg.SetStyle( LIB_PIN::GetStyleCodeIndex( pin->m_PinShape ) );
dlg.SetStyle( LIB_PIN::GetStyleCodeIndex( pin->GetShape() ) );
dlg.SetElectricalTypeList( LIB_PIN::GetElectricalTypeNames(),
LIB_PIN::GetElectricalTypeSymbols() );
dlg.SetElectricalType( pin->m_PinType );
dlg.SetName( pin->m_PinName );
dlg.SetElectricalType( pin->GetType() );
dlg.SetName( pin->GetName() );
dlg.SetNameTextSize( ReturnStringFromValue( g_UserUnit,
pin->m_PinNameSize,
m_InternalUnits ) );
dlg.SetNameTextSizeUnits( units );
dlg.SetNumber( pin->GetNumber() );
dlg.SetNumber( pin->GetNumberString() );
dlg.SetNumberTextSize( ReturnStringFromValue( g_UserUnit,
pin->m_PinNumSize,
m_InternalUnits ) );
dlg.SetNumberTextSizeUnits( units );
dlg.SetLength( ReturnStringFromValue( g_UserUnit, pin->m_PinLen, m_InternalUnits ) );
dlg.SetLength( ReturnStringFromValue( g_UserUnit, pin->GetLength(), m_InternalUnits ) );
dlg.SetLengthUnits( units );
dlg.SetAddToAllParts( pin->GetUnit() == 0 );
dlg.SetAddToAllBodyStyles( pin->GetConvert() == 0 );
......@@ -150,8 +151,8 @@ void LIB_EDIT_FRAME::OnEditPin( wxCommandEvent& event )
pin->SetNumberTextSize( LastPinNumSize );
pin->SetOrientation( LastPinOrient );
pin->SetLength( LastPinLength );
pin->SetElectricalType( LastPinType );
pin->SetDrawStyle( LastPinShape );
pin->SetType( LastPinType );
pin->SetShape( LastPinShape );
pin->SetConversion( ( LastPinCommonConvert ) ? 0 : m_convert );
pin->SetPartNumber( ( LastPinCommonUnit ) ? 0 : m_unit );
pin->SetVisible( LastPinVisible );
......@@ -224,10 +225,9 @@ void LIB_EDIT_FRAME::PlacePin( wxDC* DC )
newpos.y = -GetScreen()->m_Curseur.y;
// Tst for an other pin in same new position:
for( Pin = m_component->GetNextPin(); Pin != NULL;
Pin = m_component->GetNextPin( Pin ) )
for( Pin = m_component->GetNextPin(); Pin != NULL; Pin = m_component->GetNextPin( Pin ) )
{
if( Pin == CurrentPin || newpos != Pin->m_Pos || Pin->m_Flags )
if( Pin == CurrentPin || newpos != Pin->GetPosition() || Pin->m_Flags )
continue;
if( ask_for_pin && !g_EditPinByPinIsOn )
......@@ -238,6 +238,7 @@ void LIB_EDIT_FRAME::PlacePin( wxDC* DC )
another pin. Continue?" ) );
DrawPanel->MouseToCursorSchema();
DrawPanel->m_IgnoreMouseEvents = false;
if( !status )
return;
else
......@@ -254,16 +255,18 @@ another pin. Continue?" ) );
DrawPanel->ManageCurseur = NULL;
DrawPanel->ForceCloseManageCurseur = NULL;
OnModify( );
CurrentPin->m_Pos = newpos;
OnModify();
CurrentPin->SetPosition( newpos );
if( CurrentPin->IsNew() )
{
LastPinOrient = CurrentPin->m_Orient;
LastPinType = CurrentPin->m_PinType;
LastPinShape = CurrentPin->m_PinShape;
LastPinOrient = CurrentPin->GetOrientation();
LastPinType = CurrentPin->GetType();
LastPinShape = CurrentPin->GetShape();
if( !g_EditPinByPinIsOn )
CreateImagePins( CurrentPin, m_unit, m_convert, m_showDeMorgan );
m_lastDrawItem = CurrentPin;
m_component->AddDrawItem( m_drawItem );
}
......@@ -273,7 +276,8 @@ another pin. Continue?" ) );
{
if( Pin->m_Flags == 0 )
continue;
Pin->m_Pos = CurrentPin->m_Pos;
Pin->SetPosition( CurrentPin->GetPosition() );
Pin->m_Flags = 0;
}
......@@ -308,14 +312,14 @@ void LIB_EDIT_FRAME::StartMovePin( wxDC* DC )
Pin->m_Flags = 0;
if( Pin == CurrentPin )
continue;
if( ( Pin->m_Pos == CurrentPin->m_Pos )
&& ( Pin->m_Orient == CurrentPin->m_Orient )
if( ( Pin->GetPosition() == CurrentPin->GetPosition() )
&& ( Pin->GetOrientation() == CurrentPin->GetOrientation() )
&& ( g_EditPinByPinIsOn == false ) )
Pin->m_Flags |= IS_LINKED | IS_MOVED;
}
CurrentPin->m_Flags |= IS_LINKED | IS_MOVED;
PinPreviousPos = OldPos = CurrentPin->m_Pos;
PinPreviousPos = OldPos = CurrentPin->GetPosition();
startPos.x = OldPos.x;
startPos.y = -OldPos.y;
......@@ -345,28 +349,27 @@ static void DrawMovePin( WinEDA_DrawPanel* panel, wxDC* DC, bool erase )
if( CurrentPin == NULL || CurrentPin->Type() != COMPONENT_PIN_DRAW_TYPE )
return;
wxPoint pinpos = CurrentPin->m_Pos;
wxPoint pinpos = CurrentPin->GetPosition();
bool showPinText = true;
/* Erase pin in old position */
if( erase )
{
CurrentPin->m_Pos = PinPreviousPos;
CurrentPin->SetPosition( PinPreviousPos );
CurrentPin->Draw( panel, DC, wxPoint( 0, 0 ), -1, g_XorMode,
&showPinText, DefaultTransform );
}
/* Redraw pin in new position */
CurrentPin->m_Pos.x = panel->GetScreen()->m_Curseur.x;
CurrentPin->m_Pos.y = -panel->GetScreen()->m_Curseur.y;
CurrentPin->SetPosition( panel->GetScreen()->GetCursorDrawPosition() );
CurrentPin->Draw( panel, DC, wxPoint( 0, 0 ), -1, g_XorMode, &showPinText, DefaultTransform );
PinPreviousPos = CurrentPin->m_Pos;
PinPreviousPos = CurrentPin->GetPosition();
/* Keep the original position for existing pin (for Undo command)
* and the current position for a new pin */
if( !CurrentPin->IsNew() )
CurrentPin->m_Pos = pinpos;
CurrentPin->SetPosition( pinpos );
}
......@@ -384,7 +387,7 @@ void LIB_EDIT_FRAME::DeletePin( wxDC* DC, LIB_COMPONENT* LibEntry, LIB_PIN* Pin
if( LibEntry == NULL || Pin == NULL )
return;
PinPos = Pin->m_Pos;
PinPos = Pin->GetPosition();
LibEntry->RemoveDrawItem( (LIB_DRAW_ITEM*) Pin, DrawPanel, DC );
if( g_EditPinByPinIsOn == false )
......@@ -396,7 +399,7 @@ void LIB_EDIT_FRAME::DeletePin( wxDC* DC, LIB_COMPONENT* LibEntry, LIB_PIN* Pin
Pin = tmp;
tmp = LibEntry->GetNextPin( Pin );
if( Pin->m_Pos != PinPos )
if( Pin->GetPosition() != PinPos )
continue;
LibEntry->RemoveDrawItem( (LIB_DRAW_ITEM*) Pin );
......@@ -432,30 +435,18 @@ void LIB_EDIT_FRAME::CreatePin( wxDC* DC )
if( g_EditPinByPinIsOn == false )
pin->m_Flags |= IS_LINKED;
pin->m_Pos = GetScreen()->GetCursorDrawPosition();
pin->m_PinLen = LastPinLength;
pin->m_Orient = LastPinOrient;
pin->m_PinType = LastPinType;
pin->m_PinShape = LastPinShape;
pin->SetPosition( GetScreen()->GetCursorDrawPosition() );
pin->SetLength( LastPinLength );
pin->SetOrientation( LastPinOrient );
pin->SetType( LastPinType );
pin->SetShape( LastPinShape );
pin->m_PinNameSize = LastPinNameSize;
pin->m_PinNumSize = LastPinNumSize;
pin->SetConvert( LastPinCommonConvert ? 0 : m_convert );
pin->SetUnit( LastPinCommonUnit ? 0 : m_unit );
pin->SetVisible( LastPinVisible );
if( LastPinCommonConvert )
pin->SetConvert( 0 );
else
pin->SetConvert( m_convert );
if( LastPinCommonUnit )
pin->SetUnit( 0 );
else
pin->SetUnit( m_unit );
if( LastPinVisible )
pin->m_Attributs &= ~PINNOTDRAW;
else
pin->m_Attributs |= PINNOTDRAW;
PinPreviousPos = pin->m_Pos;
PinPreviousPos = pin->GetPosition();
DrawPanel->m_IgnoreMouseEvents = true;
wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED );
cmd.SetId( ID_LIBEDIT_EDIT_PIN );
......@@ -463,7 +454,7 @@ void LIB_EDIT_FRAME::CreatePin( wxDC* DC )
DrawPanel->MouseToCursorSchema();
DrawPanel->m_IgnoreMouseEvents = false;
if (pin->m_Flags & IS_CANCELLED)
if( pin->m_Flags & IS_CANCELLED )
{
DeletePin( NULL, m_component, pin );
m_drawItem = NULL;
......@@ -473,6 +464,7 @@ void LIB_EDIT_FRAME::CreatePin( wxDC* DC )
ClearTempCopyComponent();
DrawPanel->ManageCurseur = DrawMovePin;
DrawPanel->ForceCloseManageCurseur = AbortPinMove;
if( DC )
pin->Draw( DrawPanel, DC, wxPoint( 0, 0 ), -1, wxCOPY, &showPinText,
DefaultTransform );
......@@ -498,10 +490,12 @@ static void CreateImagePins( LIB_PIN* Pin, int unit, int convert, bool asDeMorga
if( CreateConv == true )
{
NewPin = (LIB_PIN*) Pin->GenCopy();
if( Pin->GetConvert() > 1 )
NewPin->SetConvert( 1 );
else
NewPin->SetConvert( 2 );
Pin->GetParent()->AddDrawItem( NewPin );
}
......@@ -511,8 +505,10 @@ static void CreateImagePins( LIB_PIN* Pin, int unit, int convert, bool asDeMorga
continue; /* Pin common to all units. */
NewPin = (LIB_PIN*) Pin->GenCopy();
if( convert != 0 )
NewPin->SetConvert( 1 );
NewPin->SetUnit( ii );
Pin->GetParent()->AddDrawItem( NewPin );
......@@ -521,8 +517,10 @@ static void CreateImagePins( LIB_PIN* Pin, int unit, int convert, bool asDeMorga
NewPin = (LIB_PIN*) Pin->GenCopy();
NewPin->SetConvert( 2 );
if( Pin->GetUnit() != 0 )
NewPin->SetUnit( ii );
Pin->GetParent()->AddDrawItem( NewPin );
}
}
......@@ -544,12 +542,14 @@ void LIB_EDIT_FRAME::GlobalSetPins( wxDC* DC, LIB_PIN* MasterPin, int id )
if( ( m_component == NULL ) || ( MasterPin == NULL ) )
return;
if( MasterPin->Type() != COMPONENT_PIN_DRAW_TYPE )
return;
OnModify( );
Pin = m_component->GetNextPin();
for( ; Pin != NULL; Pin = m_component->GetNextPin( Pin ) )
{
if( ( Pin->GetConvert() ) && ( Pin->GetConvert() != m_convert ) )
......@@ -572,7 +572,7 @@ void LIB_EDIT_FRAME::GlobalSetPins( wxDC* DC, LIB_PIN* MasterPin, int id )
break;
case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINSIZE_ITEM:
Pin->m_PinLen = MasterPin->m_PinLen;
Pin->SetLength( MasterPin->GetLength() );
break;
}
......@@ -588,15 +588,15 @@ void LIB_EDIT_FRAME::RepeatPinItem( wxDC* DC, LIB_PIN* SourcePin )
LIB_PIN* Pin;
wxString msg;
if( m_component == NULL || SourcePin == NULL
|| SourcePin->Type() != COMPONENT_PIN_DRAW_TYPE )
if( m_component == NULL || SourcePin == NULL || SourcePin->Type() != COMPONENT_PIN_DRAW_TYPE )
return;
Pin = (LIB_PIN*) SourcePin->GenCopy();
Pin->m_Flags = IS_NEW;
Pin->m_Pos.x += g_RepeatStep.x;
Pin->m_Pos.y += -g_RepeatStep.y;
IncrementLabelMember( Pin->m_PinName );
Pin->SetPosition( Pin->GetPosition() + wxPoint( g_RepeatStep.x, -g_RepeatStep.y ) );
wxString nextName = Pin->GetName();
IncrementLabelMember( nextName );
Pin->SetName( nextName );
Pin->ReturnPinStringNum( msg );
IncrementLabelMember( msg );
......@@ -609,8 +609,8 @@ void LIB_EDIT_FRAME::RepeatPinItem( wxDC* DC, LIB_PIN* SourcePin )
wxPoint savepos = GetScreen()->m_Curseur;
DrawPanel->CursorOff( DC );
GetScreen()->m_Curseur.x = Pin->m_Pos.x;
GetScreen()->m_Curseur.y = -Pin->m_Pos.y;
GetScreen()->m_Curseur.x = Pin->GetPosition().x;
GetScreen()->m_Curseur.y = -Pin->GetPosition().y;
// Add this new pin in list, and creates pins for others parts if needed
m_drawItem = Pin;
......@@ -629,16 +629,18 @@ void LIB_EDIT_FRAME::RepeatPinItem( wxDC* DC, LIB_PIN* SourcePin )
/* helper function to sort pins by pin num */
bool sort_by_pin_number( const LIB_PIN* ref, const LIB_PIN* tst )
{
int test = ref->m_PinNum - tst->m_PinNum;
int test = ref->GetNumber() - tst->GetNumber();
if( test == 0 )
{
test = ref->GetConvert() - tst->GetConvert();
}
if( test == 0 )
{
test = ref->GetUnit() - tst->GetUnit();
}
return test < 0;
}
......@@ -686,7 +688,7 @@ void LIB_EDIT_FRAME::OnCheckComponent( wxCommandEvent& event )
LIB_PIN* curr_pin = PinList[ii];
Pin = PinList[ii - 1];
if( Pin->m_PinNum != curr_pin->m_PinNum
if( Pin->GetNumber() != curr_pin->GetNumber()
|| Pin->GetConvert() != curr_pin->GetConvert()
|| Pin->GetUnit() != curr_pin->GetUnit() )
continue;
......@@ -697,13 +699,13 @@ void LIB_EDIT_FRAME::OnCheckComponent( wxCommandEvent& event )
msg.Printf( _( "<b>Duplicate pin %s</b> \"%s\" at location <b>(%.3f, \
%.3f)</b> conflicts with pin %s \"%s\" at location <b>(%.3f, %.3f)</b>" ),
GetChars( stringCurrPinNum ),
GetChars( curr_pin->m_PinName ),
(float) curr_pin->m_Pos.x / 1000.0,
(float) -curr_pin->m_Pos.y / 1000.0,
GetChars( curr_pin->GetName() ),
(float) curr_pin->GetPosition().x / 1000.0,
(float) -curr_pin->GetPosition().y / 1000.0,
GetChars( stringPinNum ),
GetChars( Pin->m_PinName ),
(float) Pin->m_Pos.x / 1000.0,
(float) -Pin->m_Pos.y / 1000.0 );
GetChars( Pin->GetName() ),
(float) Pin->GetPosition().x / 1000.0,
(float) -Pin->GetPosition().y / 1000.0 );
if( m_component->GetPartCount() > 1 )
{
......@@ -725,24 +727,24 @@ void LIB_EDIT_FRAME::OnCheckComponent( wxCommandEvent& event )
// Test for off grid pins:
offgrid_error = 0;
for( unsigned ii = 0; ii < PinList.size(); ii++ )
{
Pin = PinList[ii];
if( ( (Pin->m_Pos.x % MIN_GRID_SIZE) == 0 ) &&
( (Pin->m_Pos.y % MIN_GRID_SIZE) == 0 ) )
if( ( (Pin->GetPosition().x % MIN_GRID_SIZE) == 0 ) &&
( (Pin->GetPosition().y % MIN_GRID_SIZE) == 0 ) )
continue;
// A pin is foun here off grid
offgrid_error++;
wxString stringPinNum;
Pin->ReturnPinStringNum( stringPinNum );
msg.Printf( _( "<b>Off grid pin %s</b> \"%s\" at location <b>(%.3f, \
%.3f)</b>" ),
msg.Printf( _( "<b>Off grid pin %s</b> \"%s\" at location <b>(%.3f, %.3f)</b>" ),
GetChars( stringPinNum ),
GetChars( Pin->m_PinName ),
(float) Pin->m_Pos.x / 1000.0,
(float) -Pin->m_Pos.y / 1000.0 );
GetChars( Pin->GetName() ),
(float) Pin->GetPosition().x / 1000.0,
(float) -Pin->GetPosition().y / 1000.0 );
if( m_component->GetPartCount() > 1 )
{
......@@ -763,9 +765,7 @@ void LIB_EDIT_FRAME::OnCheckComponent( wxCommandEvent& event )
}
if( !dup_error && !offgrid_error )
DisplayInfoMessage( this,
_( "No off grid or duplicate pins were found." ) );
DisplayInfoMessage( this, _( "No off grid or duplicate pins were found." ) );
else
error_display.ShowModal();
}
......@@ -94,15 +94,15 @@ SCH_COMPONENT::SCH_COMPONENT( LIB_COMPONENT& libComponent,
{
// Can no longer insert an empty name, since names are now keys. The
// field index is not used beyond the first MANDATORY_FIELDS
if( it->m_Name.IsEmpty() )
if( it->GetName().IsEmpty() )
continue;
// See if field by same name already exists.
SCH_FIELD* schField = FindField( it->m_Name );
SCH_FIELD* schField = FindField( it->GetName() );
if( !schField )
{
SCH_FIELD fld( wxPoint( 0, 0 ), GetFieldCount(), this, it->m_Name );
SCH_FIELD fld( wxPoint( 0, 0 ), GetFieldCount(), this, it->GetName() );
schField = AddField( fld );
}
......@@ -1586,21 +1586,24 @@ bool SCH_COMPONENT::Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxP
{
LIB_PIN_LIST pinList;
Entry->GetPins( pinList, m_Multi, m_Convert );
// Search for a match in pinList
for( unsigned ii = 0; ii < pinList.size(); ii ++ )
{
LIB_PIN* pin = pinList[ii];
wxString pinNum;
pin->ReturnPinStringNum( pinNum );
if( SCH_ITEM::Matches(pin->m_PinName, aSearchData ) ||
SCH_ITEM::Matches(pinNum, aSearchData ) )
if( SCH_ITEM::Matches( pin->GetName(), aSearchData ) ||
SCH_ITEM::Matches( pinNum, aSearchData ) )
{
if( aFindLocation )
{
wxPoint pinpos = pin->m_Pos;
wxPoint pinpos = pin->GetPosition();
pinpos = m_Transform.TransformCoordinate( pinpos );
*aFindLocation = pinpos + m_Pos;
}
return true;
}
......@@ -1640,7 +1643,7 @@ wxPoint SCH_COMPONENT::GetPinPhysicalPosition( LIB_PIN* Pin )
wxCHECK_MSG( Pin != NULL && Pin->Type() == COMPONENT_PIN_DRAW_TYPE, wxPoint( 0, 0 ),
wxT( "Cannot get physical position of pin." ) );
return m_Transform.TransformCoordinate( Pin->m_Pos ) + m_Pos;
return m_Transform.TransformCoordinate( Pin->GetPosition() ) + m_Pos;
}
......@@ -1680,6 +1683,6 @@ void SCH_COMPONENT::GetConnectionPoints( vector< wxPoint >& aPoints ) const
continue;
// Calculate the pin position relative to the component position and orientation.
aPoints.push_back( m_Transform.TransformCoordinate( pin->m_Pos ) + m_Pos );
aPoints.push_back( m_Transform.TransformCoordinate( pin->GetPosition() ) + m_Pos );
}
}
......@@ -359,6 +359,8 @@ public:
inline bool IsDragging() const { return m_Flags & IS_DRAGGED; }
inline bool IsSelected() const { return m_Flags & SELECTED; }
void SetModified();
int GetState( int type ) const
{
return m_Status & type;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment