From 0996c307ac380ce8bf7d06fe49a82e5c14ebe81d Mon Sep 17 00:00:00 2001 From: Wayne Stambaugh Date: Tue, 26 Mar 2013 13:25:18 -0400 Subject: [PATCH] Fix field text position access bug in Eeschema. (fixes lp:1160214) --- .../dialog_edit_component_in_schematic.cpp | 19 ++++++++-------- .../dialog_edit_libentry_fields_in_lib.cpp | 10 +++++---- eeschema/sch_component.cpp | 22 +++++++++---------- eeschema/sch_screen.cpp | 4 ++-- 4 files changed, 29 insertions(+), 26 deletions(-) diff --git a/eeschema/dialogs/dialog_edit_component_in_schematic.cpp b/eeschema/dialogs/dialog_edit_component_in_schematic.cpp index 387ddb71a5..fddff29360 100644 --- a/eeschema/dialogs/dialog_edit_component_in_schematic.cpp +++ b/eeschema/dialogs/dialog_edit_component_in_schematic.cpp @@ -233,7 +233,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnOKButtonClick( wxCommandEvent& event // change all field positions from relative to absolute for( unsigned i = 0; im_Pos ); + m_FieldsBuf[i].SetTextPosition( m_FieldsBuf[i].GetTextPosition() + m_Cmp->m_Pos ); } // Delete any fields with no name before we copy all of m_FieldsBuf back into the component. @@ -458,7 +458,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::InitBuffers( SCH_COMPONENT* aComponent m_FieldsBuf.push_back( aComponent->m_Fields[i] ); // make the editable field position relative to the component - m_FieldsBuf[i].SetPosition( m_FieldsBuf[i].GetPosition() - m_Cmp->m_Pos ); + m_FieldsBuf[i].SetTextPosition( m_FieldsBuf[i].GetTextPosition() - m_Cmp->m_Pos ); } // Add template fieldnames: @@ -491,7 +491,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::InitBuffers( SCH_COMPONENT* aComponent fld = *schField; // make the editable field position relative to the component - fld.SetPosition( fld.GetPosition() - m_Cmp->m_Pos ); + fld.SetTextPosition( fld.GetTextPosition() - m_Cmp->m_Pos ); } m_FieldsBuf.push_back( fld ); @@ -510,7 +510,8 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::InitBuffers( SCH_COMPONENT* aComponent m_FieldsBuf.push_back( *cmp ); // make the editable field position relative to the component - m_FieldsBuf[newNdx].SetPosition( m_FieldsBuf[newNdx].GetPosition() - m_Cmp->m_Pos ); + m_FieldsBuf[newNdx].SetTextPosition( m_FieldsBuf[newNdx].GetTextPosition() - + m_Cmp->m_Pos ); } } @@ -644,7 +645,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copySelectedFieldToPanel() textSizeTextCtrl->SetValue( EDA_GRAPHIC_TEXT_CTRL::FormatSize( g_UserUnit, field.GetSize().x ) ); - wxPoint coord = field.GetPosition(); + wxPoint coord = field.GetTextPosition(); wxPoint zero = -m_Cmp->m_Pos; // relative zero // If the field value is empty and the position is at relative zero, we @@ -655,10 +656,10 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copySelectedFieldToPanel() { rotateCheckBox->SetValue( m_FieldsBuf[REFERENCE].GetOrientation() == TEXT_ORIENT_VERT ); - coord.x = m_FieldsBuf[REFERENCE].GetPosition().x + coord.x = m_FieldsBuf[REFERENCE].GetTextPosition().x + ( fieldNdx - MANDATORY_FIELDS + 1 ) * 100; - coord.y = m_FieldsBuf[REFERENCE].GetPosition().y + coord.y = m_FieldsBuf[REFERENCE].GetTextPosition().y + ( fieldNdx - MANDATORY_FIELDS + 1 ) * 100; // coord can compute negative if field is < MANDATORY_FIELDS, e.g. FOOTPRINT. @@ -844,11 +845,11 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::SetInitCmp( wxCommandEvent& event ) // Perhaps the FOOTPRINT field should also be considered, // but for most of components it is not set in library LIB_FIELD& refField = entry->GetReferenceField(); - m_Cmp->GetField( REFERENCE )->SetPosition( refField.GetPosition() + m_Cmp->m_Pos ); + m_Cmp->GetField( REFERENCE )->SetTextPosition( refField.GetTextPosition() + m_Cmp->m_Pos ); m_Cmp->GetField( REFERENCE )->ImportValues( refField ); LIB_FIELD& valField = entry->GetValueField(); - m_Cmp->GetField( VALUE )->SetPosition( valField.GetPosition() + m_Cmp->m_Pos ); + m_Cmp->GetField( VALUE )->SetTextPosition( valField.GetTextPosition() + m_Cmp->m_Pos ); m_Cmp->GetField( VALUE )->ImportValues( valField ); m_Cmp->SetOrientation( CMP_NORMAL ); diff --git a/eeschema/dialogs/dialog_edit_libentry_fields_in_lib.cpp b/eeschema/dialogs/dialog_edit_libentry_fields_in_lib.cpp index eb4f23cdf4..8aa9b493ba 100644 --- a/eeschema/dialogs/dialog_edit_libentry_fields_in_lib.cpp +++ b/eeschema/dialogs/dialog_edit_libentry_fields_in_lib.cpp @@ -661,7 +661,7 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::copySelectedFieldToPanel() textSizeTextCtrl->SetValue( EDA_GRAPHIC_TEXT_CTRL::FormatSize( g_UserUnit, field.GetSize().x ) ); - wxPoint coord = field.GetPosition(); + wxPoint coord = field.GetTextPosition(); wxPoint zero; // If the field value is empty and the position is at relative zero, we set the @@ -672,8 +672,10 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::copySelectedFieldToPanel() { rotateCheckBox->SetValue( m_FieldsBuf[REFERENCE].GetOrientation() == TEXT_ORIENT_VERT ); - coord.x = m_FieldsBuf[REFERENCE].GetPosition().x + (fieldNdx - MANDATORY_FIELDS + 1) * 100; - coord.y = m_FieldsBuf[REFERENCE].GetPosition().y + (fieldNdx - MANDATORY_FIELDS + 1) * 100; + coord.x = m_FieldsBuf[REFERENCE].GetTextPosition().x + + (fieldNdx - MANDATORY_FIELDS + 1) * 100; + coord.y = m_FieldsBuf[REFERENCE].GetTextPosition().y + + (fieldNdx - MANDATORY_FIELDS + 1) * 100; // coord can compute negative if field is < MANDATORY_FIELDS, e.g. FOOTPRINT. // That is ok, we basically don't want all the new empty fields on @@ -761,7 +763,7 @@ bool DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::copyPanelToSelectedField() // and the screen axis is top to bottom: we must change the y coord sign for editing NEGATE( pos.y ); - field.SetPosition( pos ); + field.SetTextPosition( pos ); return true; } diff --git a/eeschema/sch_component.cpp b/eeschema/sch_component.cpp index 56cd7fe1cf..2cfe36af41 100644 --- a/eeschema/sch_component.cpp +++ b/eeschema/sch_component.cpp @@ -157,7 +157,7 @@ SCH_COMPONENT::SCH_COMPONENT( LIB_COMPONENT& libComponent, SCH_SHEET_PATH* sheet schField = AddField( fld ); } - schField->SetPosition( m_Pos + it->GetPosition() ); + schField->SetTextPosition( m_Pos + it->GetTextPosition() ); schField->ImportValues( *it ); @@ -490,11 +490,11 @@ void SCH_COMPONENT::SetRef( const SCH_SHEET_PATH* sheet, const wxString& ref ) SCH_FIELD* rf = GetField( REFERENCE ); if( rf->GetText().IsEmpty() - || ( abs( rf->GetPosition().x - m_Pos.x ) + - abs( rf->GetPosition().y - m_Pos.y ) > 10000 ) ) + || ( abs( rf->GetTextPosition().x - m_Pos.x ) + + abs( rf->GetTextPosition().y - m_Pos.y ) > 10000 ) ) { // move it to a reasonable position - rf->SetPosition( m_Pos + wxPoint( 50, 50 ) ); + rf->SetTextPosition( m_Pos + wxPoint( 50, 50 ) ); } rf->SetText( ref ); // for drawing. @@ -1206,7 +1206,7 @@ bool SCH_COMPONENT::Load( LINE_READER& aLine, wxString& aErrorMsg ) for( int i = 0; iGetText().IsEmpty() ) - GetField( i )->SetPosition( m_Pos ); + GetField( i )->SetTextPosition( m_Pos ); } } else if( line[0] == 'A' && line[1] == 'R' ) @@ -1511,9 +1511,9 @@ void SCH_COMPONENT::MirrorY( int aYaxis_position ) for( int ii = 0; ii < GetFieldCount(); ii++ ) { // Move the fields to the new position because the component itself has moved. - wxPoint pos = GetField( ii )->GetPosition(); + wxPoint pos = GetField( ii )->GetTextPosition(); pos.x -= dx; - GetField( ii )->SetPosition( pos ); + GetField( ii )->SetTextPosition( pos ); } } @@ -1531,9 +1531,9 @@ void SCH_COMPONENT::MirrorX( int aXaxis_position ) for( int ii = 0; ii < GetFieldCount(); ii++ ) { // Move the fields to the new position because the component itself has moved. - wxPoint pos = GetField( ii )->GetPosition(); + wxPoint pos = GetField( ii )->GetTextPosition(); pos.y -= dy; - GetField( ii )->SetPosition( pos ); + GetField( ii )->SetTextPosition( pos ); } } @@ -1550,10 +1550,10 @@ void SCH_COMPONENT::Rotate( wxPoint aPosition ) for( int ii = 0; ii < GetFieldCount(); ii++ ) { // Move the fields to the new position because the component itself has moved. - wxPoint pos = GetField( ii )->GetPosition(); + wxPoint pos = GetField( ii )->GetTextPosition(); pos.x -= prev.x - m_Pos.x; pos.y -= prev.y - m_Pos.y; - GetField( ii )->SetPosition( pos ); + GetField( ii )->SetTextPosition( pos ); } } diff --git a/eeschema/sch_screen.cpp b/eeschema/sch_screen.cpp index d38a4f833f..fae91ce1bb 100644 --- a/eeschema/sch_screen.cpp +++ b/eeschema/sch_screen.cpp @@ -1084,10 +1084,10 @@ bool SCH_SCREEN::SetComponentFootprint( SCH_SHEET_PATH* aSheetPath, const wxStri */ SCH_FIELD * fpfield = component->GetField( FOOTPRINT ); if( fpfield->GetText().IsEmpty() - && ( fpfield->GetPosition() == component->GetPosition() ) ) + && ( fpfield->GetTextPosition() == component->GetPosition() ) ) { fpfield->SetOrientation( component->GetField( VALUE )->GetOrientation() ); - fpfield->SetPosition( component->GetField( VALUE )->GetPosition() ); + fpfield->SetTextPosition( component->GetField( VALUE )->GetTextPosition() ); fpfield->SetSize( component->GetField( VALUE )->GetSize() ); if( fpfield->GetOrientation() == 0 )