From 3fed7b9dd9bd2b08a8b9d95cd3343211c7a3768d Mon Sep 17 00:00:00 2001 From: Wayne Stambaugh Date: Tue, 7 Dec 2010 11:10:42 -0500 Subject: [PATCH] Component library object encapsulation work. --- CHANGELOG.txt | 10 + common/base_struct.cpp | 16 +- eeschema/block.cpp | 2 +- eeschema/bus-wire-junction.cpp | 2 +- eeschema/class_libentry.cpp | 20 +- eeschema/cross-probing.cpp | 3 +- eeschema/dangling_ends.cpp | 4 +- .../dialog_edit_libentry_fields_in_lib.cpp | 42 +- eeschema/edit_component_in_schematic.cpp | 1 + eeschema/find.cpp | 4 +- eeschema/lib_draw_item.h | 2 + eeschema/lib_field.cpp | 82 ++-- eeschema/lib_field.h | 40 +- eeschema/lib_pin.cpp | 417 +++++++++--------- eeschema/lib_pin.h | 69 +-- eeschema/libfield.cpp | 6 +- eeschema/netform.cpp | 10 +- eeschema/netlist.cpp | 13 +- eeschema/pinedit.cpp | 162 +++---- eeschema/sch_component.cpp | 19 +- include/base_struct.h | 2 + 21 files changed, 500 insertions(+), 426 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 7bef03f917..c901c3ea98 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -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 +================================================================================ +++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 ================================================================================ ++EESchema diff --git a/common/base_struct.cpp b/common/base_struct.cpp index 79ff9a2b1f..9ee674f79f 100644 --- a/common/base_struct.cpp +++ b/common/base_struct.cpp @@ -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, diff --git a/eeschema/block.cpp b/eeschema/block.cpp index 86bf84eba7..1d0f14f6d4 100644 --- a/eeschema/block.cpp +++ b/eeschema/block.cpp @@ -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; } diff --git a/eeschema/bus-wire-junction.cpp b/eeschema/bus-wire-junction.cpp index dcf0e200e9..8c4827d13e 100644 --- a/eeschema/bus-wire-junction.cpp +++ b/eeschema/bus-wire-junction.cpp @@ -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 ) ) diff --git a/eeschema/class_libentry.cpp b/eeschema/class_libentry.cpp index ef0565ee43..b3091ed6c6 100644 --- a/eeschema/class_libentry.cpp +++ b/eeschema/class_libentry.cpp @@ -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; diff --git a/eeschema/cross-probing.cpp b/eeschema/cross-probing.cpp index 4e49c68126..6fd1f23557 100644 --- a/eeschema/cross-probing.cpp +++ b/eeschema/cross-probing.cpp @@ -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 ); diff --git a/eeschema/dangling_ends.cpp b/eeschema/dangling_ends.cpp index 11e4b0cd0a..3c2f12ca80 100644 --- a/eeschema/dangling_ends.cpp +++ b/eeschema/dangling_ends.cpp @@ -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; } diff --git a/eeschema/dialogs/dialog_edit_libentry_fields_in_lib.cpp b/eeschema/dialogs/dialog_edit_libentry_fields_in_lib.cpp index a1aa5894aa..000fe1e3d1 100644 --- a/eeschema/dialogs/dialog_edit_libentry_fields_in_lib.cpp +++ b/eeschema/dialogs/dialog_edit_libentry_fields_in_lib.cpp @@ -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; im_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; im_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 diff --git a/eeschema/edit_component_in_schematic.cpp b/eeschema/edit_component_in_schematic.cpp index bbb24dcf52..25247fe5f9 100644 --- a/eeschema/edit_component_in_schematic.cpp +++ b/eeschema/edit_component_in_schematic.cpp @@ -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 ); diff --git a/eeschema/find.cpp b/eeschema/find.cpp index 143907a0ad..ba4dc2c9d6 100644 --- a/eeschema/find.cpp +++ b/eeschema/find.cpp @@ -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 diff --git a/eeschema/lib_draw_item.h b/eeschema/lib_draw_item.h index 23d4441a23..48156c8121 100644 --- a/eeschema/lib_draw_item.h +++ b/eeschema/lib_draw_item.h @@ -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. * diff --git a/eeschema/lib_field.cpp b/eeschema/lib_field.cpp index 8be877072f..ba49103bd8 100644 --- a/eeschema/lib_field.cpp +++ b/eeschema/lib_field.cpp @@ -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_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,10 +389,11 @@ 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) - */ + */ int t1 = ( aTransform.x1 != 0 ) ^ ( m_Orient != 0 ); int orient = t1 ? TEXT_ORIENT_HORIZ : TEXT_ORIENT_VERT; EXCHG( m_Orient, orient ); @@ -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 ); } - diff --git a/eeschema/lib_field.h b/eeschema/lib_field.h index e0a49dd3d8..c68923770d 100644 --- a/eeschema/lib_field.h +++ b/eeschema/lib_field.h @@ -5,7 +5,6 @@ #ifndef CLASS_LIBENTRY_FIELDS_H #define CLASS_LIBENTRY_FIELDS_H -//#include "general.h" #include "lib_draw_item.h" @@ -18,9 +17,12 @@ */ class LIB_FIELD : public LIB_DRAW_ITEM, public EDA_TextStruct { - 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. + 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. /** * Draw the field. @@ -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; diff --git a/eeschema/lib_pin.cpp b/eeschema/lib_pin.cpp index 75dd091f16..69b58b7d2f 100644 --- a/eeschema/lib_pin.cpp +++ b/eeschema/lib_pin.cpp @@ -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; + m_position.x -= center.x; + m_position.x *= -1; + m_position.x += center.x; - if( m_Orient == PIN_RIGHT ) - m_Orient = PIN_LEFT; - else if( m_Orient == PIN_LEFT ) - m_Orient = PIN_RIGHT; + 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"; diff --git a/eeschema/lib_pin.h b/eeschema/lib_pin.h index 3abff259e3..72f889dc13 100644 --- a/eeschema/lib_pin.h +++ b/eeschema/lib_pin.h @@ -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; + 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 ); }; diff --git a/eeschema/libfield.cpp b/eeschema/libfield.cpp index d0be979c57..0fdf724ed7 100644 --- a/eeschema/libfield.cpp +++ b/eeschema/libfield.cpp @@ -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; diff --git a/eeschema/netform.cpp b/eeschema/netform.cpp index a59ff87ec0..fd100528d3 100644 --- a/eeschema/netform.cpp +++ b/eeschema/netform.cpp @@ -445,12 +445,12 @@ 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; } void EXPORT_HELP::sprintPinNetName( wxString* aResult, - const wxString& aNetNameFormat, NETLIST_OBJECT* aPin ) + const wxString& aNetNameFormat, NETLIST_OBJECT* aPin ) { int netcode = aPin->GetNet(); @@ -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. diff --git a/eeschema/netlist.cpp b/eeschema/netlist.cpp index 121a9954b1..bcf29f1ea6 100644 --- a/eeschema/netlist.cpp +++ b/eeschema/netlist.cpp @@ -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; diff --git a/eeschema/pinedit.cpp b/eeschema/pinedit.cpp index 5da7b00f83..f4f6fc6962 100644 --- a/eeschema/pinedit.cpp +++ b/eeschema/pinedit.cpp @@ -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 ) - && ( g_EditPinByPinIsOn == false ) ) + 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->m_Flags = IS_NEW; + 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( _( "Duplicate pin %s \"%s\" at location (%.3f, \ %.3f) conflicts with pin %s \"%s\" at location (%.3f, %.3f)" ), 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( _( "Off grid pin %s \"%s\" at location (%.3f, \ -%.3f)" ), + msg.Printf( _( "Off grid pin %s \"%s\" at location (%.3f, %.3f)" ), 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(); } diff --git a/eeschema/sch_component.cpp b/eeschema/sch_component.cpp index 460d4b861c..c0a40639c9 100644 --- a/eeschema/sch_component.cpp +++ b/eeschema/sch_component.cpp @@ -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 ); } } diff --git a/include/base_struct.h b/include/base_struct.h index f795ddeaf1..cdf8191a67 100644 --- a/include/base_struct.h +++ b/include/base_struct.h @@ -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;