bool DIALOG_EXCHANGE_MODULE::changeSameFootprints( bool aUseValue ) { wxString msg; MODULE* Module; MODULE* PtBack; bool change = false; wxString newmodulename = m_NewFootprintFPID->GetValue(); wxString value; LIB_ID lib_reference; bool check_module_value = false; int ShowErr = 3; // Post 3 error messages max. if( m_parent->GetBoard()->m_Modules == NULL ) return false; if( newmodulename == wxEmptyString ) return false; lib_reference = m_currentModule->GetFPID(); if( aUseValue ) { check_module_value = true; value = m_currentModule->GetValue(); msg.Printf( _( "Change footprint %s -> %s (for value = %s)?" ), GetChars( FROM_UTF8( m_currentModule->GetFPID().Format().c_str() ) ), GetChars( newmodulename ), GetChars( m_currentModule->GetValue() ) ); } else { msg.Printf( _( "Change footprint %s -> %s ?" ), GetChars( FROM_UTF8( lib_reference.Format().c_str() ) ), GetChars( newmodulename ) ); } if( !IsOK( this, msg ) ) return false; /* The change is done from the last module because * change_1_Module () modifies the last item in the list. * * note: for the first module in chain (the last here), Module->Back() * points the board or is NULL */ Module = m_parent->GetBoard()->m_Modules.GetLast(); for( ; Module && ( Module->Type() == PCB_MODULE_T ); Module = PtBack ) { PtBack = Module->Back(); if( lib_reference != Module->GetFPID() ) continue; if( check_module_value ) { if( value.CmpNoCase( Module->GetValue() ) != 0 ) continue; } if( change_1_Module( Module, newmodulename, ShowErr ) ) change = true; else if( ShowErr ) ShowErr--; } return change; }