/* * create the basic panel for component properties editing */ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::InitBasicPanel() { LIB_PART* component = m_Parent->GetCurPart(); if( m_Parent->GetShowDeMorgan() ) m_AsConvertButt->SetValue( true ); int maxUnits = ID_POPUP_SCH_SELECT_UNIT_CMP_MAX - ID_POPUP_SCH_SELECT_UNIT1; m_SelNumberOfUnits->SetRange (1, maxUnits ); m_staticTextNbUnits->SetLabel( wxString::Format( _( "Number of Units (max allowed %d)" ), maxUnits ) ); /* Default values for a new component. */ if( component == NULL ) { m_ShowPinNumButt->SetValue( true ); m_ShowPinNameButt->SetValue( true ); m_PinsNameInsideButt->SetValue( true ); m_SelNumberOfUnits->SetValue( 1 ); m_SetSkew->SetValue( 40 ); m_OptionPower->SetValue( false ); m_OptionPartsLocked->SetValue( false ); return; } m_ShowPinNumButt->SetValue( component->ShowPinNumbers() ); m_ShowPinNameButt->SetValue( component->ShowPinNames() ); m_PinsNameInsideButt->SetValue( component->GetPinNameOffset() != 0 ); m_SelNumberOfUnits->SetValue( component->GetUnitCount() ); m_SetSkew->SetValue( component->GetPinNameOffset() ); m_OptionPower->SetValue( component->IsPower() ); m_OptionPartsLocked->SetValue( component->UnitsLocked() && component->GetUnitCount() > 1 ); }
void SCH_SHEET_PATH::AnnotatePowerSymbols( PART_LIBS* aLibs, int* aReference ) { int ref = 1; if( aReference ) ref = *aReference; for( EDA_ITEM* item = LastDrawList(); item; item = item->Next() ) { if( item->Type() != SCH_COMPONENT_T ) continue; SCH_COMPONENT* component = (SCH_COMPONENT*) item; LIB_PART* part = aLibs->FindLibPart( component->GetPartName() ); if( !part || !part->IsPower() ) continue; wxString refstr = component->GetPrefix(); //str will be "C?" or so after the ClearAnnotation call. while( refstr.Last() == '?' ) refstr.RemoveLast(); if( !refstr.StartsWith( wxT( "#" ) ) ) refstr = wxT( "#" ) + refstr; refstr << wxT( "0" ) << ref; component->SetRef( this, refstr ); ref++; } if( aReference ) *aReference = ref; }
void LIB_EDIT_FRAME::DisplayCmpDoc() { LIB_ALIAS* alias; PART_LIB* lib = GetCurLib(); LIB_PART* part = GetCurPart(); ClearMsgPanel(); if( !lib || !part ) return; wxString msg = part->GetName(); AppendMsgPanel( _( "Name" ), msg, BLUE, 8 ); if( m_aliasName == part->GetName() ) msg = _( "None" ); else msg = m_aliasName; alias = part->GetAlias( m_aliasName ); wxCHECK_RET( alias != NULL, "Alias not found in component." ); AppendMsgPanel( _( "Alias" ), msg, RED, 8 ); static wxChar UnitLetter[] = wxT( "?ABCDEFGHIJKLMNOPQRSTUVWXYZ" ); msg = UnitLetter[m_unit]; AppendMsgPanel( _( "Unit" ), msg, BROWN, 8 ); if( m_convert > 1 ) msg = _( "Convert" ); else msg = _( "Normal" ); AppendMsgPanel( _( "Body" ), msg, GREEN, 8 ); if( part->IsPower() ) msg = _( "Power Symbol" ); else msg = _( "Part" ); AppendMsgPanel( _( "Type" ), msg, MAGENTA, 8 ); AppendMsgPanel( _( "Description" ), alias->GetDescription(), CYAN, 8 ); AppendMsgPanel( _( "Key words" ), alias->GetKeyWords(), DARKDARKGRAY ); AppendMsgPanel( _( "Datasheet" ), alias->GetDocFileName(), DARKDARKGRAY ); }
void SCH_EDIT_FRAME::EditComponentFieldText( SCH_FIELD* aField ) { wxCHECK_RET( aField != NULL && aField->Type() == SCH_FIELD_T, wxT( "Cannot edit invalid schematic field." ) ); int fieldNdx; SCH_COMPONENT* component = (SCH_COMPONENT*) aField->GetParent(); wxCHECK_RET( component != NULL && component->Type() == SCH_COMPONENT_T, wxT( "Invalid schematic field parent item." ) ); LIB_PART* part = Prj().SchLibs()->FindLibPart( component->GetPartName() ); wxCHECK_RET( part, wxT( "Library part for component <" ) + component->GetPartName() + wxT( "> could not be found." ) ); fieldNdx = aField->GetId(); // Save old component in undo list if not already in edit, or moving. if( aField->GetFlags() == 0 ) SaveCopyInUndoList( component, UR_CHANGED ); // Don't use GetText() here. If the field is the reference designator and it's parent // component has multiple parts, we don't want the part suffix added to the field. m_canvas->SetIgnoreMouseEvents( true ); wxString title; title.Printf( _( "Edit %s Field" ), GetChars( aField->GetName() ) ); DIALOG_SCH_EDIT_ONE_FIELD dlg( this, title, aField ); // Value fields of power components cannot be modified. This will grey out // the text box and display an explanation. if( fieldNdx == VALUE && part->IsPower() ) { dlg.SetPowerWarning( true ); } //The diag may invoke a kiway player for footprint fields //so we must use a quasimodal int response = dlg.ShowQuasiModal(); m_canvas->MoveCursorToCrossHair(); m_canvas->SetIgnoreMouseEvents( false ); wxString newtext = dlg.GetTextField( ); if ( response != wxID_OK ) return; // canceled by user // make some tests bool can_update = true; if( !newtext.IsEmpty() ) { if( fieldNdx == REFERENCE ) { // Test if the reference string is valid: if( SCH_COMPONENT::IsReferenceStringValid( newtext ) ) { component->SetRef( m_CurrentSheet, newtext ); } else { DisplayError( this, _( "Illegal reference string! No change" ) ); can_update = false; } } } else { if( fieldNdx == REFERENCE ) { DisplayError( this, _( "The reference field cannot be empty! No change" ) ); can_update = false; } else if( fieldNdx == VALUE && ! part->IsPower() ) { // Note that power components also should not have empty value fields - but // since the user is forbidden from changing the value field here, if it // were to happen somehow, it'd be awfully confusing if an error were to // be displayed! DisplayError( this, _( "The value field cannot be empty! No change" ) ); can_update = false; } else if ( !( fieldNdx == VALUE && part->IsPower() ) ) { dlg.SetTextField( wxT( "~" ) ); } } if( can_update ) { dlg.TransfertDataToField( /* aIncludeText = */ !( fieldNdx == VALUE && part->IsPower() ) ); OnModify(); if( m_autoplaceFields ) component->AutoAutoplaceFields( GetScreen() ); m_canvas->Refresh(); } MSG_PANEL_ITEMS items; component->SetCurrentSheetPath( &GetCurrentSheet() ); component->GetMsgPanelInfo( items ); SetMsgPanel( items ); }