DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC( wxWindow* parent ) : DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP( parent ) { m_Parent = (SCH_EDIT_FRAME*) parent; m_part = NULL; m_skipCopyFromPanel = false; wxListItem columnLabel; columnLabel.SetImage( -1 ); columnLabel.SetText( _( "Name" ) ); fieldListCtrl->InsertColumn( 0, columnLabel ); columnLabel.SetText( _( "Value" ) ); fieldListCtrl->InsertColumn( 1, columnLabel ); m_staticTextUnitSize->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_staticTextUnitPosX->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_staticTextUnitPosY->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); copySelectedFieldToPanel(); wxToolTip::Enable( true ); GetSizer()->SetSizeHints( this ); Center(); stdDialogButtonSizerOK->SetDefault(); }
DIALOG_MOVE_EXACT::DIALOG_MOVE_EXACT( PCB_BASE_FRAME* aParent, wxPoint& translation, double& rotation ): DIALOG_MOVE_EXACT_BASE( aParent ), m_translation( translation ), m_rotation( rotation ) { // set the unit labels m_xUnit->SetLabelText( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_yUnit->SetLabelText( GetAbbreviatedUnitsLabel( g_UserUnit ) ); // tabbing goes through the entries in sequence m_yEntry->MoveAfterInTabOrder( m_xEntry ); m_rotEntry->MoveAfterInTabOrder( m_yEntry ); // and set up the entries according to the saved options m_polarCoords->SetValue( m_options.polarCoords ); m_xEntry->SetValue( wxString::FromDouble( m_options.entry1 ) ); m_yEntry->SetValue( wxString::FromDouble( m_options.entry2 ) ); m_rotEntry->SetValue( wxString::FromDouble( m_options.entryRotation ) ); updateDlgTexts( m_polarCoords->IsChecked() ); m_stdButtonsOK->SetDefault(); GetSizer()->SetSizeHints(this); }
void DIALOG_DRC_CONTROL::DisplayDRCValues() { m_TrackMinWidthUnit->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_ViaMinUnit->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_MicroViaMinUnit->SetLabel(GetAbbreviatedUnitsLabel( g_UserUnit ) ); PutValueInLocalUnits( *m_SetTrackMinWidthCtrl, m_BrdSettings.m_TrackMinWidth ); PutValueInLocalUnits( *m_SetViaMinSizeCtrl, m_BrdSettings.m_ViasMinSize ); PutValueInLocalUnits( *m_SetMicroViakMinSizeCtrl, m_BrdSettings.m_MicroViasMinSize ); }
void DIALOG_MOVE_EXACT::updateDlgTexts( bool aPolar ) { if( aPolar ) { m_xLabel->SetLabelText( _( "Distance:" ) ); // Polar radius m_yLabel->SetLabelText( _( "Angle:" ) ); // Polar theta or angle m_yUnit->SetLabelText( GetAbbreviatedUnitsLabel( DEGREES ) ); } else { m_xLabel->SetLabelText( _( "Move vector X:" ) ); m_yLabel->SetLabelText( _( "Move vector Y:" ) ); m_yUnit->SetLabelText( GetAbbreviatedUnitsLabel( g_UserUnit ) ); } }
wxString PANEL_PREV_3D::formatOffsetValue( double aValue ) { // Convert from internal units (mm) to user units if( m_userUnits == INCHES ) aValue /= 25.4f; return wxString::Format( "%.4f %s", aValue, GetAbbreviatedUnitsLabel( m_userUnits ) ); }
void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::OnInitDialog( wxInitDialogEvent& event ) { m_skipCopyFromPanel = false; wxListItem columnLabel; columnLabel.SetImage( -1 ); columnLabel.SetText( _( "Name" ) ); fieldListCtrl->InsertColumn( COLUMN_FIELD_NAME, columnLabel ); columnLabel.SetText( _( "Value" ) ); fieldListCtrl->InsertColumn( COLUMN_TEXT, columnLabel ); m_staticTextUnitSize->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_staticTextUnitPosX->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_staticTextUnitPosY->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); initBuffers(); copySelectedFieldToPanel(); stdDialogButtonSizerOK->SetDefault(); }
void SCH_EDIT_FRAME::OnFindDrcMarker( wxFindDialogEvent& event ) { static SCH_MARKER* lastMarker = NULL; wxString msg; SCH_SHEET_LIST schematic; SCH_SHEET_PATH* sheetFoundIn = NULL; bool wrap = ( event.GetFlags() & FR_SEARCH_WRAP ) != 0; wxRect clientRect( wxPoint( 0, 0 ), GetClientSize() ); bool warpCursor = ( ( event.GetId() == wxEVT_COMMAND_FIND_CLOSE ) || !( event.GetFlags() & FR_NO_WARP_CURSOR ) ); if( event.GetFlags() & FR_CURRENT_SHEET_ONLY ) { sheetFoundIn = m_CurrentSheet; lastMarker = (SCH_MARKER*) m_CurrentSheet->FindNextItem( SCH_MARKER_T, lastMarker, wrap ); } else { lastMarker = (SCH_MARKER*) schematic.FindNextItem( SCH_MARKER_T, &sheetFoundIn, lastMarker, wrap ); } if( lastMarker != NULL ) { if( *sheetFoundIn != *m_CurrentSheet ) { sheetFoundIn->LastScreen()->SetZoom( GetScreen()->GetZoom() ); *m_CurrentSheet = *sheetFoundIn; m_CurrentSheet->UpdateAllScreenReferences(); } sheetFoundIn->LastScreen()->SetCrossHairPosition( lastMarker->GetPosition() ); RedrawScreen( lastMarker->GetPosition(), warpCursor ); wxString path = sheetFoundIn->Path(); wxString units = GetAbbreviatedUnitsLabel(); double x = To_User_Unit( g_UserUnit, (double) lastMarker->GetPosition().x, m_internalUnits ); double y = To_User_Unit( g_UserUnit, (double) lastMarker->GetPosition().y, m_internalUnits ); msg.Printf( _( "Design rule check marker found in sheet %s at %0.3f%s, %0.3f%s" ), GetChars( path ), x, GetChars( units ), y, GetChars( units) ); SetStatusText( msg ); } else { SetStatusText( _( "No more markers were found." ) ); } }
void DIALOG_GLOBAL_MODULES_FIELDS_EDITION::initDialog() { m_sdbSizerButtonsOK->SetDefault(); m_brdSettings = &m_parent->GetDesignSettings(); m_ReferenceOpt->SetValue(m_refSelection), m_ValueOpt->SetValue(m_valueSelection), m_OtherFields->SetValue(m_othersSelection); m_ModuleFilter->SetValue(m_filterString); m_SizeXunit->SetLabel( GetAbbreviatedUnitsLabel() ); m_SizeYunit->SetLabel( GetAbbreviatedUnitsLabel() ); m_ThicknessUnit->SetLabel( GetAbbreviatedUnitsLabel() ); m_SizeX_Value->SetValue( StringFromValue( g_UserUnit, m_brdSettings->m_ModuleTextSize.x ) ); m_SizeY_Value->SetValue( StringFromValue( g_UserUnit, m_brdSettings->m_ModuleTextSize.y ) ); m_ThicknessValue->SetValue( StringFromValue( g_UserUnit, m_brdSettings->m_ModuleTextWidth) ); Layout(); GetSizer()->SetSizeHints( this ); Centre(); }
// Creation of the panel properties of the module editor. void DIALOG_MODULE_BOARD_EDITOR::InitBoardProperties() { PutValueInLocalUnits( *m_ModPositionX, m_CurrentModule->GetPosition().x ); m_XPosUnit->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); PutValueInLocalUnits( *m_ModPositionY, m_CurrentModule->GetPosition().y ); m_YPosUnit->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_LayerCtrl->SetSelection( (m_CurrentModule->GetLayer() == LAYER_N_BACK) ? 1 : 0 ); bool select = false; switch( int( m_CurrentModule->GetOrientation() ) ) { case 0: m_OrientCtrl->SetSelection( 0 ); break; case 900: case -2700: m_OrientCtrl->SetSelection( 1 ); break; case -900: case 2700: m_OrientCtrl->SetSelection( 2 ); break; case -1800: case 1800: m_OrientCtrl->SetSelection( 3 ); break; default: m_OrientCtrl->SetSelection( 4 ); select = true; break; } wxString msg; msg << m_CurrentModule->GetOrientation(); m_OrientValue->SetValue( msg ); m_OrientValue->Enable( select ); // Initialize dialog relative to masks clearances m_NetClearanceUnits->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_SolderMaskMarginUnits->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_SolderPasteMarginUnits->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); PutValueInLocalUnits( *m_NetClearanceValueCtrl, m_CurrentModule->GetLocalClearance() ); PutValueInLocalUnits( *m_SolderMaskMarginCtrl, m_CurrentModule->GetLocalSolderMaskMargin() ); // These 2 parameters are usually < 0, so prepare entering a negative // value, if current is 0 PutValueInLocalUnits( *m_SolderPasteMarginCtrl, m_CurrentModule->GetLocalSolderPasteMargin() ); if( m_CurrentModule->GetLocalSolderPasteMargin() == 0 ) m_SolderPasteMarginCtrl->SetValue( wxT( "-" ) + m_SolderPasteMarginCtrl->GetValue() ); // Add solder paste margin ration in per cent // for the usual default value 0.0, display -0.0 (or -0,0 in some countries) msg.Printf( wxT( "%f" ), m_CurrentModule->GetLocalSolderPasteMarginRatio() * 100.0 ); if( m_CurrentModule->GetLocalSolderPasteMarginRatio() == 0.0 && msg[0] == '0') // Sometimes Printf adds a sign if the value is very small (0.0) m_SolderPasteMarginRatioCtrl->SetValue( wxT("-") + msg ); else m_SolderPasteMarginRatioCtrl->SetValue( msg ); switch( m_CurrentModule->GetZoneConnection() ) { default: case UNDEFINED_CONNECTION: m_ZoneConnectionChoice->SetSelection( 0 ); break; case PAD_IN_ZONE: m_ZoneConnectionChoice->SetSelection( 1 ); break; case THERMAL_PAD: m_ZoneConnectionChoice->SetSelection( 2 ); break; case PAD_NOT_IN_ZONE: m_ZoneConnectionChoice->SetSelection( 3 ); break; } }
void DIALOG_PAD_PROPERTIES::initValues() { wxString msg; double angle; // Disable pad net name wxTextCtrl if the caller is the footprint editor // because nets are living only in the board managed by the board editor m_canEditNetName = m_parent->IsType( FRAME_PCB ); // Setup layers names from board // Should be made first, before calling m_rbCopperLayersSel->SetSelection() m_rbCopperLayersSel->SetString( 0, m_board->GetLayerName( F_Cu ) ); m_rbCopperLayersSel->SetString( 1, m_board->GetLayerName( B_Cu ) ); m_PadLayerAdhCmp->SetLabel( m_board->GetLayerName( F_Adhes ) ); m_PadLayerAdhCu->SetLabel( m_board->GetLayerName( B_Adhes ) ); m_PadLayerPateCmp->SetLabel( m_board->GetLayerName( F_Paste ) ); m_PadLayerPateCu->SetLabel( m_board->GetLayerName( B_Paste ) ); m_PadLayerSilkCmp->SetLabel( m_board->GetLayerName( F_SilkS ) ); m_PadLayerSilkCu->SetLabel( m_board->GetLayerName( B_SilkS ) ); m_PadLayerMaskCmp->SetLabel( m_board->GetLayerName( F_Mask ) ); m_PadLayerMaskCu->SetLabel( m_board->GetLayerName( B_Mask ) ); m_PadLayerECO1->SetLabel( m_board->GetLayerName( Eco1_User ) ); m_PadLayerECO2->SetLabel( m_board->GetLayerName( Eco2_User ) ); m_PadLayerDraft->SetLabel( m_board->GetLayerName( Dwgs_User ) ); m_isFlipped = false; if( m_currentPad ) { MODULE* footprint = m_currentPad->GetParent(); m_isFlipped = m_currentPad->IsFlipped(); if( m_isFlipped ) m_staticModuleSideValue->SetLabel( _( "Back side (footprint is mirrored)" ) ); // Diplay footprint rotation ( angles are in 0.1 degree ) msg.Printf( wxT( "%.1f" ), footprint->GetOrientation() / 10.0 ); m_staticModuleRotValue->SetLabel( msg ); } if( m_isFlipped ) { wxPoint pt = m_dummyPad->GetOffset(); pt.y = -pt.y; m_dummyPad->SetOffset( pt ); wxSize sz = m_dummyPad->GetDelta(); sz.y = -sz.y; m_dummyPad->SetDelta( sz ); // flip pad's layers m_dummyPad->SetLayerSet( FlipLayerMask( m_dummyPad->GetLayerSet() ) ); } m_staticTextWarningPadFlipped->Show(m_isFlipped); m_PadNumCtrl->SetValue( m_dummyPad->GetPadName() ); m_PadNetNameCtrl->SetValue( m_dummyPad->GetNetname() ); // Set the unit name in dialog: wxStaticText* unitTexts[] = { m_PadPosX_Unit, m_PadPosY_Unit, m_PadDrill_X_Unit, m_PadDrill_Y_Unit, m_PadShapeSizeX_Unit, m_PadShapeSizeY_Unit, m_PadShapeOffsetX_Unit,m_PadShapeOffsetY_Unit, m_PadShapeDelta_Unit, m_PadLengthDie_Unit, m_NetClearanceUnits, m_SolderMaskMarginUnits, m_SolderPasteMarginUnits, m_ThermalWidthUnits, m_ThermalGapUnits, m_staticTextCornerSizeUnit }; for( unsigned ii = 0; ii < DIM( unitTexts ); ++ii ) unitTexts[ii]->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); // Display current pad parameters units: PutValueInLocalUnits( *m_PadPosition_X_Ctrl, m_dummyPad->GetPosition().x ); PutValueInLocalUnits( *m_PadPosition_Y_Ctrl, m_dummyPad->GetPosition().y ); PutValueInLocalUnits( *m_PadDrill_X_Ctrl, m_dummyPad->GetDrillSize().x ); PutValueInLocalUnits( *m_PadDrill_Y_Ctrl, m_dummyPad->GetDrillSize().y ); PutValueInLocalUnits( *m_ShapeSize_X_Ctrl, m_dummyPad->GetSize().x ); PutValueInLocalUnits( *m_ShapeSize_Y_Ctrl, m_dummyPad->GetSize().y ); PutValueInLocalUnits( *m_ShapeOffset_X_Ctrl, m_dummyPad->GetOffset().x ); PutValueInLocalUnits( *m_ShapeOffset_Y_Ctrl, m_dummyPad->GetOffset().y ); if( m_dummyPad->GetDelta().x ) { PutValueInLocalUnits( *m_ShapeDelta_Ctrl, m_dummyPad->GetDelta().x ); m_trapDeltaDirChoice->SetSelection( 0 ); } else { PutValueInLocalUnits( *m_ShapeDelta_Ctrl, m_dummyPad->GetDelta().y ); m_trapDeltaDirChoice->SetSelection( 1 ); } PutValueInLocalUnits( *m_LengthPadToDieCtrl, m_dummyPad->GetPadToDieLength() ); PutValueInLocalUnits( *m_NetClearanceValueCtrl, m_dummyPad->GetLocalClearance() ); PutValueInLocalUnits( *m_SolderMaskMarginCtrl, m_dummyPad->GetLocalSolderMaskMargin() ); PutValueInLocalUnits( *m_ThermalWidthCtrl, m_dummyPad->GetThermalWidth() ); PutValueInLocalUnits( *m_ThermalGapCtrl, m_dummyPad->GetThermalGap() ); // These 2 parameters are usually < 0, so prepare entering a negative value, if current is 0 PutValueInLocalUnits( *m_SolderPasteMarginCtrl, m_dummyPad->GetLocalSolderPasteMargin() ); if( m_dummyPad->GetLocalSolderPasteMargin() == 0 ) m_SolderPasteMarginCtrl->SetValue( wxT( "-" ) + m_SolderPasteMarginCtrl->GetValue() ); msg.Printf( wxT( "%f" ), m_dummyPad->GetLocalSolderPasteMarginRatio() * 100.0 ); if( m_dummyPad->GetLocalSolderPasteMarginRatio() == 0.0 && msg[0] == '0' ) // Sometimes Printf adds a sign if the value is small m_SolderPasteMarginRatioCtrl->SetValue( wxT( "-" ) + msg ); else m_SolderPasteMarginRatioCtrl->SetValue( msg ); switch( m_dummyPad->GetZoneConnection() ) { default: case PAD_ZONE_CONN_INHERITED: m_ZoneConnectionChoice->SetSelection( 0 ); break; case PAD_ZONE_CONN_FULL: m_ZoneConnectionChoice->SetSelection( 1 ); break; case PAD_ZONE_CONN_THERMAL: m_ZoneConnectionChoice->SetSelection( 2 ); break; case PAD_ZONE_CONN_NONE: m_ZoneConnectionChoice->SetSelection( 3 ); break; } if( m_currentPad ) { MODULE* footprint = m_currentPad->GetParent(); angle = m_currentPad->GetOrientation() - footprint->GetOrientation(); if( m_isFlipped ) angle = -angle; m_dummyPad->SetOrientation( angle ); } angle = m_dummyPad->GetOrientation(); NORMALIZE_ANGLE_180( angle ); // ? normalizing is in D_PAD::SetOrientation() // Set layers used by this pad: : setPadLayersList( m_dummyPad->GetLayerSet() ); // Pad Orient switch( int( angle ) ) { case 0: m_PadOrient->SetSelection( 0 ); break; case 900: m_PadOrient->SetSelection( 1 ); break; case -900: m_PadOrient->SetSelection( 2 ); break; case 1800: case -1800: m_PadOrient->SetSelection( 3 ); break; default: m_PadOrient->SetSelection( 4 ); break; } switch( m_dummyPad->GetShape() ) { default: case PAD_SHAPE_CIRCLE: m_PadShape->SetSelection( CHOICE_SHAPE_CIRCLE ); break; case PAD_SHAPE_OVAL: m_PadShape->SetSelection( CHOICE_SHAPE_OVAL ); break; case PAD_SHAPE_RECT: m_PadShape->SetSelection( CHOICE_SHAPE_RECT ); break; case PAD_SHAPE_TRAPEZOID: m_PadShape->SetSelection( CHOICE_SHAPE_TRAPEZOID ); break; case PAD_SHAPE_ROUNDRECT: m_PadShape->SetSelection( CHOICE_SHAPE_ROUNDRECT ); break; } m_OrientValue = angle / 10.0; // Type of pad selection m_PadType->SetSelection( 0 ); for( unsigned ii = 0; ii < DIM( code_type ); ii++ ) { if( code_type[ii] == m_dummyPad->GetAttribute() ) { m_PadType->SetSelection( ii ); break; } } // Enable/disable Pad name,and pad length die // (disable for NPTH pads (mechanical pads) bool enable = m_dummyPad->GetAttribute() != PAD_ATTRIB_HOLE_NOT_PLATED; m_PadNumCtrl->Enable( enable ); m_PadNetNameCtrl->Enable( m_canEditNetName && enable && m_currentPad != NULL ); m_LengthPadToDieCtrl->Enable( enable ); if( m_dummyPad->GetDrillShape() != PAD_DRILL_SHAPE_OBLONG ) m_DrillShapeCtrl->SetSelection( 0 ); else m_DrillShapeCtrl->SetSelection( 1 ); // Update some dialog widgets state (Enable/disable options): wxCommandEvent cmd_event; setPadLayersList( m_dummyPad->GetLayerSet() ); OnDrillShapeSelected( cmd_event ); OnPadShapeSelection( cmd_event ); updateRoundRectCornerValues(); }
DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParent, const SELECTION& aItems, COMMIT& aCommit ) : DIALOG_TRACK_VIA_PROPERTIES_BASE( aParent ), m_frame( aParent ), m_items( aItems ), m_commit( aCommit ), m_trackStartX( aParent, m_TrackStartXLabel, m_TrackStartXCtrl, m_TrackStartXUnit ), m_trackStartY( aParent, m_TrackStartYLabel, m_TrackStartYCtrl, m_TrackStartYUnit ), m_trackEndX( aParent, m_TrackEndXLabel, m_TrackEndXCtrl, m_TrackEndXUnit ), m_trackEndY( aParent, m_TrackEndYLabel, m_TrackEndYCtrl, m_TrackEndYUnit ), m_trackWidth( aParent, m_TrackWidthLabel, m_TrackWidthCtrl, m_TrackWidthUnit, true ), m_viaX( aParent, m_ViaXLabel, m_ViaXCtrl, m_ViaXUnit ), m_viaY( aParent, m_ViaYLabel, m_ViaYCtrl, m_ViaYUnit ), m_viaDiameter( aParent, m_ViaDiameterLabel, m_ViaDiameterCtrl, m_ViaDiameterUnit, true ), m_viaDrill( aParent, m_ViaDrillLabel, m_ViaDrillCtrl, m_ViaDrillUnit, true ), m_tracks( false ), m_vias( false ) { wxASSERT( !m_items.Empty() ); VIATYPE_T viaType = VIA_NOT_DEFINED; m_netSelector->SetNetInfo( &aParent->GetBoard()->GetNetInfo() ); m_TrackLayerCtrl->SetLayersHotkeys( false ); m_TrackLayerCtrl->SetNotAllowedLayerSet( LSET::AllNonCuMask() ); m_TrackLayerCtrl->SetBoardFrame( aParent ); m_TrackLayerCtrl->Resync(); m_ViaStartLayer->SetLayersHotkeys( false ); m_ViaStartLayer->SetNotAllowedLayerSet( LSET::AllNonCuMask() ); m_ViaStartLayer->SetBoardFrame( aParent ); m_ViaStartLayer->Resync(); m_ViaEndLayer->SetLayersHotkeys( false ); m_ViaEndLayer->SetNotAllowedLayerSet( LSET::AllNonCuMask() ); m_ViaEndLayer->SetBoardFrame( aParent ); m_ViaEndLayer->Resync(); bool nets = false; int net = 0; bool hasLocked = false; bool hasUnlocked = false; // Look for values that are common for every item that is selected for( auto& item : m_items ) { if( !nets ) { net = static_cast<BOARD_CONNECTED_ITEM*>( item )->GetNetCode(); nets = true; } else if( net != static_cast<BOARD_CONNECTED_ITEM*>( item )->GetNetCode() ) { net = -1; } switch( item->Type() ) { case PCB_TRACE_T: { const TRACK* t = static_cast<const TRACK*>( item ); if( !m_tracks ) // first track in the list { m_trackStartX.SetValue( t->GetStart().x ); m_trackStartY.SetValue( t->GetStart().y ); m_trackEndX.SetValue( t->GetEnd().x ); m_trackEndY.SetValue( t->GetEnd().y ); m_trackWidth.SetValue( t->GetWidth() ); m_TrackLayerCtrl->SetLayerSelection( t->GetLayer() ); m_tracks = true; } else // check if values are the same for every selected track { if( m_trackStartX.GetValue() != t->GetStart().x ) m_trackStartX.SetValue( INDETERMINATE ); if( m_trackStartY.GetValue() != t->GetStart().y ) m_trackStartY.SetValue( INDETERMINATE ); if( m_trackEndX.GetValue() != t->GetEnd().x ) m_trackEndX.SetValue( INDETERMINATE ); if( m_trackEndY.GetValue() != t->GetEnd().y ) m_trackEndY.SetValue( INDETERMINATE ); if( m_trackWidth.GetValue() != t->GetWidth() ) m_trackWidth.SetValue( INDETERMINATE ); if( m_TrackLayerCtrl->GetLayerSelection() != t->GetLayer() ) m_TrackLayerCtrl->SetLayerSelection( UNDEFINED_LAYER ); } if( t->IsLocked() ) hasLocked = true; else hasUnlocked = true; break; } case PCB_VIA_T: { const VIA* v = static_cast<const VIA*>( item ); if( !m_vias ) // first via in the list { m_viaX.SetValue( v->GetPosition().x ); m_viaY.SetValue( v->GetPosition().y ); m_viaDiameter.SetValue( v->GetWidth() ); m_viaDrill.SetValue( v->GetDrillValue() ); m_vias = true; viaType = v->GetViaType(); m_ViaStartLayer->SetLayerSelection( v->TopLayer() ); m_ViaEndLayer->SetLayerSelection( v->BottomLayer() ); } else // check if values are the same for every selected via { if( m_viaX.GetValue() != v->GetPosition().x ) m_viaX.SetValue( INDETERMINATE ); if( m_viaY.GetValue() != v->GetPosition().y ) m_viaY.SetValue( INDETERMINATE ); if( m_viaDiameter.GetValue() != v->GetWidth() ) m_viaDiameter.SetValue( INDETERMINATE ); if( m_viaDrill.GetValue() != v->GetDrillValue() ) m_viaDrill.SetValue( INDETERMINATE ); if( viaType != v->GetViaType() ) viaType = VIA_NOT_DEFINED; if( m_ViaStartLayer->GetLayerSelection() != v->TopLayer() ) m_ViaStartLayer->SetLayerSelection( UNDEFINED_LAYER ); if( m_ViaEndLayer->GetLayerSelection() != v->BottomLayer() ) m_ViaEndLayer->SetLayerSelection( UNDEFINED_LAYER ); } if( v->IsLocked() ) hasLocked = true; else hasUnlocked = true; break; } default: { wxASSERT( false ); break; } } } if ( net >= 0 ) m_netSelector->SetSelectedNetcode( net ); else m_netSelector->SetIndeterminate(); wxASSERT( m_tracks || m_vias ); if( m_vias ) { m_DesignRuleViasUnit->SetLabel( GetAbbreviatedUnitsLabel( m_units, true ) ); int viaSelection = wxNOT_FOUND; for( unsigned ii = 0; ii < aParent->GetDesignSettings().m_ViasDimensionsList.size(); ii++ ) { VIA_DIMENSION* viaDimension = &aParent->GetDesignSettings().m_ViasDimensionsList[ii]; wxString msg = StringFromValue( m_units, viaDimension->m_Diameter, false, true ) + " / " + StringFromValue( m_units, viaDimension->m_Drill, false, true ); m_DesignRuleViasCtrl->Append( msg, viaDimension ); if( viaSelection == wxNOT_FOUND && m_viaDiameter.GetValue() == viaDimension->m_Diameter && m_viaDrill.GetValue() == viaDimension->m_Drill ) { viaSelection = ii; } } m_DesignRuleViasCtrl->SetSelection( viaSelection ); m_DesignRuleViasCtrl->Connect( wxEVT_CHOICE, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES::onViaSelect ), NULL, this ); m_ViaDiameterCtrl->Connect( wxEVT_TEXT, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES::onViaEdit ), NULL, this ); m_ViaDrillCtrl->Connect( wxEVT_TEXT, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES::onViaEdit ), NULL, this ); m_ViaTypeChoice->Connect( wxEVT_CHOICE, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES::onViaEdit ), NULL, this ); SetInitialFocus( m_ViaDiameterCtrl ); m_ViaTypeChoice->Enable(); switch( viaType ) { case VIA_THROUGH: m_ViaTypeChoice->SetSelection( 0 ); break; case VIA_MICROVIA: m_ViaTypeChoice->SetSelection( 1 ); break; case VIA_BLIND_BURIED: m_ViaTypeChoice->SetSelection( 2 ); break; case VIA_NOT_DEFINED: m_ViaTypeChoice->SetSelection( 3 ); break; } m_ViaStartLayer->Enable( viaType != VIA_THROUGH ); m_ViaEndLayer->Enable( viaType != VIA_THROUGH ); } else { m_MainSizer->Hide( m_sbViaSizer, true ); } if( m_tracks ) { m_DesignRuleWidthsUnits->SetLabel( GetAbbreviatedUnitsLabel( m_units, true ) ); int widthSelection = wxNOT_FOUND; for( unsigned ii = 0; ii < aParent->GetDesignSettings().m_TrackWidthList.size(); ii++ ) { int width = aParent->GetDesignSettings().m_TrackWidthList[ii]; wxString msg = StringFromValue( m_units, width, false, true ); m_DesignRuleWidthsCtrl->Append( msg ); if( widthSelection == wxNOT_FOUND && m_trackWidth.GetValue() == width ) widthSelection = ii; } m_DesignRuleWidthsCtrl->SetSelection( widthSelection ); m_DesignRuleWidthsCtrl->Connect( wxEVT_CHOICE, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES::onWidthSelect ), NULL, this ); m_TrackWidthCtrl->Connect( wxEVT_TEXT, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES::onWidthEdit ), NULL, this ); SetInitialFocus( m_TrackWidthCtrl ); } else { m_MainSizer->Hide( m_sbTrackSizer, true ); } if( hasLocked && hasUnlocked ) m_lockedCbox->Set3StateValue( wxCHK_UNDETERMINED ); else if( hasLocked ) m_lockedCbox->Set3StateValue( wxCHK_CHECKED ); else m_lockedCbox->Set3StateValue( wxCHK_UNCHECKED ); SetInitialFocus( m_tracks ? m_TrackStartXCtrl : m_ViaXCtrl ); m_StdButtonsOK->SetDefault(); // Now all widgets have the size fixed, call FinishDialogSettings FinishDialogSettings(); }
DIALOG_CREATE_ARRAY::DIALOG_CREATE_ARRAY( PCB_BASE_FRAME* aParent, wxPoint aOrigPos, ARRAY_OPTIONS** aSettings ) : DIALOG_CREATE_ARRAY_BASE( aParent ), CONFIG_SAVE_RESTORE_WINDOW( m_options.m_optionsSet ), m_settings( aSettings ), m_originalItemPosition( aOrigPos ) { // Set up numbering scheme drop downs // // character set // NOTE: do not change the order of this relative to the ARRAY_NUMBERING_TYPE_T enum const wxString charSetDescriptions[] = { _( "Numerals (0,1,2,...,9,10)" ), _( "Hexadecimal (0,1,...,F,10,...)" ), _( "Alphabet, minus IOSQXZ" ), _( "Alphabet, full 26 characters" ) }; m_choicePriAxisNumbering->Set( DIM( charSetDescriptions ), charSetDescriptions ); m_choiceSecAxisNumbering->Set( DIM( charSetDescriptions ), charSetDescriptions ); m_choiceCircNumberingType->Set( DIM( charSetDescriptions ), charSetDescriptions );; m_choicePriAxisNumbering->SetSelection( 0 ); m_choiceSecAxisNumbering->SetSelection( 0 ); m_choiceCircNumberingType->SetSelection( 0 ); Add( m_entryNx, m_options.m_gridNx ); Add( m_entryNy, m_options.m_gridNy ); Add( m_entryDx, m_options.m_gridDx ); Add( m_entryDy, m_options.m_gridDy ); Add( m_entryOffsetX, m_options.m_gridOffsetX ); Add( m_entryOffsetY, m_options.m_gridOffsetY ); Add( m_entryStagger, m_options.m_gridStagger ); Add( m_radioBoxGridStaggerType, m_options.m_gridStaggerType ); Add( m_radioBoxGridNumberingAxis, m_options.m_gridNumberingAxis ); Add( m_checkBoxGridReverseNumbering, m_options.m_gridNumberingReverseAlternate ); Add( m_entryCentreX, m_options.m_circCentreX ); Add( m_entryCentreY, m_options.m_circCentreY ); Add( m_entryCircAngle, m_options.m_circAngle ); Add( m_entryCircCount, m_options.m_circCount ); Add( m_entryRotateItemsCb, m_options.m_circRotate ); Add( m_entryCircNumberingStart, m_options.m_circNumberingOffset ); Add( m_gridTypeNotebook, m_options.m_arrayTypeTab ); Add( m_radioBoxGridNumberingScheme, m_options.m_grid2dArrayNumbering ); Add( m_choicePriAxisNumbering, m_options.m_gridPriAxisNumScheme ); Add( m_choiceSecAxisNumbering, m_options.m_gridSecAxisNumScheme ); Add( m_entryGridPriNumberingOffset, m_options.m_gridPriNumberingOffset ); Add( m_entryGridSecNumberingOffset, m_options.m_gridSecNumberingOffset ); RestoreConfigToControls(); // Load units into labels { const wxString lengthUnit = GetAbbreviatedUnitsLabel( g_UserUnit ); m_unitLabelCentreX->SetLabelText( lengthUnit ); m_unitLabelCentreY->SetLabelText( lengthUnit ); m_unitLabelDx->SetLabelText( lengthUnit ); m_unitLabelDy->SetLabelText( lengthUnit ); m_unitLabelOffsetX->SetLabelText( lengthUnit ); m_unitLabelOffsetY->SetLabelText( lengthUnit ); } // Run the callbacks once to process the dialog contents setControlEnablement(); calculateCircularArrayProperties(); Fit(); }
void DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES::initDlg() /* Initialize messages and values in text control, * according to the item parameters values */ { SetFocus(); m_StandardButtonsSizerOK->SetDefault(); // Set unit symbol wxStaticText * texts_unit[] = { m_StartPointXUnit, m_StartPointYUnit, m_EndPointXUnit, m_EndPointYUnit, m_ThicknessTextUnit, m_DefaulThicknessTextUnit, NULL }; for( int ii = 0; ; ii++ ) { if( texts_unit[ii] == NULL ) break; texts_unit[ii]->SetLabel( GetAbbreviatedUnitsLabel() ); } wxString msg; // Change texts according to the segment shape: switch ( m_item->GetShape() ) { case S_CIRCLE: m_StartPointXLabel->SetLabel(_("Center X")); m_StartPointYLabel->SetLabel(_("Center Y")); m_EndPointXLabel->SetLabel(_("Point X")); m_EndPointYLabel->SetLabel(_("Point Y")); m_Angle_Text->Show(false); m_Angle_Ctrl->Show(false); m_AngleUnit->Show(false); break; case S_ARC: m_StartPointXLabel->SetLabel(_("Center X")); m_StartPointYLabel->SetLabel(_("Center Y")); m_EndPointXLabel->SetLabel(_("Start Point X")); m_EndPointYLabel->SetLabel(_("Start Point Y")); // Here the angle is a double, but the UI is still working // with integers msg << int( m_item->GetAngle() ); m_Angle_Ctrl->SetValue(msg); break; default: m_Angle_Text->Show(false); m_Angle_Ctrl->Show(false); m_AngleUnit->Show(false); break; } PutValueInLocalUnits( *m_Center_StartXCtrl, m_item->GetStart().x ); PutValueInLocalUnits( *m_Center_StartYCtrl, m_item->GetStart().y ); PutValueInLocalUnits( *m_EndX_Radius_Ctrl, m_item->GetEnd().x ); PutValueInLocalUnits( *m_EndY_Ctrl, m_item->GetEnd().y ); PutValueInLocalUnits( *m_ThicknessCtrl, m_item->GetWidth() ); PutValueInLocalUnits( *m_DefaultThicknessCtrl, m_brdSettings.m_ModuleSegmentWidth ); // Configure the layers list selector m_LayerSelectionCtrl->SetLayersHotkeys( false ); m_LayerSelectionCtrl->SetLayerMask( INTERNAL_CU_LAYERS|EDGE_LAYER ); m_LayerSelectionCtrl->SetBoardFrame( m_parent ); m_LayerSelectionCtrl->Resync(); if( m_LayerSelectionCtrl->SetLayerSelection( m_item->GetLayer() ) < 0 ) { wxMessageBox( _("This item has an illegal layer id.\n" "Now, forced on the front silk screen layer. Please, fix it") ); m_LayerSelectionCtrl->SetLayerSelection( SILKSCREEN_N_FRONT ); } }
void DIALOG_GRAPHIC_ITEM_PROPERTIES::initDlg( ) /**************************************************************************/ /* Initialize messages and values in text control, * according to the item parameters values */ { SetFocus(); m_StandardButtonsSizerOK->SetDefault(); // Set unit symbol wxStaticText * texts_unit[] = { m_StartPointXUnit, m_StartPointYUnit, m_EndPointXUnit, m_EndPointYUnit, m_ThicknessTextUnit, m_DefaulThicknessTextUnit, NULL }; for( int ii = 0; ; ii++ ) { if( texts_unit[ii] == NULL ) break; texts_unit[ii]->SetLabel( GetAbbreviatedUnitsLabel() ); } wxString msg; // Change texts according to the segment shape: switch ( m_Item->GetShape() ) { case S_CIRCLE: m_StartPointXLabel->SetLabel(_("Center X")); m_StartPointYLabel->SetLabel(_("Center Y")); m_EndPointXLabel->SetLabel(_("Point X")); m_EndPointYLabel->SetLabel(_("Point Y")); m_Angle_Text->Show(false); m_Angle_Ctrl->Show(false); m_AngleUnit->Show(false); break; case S_ARC: m_StartPointXLabel->SetLabel(_("Center X")); m_StartPointYLabel->SetLabel(_("Center Y")); m_EndPointXLabel->SetLabel(_("Start Point X")); m_EndPointYLabel->SetLabel(_("Start Point Y")); msg << m_Item->GetAngle(); m_Angle_Ctrl->SetValue(msg); break; default: m_Angle_Text->Show(false); m_Angle_Ctrl->Show(false); m_AngleUnit->Show(false); break; } PutValueInLocalUnits( *m_Center_StartXCtrl, m_Item->GetStart().x, m_parent->GetInternalUnits() ); PutValueInLocalUnits( *m_Center_StartYCtrl, m_Item->GetStart().y, m_parent->GetInternalUnits() ); PutValueInLocalUnits( *m_EndX_Radius_Ctrl, m_Item->GetEnd().x, m_parent->GetInternalUnits() ); PutValueInLocalUnits( *m_EndY_Ctrl, m_Item->GetEnd().y, m_parent->GetInternalUnits() ); PutValueInLocalUnits( *m_ThicknessCtrl, m_Item->GetWidth(), m_parent->GetInternalUnits() ); int thickness; if( m_Item->GetLayer() == EDGE_N ) thickness = m_brdSettings.m_EdgeSegmentWidth; else thickness = m_brdSettings.m_DrawSegmentWidth; PutValueInLocalUnits( *m_DefaultThicknessCtrl, thickness, m_parent->GetInternalUnits() ); for( int layer=FIRST_NO_COPPER_LAYER; layer <= LAST_NO_COPPER_LAYER; ++layer ) { m_LayerSelectionCtrl->Append( m_parent->GetBoard()->GetLayerName( layer ) ); } int layer = m_Item->GetLayer(); // Control: if ( layer < FIRST_NO_COPPER_LAYER ) layer = FIRST_NO_COPPER_LAYER; if ( layer > LAST_NO_COPPER_LAYER ) layer = LAST_NO_COPPER_LAYER; m_LayerSelectionCtrl->SetSelection( layer - FIRST_NO_COPPER_LAYER ); }
DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParent, const SELECTION& aItems ) : DIALOG_TRACK_VIA_PROPERTIES_BASE( aParent ), m_items( aItems ), m_trackStartX( aParent, m_TrackStartXCtrl, m_TrackStartXUnit ), m_trackStartY( aParent, m_TrackStartYCtrl, m_TrackStartYUnit ), m_trackEndX( aParent, m_TrackEndXCtrl, m_TrackEndXUnit ), m_trackEndY( aParent, m_TrackEndYCtrl, m_TrackEndYUnit ), m_trackWidth( aParent, m_TrackWidthCtrl, m_TrackWidthUnit ), m_viaX( aParent, m_ViaXCtrl, m_ViaXUnit ), m_viaY( aParent, m_ViaYCtrl, m_ViaYUnit ), m_viaDiameter( aParent, m_ViaDiameterCtrl, m_ViaDiameterUnit ), m_viaDrill( aParent, m_ViaDrillCtrl, m_ViaDrillUnit ), m_tracks( false ), m_vias( false ) { wxASSERT( !m_items.Empty() ); // This is a way to trick gcc into considering these variables as initialized OPT<int> trackStartX = NULLOPT; OPT<int> trackStartY = NULLOPT; OPT<int> trackEndX = NULLOPT; OPT<int> trackEndY = NULLOPT; OPT<int> trackWidth = NULLOPT; OPT<PCB_LAYER_ID> trackLayer = NULLOPT; OPT<int> viaX = NULLOPT; OPT<int> viaY = NULLOPT; OPT<int> viaDiameter = NULLOPT; OPT<int> viaDrill = NULLOPT; VIATYPE_T viaType = VIA_NOT_DEFINED; PCB_LAYER_ID viaStartLayer = UNDEFINED_LAYER; PCB_LAYER_ID viaEndLayer = UNDEFINED_LAYER; m_haveUniqueNet = true; int prevNet = -1; m_NetComboBox->SetBoard( aParent->GetBoard() ); m_NetComboBox->Enable( true ); bool hasLocked = false; bool hasUnlocked = false; for( auto& item : m_items ) { int net = static_cast<BOARD_CONNECTED_ITEM*>(item)->GetNetCode(); if( prevNet >= 0 && net != prevNet ) { printf("prev %d net %d\n", net, prevNet ); m_haveUniqueNet = false; break; } prevNet = net; } if ( m_haveUniqueNet ) { m_NetComboBox->SetSelectedNet( prevNet ); } else { m_NetComboBox->SetMultiple( true ); } // Look for values that are common for every item that is selected for( auto& item : m_items ) { switch( item->Type() ) { case PCB_TRACE_T: { const TRACK* t = static_cast<const TRACK*>( item ); if( !m_tracks ) // first track in the list { trackStartX = t->GetStart().x; trackStartY = t->GetStart().y; trackEndX = t->GetEnd().x; trackEndY = t->GetEnd().y; trackWidth = t->GetWidth(); trackLayer = t->GetLayer(); m_tracks = true; } else // check if values are the same for every selected track { if( trackStartX && ( *trackStartX != t->GetStart().x ) ) trackStartX = NULLOPT; if( trackStartY && ( *trackStartY != t->GetStart().y ) ) trackStartY = NULLOPT; if( trackEndX && ( *trackEndX != t->GetEnd().x ) ) trackEndX = NULLOPT; if( trackEndY && ( *trackEndY != t->GetEnd().y ) ) trackEndY = NULLOPT; if( trackWidth && ( *trackWidth != t->GetWidth() ) ) trackWidth = NULLOPT; if( trackLayer && ( *trackLayer != t->GetLayer() ) ) trackLayer = NULLOPT; } if( t->IsLocked() ) hasLocked = true; else hasUnlocked = true; break; } case PCB_VIA_T: { const VIA* v = static_cast<const VIA*>( item ); if( !m_vias ) // first via in the list { viaX = v->GetPosition().x; viaY = v->GetPosition().y; viaDiameter = v->GetWidth(); viaDrill = v->GetDrillValue(); m_vias = true; viaType = v->GetViaType(); viaStartLayer = v->TopLayer(); viaEndLayer = v->BottomLayer(); } else // check if values are the same for every selected via { if( viaX && ( *viaX != v->GetPosition().x ) ) viaX = NULLOPT; if( viaY && ( *viaY != v->GetPosition().y ) ) viaY = NULLOPT; if( viaDiameter && ( *viaDiameter != v->GetWidth() ) ) viaDiameter = NULLOPT; if( viaDrill && ( *viaDrill != v->GetDrillValue() ) ) viaDrill = NULLOPT; if( viaType != v->GetViaType() ) viaType = VIA_NOT_DEFINED; if( viaStartLayer != v->TopLayer() ) viaStartLayer = UNDEFINED_LAYER; if( viaEndLayer != v->BottomLayer() ) viaEndLayer = UNDEFINED_LAYER; } if( v->IsLocked() ) hasLocked = true; else hasUnlocked = true; break; } default: { wxASSERT( false ); break; } } } wxASSERT( m_tracks || m_vias ); if( m_vias ) { setCommonVal( viaX, m_ViaXCtrl, m_viaX ); setCommonVal( viaY, m_ViaYCtrl, m_viaY ); setCommonVal( viaDiameter, m_ViaDiameterCtrl, m_viaDiameter ); setCommonVal( viaDrill, m_ViaDrillCtrl, m_viaDrill ); m_DesignRuleViasUnit->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); int viaSelection = wxNOT_FOUND; for( unsigned ii = 0; ii < aParent->GetDesignSettings().m_ViasDimensionsList.size(); ii++ ) { VIA_DIMENSION* viaDimension = &aParent->GetDesignSettings().m_ViasDimensionsList[ii]; wxString msg = StringFromValue( g_UserUnit, viaDimension->m_Diameter, false ) + " / " + StringFromValue( g_UserUnit, viaDimension->m_Drill, false ); m_DesignRuleViasCtrl->Append( msg, viaDimension ); if( viaSelection == wxNOT_FOUND && viaDiameter == viaDimension->m_Diameter && viaDrill == viaDimension->m_Drill ) { viaSelection = ii; } } m_DesignRuleViasCtrl->SetSelection( viaSelection ); m_DesignRuleViasCtrl->Connect( wxEVT_CHOICE, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES::onViaSelect ), NULL, this ); m_ViaDiameterCtrl->Connect( wxEVT_TEXT, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES::onViaEdit ), NULL, this ); m_ViaDrillCtrl->Connect( wxEVT_TEXT, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES::onViaEdit ), NULL, this ); m_ViaTypeChoice->Connect( wxEVT_CHOICE, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES::onViaEdit ), NULL, this ); m_ViaDiameterCtrl->SetFocus(); m_ViaTypeChoice->Enable(); if( viaType == VIA_THROUGH ) m_ViaTypeChoice->SetSelection( 0 ); else if( viaType == VIA_MICROVIA ) m_ViaTypeChoice->SetSelection( 1 ); else if ( viaType == VIA_BLIND_BURIED ) m_ViaTypeChoice->SetSelection( 2 ); else if( viaType == VIA_NOT_DEFINED ) m_ViaTypeChoice->SetSelection( 3 ); m_ViaStartLayer->SetLayersHotkeys( false ); m_ViaStartLayer->SetLayerSet( LSET::AllNonCuMask() ); m_ViaStartLayer->SetBoardFrame( aParent ); m_ViaStartLayer->Resync(); m_ViaEndLayer->SetLayersHotkeys( false ); m_ViaEndLayer->SetLayerSet( LSET::AllNonCuMask() ); m_ViaEndLayer->SetBoardFrame( aParent ); m_ViaEndLayer->Resync(); m_ViaStartLayer->SetLayerSelection( viaStartLayer ); m_ViaEndLayer->SetLayerSelection( viaEndLayer ); m_ViaStartLayer->Enable( false ); m_ViaEndLayer->Enable( false ); if( viaType != VIA_THROUGH ) // check if selected type isnt through. { m_ViaStartLayer->Enable(); m_ViaEndLayer->Enable(); } } else { m_MainSizer->Hide( m_sbViaSizer, true ); } if( m_tracks ) { setCommonVal( trackStartX, m_TrackStartXCtrl, m_trackStartX ); setCommonVal( trackStartY, m_TrackStartYCtrl, m_trackStartY ); setCommonVal( trackEndX, m_TrackEndXCtrl, m_trackEndX ); setCommonVal( trackEndY, m_TrackEndYCtrl, m_trackEndY ); setCommonVal( trackWidth, m_TrackWidthCtrl, m_trackWidth ); for( unsigned ii = 0; ii < aParent->GetDesignSettings().m_TrackWidthList.size(); ii++ ) { int width = aParent->GetDesignSettings().m_TrackWidthList[ii]; wxString msg = StringFromValue( g_UserUnit, width, false ); m_TrackWidthCtrl->Append( msg ); } m_TrackLayerCtrl->SetLayersHotkeys( false ); m_TrackLayerCtrl->SetLayerSet( LSET::AllNonCuMask() ); m_TrackLayerCtrl->SetBoardFrame( aParent ); m_TrackLayerCtrl->Resync(); if( trackLayer ) m_TrackLayerCtrl->SetLayerSelection( *trackLayer ); m_TrackWidthCtrl->SetFocus(); } else { m_MainSizer->Hide( m_sbTrackSizer, true ); } if( hasLocked && hasUnlocked ) { m_lockedCbox->Set3StateValue( wxCHK_UNDETERMINED ); } else if( hasLocked ) { m_lockedCbox->Set3StateValue( wxCHK_CHECKED ); } else { m_lockedCbox->Set3StateValue( wxCHK_UNCHECKED ); } m_StdButtonsOK->SetDefault(); // Pressing ENTER when any of the text input fields is active applies changes Connect( wxEVT_TEXT_ENTER, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES::onOkClick ), NULL, this ); }
void DIALOG_MODULE_MODULE_EDITOR::initModeditProperties() { SetFocus(); // Display the default path, given by environment variable KISYS3DMOD wxString default_path; wxGetEnv( wxT( KISYS3DMOD ), &default_path ); #ifdef __WINDOWS__ default_path.Replace( wxT( "/" ), wxT( "\\" ) ); #endif m_textCtrl3DDefaultPath->SetValue( default_path ); m_lastSelected3DShapeIndex = -1; // Init 3D shape list S3D_MASTER* draw3D = m_currentModule->Models(); while( draw3D ) { if( !draw3D->GetShape3DName().IsEmpty() ) { S3D_MASTER* draw3DCopy = new S3D_MASTER(NULL); draw3DCopy->Copy( draw3D ); m_shapes3D_list.push_back( draw3DCopy ); m_3D_ShapeNameListBox->Append( draw3DCopy->GetShape3DName() ); } draw3D = (S3D_MASTER*) draw3D->Next(); } m_DocCtrl->SetValue( m_currentModule->GetDescription() ); m_KeywordCtrl->SetValue( m_currentModule->GetKeywords() ); m_referenceCopy = new TEXTE_MODULE( NULL ); m_valueCopy = new TEXTE_MODULE( NULL ); m_referenceCopy->Copy( &m_currentModule->Reference() ); m_valueCopy->Copy( &m_currentModule->Value() ); m_ReferenceCtrl->SetValue( m_referenceCopy->GetText() ); m_ValueCtrl->SetValue( m_valueCopy->GetText() ); m_ValueCtrl->SetValue( m_valueCopy->GetText() ); m_FootprintNameCtrl->SetValue( m_currentModule->GetFPID().Format() ); m_AttributsCtrl->SetItemToolTip( 0, _( "Use this attribute for most non SMD components" ) ); m_AttributsCtrl->SetItemToolTip( 1, _( "Use this attribute for SMD components.\nOnly components with this option are put in the footprint position list file" ) ); m_AttributsCtrl->SetItemToolTip( 2, _( "Use this attribute for \"virtual\" components drawn on board (like a old ISA PC bus connector)" ) ); // Controls on right side of the dialog switch( m_currentModule->GetAttributes() & 255 ) { case 0: m_AttributsCtrl->SetSelection( 0 ); break; case MOD_CMS: m_AttributsCtrl->SetSelection( 1 ); break; case MOD_VIRTUAL: m_AttributsCtrl->SetSelection( 2 ); break; default: m_AttributsCtrl->SetSelection( 0 ); break; } m_AutoPlaceCtrl->SetSelection( (m_currentModule->IsLocked()) ? 1 : 0 ); m_AutoPlaceCtrl->SetItemToolTip( 0, _( "Enable hotkey move commands and Auto Placement" ) ); m_AutoPlaceCtrl->SetItemToolTip( 1, _( "Disable hotkey move commands and Auto Placement" ) ); m_CostRot90Ctrl->SetValue( m_currentModule->GetPlacementCost90() ); m_CostRot180Ctrl->SetValue( m_currentModule->GetPlacementCost180() ); // Initialize 3D parameters m_3D_Scale = new VERTEX_VALUE_CTRL( m_Panel3D, m_bSizerShapeScale ); m_3D_Offset = new VERTEX_VALUE_CTRL( m_Panel3D, m_bSizerShapeOffset ); m_3D_Rotation = new VERTEX_VALUE_CTRL( m_Panel3D, m_bSizerShapeRotation ); // Initialize dialog relative to masks clearances m_NetClearanceUnits->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_SolderMaskMarginUnits->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_SolderPasteMarginUnits->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); wxString msg; PutValueInLocalUnits( *m_NetClearanceValueCtrl, m_currentModule->GetLocalClearance() ); PutValueInLocalUnits( *m_SolderMaskMarginCtrl, m_currentModule->GetLocalSolderMaskMargin() ); // These 2 parameters are usually < 0, so prepare entering a negative value, if current is 0 PutValueInLocalUnits( *m_SolderPasteMarginCtrl, m_currentModule->GetLocalSolderPasteMargin() ); if( m_currentModule->GetLocalSolderPasteMargin() == 0 ) m_SolderPasteMarginCtrl->SetValue( wxT( "-" ) + m_SolderPasteMarginCtrl->GetValue() ); if( m_currentModule->GetLocalSolderPasteMarginRatio() == 0.0 ) msg.Printf( wxT( "-%f" ), m_currentModule->GetLocalSolderPasteMarginRatio() * 100.0 ); else msg.Printf( wxT( "%f" ), m_currentModule->GetLocalSolderPasteMarginRatio() * 100.0 ); m_SolderPasteMarginRatioCtrl->SetValue( msg ); // Add solder paste margin ration in per cent // for the usual default value 0.0, display -0.0 (or -0,0 in some countries) msg.Printf( wxT( "%f" ), m_currentModule->GetLocalSolderPasteMarginRatio() * 100.0 ); if( m_currentModule->GetLocalSolderPasteMarginRatio() == 0.0 && msg[0] == '0') // Sometimes Printf adds a sign if the value is very small (0.0) m_SolderPasteMarginRatioCtrl->SetValue( wxT( "-" ) + msg ); else m_SolderPasteMarginRatioCtrl->SetValue( msg ); // if m_3D_ShapeNameListBox is not empty, preselect first 3D shape if( m_3D_ShapeNameListBox->GetCount() > 0 ) { m_lastSelected3DShapeIndex = 0; m_3D_ShapeNameListBox->SetSelection( m_lastSelected3DShapeIndex ); Transfert3DValuesToDisplay( m_shapes3D_list[m_lastSelected3DShapeIndex] ); } // We have modified the UI, so call Fit() for m_Panel3D // to be sure the m_Panel3D sizers are initialized before opening the dialog m_Panel3D->GetSizer()->Fit( m_Panel3D ); }
bool DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES::TransferDataToWindow() { // Set unit symbol wxStaticText* texts_unit[] = { m_StartPointXUnit, m_StartPointYUnit, m_EndPointXUnit, m_EndPointYUnit, m_ThicknessTextUnit, m_DefaulThicknessTextUnit, }; for( size_t ii = 0; ii < DIM( texts_unit ); ii++ ) { texts_unit[ii]->SetLabel( GetAbbreviatedUnitsLabel() ); } wxString msg; // Change texts according to the segment shape: switch( m_item->GetShape() ) { case S_CIRCLE: SetTitle( _( "Circle Properties" ) ); m_StartPointXLabel->SetLabel( _( "Center X" ) ); m_StartPointYLabel->SetLabel( _( "Center Y" ) ); m_EndPointXLabel->SetLabel( _( "Point X" ) ); m_EndPointYLabel->SetLabel( _( "Point Y" ) ); m_AngleText->Show( false ); m_AngleCtrl->Show( false ); m_AngleUnit->Show( false ); break; case S_ARC: SetTitle( _( "Arc Properties" ) ); m_StartPointXLabel->SetLabel( _( "Center X" ) ); m_StartPointYLabel->SetLabel( _( "Center Y" ) ); m_EndPointXLabel->SetLabel( _( "Start Point X" ) ); m_EndPointYLabel->SetLabel( _( "Start Point Y" ) ); m_AngleValue = m_item->GetAngle() / 10.0; break; case S_SEGMENT: SetTitle( _( "Line Segment Properties" ) ); // Fall through. default: m_AngleText->Show( false ); m_AngleCtrl->Show( false ); m_AngleUnit->Show( false ); break; } PutValueInLocalUnits( *m_Center_StartXCtrl, m_item->GetStart().x ); PutValueInLocalUnits( *m_Center_StartYCtrl, m_item->GetStart().y ); PutValueInLocalUnits( *m_EndX_Radius_Ctrl, m_item->GetEnd().x ); PutValueInLocalUnits( *m_EndY_Ctrl, m_item->GetEnd().y ); PutValueInLocalUnits( *m_ThicknessCtrl, m_item->GetWidth() ); PutValueInLocalUnits( *m_DefaultThicknessCtrl, m_brdSettings.m_ModuleSegmentWidth ); // Configure the layers list selector m_LayerSelectionCtrl->SetLayersHotkeys( false ); m_LayerSelectionCtrl->SetLayerSet( LSET::InternalCuMask().set( Edge_Cuts ) ); m_LayerSelectionCtrl->SetBoardFrame( m_parent ); m_LayerSelectionCtrl->Resync(); if( m_LayerSelectionCtrl->SetLayerSelection( m_item->GetLayer() ) < 0 ) { wxMessageBox( _( "This item was on an unknown layer.\n" "It has been moved to the front silk screen layer. Please fix it." ) ); m_LayerSelectionCtrl->SetLayerSelection( F_SilkS ); } return DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::TransferDataToWindow(); }
wxString PANEL_PREV_3D::formatRotationValue( double aValue ) { return wxString::Format( "%.2f %s", aValue, GetAbbreviatedUnitsLabel( DEGREES ) ); }
void DIALOG_PAD_PROPERTIES::initValues() { wxString msg; double angle; // Setup layers names from board // Should be made first, before calling m_rbCopperLayersSel->SetSelection() m_rbCopperLayersSel->SetString( 0, m_board->GetLayerName( LAYER_N_FRONT ) ); m_rbCopperLayersSel->SetString( 1, m_board->GetLayerName( LAYER_N_BACK ) ); m_PadLayerAdhCmp->SetLabel( m_board->GetLayerName( ADHESIVE_N_FRONT ) ); m_PadLayerAdhCu->SetLabel( m_board->GetLayerName( ADHESIVE_N_BACK ) ); m_PadLayerPateCmp->SetLabel( m_board->GetLayerName( SOLDERPASTE_N_FRONT ) ); m_PadLayerPateCu->SetLabel( m_board->GetLayerName( SOLDERPASTE_N_BACK ) ); m_PadLayerSilkCmp->SetLabel( m_board->GetLayerName( SILKSCREEN_N_FRONT ) ); m_PadLayerSilkCu->SetLabel( m_board->GetLayerName( SILKSCREEN_N_BACK ) ); m_PadLayerMaskCmp->SetLabel( m_board->GetLayerName( SOLDERMASK_N_FRONT ) ); m_PadLayerMaskCu->SetLabel( m_board->GetLayerName( SOLDERMASK_N_BACK ) ); m_PadLayerECO1->SetLabel( m_board->GetLayerName( ECO1_N ) ); m_PadLayerECO2->SetLabel( m_board->GetLayerName( ECO2_N ) ); m_PadLayerDraft->SetLabel( m_board->GetLayerName( DRAW_N ) ); m_isFlipped = false; if( m_currentPad ) { MODULE* module = m_currentPad->GetParent(); if( module->GetLayer() == LAYER_N_BACK ) { m_isFlipped = true; m_staticModuleSideValue->SetLabel( _( "Back side (footprint is mirrored)" ) ); } msg.Printf( wxT( "%.1f" ), module->GetOrientation() / 10.0 ); m_staticModuleRotValue->SetLabel( msg ); } if( m_isFlipped ) { wxPoint pt = m_dummyPad->GetOffset(); NEGATE( pt.y ); m_dummyPad->SetOffset( pt ); wxSize sz = m_dummyPad->GetDelta(); NEGATE( sz.y ); m_dummyPad->SetDelta( sz ); // flip pad's layers m_dummyPad->SetLayerMask( FlipLayerMask( m_dummyPad->GetLayerMask() ) ); } m_staticTextWarningPadFlipped->Show(m_isFlipped); m_PadNumCtrl->SetValue( m_dummyPad->GetPadName() ); m_PadNetNameCtrl->SetValue( m_dummyPad->GetNetname() ); // Display current unit name in dialog: m_PadPosX_Unit->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_PadPosY_Unit->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_PadDrill_X_Unit->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_PadDrill_Y_Unit->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_PadShapeSizeX_Unit->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_PadShapeSizeY_Unit->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_PadShapeOffsetX_Unit->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_PadShapeOffsetY_Unit->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_PadShapeDelta_Unit->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_PadLengthDie_Unit->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); // Display current pad masks clearances units m_NetClearanceUnits->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_SolderMaskMarginUnits->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_SolderPasteMarginUnits->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_ThermalWidthUnits->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); m_ThermalGapUnits->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) ); // Display current pad parameters units: PutValueInLocalUnits( *m_PadPosition_X_Ctrl, m_dummyPad->GetPosition().x ); PutValueInLocalUnits( *m_PadPosition_Y_Ctrl, m_dummyPad->GetPosition().y ); PutValueInLocalUnits( *m_PadDrill_X_Ctrl, m_dummyPad->GetDrillSize().x ); PutValueInLocalUnits( *m_PadDrill_Y_Ctrl, m_dummyPad->GetDrillSize().y ); PutValueInLocalUnits( *m_ShapeSize_X_Ctrl, m_dummyPad->GetSize().x ); PutValueInLocalUnits( *m_ShapeSize_Y_Ctrl, m_dummyPad->GetSize().y ); PutValueInLocalUnits( *m_ShapeOffset_X_Ctrl, m_dummyPad->GetOffset().x ); PutValueInLocalUnits( *m_ShapeOffset_Y_Ctrl, m_dummyPad->GetOffset().y ); if( m_dummyPad->GetDelta().x ) { PutValueInLocalUnits( *m_ShapeDelta_Ctrl, m_dummyPad->GetDelta().x ); m_trapDeltaDirChoice->SetSelection( 0 ); } else { PutValueInLocalUnits( *m_ShapeDelta_Ctrl, m_dummyPad->GetDelta().y ); m_trapDeltaDirChoice->SetSelection( 1 ); } PutValueInLocalUnits( *m_LengthPadToDieCtrl, m_dummyPad->GetPadToDieLength() ); PutValueInLocalUnits( *m_NetClearanceValueCtrl, m_dummyPad->GetLocalClearance() ); PutValueInLocalUnits( *m_SolderMaskMarginCtrl, m_dummyPad->GetLocalSolderMaskMargin() ); PutValueInLocalUnits( *m_ThermalWidthCtrl, m_dummyPad->GetThermalWidth() ); PutValueInLocalUnits( *m_ThermalGapCtrl, m_dummyPad->GetThermalGap() ); // These 2 parameters are usually < 0, so prepare entering a negative value, if current is 0 PutValueInLocalUnits( *m_SolderPasteMarginCtrl, m_dummyPad->GetLocalSolderPasteMargin() ); if( m_dummyPad->GetLocalSolderPasteMargin() == 0 ) m_SolderPasteMarginCtrl->SetValue( wxT( "-" ) + m_SolderPasteMarginCtrl->GetValue() ); msg.Printf( wxT( "%f" ), m_dummyPad->GetLocalSolderPasteMarginRatio() * 100.0 ); if( m_dummyPad->GetLocalSolderPasteMarginRatio() == 0.0 && msg[0] == '0' ) // Sometimes Printf adds a sign if the value is small m_SolderPasteMarginRatioCtrl->SetValue( wxT( "-" ) + msg ); else m_SolderPasteMarginRatioCtrl->SetValue( msg ); switch( m_dummyPad->GetZoneConnection() ) { default: case UNDEFINED_CONNECTION: m_ZoneConnectionChoice->SetSelection( 0 ); break; case PAD_IN_ZONE: m_ZoneConnectionChoice->SetSelection( 1 ); break; case THERMAL_PAD: m_ZoneConnectionChoice->SetSelection( 2 ); break; case PAD_NOT_IN_ZONE: m_ZoneConnectionChoice->SetSelection( 3 ); break; } if( m_currentPad ) { MODULE* module = m_currentPad->GetParent(); angle = m_currentPad->GetOrientation() - module->GetOrientation(); if( m_isFlipped ) NEGATE( angle ); m_dummyPad->SetOrientation( angle ); } angle = m_dummyPad->GetOrientation(); NORMALIZE_ANGLE_180( angle ); // ? normalizing is in D_PAD::SetOrientation() // Set layers used by this pad: : setPadLayersList( m_dummyPad->GetLayerMask() ); // Pad Orient switch( int( angle ) ) { case 0: m_PadOrient->SetSelection( 0 ); break; case 900: m_PadOrient->SetSelection( 1 ); break; case -900: m_PadOrient->SetSelection( 2 ); break; case 1800: case -1800: m_PadOrient->SetSelection( 3 ); break; default: m_PadOrient->SetSelection( 4 ); break; } switch( m_dummyPad->GetShape() ) { default: case PAD_CIRCLE: m_PadShape->SetSelection( 0 ); break; case PAD_OVAL: m_PadShape->SetSelection( 1 ); break; case PAD_RECT: m_PadShape->SetSelection( 2 ); break; case PAD_TRAPEZOID: m_PadShape->SetSelection( 3 ); break; } msg.Printf( wxT( "%g" ), angle ); m_PadOrientCtrl->SetValue( msg ); // Type of pad selection m_PadType->SetSelection( 0 ); for( unsigned ii = 0; ii < NBTYPES; ii++ ) { if( CodeType[ii] == m_dummyPad->GetAttribute() ) { m_PadType->SetSelection( ii ); break; } } // Enable/disable Pad name,and pad length die // (disable for NPTH pads (mechanical pads) bool enable = m_dummyPad->GetAttribute() != PAD_HOLE_NOT_PLATED; m_PadNumCtrl->Enable( enable ); m_PadNetNameCtrl->Enable( enable ); m_LengthPadToDieCtrl->Enable( enable ); if( m_dummyPad->GetDrillShape() != PAD_OVAL ) m_DrillShapeCtrl->SetSelection( 0 ); else m_DrillShapeCtrl->SetSelection( 1 ); // Update some dialog widgets state (Enable/disable options): wxCommandEvent cmd_event; setPadLayersList( m_dummyPad->GetLayerMask() ); OnDrillShapeSelected( cmd_event ); OnPadShapeSelection( cmd_event ); }
void DIALOG_GRAPHIC_ITEM_PROPERTIES::initDlg() { m_StandardButtonsSizerOK->SetDefault(); // Set unit symbol wxStaticText* texts_unit[] = { m_StartPointXUnit, m_StartPointYUnit, m_EndPointXUnit, m_EndPointYUnit, m_ThicknessTextUnit, m_DefaulThicknessTextUnit, NULL }; for( int ii = 0; ; ii++ ) { if( texts_unit[ii] == NULL ) break; texts_unit[ii]->SetLabel( GetAbbreviatedUnitsLabel() ); } wxString msg; // Change texts according to the segment shape: switch( m_item->GetShape() ) { case S_CIRCLE: SetTitle( _( "Circle Properties" ) ); m_StartPointXLabel->SetLabel( _( "Center X" ) ); m_StartPointYLabel->SetLabel( _( "Center Y" ) ); m_EndPointXLabel->SetLabel( _( "Point X" ) ); m_EndPointYLabel->SetLabel( _( "Point Y" ) ); m_Angle_Text->Show( false ); m_Angle_Ctrl->Show( false ); m_AngleUnit->Show( false ); break; case S_ARC: SetTitle( _( "Arc Properties" ) ); m_StartPointXLabel->SetLabel( _( "Center X" ) ); m_StartPointYLabel->SetLabel( _( "Center Y" ) ); m_EndPointXLabel->SetLabel( _( "Start Point X" ) ); m_EndPointYLabel->SetLabel( _( "Start Point Y" ) ); // Here the angle is a double, but the UI is still working with integers. msg << int( m_item->GetAngle() ); m_Angle_Ctrl->SetValue( msg ); break; case S_SEGMENT: SetTitle( _( "Line Segment Properties" ) ); // Fall through. default: m_Angle_Text->Show( false ); m_Angle_Ctrl->Show( false ); m_AngleUnit->Show( false ); break; } PutValueInLocalUnits( *m_Center_StartXCtrl, m_item->GetStart().x ); PutValueInLocalUnits( *m_Center_StartYCtrl, m_item->GetStart().y ); PutValueInLocalUnits( *m_EndX_Radius_Ctrl, m_item->GetEnd().x ); PutValueInLocalUnits( *m_EndY_Ctrl, m_item->GetEnd().y ); PutValueInLocalUnits( *m_ThicknessCtrl, m_item->GetWidth() ); int thickness; if( m_item->GetLayer() == Edge_Cuts ) thickness = m_brdSettings.m_EdgeSegmentWidth; else thickness = m_brdSettings.m_DrawSegmentWidth; PutValueInLocalUnits( *m_DefaultThicknessCtrl, thickness ); // Configure the layers list selector m_LayerSelectionCtrl->SetLayersHotkeys( false ); m_LayerSelectionCtrl->SetLayerSet( LSET::AllCuMask() ); m_LayerSelectionCtrl->SetBoardFrame( m_parent ); m_LayerSelectionCtrl->Resync(); if( m_LayerSelectionCtrl->SetLayerSelection( m_item->GetLayer() ) < 0 ) { wxMessageBox( _( "This item was on an unknown layer.\n" "It has been moved to the drawings layer. Please fix it." ) ); m_LayerSelectionCtrl->SetLayerSelection( Dwgs_User ); } }