KiCad PCB EDA Suite
DIALOG_PAD_PROPERTIES Class Reference

DIALOG_PAD_PROPERTIES, derived from DIALOG_PAD_PROPERTIES_BASE, created by wxFormBuilder. More...

#include <dialog_pad_properties.h>

Inheritance diagram for DIALOG_PAD_PROPERTIES:
DIALOG_PAD_PROPERTIES_BASE DIALOG_SHIM KIWAY_HOLDER

Public Types

enum  HOLDER_TYPE { DIALOG, FRAME, PANEL }
 

Public Member Functions

 DIALOG_PAD_PROPERTIES (PCB_BASE_FRAME *aParent, D_PAD *aPad)
 
 ~DIALOG_PAD_PROPERTIES ()
 
void SetInitialFocus (wxWindow *aWindow)
 Sets the window (usually a wxTextCtrl) that should be focused when the dialog is shown. More...
 
int ShowQuasiModal ()
 
void EndQuasiModal (int retCode)
 
bool IsQuasiModal ()
 
bool Show (bool show) override
 
bool Enable (bool enable) override
 
void OnPaint (wxPaintEvent &event)
 
EDA_UNITS GetUserUnits () const
 
HOLDER_TYPE GetType ()
 
KIWAYKiway () const
 Function Kiway returns a reference to the KIWAY that this object has an opportunity to participate in. More...
 
PROJECTPrj () const
 Function Prj returns a reference to the PROJECT "associated with" this KIWAY. More...
 
void SetKiway (wxWindow *aDest, KIWAY *aKiway)
 Function SetKiway. More...
 

Static Public Member Functions

static bool IsCtrl (int aChar, const wxKeyEvent &e)
 
static bool IsShiftCtrl (int aChar, const wxKeyEvent &e)
 

Protected Types

enum  { wxID_DIALOG_EDIT_PAD = 1000, wxID_PADNUMCTRL }
 

Protected Member Functions

void FinishDialogSettings ()
 In all dialogs, we must call the same functions to fix minimal dlg size, the default position and perhaps some others to fix a few issues depending on Windows Managers this helper function does these calls. More...
 
void SetSizeInDU (int x, int y)
 Set the dialog to the given dimensions in "dialog units". More...
 
int HorizPixelsFromDU (int x)
 Convert an integer number of dialog units to pixels, horizontally. More...
 
int VertPixelsFromDU (int y)
 Convert an integer number of dialog units to pixels, vertically. More...
 
void ResetSize ()
 Clear the existing dialog size and position. More...
 

Protected Attributes

wxNotebook * m_notebook
 
wxPanel * m_panelGeneral
 
wxStaticText * m_PadNumText
 
wxTextCtrl * m_PadNumCtrl
 
wxStaticText * m_PadNameText
 
NET_SELECTORm_PadNetSelector
 
wxStaticText * m_staticText44
 
wxChoice * m_PadType
 
wxStaticText * m_staticText45
 
wxChoice * m_PadShape
 
wxStaticText * m_posXLabel
 
wxTextCtrl * m_posXCtrl
 
wxStaticText * m_posXUnits
 
wxStaticText * m_posYLabel
 
wxTextCtrl * m_posYCtrl
 
wxStaticText * m_posYUnits
 
wxStaticText * m_sizeXLabel
 
wxTextCtrl * m_sizeXCtrl
 
wxStaticText * m_sizeXUnits
 
wxStaticText * m_sizeYLabel
 
wxTextCtrl * m_sizeYCtrl
 
wxStaticText * m_sizeYUnits
 
wxStaticText * m_PadOrientText
 
wxComboBox * m_orientation
 
wxStaticText * m_staticText491
 
wxStaticText * m_offsetXLabel
 
wxTextCtrl * m_offsetXCtrl
 
wxStaticText * m_offsetXUnits
 
wxStaticText * m_offsetYLabel
 
wxTextCtrl * m_offsetYCtrl
 
wxStaticText * m_offsetYUnits
 
wxStaticText * m_trapDeltaLabel
 
wxTextCtrl * m_trapDeltaCtrl
 
wxStaticText * m_trapDeltaUnits
 
wxStaticText * m_trapAxisLabel
 
wxChoice * m_trapAxisCtrl
 
wxStaticText * m_staticTextCornerSizeRatio
 
TEXT_CTRL_EVALm_tcCornerSizeRatio
 
wxStaticText * m_staticTextCornerSizeRatioUnit
 
wxStaticText * m_cornerRadiusLabel
 
wxTextCtrl * m_tcCornerRadius
 
wxStaticText * m_cornerRadiusUnits
 
wxStaticText * m_staticTextChamferRatio
 
TEXT_CTRL_EVALm_tcChamferRatio
 
wxStaticText * m_staticTextChamferRatioUnit
 
wxStaticText * m_staticTextChamferCorner
 
wxCheckBox * m_cbTopLeft
 
wxCheckBox * m_cbTopRight
 
wxCheckBox * m_cbBottomLeft
 
wxCheckBox * m_cbBottomRight
 
wxBoxSizer * m_middleBoxSizer
 
wxStaticText * m_holeShapeLabel
 
wxChoice * m_holeShapeCtrl
 
wxStaticText * m_staticText51
 
wxStaticText * m_holeXLabel
 
wxTextCtrl * m_holeXCtrl
 
wxStaticText * m_holeXUnits
 
wxStaticText * m_holeYLabel
 
wxTextCtrl * m_holeYCtrl
 
wxStaticText * m_holeYUnits
 
wxStaticText * m_padToDieLabel
 
wxTextCtrl * m_padToDieCtrl
 
wxStaticText * m_padToDieUnits
 
wxBoxSizer * m_FlippedWarningSizer
 
wxStaticBitmap * m_FlippedWarningIcon
 
wxStaticText * m_staticText86
 
wxStaticText * m_staticText511
 
wxChoice * m_rbCopperLayersSel
 
wxStaticText * m_techLayersLabel
 
wxCheckBox * m_PadLayerAdhCmp
 
wxCheckBox * m_PadLayerAdhCu
 
wxCheckBox * m_PadLayerPateCmp
 
wxCheckBox * m_PadLayerPateCu
 
wxCheckBox * m_PadLayerSilkCmp
 
wxCheckBox * m_PadLayerSilkCu
 
wxCheckBox * m_PadLayerMaskCmp
 
wxCheckBox * m_PadLayerMaskCu
 
wxCheckBox * m_PadLayerDraft
 
wxCheckBox * m_PadLayerECO1
 
wxCheckBox * m_PadLayerECO2
 
wxStaticText * m_staticTextFabProperty
 
wxChoice * m_choiceFabProperty
 
wxPanel * m_localSettingsPanel
 
wxStaticText * m_staticTextInfoPosValue
 
wxStaticText * m_staticTextInfoNegVal
 
wxStaticText * m_clearanceLabel
 
wxTextCtrl * m_clearanceCtrl
 
wxStaticText * m_clearanceUnits
 
wxStaticText * m_maskClearanceLabel
 
wxTextCtrl * m_maskClearanceCtrl
 
wxStaticText * m_maskClearanceUnits
 
wxStaticText * m_pasteClearanceLabel
 
wxTextCtrl * m_pasteClearanceCtrl
 
wxStaticText * m_pasteClearanceUnits
 
wxStaticText * m_staticTextRatio
 
TEXT_CTRL_EVALm_SolderPasteMarginRatioCtrl
 
wxStaticText * m_SolderPasteRatioMarginUnits
 
wxSimplebook * m_nonCopperWarningBook
 
wxStaticText * m_nonCopperNote
 
wxStaticText * m_staticTextInfoPaste
 
wxStaticBitmap * m_nonCopperWarningIcon
 
wxStaticText * m_nonCopperWarningText
 
wxStaticBoxSizer * m_sbSizerZonesSettings
 
wxStaticText * m_staticText40
 
wxChoice * m_ZoneConnectionChoice
 
wxStaticText * m_spokeWidthLabel
 
wxTextCtrl * m_spokeWidthCtrl
 
wxStaticText * m_spokeWidthUnits
 
wxStaticText * m_thermalGapLabel
 
wxTextCtrl * m_thermalGapCtrl
 
wxStaticText * m_thermalGapUnits
 
wxStaticText * m_staticTextcps
 
wxChoice * m_ZoneCustomPadShape
 
wxPanel * m_panelCustomShapePrimitives
 
wxBoxSizer * m_bSizerPanelPrimitives
 
wxStaticText * m_staticTextPrimitivesList
 
wxStaticText * m_staticTextPrimitiveListWarning
 
wxListView * m_listCtrlPrimitives
 
wxButton * m_buttonDel
 
wxButton * m_buttonEditShape
 
wxButton * m_buttonAddShape
 
wxButton * m_buttonDup
 
wxButton * m_buttonGeometry
 
wxStaticText * m_parentInfoLine1
 
wxStaticText * m_parentInfoLine2
 
PCB_DRAW_PANEL_GALm_panelShowPadGal
 
KIGFX::GAL_DISPLAY_OPTIONS m_galOptions
 
wxCheckBox * m_cbShowPadOutline
 
wxStaticLine * m_staticline13
 
wxStdDialogButtonSizer * m_sdbSizer
 
wxButton * m_sdbSizerOK
 
wxButton * m_sdbSizerCancel
 
EDA_UNITS m_units
 
std::string m_hash_key
 
bool m_firstPaintEvent
 
wxWindow * m_initialFocusTarget
 
WX_EVENT_LOOPm_qmodal_loop
 
bool m_qmodal_showing
 
WDO_ENABLE_DISABLEm_qmodal_parent_disabler
 
EDA_BASE_FRAMEm_parentFrame
 
std::vector< wxWindow * > m_tabOrder
 

Private Member Functions

void prepareCanvas ()
 
void initValues ()
 
void displayPrimitivesList ()
 
bool padValuesOK ()
 test if all values are acceptable for the pad More...
 
void redraw ()
 
void editPrimitive ()
 
void updateRoundRectCornerValues ()
 
void enablePrimitivePage (bool aEnable)
 enable (or disable) the primitive page editor More...
 
void setPadLayersList (LSET layer_mask)
 Function setPadLayersList updates the CheckBox states in pad layers list,. More...
 
bool transferDataToPad (D_PAD *aPad)
 Copy values from dialog field to aPad's members. More...
 
void OnInitDialog (wxInitDialogEvent &event) override
 
void OnResize (wxSizeEvent &event)
 
void OnCancel (wxCommandEvent &event) override
 
void OnUpdateUI (wxUpdateUIEvent &event) override
 
void OnUpdateUINonCopperWarning (wxUpdateUIEvent &event) override
 
void OnPadShapeSelection (wxCommandEvent &event) override
 
void OnDrillShapeSelected (wxCommandEvent &event) override
 
void onChangePadMode (wxCommandEvent &event) override
 
void PadOrientEvent (wxCommandEvent &event) override
 
void PadTypeSelected (wxCommandEvent &event) override
 
void OnSetLayers (wxCommandEvent &event) override
 
void onCornerSizePercentChange (wxCommandEvent &event) override
 
void onCornerRadiusChange (wxCommandEvent &event) override
 
void OnValuesChanged (wxCommandEvent &event) override
 Called when a dimension has changed. More...
 
bool TransferDataFromWindow () override
 Updates the different parameters for the component being edited. More...
 
bool TransferDataToWindow () override
 
void onDeletePrimitive (wxCommandEvent &event) override
 Event handlers of basic shapes list panel. More...
 
void onEditPrimitive (wxCommandEvent &event) override
 
void onAddPrimitive (wxCommandEvent &event) override
 
void onGeometryTransform (wxCommandEvent &event) override
 
void onDuplicatePrimitive (wxCommandEvent &event) override
 
void onPrimitiveDClick (wxMouseEvent &event) override
 Called on a double click on the basic shapes list. More...
 
void OnPrimitiveSelection (wxListEvent &event) override
 Called on selection/deselection of a basic shape. More...
 
PAD_PROP_T getSelectedProperty ()
 Return the pad property currently selected. More...
 

Private Attributes

PCB_BASE_FRAMEm_parent
 
D_PADm_currentPad
 
D_PADm_dummyPad
 
D_PADm_padMaster
 
BOARDm_board
 
bool m_isFlipped
 
bool m_canUpdate
 
bool m_canEditNetName
 
std::vector< PAD_CS_PRIMITIVEm_primitives
 
COLOR4D m_selectedColor
 
std::vector< DRAWSEGMENT * > m_highlight
 
KIGFX::ORIGIN_VIEWITEMm_axisOrigin
 
UNIT_BINDER m_posX
 
UNIT_BINDER m_posY
 
UNIT_BINDER m_sizeX
 
UNIT_BINDER m_sizeY
 
UNIT_BINDER m_offsetX
 
UNIT_BINDER m_offsetY
 
UNIT_BINDER m_padToDie
 
UNIT_BINDER m_trapDelta
 
UNIT_BINDER m_cornerRadius
 
UNIT_BINDER m_holeX
 
UNIT_BINDER m_holeY
 
wxFloatingPointValidator< double > m_OrientValidator
 
double m_OrientValue
 
UNIT_BINDER m_clearance
 
UNIT_BINDER m_maskClearance
 
UNIT_BINDER m_pasteClearance
 
UNIT_BINDER m_spokeWidth
 
UNIT_BINDER m_thermalGap
 

Static Private Attributes

static bool m_sketchPreview = false
 

Detailed Description

DIALOG_PAD_PROPERTIES, derived from DIALOG_PAD_PROPERTIES_BASE, created by wxFormBuilder.

Definition at line 47 of file dialog_pad_properties.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
protectedinherited

◆ HOLDER_TYPE

enum KIWAY_HOLDER::HOLDER_TYPE
inherited
Enumerator
DIALOG 
FRAME 
PANEL 

Definition at line 42 of file kiway_holder.h.

Constructor & Destructor Documentation

◆ DIALOG_PAD_PROPERTIES()

DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES ( PCB_BASE_FRAME aParent,
D_PAD aPad 
)

Definition at line 117 of file dialog_pad_properties.cpp.

117  :
118  DIALOG_PAD_PROPERTIES_BASE( aParent ),
119  m_parent( aParent ),
120  m_canUpdate( false ),
123  m_sizeX( aParent, m_sizeXLabel, m_sizeXCtrl, m_sizeXUnits, true ),
124  m_sizeY( aParent, m_sizeYLabel, m_sizeYCtrl, m_sizeYUnits, true ),
130  m_holeX( aParent, m_holeXLabel, m_holeXCtrl, m_holeXUnits, true ),
131  m_holeY( aParent, m_holeYLabel, m_holeYCtrl, m_holeYUnits, true ),
138 {
139  m_currentPad = aPad; // aPad can be NULL, if the dialog is called
140  // from the footprint editor to set default pad setup
141 
143 
144  // Disable the pad property if not allowed in advanced config
145  if( !ADVANCED_CFG::GetCfg().m_EnableUsePadProperty )
146  {
147  m_staticTextFabProperty->Show( false );
148  m_choiceFabProperty->Show( false );
149  }
150 
153 
154  m_OrientValidator.SetRange( -360.0, 360.0 );
155  m_orientation->SetValidator( m_OrientValidator );
156  m_OrientValidator.SetWindow( m_orientation );
157 
158  m_cbShowPadOutline->SetValue( m_sketchPreview );
159 
162 
164  m_dummyPad = new D_PAD( (MODULE*) NULL );
165 
166  if( aPad )
167  {
168  *m_dummyPad = *aPad;
170  }
171  else // We are editing a "master" pad, i.e. a template to create new pads
173 
174  initValues();
175 
176  wxFont infoFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
177  infoFont.SetSymbolicSize( wxFONTSIZE_SMALL );
178  m_techLayersLabel->SetFont( infoFont );
179  m_parentInfoLine1->SetFont( infoFont );
180  m_parentInfoLine2->SetFont( infoFont );
181 
182  infoFont.SetStyle( wxFONTSTYLE_ITALIC );
183  m_nonCopperNote->SetFont( infoFont );
184  m_staticTextInfoPaste->SetFont( infoFont );
185  m_staticTextInfoNegVal->SetFont( infoFont );
186  m_staticTextInfoPosValue->SetFont( infoFont );
187 
188  // Usually, TransferDataToWindow is called by OnInitDialog
189  // calling it here fixes all widget sizes so FinishDialogSettings can safely fix minsizes
191 
192  // Initialize canvas to be able to display the dummy pad:
193  prepareCanvas();
194 
196  m_sdbSizerOK->SetDefault();
197  m_canUpdate = true;
198 
199  m_PadNetSelector->Connect( NET_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES::OnValuesChanged ), NULL, this );
200 
201  // Now all widgets have the size fixed, call FinishDialogSettings
203 }
void OnValuesChanged(wxCommandEvent &event) override
Called when a dimension has changed.
virtual BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Function GetDesignSettings returns the BOARD_DESIGN_SETTINGS for the BOARD owned by this frame.
void SetBoard(BOARD *aBoard)
void FinishDialogSettings()
In all dialogs, we must call the same functions to fix minimal dlg size, the default position and per...
wxFloatingPointValidator< double > m_OrientValidator
void SetInitialFocus(wxWindow *aWindow)
Sets the window (usually a wxTextCtrl) that should be focused when the dialog is shown.
Definition: dialog_shim.h:115
wxBitmap KiBitmap(BITMAP_DEF aBitmap)
Construct a wxBitmap from a memory record, held in a BITMAP_DEF.
Definition: bitmap.cpp:80
#define SELECTED
Definition: base_struct.h:124
#define NULL
const BITMAP_OPAQUE dialog_warning_xpm[1]
#define BRIGHTENED
item is drawn with a bright contour
Definition: base_struct.h:140
void SetNetInfo(NETINFO_LIST *aNetInfoList)
NETINFO_LIST & GetNetInfo()
Definition: class_board.h:731
#define HIGHLIGHTED
item is drawn in normal colors, when the rest is darkened
Definition: base_struct.h:139
D_PAD m_Pad_Master
A dummy pad to store all default parameters.
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: base_struct.h:240
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers of advanced config.
DIALOG_PAD_PROPERTIES_BASE(wxWindow *parent, wxWindowID id=wxID_DIALOG_EDIT_PAD, const wxString &title=_("Pad Properties"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(764, 581), long style=wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER)
BOARD * GetBoard() const

References BRIGHTENED, EDA_ITEM::ClearFlags(), dialog_warning_xpm, DIALOG_SHIM::FinishDialogSettings(), PCB_BASE_FRAME::GetBoard(), ADVANCED_CFG::GetCfg(), PCB_BASE_FRAME::GetDesignSettings(), BOARD::GetNetInfo(), HIGHLIGHTED, initValues(), KiBitmap(), m_board, m_canUpdate, DIALOG_PAD_PROPERTIES_BASE::m_cbShowPadOutline, DIALOG_PAD_PROPERTIES_BASE::m_choiceFabProperty, m_currentPad, m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_FlippedWarningIcon, DIALOG_PAD_PROPERTIES_BASE::m_nonCopperNote, DIALOG_PAD_PROPERTIES_BASE::m_nonCopperWarningIcon, DIALOG_PAD_PROPERTIES_BASE::m_orientation, m_OrientValidator, BOARD_DESIGN_SETTINGS::m_Pad_Master, m_padMaster, DIALOG_PAD_PROPERTIES_BASE::m_PadNetSelector, DIALOG_PAD_PROPERTIES_BASE::m_PadNumCtrl, m_parent, DIALOG_PAD_PROPERTIES_BASE::m_parentInfoLine1, DIALOG_PAD_PROPERTIES_BASE::m_parentInfoLine2, DIALOG_PAD_PROPERTIES_BASE::m_sdbSizerOK, m_sketchPreview, DIALOG_PAD_PROPERTIES_BASE::m_staticTextFabProperty, DIALOG_PAD_PROPERTIES_BASE::m_staticTextInfoNegVal, DIALOG_PAD_PROPERTIES_BASE::m_staticTextInfoPaste, DIALOG_PAD_PROPERTIES_BASE::m_staticTextInfoPosValue, DIALOG_PAD_PROPERTIES_BASE::m_techLayersLabel, NULL, OnValuesChanged(), prepareCanvas(), SELECTED, NET_SELECTOR::SetBoard(), DIALOG_SHIM::SetInitialFocus(), NET_SELECTOR::SetNetInfo(), and TransferDataToWindow().

◆ ~DIALOG_PAD_PROPERTIES()

DIALOG_PAD_PROPERTIES::~DIALOG_PAD_PROPERTIES ( )

Definition at line 206 of file dialog_pad_properties.cpp.

207 {
208  m_PadNetSelector->Disconnect( NET_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES::OnValuesChanged ), NULL, this );
209 
210  delete m_dummyPad;
211  delete m_axisOrigin;
212 }
void OnValuesChanged(wxCommandEvent &event) override
Called when a dimension has changed.
KIGFX::ORIGIN_VIEWITEM * m_axisOrigin
#define NULL

References m_axisOrigin, m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_PadNetSelector, NULL, and OnValuesChanged().

Member Function Documentation

◆ displayPrimitivesList()

void DIALOG_PAD_PROPERTIES::displayPrimitivesList ( )
private

Definition at line 665 of file dialog_pad_properties.cpp.

666 {
667  m_listCtrlPrimitives->ClearAll();
668 
669  wxListItem itemCol;
670  itemCol.SetImage(-1);
671 
672  for( int ii = 0; ii < 5; ++ii )
673  m_listCtrlPrimitives->InsertColumn(ii, itemCol);
674 
675  wxString bs_info[5];
676 
677  for( unsigned ii = 0; ii < m_primitives.size(); ++ii )
678  {
679  const PAD_CS_PRIMITIVE& primitive = m_primitives[ii];
680 
681  for( unsigned jj = 0; jj < 5; ++jj )
682  bs_info[jj].Empty();
683 
684  bs_info[4] = wxString::Format( _( "width %s" ),
685  MessageTextFromValue( m_units, primitive.m_Thickness, true ) );
686 
687  switch( primitive.m_Shape )
688  {
689  case S_SEGMENT: // usual segment : line with rounded ends
690  bs_info[0] = _( "Segment" );
691  bs_info[1] = _( "from " ) + formatCoord( m_units, primitive.m_Start );
692  bs_info[2] = _( "to " ) + formatCoord( m_units, primitive.m_End );
693  break;
694 
695  case S_CURVE: // Bezier segment
696  bs_info[0] = _( "Bezier" );
697  bs_info[1] = _( "from " ) + formatCoord( m_units, primitive.m_Start );
698  bs_info[2] = _( "to " ) + formatCoord( m_units, primitive.m_End );
699  break;
700 
701  case S_ARC: // Arc with rounded ends
702  bs_info[0] = _( "Arc" );
703  bs_info[1] = _( "center " ) + formatCoord( m_units, primitive.m_Start );// Center
704  bs_info[2] = _( "start " ) + formatCoord( m_units, primitive.m_End ); // Start point
705  bs_info[3] = wxString::Format( _( "angle %s" ), FormatAngle( primitive.m_ArcAngle ) );
706  break;
707 
708  case S_CIRCLE: // ring or circle
709  if( primitive.m_Thickness )
710  bs_info[0] = _( "ring" );
711  else
712  bs_info[0] = _( "circle" );
713 
714  bs_info[1] = formatCoord( m_units, primitive.m_Start );
715  bs_info[2] = wxString::Format( _( "radius %s" ),
716  MessageTextFromValue( m_units, primitive.m_Radius, true ) );
717  break;
718 
719  case S_POLYGON: // polygon
720  bs_info[0] = "Polygon";
721  bs_info[1] = wxString::Format( _( "corners count %d" ), (int) primitive.m_Poly.size() );
722  break;
723 
724  default:
725  bs_info[0] = "Unknown primitive";
726  break;
727  }
728 
729  long tmp = m_listCtrlPrimitives->InsertItem(ii, bs_info[0]);
730  m_listCtrlPrimitives->SetItemData(tmp, ii);
731 
732  for( int jj = 0, col = 0; jj < 5; ++jj )
733  {
734  m_listCtrlPrimitives->SetItem(tmp, col++, bs_info[jj]);
735  }
736  }
737 
738  // Now columns are filled, ensure correct width of columns
739  for( unsigned ii = 0; ii < 5; ++ii )
740  m_listCtrlPrimitives->SetColumnWidth( ii, wxLIST_AUTOSIZE );
741 }
static wxString formatCoord(EDA_UNITS aUnits, wxPoint aCoord)
wxPoint m_Start
angle of an arc, from its starting point, in 0.1 deg
Definition: class_pad.h:74
polygon (not yet used for tracks, but could be in microwave apps)
usual segment : line with rounded ends
std::string FormatAngle(double aAngle)
Function FormatAngle converts aAngle from board units to a string appropriate for writing to file.
Definition: base_units.cpp:560
int m_Radius
thickness of segment or outline For filled S_CIRCLE shape, thickness = 0.
Definition: class_pad.h:72
std::vector< wxPoint > m_Poly
Bezier Control point 2.
Definition: class_pad.h:78
Arcs (with rounded ends)
Helper class to handle a primitive (basic shape: polygon, segment, circle or arc) to build a custom p...
Definition: class_pad.h:65
Bezier Curve.
wxPoint m_End
is also the center of the circle and arc
Definition: class_pad.h:75
STROKE_T m_Shape
Definition: class_pad.h:68
int m_Thickness
S_SEGMENT, S_ARC, S_CIRCLE, S_POLYGON only (same as DRAWSEGMENT)
Definition: class_pad.h:69
wxString MessageTextFromValue(EDA_UNITS aUnits, int aValue, bool aUseMils, EDA_DATA_TYPE aType)
Definition: base_units.cpp:124
EDA_UNITS m_units
Definition: dialog_shim.h:196
std::vector< PAD_CS_PRIMITIVE > m_primitives
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
#define _(s)
Definition: 3d_actions.cpp:33
double m_ArcAngle
radius of a circle
Definition: class_pad.h:73

References _, Format(), FormatAngle(), formatCoord(), PAD_CS_PRIMITIVE::m_ArcAngle, PAD_CS_PRIMITIVE::m_End, DIALOG_PAD_PROPERTIES_BASE::m_listCtrlPrimitives, PAD_CS_PRIMITIVE::m_Poly, m_primitives, PAD_CS_PRIMITIVE::m_Radius, PAD_CS_PRIMITIVE::m_Shape, PAD_CS_PRIMITIVE::m_Start, PAD_CS_PRIMITIVE::m_Thickness, DIALOG_SHIM::m_units, MessageTextFromValue(), S_ARC, S_CIRCLE, S_CURVE, S_POLYGON, and S_SEGMENT.

Referenced by editPrimitive(), initValues(), onAddPrimitive(), onDeletePrimitive(), onDuplicatePrimitive(), and onGeometryTransform().

◆ editPrimitive()

void DIALOG_PAD_PROPERTIES::editPrimitive ( )
private

Definition at line 1750 of file dialog_pad_properties.cpp.

1751 {
1752  long select = m_listCtrlPrimitives->GetFirstSelected();
1753 
1754  if( select < 0 )
1755  {
1756  wxMessageBox( _( "No shape selected" ) );
1757  return;
1758  }
1759 
1760  PAD_CS_PRIMITIVE& shape = m_primitives[select];
1761 
1762  if( shape.m_Shape == S_POLYGON )
1763  {
1764  DIALOG_PAD_PRIMITIVE_POLY_PROPS dlg( this, m_parent, &shape );
1765 
1766  if( dlg.ShowModal() != wxID_OK )
1767  return;
1768 
1769  dlg.TransferDataFromWindow();
1770  }
1771 
1772  else
1773  {
1774  DIALOG_PAD_PRIMITIVES_PROPERTIES dlg( this, m_parent, &shape );
1775 
1776  if( dlg.ShowModal() != wxID_OK )
1777  return;
1778 
1779  dlg.TransferDataFromWindow();
1780  }
1781 
1783 
1784  if( m_canUpdate )
1785  {
1787  redraw();
1788  }
1789 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad's members.
polygon (not yet used for tracks, but could be in microwave apps)
Helper class to handle a primitive (basic shape: polygon, segment, circle or arc) to build a custom p...
Definition: class_pad.h:65
STROKE_T m_Shape
Definition: class_pad.h:68
a dialog to edit basic polygonal shape parameters
std::vector< PAD_CS_PRIMITIVE > m_primitives
#define _(s)
Definition: 3d_actions.cpp:33
a dialog to edit basics shapes parameters.

References _, displayPrimitivesList(), m_canUpdate, m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_listCtrlPrimitives, m_parent, m_primitives, PAD_CS_PRIMITIVE::m_Shape, redraw(), S_POLYGON, DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PRIMITIVE_POLY_PROPS::TransferDataFromWindow(), and transferDataToPad().

Referenced by onEditPrimitive(), and onPrimitiveDClick().

◆ Enable()

bool DIALOG_SHIM::Enable ( bool  enable)
overrideinherited

Definition at line 264 of file dialog_shim.cpp.

265 {
266  // so we can do logging of this state change:
267 
268 #if 0 && defined(DEBUG)
269  const char* type_id = typeid( *this ).name();
270  printf( "DIALOG_SHIM %s: %s\n", type_id, enable ? "enabled" : "disabled" );
271  fflush(0); //Needed on msys2 to immediately print the message
272 #endif
273 
274  return wxDialog::Enable( enable );
275 }

◆ enablePrimitivePage()

void DIALOG_PAD_PROPERTIES::enablePrimitivePage ( bool  aEnable)
private

enable (or disable) the primitive page editor

Definition at line 239 of file dialog_pad_properties.cpp.

240 {
241  // Enable or disable the widgets in page managing custom shape primitives
242  m_listCtrlPrimitives->Enable( aEnable );
243  m_buttonDel->Enable( aEnable );
244  m_buttonEditShape->Enable( aEnable );
245  m_buttonAddShape->Enable( aEnable );
246  m_buttonDup->Enable( aEnable );
247  m_buttonGeometry->Enable( aEnable );
248 }

References DIALOG_PAD_PROPERTIES_BASE::m_buttonAddShape, DIALOG_PAD_PROPERTIES_BASE::m_buttonDel, DIALOG_PAD_PROPERTIES_BASE::m_buttonDup, DIALOG_PAD_PROPERTIES_BASE::m_buttonEditShape, DIALOG_PAD_PROPERTIES_BASE::m_buttonGeometry, and DIALOG_PAD_PROPERTIES_BASE::m_listCtrlPrimitives.

Referenced by initValues(), and OnPadShapeSelection().

◆ EndQuasiModal()

void DIALOG_SHIM::EndQuasiModal ( int  retCode)
inherited

Definition at line 421 of file dialog_shim.cpp.

422 {
423  // Hook up validator and transfer data from controls handling so quasi-modal dialogs
424  // handle validation in the same way as other dialogs.
425  if( ( retCode == wxID_OK ) && ( !Validate() || !TransferDataFromWindow() ) )
426  return;
427 
428  SetReturnCode( retCode );
429 
430  if( !IsQuasiModal() )
431  {
432  wxFAIL_MSG( "either DIALOG_SHIM::EndQuasiModal called twice or ShowQuasiModal"
433  "wasn't called" );
434  return;
435  }
436 
437  if( m_qmodal_loop )
438  {
439  if( m_qmodal_loop->IsRunning() )
440  m_qmodal_loop->Exit( 0 );
441  else
442  m_qmodal_loop->ScheduleExit( 0 );
443 
445  }
446 
449 
450  Show( false );
451 }
WX_EVENT_LOOP * m_qmodal_loop
Definition: dialog_shim.h:205
#define NULL
bool IsQuasiModal()
Definition: dialog_shim.h:124
bool Show(bool show) override
WDO_ENABLE_DISABLE * m_qmodal_parent_disabler
Definition: dialog_shim.h:208

References DIALOG_SHIM::IsQuasiModal(), DIALOG_SHIM::m_qmodal_loop, DIALOG_SHIM::m_qmodal_parent_disabler, NULL, and DIALOG_SHIM::Show().

Referenced by HK_PROMPT_DIALOG::EndFlexible(), DIALOG_SHIM::OnButton(), DIALOG_EDIT_COMPONENTS_LIBID::onCancel(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnCancelButtonClick(), DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnCancelButtonClick(), DIALOG_LIB_EDIT_PIN_TABLE::OnClose(), DIALOG_PRINT_GENERIC::onCloseButton(), DIALOG_CHOOSE_FOOTPRINT::OnCloseTimer(), DIALOG_CHOOSE_COMPONENT::OnCloseTimer(), DIALOG_SHIM::OnCloseWindow(), HTML_MESSAGE_BOX::OnOKButtonClick(), DIALOG_CHOOSE_FOOTPRINT::OnUseBrowser(), DIALOG_CHOOSE_COMPONENT::OnUseBrowser(), and DIALOG_SHIM::~DIALOG_SHIM().

◆ FinishDialogSettings()

void DIALOG_SHIM::FinishDialogSettings ( )
protectedinherited

In all dialogs, we must call the same functions to fix minimal dlg size, the default position and perhaps some others to fix a few issues depending on Windows Managers this helper function does these calls.

FinishDialogSettings must be called from derived classes, when all widgets are initialized, and therefore their size fixed. If TransferDataToWindow() is used to initialize widgets, at end of TransferDataToWindow, or better at end of a wxInitDialogEvent handler

In any case, the best way is to call it in a wxInitDialogEvent handler after calling TransfertDataToWindow(), which is the default wxInitDialogEvent handler wxDialog

Definition at line 139 of file dialog_shim.cpp.

140 {
141  // must be called from the constructor of derived classes,
142  // when all widgets are initialized, and therefore their size fixed
143 
144  // SetSizeHints fixes the minimal size of sizers in the dialog
145  // (SetSizeHints calls Fit(), so no need to call it)
146  GetSizer()->SetSizeHints( this );
147 
148  // the default position, when calling the first time the dlg
149  Center();
150 }

References PCAD2KICAD::Center.

Referenced by DIALOG_3D_VIEW_OPTIONS::DIALOG_3D_VIEW_OPTIONS(), DIALOG_ANNOTATE::DIALOG_ANNOTATE(), DIALOG_BOARD_SETUP::DIALOG_BOARD_SETUP(), DIALOG_BOM::DIALOG_BOM(), DIALOG_COPPER_ZONE::DIALOG_COPPER_ZONE(), DIALOG_DRC::DIALOG_DRC(), DIALOG_EDIT_COMPONENT_IN_LIBRARY::DIALOG_EDIT_COMPONENT_IN_LIBRARY(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC(), DIALOG_EDIT_COMPONENTS_LIBID::DIALOG_EDIT_COMPONENTS_LIBID(), DIALOG_EDIT_LINE_STYLE::DIALOG_EDIT_LINE_STYLE(), DIALOG_EDIT_SHEET_PIN::DIALOG_EDIT_SHEET_PIN(), DIALOG_EDITOR_DATA::DIALOG_EDITOR_DATA(), DIALOG_ENUM_PADS::DIALOG_ENUM_PADS(), DIALOG_ERC::DIALOG_ERC(), DIALOG_EXCHANGE_FOOTPRINTS::DIALOG_EXCHANGE_FOOTPRINTS(), DIALOG_EXPORT_3DFILE::DIALOG_EXPORT_3DFILE(), DIALOG_EXPORT_IDF3::DIALOG_EXPORT_IDF3(), DIALOG_EXPORT_STEP::DIALOG_EXPORT_STEP(), DIALOG_EXPORT_SVG::DIALOG_EXPORT_SVG(), DIALOG_FIELDS_EDITOR_GLOBAL::DIALOG_FIELDS_EDITOR_GLOBAL(), DIALOG_FOOTPRINT_BOARD_EDITOR::DIALOG_FOOTPRINT_BOARD_EDITOR(), DIALOG_FOOTPRINT_FP_EDITOR::DIALOG_FOOTPRINT_FP_EDITOR(), DIALOG_FOOTPRINT_WIZARD_LIST::DIALOG_FOOTPRINT_WIZARD_LIST(), DIALOG_FOOTPRINTS_DISPLAY_OPTIONS::DIALOG_FOOTPRINTS_DISPLAY_OPTIONS(), DIALOG_GENCAD_EXPORT_OPTIONS::DIALOG_GENCAD_EXPORT_OPTIONS(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS(), DIALOG_GLOBAL_LIB_TABLE_CONFIG::DIALOG_GLOBAL_LIB_TABLE_CONFIG(), DIALOG_IMAGE_EDITOR::DIALOG_IMAGE_EDITOR(), DIALOG_INSPECTOR::DIALOG_INSPECTOR(), DIALOG_KEEPOUT_AREA_PROPERTIES::DIALOG_KEEPOUT_AREA_PROPERTIES(), DIALOG_LABEL_EDITOR::DIALOG_LABEL_EDITOR(), DIALOG_LIB_EDIT_DRAW_ITEM::DIALOG_LIB_EDIT_DRAW_ITEM(), DIALOG_LIB_EDIT_PIN::DIALOG_LIB_EDIT_PIN(), DIALOG_LIB_EDIT_TEXT::DIALOG_LIB_EDIT_TEXT(), DIALOG_LIB_NEW_COMPONENT::DIALOG_LIB_NEW_COMPONENT(), DIALOG_LIST_HOTKEYS::DIALOG_LIST_HOTKEYS(), DIALOG_MOVE_EXACT::DIALOG_MOVE_EXACT(), DIALOG_NETLIST::DIALOG_NETLIST(), DIALOG_NON_COPPER_ZONES_EDITOR::DIALOG_NON_COPPER_ZONES_EDITOR(), DIALOG_PAD_PRIMITIVE_POLY_PROPS::DIALOG_PAD_PRIMITIVE_POLY_PROPS(), DIALOG_PAD_PRIMITIVES_PROPERTIES::DIALOG_PAD_PRIMITIVES_PROPERTIES(), DIALOG_PAD_PROPERTIES(), DIALOG_PASTE_SPECIAL::DIALOG_PASTE_SPECIAL(), DIALOG_PLOT_SCHEMATIC::DIALOG_PLOT_SCHEMATIC(), DIALOG_POSITION_RELATIVE::DIALOG_POSITION_RELATIVE(), DIALOG_PRINT_GENERIC::DIALOG_PRINT_GENERIC(), DIALOG_PRINT_USING_PRINTER::DIALOG_PRINT_USING_PRINTER(), DIALOG_PUSH_PAD_PROPERTIES::DIALOG_PUSH_PAD_PROPERTIES(), DIALOG_SCH_SHEET_PROPS::DIALOG_SCH_SHEET_PROPS(), DIALOG_SCHEMATIC_SETUP::DIALOG_SCHEMATIC_SETUP(), DIALOG_SELECT_NET_FROM_LIST::DIALOG_SELECT_NET_FROM_LIST(), DIALOG_SET_GRID::DIALOG_SET_GRID(), DIALOG_SWAP_LAYERS::DIALOG_SWAP_LAYERS(), DIALOG_TARGET_PROPERTIES::DIALOG_TARGET_PROPERTIES(), DIALOG_TEXT_PROPERTIES::DIALOG_TEXT_PROPERTIES(), DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES(), DIALOG_TRACK_VIA_SIZE::DIALOG_TRACK_VIA_SIZE(), DIALOG_UPDATE_FROM_PCB::DIALOG_UPDATE_FROM_PCB(), DIALOG_UPDATE_PCB::DIALOG_UPDATE_PCB(), DLG_SELECT_3DMODEL::DLG_SELECT_3DMODEL(), PAGED_DIALOG::finishInitialization(), DIALOG_EDIT_ONE_FIELD::init(), DIALOG_EDIT_LIBRARY_TABLES::InstallPanel(), NETLIST_DIALOG::NETLIST_DIALOG(), DIALOG_GRAPHIC_ITEM_PROPERTIES::OnInitDlg(), DIALOG_SCH_SHEET_PROPS::OnInitDlg(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnInitDlg(), DIALOG_SIM_SETTINGS::onInitDlg(), DIALOG_SPICE_MODEL::onInitDlg(), DIALOG_SIGNAL_LIST::TransferDataToWindow(), DIALOG_UPDATE_FIELDS::TransferDataToWindow(), DIALOG_COLOR_PICKER::TransferDataToWindow(), and DIALOG_BOARD_STATISTICS::TransferDataToWindow().

◆ getSelectedProperty()

PAD_PROP_T DIALOG_PAD_PROPERTIES::getSelectedProperty ( )
private

Return the pad property currently selected.

Definition at line 1435 of file dialog_pad_properties.cpp.

1436 {
1437  PAD_PROP_T prop = PAD_PROP_NONE;
1438 
1439  switch( m_choiceFabProperty->GetSelection() )
1440  {
1441  case 0: prop = PAD_PROP_NONE; break;
1442  case 1: prop = PAD_PROP_BGA; break;
1443  case 2: prop = PAD_PROP_FIDUCIAL_LOCAL; break;
1444  case 3: prop = PAD_PROP_FIDUCIAL_GLBL; break;
1445  case 4: prop = PAD_PROP_TESTPOINT; break;
1446  case 5: prop = PAD_PROP_HEATSINK; break;
1447  case 6: prop = PAD_PROP_CASTELLATED; break;
1448  }
1449 
1450  return prop;
1451 }
no special fabrication property
Definition: pad_shapes.h:78
a fiducial (usually a smd) for the full board
Definition: pad_shapes.h:80
Smd pad, used in BGA footprints.
Definition: pad_shapes.h:79
a pad used as heat sink, usually in SMD footprints
Definition: pad_shapes.h:83
a pad with a castellated through hole
Definition: pad_shapes.h:84
PAD_PROP_T
Enum PAD_PROP_T is the set of pad properties used in Gerber files (Draw files, and P&P files) to defi...
Definition: pad_shapes.h:76
a fiducial (usually a smd) local to the parent footprint
Definition: pad_shapes.h:81
a test point pad
Definition: pad_shapes.h:82

References DIALOG_PAD_PROPERTIES_BASE::m_choiceFabProperty, PAD_PROP_BGA, PAD_PROP_CASTELLATED, PAD_PROP_FIDUCIAL_GLBL, PAD_PROP_FIDUCIAL_LOCAL, PAD_PROP_HEATSINK, PAD_PROP_NONE, and PAD_PROP_TESTPOINT.

Referenced by TransferDataFromWindow(), and transferDataToPad().

◆ GetType()

HOLDER_TYPE KIWAY_HOLDER::GetType ( )
inlineinherited

Definition at line 49 of file kiway_holder.h.

49 { return m_type; }
HOLDER_TYPE m_type
Definition: kiway_holder.h:82

References KIWAY_HOLDER::m_type.

Referenced by DIALOG_SHIM::DIALOG_SHIM().

◆ GetUserUnits()

◆ HorizPixelsFromDU()

int DIALOG_SHIM::HorizPixelsFromDU ( int  x)
protectedinherited

Convert an integer number of dialog units to pixels, horizontally.

See SetSizeInDU or wxDialog documentation for more information.

Definition at line 160 of file dialog_shim.cpp.

161 {
162  wxSize sz( x, 0 );
163  return ConvertDialogToPixels( sz ).x;
164 }

Referenced by DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT(), and DIALOG_CHOOSE_FOOTPRINT::DIALOG_CHOOSE_FOOTPRINT().

◆ initValues()

void DIALOG_PAD_PROPERTIES::initValues ( )
private

Definition at line 408 of file dialog_pad_properties.cpp.

409 {
410  wxString msg;
411  double angle;
412 
413  // Disable pad net name wxTextCtrl if the caller is the footprint editor
414  // because nets are living only in the board managed by the board editor
416 
417  // Setup layers names from board
418  // Should be made first, before calling m_rbCopperLayersSel->SetSelection()
419  m_rbCopperLayersSel->SetString( 0, m_board->GetLayerName( F_Cu ) );
420  m_rbCopperLayersSel->SetString( 1, m_board->GetLayerName( B_Cu ) );
421 
422  m_PadLayerAdhCmp->SetLabel( m_board->GetLayerName( F_Adhes ) );
423  m_PadLayerAdhCu->SetLabel( m_board->GetLayerName( B_Adhes ) );
425  m_PadLayerPateCu->SetLabel( m_board->GetLayerName( B_Paste ) );
427  m_PadLayerSilkCu->SetLabel( m_board->GetLayerName( B_SilkS ) );
428  m_PadLayerMaskCmp->SetLabel( m_board->GetLayerName( F_Mask ) );
429  m_PadLayerMaskCu->SetLabel( m_board->GetLayerName( B_Mask ) );
430  m_PadLayerECO1->SetLabel( m_board->GetLayerName( Eco1_User ) );
431  m_PadLayerECO2->SetLabel( m_board->GetLayerName( Eco2_User ) );
433 
434  m_isFlipped = false;
435 
436  if( m_currentPad )
437  {
439 
440  // Diplay parent footprint info
441  MODULE* footprint = m_currentPad->GetParent();
442  wxString msg1, msg2;
443 
444  if( footprint )
445  {
446  wxString side = footprint->IsFlipped() ? _( "back side (mirrored)" ) : _( "front side" );
447  msg1.Printf( _("Footprint %s (%s),"), footprint->GetReference(), footprint->GetValue() );
448  msg2.Printf( _("%s, rotated %.1f deg"), side, footprint->GetOrientation() / 10.0 );
449  }
450 
451  m_parentInfoLine1->SetLabel( msg1 );
452  m_parentInfoLine2->SetLabel( msg2 );
453  }
454 
455  if( m_isFlipped )
456  {
457  wxPoint pt = m_dummyPad->GetOffset();
458  pt.y = -pt.y;
459  m_dummyPad->SetOffset( pt );
460 
461  wxSize sz = m_dummyPad->GetDelta();
462  sz.y = -sz.y;
463  m_dummyPad->SetDelta( sz );
464 
465  // flip pad's layers
467 
468  // flip custom pad shapes
470  }
471 
473 
475 
476  m_PadNumCtrl->SetValue( m_dummyPad->GetName() );
478 
479  // Display current pad parameters units:
482 
485 
488 
491 
492  if( m_dummyPad->GetDelta().x )
493  {
495  m_trapAxisCtrl->SetSelection( 0 );
496  }
497  else
498  {
500  m_trapAxisCtrl->SetSelection( 1 );
501  }
502 
504 
510 
511  // Prefer "-0" to "0" for normally negative values
513  m_pasteClearanceCtrl->SetValue( wxT( "-" ) + m_pasteClearanceCtrl->GetValue() );
514 
515  msg.Printf( wxT( "%f" ), m_dummyPad->GetLocalSolderPasteMarginRatio() * 100.0 );
516 
517  if( m_dummyPad->GetLocalSolderPasteMarginRatio() == 0.0 && msg[0] == '0' )
518  // Sometimes Printf adds a sign if the value is small
519  m_SolderPasteMarginRatioCtrl->SetValue( wxT( "-" ) + msg );
520  else
522 
524  {
525  default:
527  m_ZoneConnectionChoice->SetSelection( 0 );
528  break;
530  m_ZoneConnectionChoice->SetSelection( 1 );
531  break;
533  m_ZoneConnectionChoice->SetSelection( 2 );
534  break;
536  m_ZoneConnectionChoice->SetSelection( 3 );
537  break;
538  }
539 
541  m_ZoneCustomPadShape->SetSelection( 1 );
542  else
543  m_ZoneCustomPadShape->SetSelection( 0 );
544 
545  if( m_currentPad )
546  {
548  MODULE* footprint = m_currentPad->GetParent();
549 
550  if( footprint )
551  angle -= footprint->GetOrientation();
552 
553  if( m_isFlipped )
554  angle = -angle;
555 
557  }
558 
560 
561  NORMALIZE_ANGLE_180( angle ); // ? normalizing is in D_PAD::SetOrientation()
562 
563  // Set layers used by this pad: :
565 
566  // Pad Orient
567  // Note: use ChangeValue() instead of SetValue() so that we don't generate events
569 
570  switch( m_dummyPad->GetShape() )
571  {
572  default:
573  case PAD_SHAPE_CIRCLE: m_PadShape->SetSelection( CHOICE_SHAPE_CIRCLE ); break;
574  case PAD_SHAPE_OVAL: m_PadShape->SetSelection( CHOICE_SHAPE_OVAL ); break;
575  case PAD_SHAPE_RECT: m_PadShape->SetSelection( CHOICE_SHAPE_RECT ); break;
576  case PAD_SHAPE_TRAPEZOID: m_PadShape->SetSelection( CHOICE_SHAPE_TRAPEZOID ); break;
577  case PAD_SHAPE_ROUNDRECT: m_PadShape->SetSelection( CHOICE_SHAPE_ROUNDRECT ); break;
579 
580  case PAD_SHAPE_CUSTOM:
583  else
585  break;
586  }
587 
588 
593 
595 
596  // Type of pad selection
597  bool aperture = m_dummyPad->GetAttribute() == PAD_ATTRIB_CONN && m_dummyPad->IsAperturePad();
598  bool mechanical = m_dummyPad->GetAttribute() == PAD_ATTRIB_HOLE_NOT_PLATED;
599 
600  if( aperture )
601  {
602  m_PadType->SetSelection( 4 );
603  }
604  else
605  {
606  switch( m_dummyPad->GetAttribute() )
607  {
608  case PAD_ATTRIB_STANDARD: m_PadType->SetSelection( 0 ); break;
609  case PAD_ATTRIB_SMD: m_PadType->SetSelection( 1 ); break;
610  case PAD_ATTRIB_CONN: m_PadType->SetSelection( 2 ); break;
611  case PAD_ATTRIB_HOLE_NOT_PLATED: m_PadType->SetSelection( 3 ); break;
612  }
613  }
614 
615  switch( m_dummyPad->GetProperty() )
616  {
617  case PAD_PROP_NONE: m_choiceFabProperty->SetSelection( 0 ); break;
618  case PAD_PROP_BGA: m_choiceFabProperty->SetSelection( 1 ); break;
619  case PAD_PROP_FIDUCIAL_LOCAL: m_choiceFabProperty->SetSelection( 2 ); break;
620  case PAD_PROP_FIDUCIAL_GLBL: m_choiceFabProperty->SetSelection( 3 ); break;
621  case PAD_PROP_TESTPOINT: m_choiceFabProperty->SetSelection( 4 ); break;
622  case PAD_PROP_HEATSINK: m_choiceFabProperty->SetSelection( 5 ); break;
623  case PAD_PROP_CASTELLATED: m_choiceFabProperty->SetSelection( 6 ); break;
624  }
625 
626  // Ensure the pad property is compatible with the pad type
628  {
629  m_choiceFabProperty->SetSelection( 0 );
630  m_choiceFabProperty->Enable( false );
631  }
632 
633 
634  // Disable Pad name,and pad to die length for mechanical and aperture pads
635  m_PadNumText->Enable( !mechanical && !aperture );
636  m_PadNumCtrl->Enable( !mechanical && !aperture );
637  m_PadNameText->Enable( !mechanical && !aperture && m_canEditNetName && m_currentPad );
638  m_PadNetSelector->Enable( !mechanical && !aperture && m_canEditNetName && m_currentPad );
639  m_padToDie.Enable( !mechanical && !aperture );
640 
642  m_holeShapeCtrl->SetSelection( 0 );
643  else
644  m_holeShapeCtrl->SetSelection( 1 );
645 
646  // Update some dialog widgets state (Enable/disable options):
647  wxCommandEvent cmd_event;
649  OnDrillShapeSelected( cmd_event );
650  OnPadShapeSelection( cmd_event );
652 
653  // Update basic shapes list
655 }
int GetLocalSolderMaskMargin() const
Definition: class_pad.h:450
double GetOrientation() const
Definition: class_module.h:211
LSET FlipLayerMask(LSET aMask, int aCopperLayersCount)
Calculate the mask layer when flipping a footprint BACK and FRONT copper layers, mask,...
Definition: lset.cpp:531
int GetNetCode() const
Function GetNetCode.
void enablePrimitivePage(bool aEnable)
enable (or disable) the primitive page editor
void FlipPrimitives()
Flip the basic shapes, in custom pads.
Definition: class_pad.cpp:509
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Function GetLayerName returns the name of a layer.
no special fabrication property
Definition: pad_shapes.h:78
like PAD_STANDARD, but not plated mechanical use only, no connection allowed
Definition: pad_shapes.h:66
bool IsFlipped() const
function IsFlipped
Definition: class_module.h:295
PAD_SHAPE_T GetAnchorPadShape() const
Function GetAnchorPadShape.
Definition: class_pad.h:232
int GetLocalClearance(wxString *aSource=nullptr) const override
Function GetLocalClearance returns any local clearances set in the "classic" (ie: pre-rule) system.
Definition: class_pad.cpp:630
a fiducial (usually a smd) for the full board
Definition: pad_shapes.h:80
void setPadLayersList(LSET layer_mask)
Function setPadLayersList updates the CheckBox states in pad layers list,.
bool IsFlipped() const
Definition: class_pad.cpp:129
int GetPadToDieLength() const
Definition: class_pad.h:448
Smd pad, appears on the solder paste layer (default)
Definition: pad_shapes.h:62
const wxString GetValue() const
Function GetValue.
Definition: class_module.h:465
wxString StringFromValue(EDA_UNITS aUnits, double aValue, bool aAddUnitSymbol, bool aUseMils)
Function StringFromValue returns the string from aValue according to units (inch, mm ....
Definition: base_units.cpp:233
Smd pad, used in BGA footprints.
Definition: pad_shapes.h:79
void NORMALIZE_ANGLE_180(T &Angle)
Definition: trigo.h:354
a pad used as heat sink, usually in SMD footprints
Definition: pad_shapes.h:83
int GetThermalGap() const
Definition: class_pad.cpp:760
void SetValue(const wxString &aValue) override
Set a new value in evaluator buffer, and display it in the wxTextCtrl.
PAD_ATTR_T GetAttribute() const
Definition: class_pad.h:438
const wxString GetReference() const
Function GetReference.
Definition: class_module.h:440
int GetChamferPositions() const
has meaning only for chamfered rect pads
Definition: class_pad.h:698
a pad with a castellated through hole
Definition: pad_shapes.h:84
ZONE_CONNECTION GetLocalZoneConnection() const
Definition: class_pad.h:523
pads are covered by copper
const std::vector< PAD_CS_PRIMITIVE > & GetPrimitives() const
Accessor to the basic shape list.
Definition: class_pad.h:358
const wxPoint & GetOffset() const
Definition: class_pad.h:294
PAD_DRILL_SHAPE_T GetDrillShape() const
Definition: class_pad.h:417
int GetThermalWidth() const
Definition: class_pad.cpp:749
LSET GetLayerSet() const override
Function GetLayerSet returns a "layer mask", which is a bitmap of all layers on which the TRACK segme...
Definition: class_pad.h:435
void SetSelectedNetcode(int aNetcode)
void OnPadShapeSelection(wxCommandEvent &event) override
const wxString & GetName() const
Definition: class_pad.h:200
void OnDrillShapeSelected(wxCommandEvent &event) override
PAD_PROP_T GetProperty() const
Definition: class_pad.h:441
const wxSize & GetDelta() const
Definition: class_pad.h:288
Like smd, does not appear on the solder paste layer (default) note also has a special attribute in Ge...
Definition: pad_shapes.h:63
MODULE * GetParent() const
Definition: class_pad.h:164
CUST_PAD_SHAPE_IN_ZONE GetCustomShapeInZoneOpt() const
Definition: class_pad.h:238
Use thermal relief for pads.
void SetLayerSet(LSET aLayerMask)
Definition: class_pad.h:434
a fiducial (usually a smd) local to the parent footprint
Definition: pad_shapes.h:81
std::vector< PAD_CS_PRIMITIVE > m_primitives
bool IsType(FRAME_T aType) const
#define _(s)
Definition: 3d_actions.cpp:33
double GetOrientation() const
Function GetOrientation returns the rotation angle of the pad in tenths of degrees,...
Definition: class_pad.h:411
virtual void SetValue(int aValue)
Function SetValue Sets new value (in Internal Units) for the text field, taking care of units convers...
static DIRECTION_45::AngleType angle(const VECTOR2I &a, const VECTOR2I &b)
const wxSize & GetDrillSize() const
Definition: class_pad.h:291
bool IsAperturePad() const
Definition: class_pad.h:445
Pads are not covered.
void SetOrientation(double aAngle)
Function SetOrientation sets the rotation angle of the pad.
Definition: class_pad.cpp:469
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:222
const wxSize & GetSize() const
Definition: class_pad.h:285
const wxPoint GetPosition() const override
Definition: class_pad.h:226
int GetLocalSolderPasteMargin() const
Definition: class_pad.h:456
void SetOffset(const wxPoint &aOffset)
Definition: class_pad.h:293
a test point pad
Definition: pad_shapes.h:82
void Enable(bool aEnable)
Function Enable Enables/diasables the label, widget and units label.
double GetLocalSolderPasteMarginRatio() const
Definition: class_pad.h:459
void SetDelta(const wxSize &aSize)
Definition: class_pad.h:287

References _, PNS::angle(), B_Adhes, B_Cu, B_Mask, B_Paste, B_SilkS, CHOICE_SHAPE_CHAMFERED_RECT, CHOICE_SHAPE_CIRCLE, CHOICE_SHAPE_CUSTOM_CIRC_ANCHOR, CHOICE_SHAPE_CUSTOM_RECT_ANCHOR, CHOICE_SHAPE_OVAL, CHOICE_SHAPE_RECT, CHOICE_SHAPE_ROUNDRECT, CHOICE_SHAPE_TRAPEZOID, CUST_PAD_SHAPE_IN_ZONE_CONVEXHULL, DEGREES, displayPrimitivesList(), Dwgs_User, Eco1_User, Eco2_User, UNIT_BINDER::Enable(), enablePrimitivePage(), F_Adhes, F_Cu, F_Mask, F_Paste, F_SilkS, FlipLayerMask(), D_PAD::FlipPrimitives(), FRAME_PCB_EDITOR, FULL, D_PAD::GetAnchorPadShape(), D_PAD::GetAttribute(), D_PAD::GetChamferPositions(), D_PAD::GetCustomShapeInZoneOpt(), D_PAD::GetDelta(), D_PAD::GetDrillShape(), D_PAD::GetDrillSize(), BOARD::GetLayerName(), D_PAD::GetLayerSet(), D_PAD::GetLocalClearance(), D_PAD::GetLocalSolderMaskMargin(), D_PAD::GetLocalSolderPasteMargin(), D_PAD::GetLocalSolderPasteMarginRatio(), D_PAD::GetLocalZoneConnection(), D_PAD::GetName(), BOARD_CONNECTED_ITEM::GetNetCode(), D_PAD::GetOffset(), MODULE::GetOrientation(), D_PAD::GetOrientation(), D_PAD::GetPadToDieLength(), D_PAD::GetParent(), D_PAD::GetPosition(), D_PAD::GetPrimitives(), D_PAD::GetProperty(), MODULE::GetReference(), D_PAD::GetShape(), D_PAD::GetSize(), D_PAD::GetThermalGap(), D_PAD::GetThermalWidth(), MODULE::GetValue(), INHERITED, D_PAD::IsAperturePad(), D_PAD::IsFlipped(), MODULE::IsFlipped(), EDA_BASE_FRAME::IsType(), m_board, m_canEditNetName, DIALOG_PAD_PROPERTIES_BASE::m_cbBottomLeft, DIALOG_PAD_PROPERTIES_BASE::m_cbBottomRight, DIALOG_PAD_PROPERTIES_BASE::m_cbTopLeft, DIALOG_PAD_PROPERTIES_BASE::m_cbTopRight, DIALOG_PAD_PROPERTIES_BASE::m_choiceFabProperty, m_clearance, m_currentPad, m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_FlippedWarningSizer, DIALOG_PAD_PROPERTIES_BASE::m_holeShapeCtrl, m_holeX, m_holeY, m_isFlipped, m_maskClearance, m_offsetX, m_offsetY, DIALOG_PAD_PROPERTIES_BASE::m_orientation, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerAdhCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerAdhCu, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerDraft, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerECO1, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerECO2, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerMaskCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerMaskCu, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerPateCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerPateCu, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerSilkCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerSilkCu, DIALOG_PAD_PROPERTIES_BASE::m_PadNameText, DIALOG_PAD_PROPERTIES_BASE::m_PadNetSelector, DIALOG_PAD_PROPERTIES_BASE::m_PadNumCtrl, DIALOG_PAD_PROPERTIES_BASE::m_PadNumText, DIALOG_PAD_PROPERTIES_BASE::m_PadShape, m_padToDie, DIALOG_PAD_PROPERTIES_BASE::m_PadType, m_parent, DIALOG_PAD_PROPERTIES_BASE::m_parentInfoLine1, DIALOG_PAD_PROPERTIES_BASE::m_parentInfoLine2, m_pasteClearance, DIALOG_PAD_PROPERTIES_BASE::m_pasteClearanceCtrl, m_posX, m_posY, m_primitives, DIALOG_PAD_PROPERTIES_BASE::m_rbCopperLayersSel, m_sizeX, m_sizeY, DIALOG_PAD_PROPERTIES_BASE::m_SolderPasteMarginRatioCtrl, m_spokeWidth, m_thermalGap, DIALOG_PAD_PROPERTIES_BASE::m_trapAxisCtrl, m_trapDelta, DIALOG_PAD_PROPERTIES_BASE::m_ZoneConnectionChoice, DIALOG_PAD_PROPERTIES_BASE::m_ZoneCustomPadShape, NONE, NORMALIZE_ANGLE_180(), OnDrillShapeSelected(), OnPadShapeSelection(), PAD_ATTRIB_CONN, PAD_ATTRIB_HOLE_NOT_PLATED, PAD_ATTRIB_SMD, PAD_ATTRIB_STANDARD, PAD_DRILL_SHAPE_OBLONG, PAD_PROP_BGA, PAD_PROP_CASTELLATED, PAD_PROP_FIDUCIAL_GLBL, PAD_PROP_FIDUCIAL_LOCAL, PAD_PROP_HEATSINK, PAD_PROP_NONE, PAD_PROP_TESTPOINT, PAD_SHAPE_CHAMFERED_RECT, PAD_SHAPE_CIRCLE, PAD_SHAPE_CUSTOM, PAD_SHAPE_OVAL, PAD_SHAPE_RECT, PAD_SHAPE_ROUNDRECT, PAD_SHAPE_TRAPEZOID, RECT_CHAMFER_BOTTOM_LEFT, RECT_CHAMFER_BOTTOM_RIGHT, RECT_CHAMFER_TOP_LEFT, RECT_CHAMFER_TOP_RIGHT, D_PAD::SetDelta(), D_PAD::SetLayerSet(), D_PAD::SetOffset(), D_PAD::SetOrientation(), setPadLayersList(), NET_SELECTOR::SetSelectedNetcode(), TEXT_CTRL_EVAL::SetValue(), UNIT_BINDER::SetValue(), StringFromValue(), THERMAL, updateRoundRectCornerValues(), wxPoint::x, and wxPoint::y.

Referenced by DIALOG_PAD_PROPERTIES().

◆ IsCtrl()

static bool DIALOG_SHIM::IsCtrl ( int  aChar,
const wxKeyEvent &  e 
)
inlinestaticinherited

Definition at line 137 of file dialog_shim.h.

138  {
139  return e.GetKeyCode() == aChar && e.ControlDown() && !e.AltDown() &&
140  !e.ShiftDown() && !e.MetaDown();
141  }

Referenced by DIALOG_TEXT_PROPERTIES::OnCharHook().

◆ IsQuasiModal()

◆ IsShiftCtrl()

static bool DIALOG_SHIM::IsShiftCtrl ( int  aChar,
const wxKeyEvent &  e 
)
inlinestaticinherited

Definition at line 143 of file dialog_shim.h.

144  {
145  return e.GetKeyCode() == aChar && e.ControlDown() && !e.AltDown() &&
146  e.ShiftDown() && !e.MetaDown();
147  }

Referenced by DIALOG_TEXT_PROPERTIES::OnCharHook().

◆ Kiway()

KIWAY& KIWAY_HOLDER::Kiway ( ) const
inlineinherited

Function Kiway returns a reference to the KIWAY that this object has an opportunity to participate in.

A KIWAY_HOLDER is not necessarily a KIWAY_PLAYER.

Definition at line 56 of file kiway_holder.h.

57  {
58  wxASSERT( m_kiway ); // smoke out bugs in Debug build, then Release runs fine.
59  return *m_kiway;
60  }
KIWAY * m_kiway
Definition: kiway_holder.h:81

References KIWAY_HOLDER::m_kiway.

Referenced by TREEPROJECT_ITEM::Activate(), FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), PCB_BASE_EDIT_FRAME::AddLibrary(), LIB_CONTROL::AddSymbolToSchematic(), CVPCB_MAINFRAME::BuildLIBRARY_LISTBOX(), COMMON_CONTROL::ConfigurePaths(), DIALOG_CHOOSE_FOOTPRINT::ConstructRightPanel(), DIALOG_CHOOSE_COMPONENT::ConstructRightPanel(), PCB_BASE_FRAME::CreateAndShow3D_Frame(), CVPCB_MAINFRAME::CVPCB_MAINFRAME(), DIALOG_RESCUE_EACH::DIALOG_RESCUE_EACH(), DIALOG_SHIM::DIALOG_SHIM(), CVPCB_MAINFRAME::DisplayStatus(), FIELDS_GRID_TRICKS::doPopupSelection(), FIELDS_EDITOR_GRID_TRICKS::doPopupSelection(), EDIT_TOOL::EditFpInFpEditor(), SCH_EDITOR_CONTROL::EditWithLibEdit(), BACK_ANNOTATE::FetchNetlistFromPCB(), DISPLAY_FOOTPRINTS_FRAME::Get_Module(), FOOTPRINT_EDIT_FRAME::GetPlotSettings(), PCB_EDIT_FRAME::importFile(), KICAD_MANAGER_FRAME::language_change(), KIWAY_PLAYER::language_change(), LIB_TREE_MODEL_ADAPTER::LIB_TREE_MODEL_ADAPTER(), CVPCB_MAINFRAME::LoadFootprintFiles(), KICAD_MANAGER_FRAME::LoadProject(), TEXT_BUTTON_SYMBOL_CHOOSER::OnButtonClick(), TEXT_BUTTON_FP_CHOOSER::OnButtonClick(), KICAD_MANAGER_FRAME::OnCloseWindow(), SCH_EDIT_FRAME::OnCloseWindow(), PL_EDITOR_FRAME::OnExit(), SCH_EDIT_FRAME::OnExit(), FOOTPRINT_EDIT_FRAME::OnExitKiCad(), FOOTPRINT_VIEWER_FRAME::OnExitKiCad(), LIB_EDIT_FRAME::OnExitKiCad(), SAVE_AS_TRAVERSER::OnFile(), KICAD_MANAGER_FRAME::OnImportEagleFiles(), DIALOG_CHOOSE_COMPONENT::OnInitDialog(), SCH_EDIT_FRAME::OnOpenCvpcb(), SCH_EDIT_FRAME::OnOpenPcbnew(), EDA_BASE_FRAME::OnPreferences(), DIALOG_SYMBOL_REMAP::OnRemapSymbols(), DIALOG_EDIT_ONE_FIELD::OnTextValueSelectButtonClick(), FOOTPRINT_EDIT_FRAME::OnUpdateInsertModuleInBoard(), FOOTPRINT_EDIT_FRAME::OnUpdateLoadModuleFromBoard(), SCH_EDIT_FRAME::OnUpdatePCB(), KIWAY_HOLDER::Prj(), CVPCB_MAINFRAME::ReadNetListAndFpFiles(), FOOTPRINT_VIEWER_FRAME::ReCreateFootprintList(), LIB_EDIT_FRAME::refreshSchematic(), SCH_EDITOR_CONTROL::rescueProject(), EE_INSPECTION_TOOL::RunSimulation(), CVPCB_MAINFRAME::SaveFootprintAssociation(), FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard(), LIB_TREE_MODEL_ADAPTER::SavePinnedItems(), SCH_BASE_FRAME::SelectComponentFromLibBrowser(), SCH_EDIT_FRAME::SendCrossProbeClearHighlight(), SCH_EDIT_FRAME::SendCrossProbeNetName(), PCB_EDIT_FRAME::SendCrossProbeNetName(), CVPCB_MAINFRAME::SendMessageToEESCHEMA(), PCB_EDIT_FRAME::SendMessageToEESCHEMA(), SCH_EDIT_FRAME::SendMessageToPCBNEW(), SCH_EDIT_FRAME::sendNetlistToCvpcb(), SCH_EDIT_FRAME::SetCrossProbeConnection(), FOOTPRINT_EDIT_FRAME::SetPlotSettings(), CVPCB_CONTROL::ShowFootprintViewer(), COMMON_CONTROL::ShowLibraryTable(), COMMON_CONTROL::ShowPlayer(), KICAD_MANAGER_CONTROL::ShowPlayer(), SIM_PLOT_FRAME::SIM_PLOT_FRAME(), PCB_EDITOR_CONTROL::UpdateSchematicFromPCB(), and DIALOG_EXCHANGE_FOOTPRINTS::ViewAndSelectFootprint().

◆ onAddPrimitive()

void DIALOG_PAD_PROPERTIES::onAddPrimitive ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1842 of file dialog_pad_properties.cpp.

1843 {
1844  // Ask user for shape type
1845  wxString shapelist[] = { _( "Segment" ), _( "Arc" ), _( "Bezier" ),
1846  _( "Ring/Circle" ), _( "Polygon" ) };
1847 
1848  int type = wxGetSingleChoiceIndex( _( "Shape type:" ), _( "Add Primitive" ),
1849  arrayDim( shapelist ), shapelist, 0, this );
1850 
1851  // User pressed cancel
1852  if( type == -1 )
1853  return;
1854 
1855  STROKE_T listtype[] = { S_SEGMENT, S_ARC, S_CURVE, S_CIRCLE, S_POLYGON };
1856 
1857  PAD_CS_PRIMITIVE primitive( listtype[type] );
1858  primitive.m_Thickness = m_board->GetDesignSettings().GetLineThickness( F_Cu );
1859 
1860  if( listtype[type] == S_POLYGON )
1861  {
1862  DIALOG_PAD_PRIMITIVE_POLY_PROPS dlg( this, m_parent, &primitive );
1863 
1864  if( dlg.ShowModal() != wxID_OK )
1865  return;
1866  }
1867  else
1868  {
1869  DIALOG_PAD_PRIMITIVES_PROPERTIES dlg( this, m_parent, &primitive );
1870 
1871  if( dlg.ShowModal() != wxID_OK )
1872  return;
1873  }
1874 
1875  m_primitives.push_back( primitive );
1876 
1878 
1879  if( m_canUpdate )
1880  {
1882  redraw();
1883  }
1884 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad's members.
polygon (not yet used for tracks, but could be in microwave apps)
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Function GetDesignSettings.
Definition: class_board.h:542
usual segment : line with rounded ends
int GetLineThickness(PCB_LAYER_ID aLayer) const
Function GetLineThickness Returns the default graphic segment thickness from the layer class for the ...
Arcs (with rounded ends)
Helper class to handle a primitive (basic shape: polygon, segment, circle or arc) to build a custom p...
Definition: class_pad.h:65
STROKE_T
Enum STROKE_T is the set of shapes for segments (graphic segments and tracks) which are often in the ...
Bezier Curve.
a dialog to edit basic polygonal shape parameters
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Definition: macros.h:160
std::vector< PAD_CS_PRIMITIVE > m_primitives
#define _(s)
Definition: 3d_actions.cpp:33
a dialog to edit basics shapes parameters.

References _, arrayDim(), displayPrimitivesList(), F_Cu, BOARD::GetDesignSettings(), BOARD_DESIGN_SETTINGS::GetLineThickness(), m_board, m_canUpdate, m_dummyPad, m_parent, m_primitives, PAD_CS_PRIMITIVE::m_Thickness, redraw(), S_ARC, S_CIRCLE, S_CURVE, S_POLYGON, S_SEGMENT, and transferDataToPad().

◆ OnCancel()

void DIALOG_PAD_PROPERTIES::OnCancel ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 228 of file dialog_pad_properties.cpp.

229 {
230  // Mandatory to avoid m_panelShowPadGal trying to draw something
231  // in a non valid context during closing process:
233 
234  // Now call default handler for wxID_CANCEL command event
235  event.Skip();
236 }
void StopDrawing()
Function StopDrawing() Prevents the GAL canvas from further drawing till it is recreated or StartDraw...

References DIALOG_PAD_PROPERTIES_BASE::m_panelShowPadGal, and EDA_DRAW_PANEL_GAL::StopDrawing().

◆ onChangePadMode()

void DIALOG_PAD_PROPERTIES::onChangePadMode ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 750 of file dialog_pad_properties.cpp.

751 {
752  m_sketchPreview = m_cbShowPadOutline->GetValue();
753 
755 
756  // fix the pad render mode (filled/not filled)
757  KIGFX::PCB_RENDER_SETTINGS* settings =
758  static_cast<KIGFX::PCB_RENDER_SETTINGS*>( view->GetPainter()->GetSettings() );
759 
764 
765  redraw();
766 }
multilayer pads, usually with holes
void SetSketchModeGraphicItems(bool aEnabled)
Turns on/off sketch mode for graphic items (DRAWSEGMENTs, texts).
Definition: pcb_painter.h:131
PAINTER * GetPainter() const
Function GetPainter() Returns the painter object used by the view for drawing VIEW_ITEMS.
Definition: view.h:199
PCB_RENDER_SETTINGS Stores PCB specific render settings.
Definition: pcb_painter.h:60
virtual KIGFX::PCB_VIEW * GetView() const override
Function GetView() Returns a pointer to the VIEW instance used in the panel.
virtual RENDER_SETTINGS * GetSettings()=0
Function GetAdapter Returns pointer to current settings that are going to be used when drawing items.
smd pads, front layer
void SetSketchMode(int aItemLayer, bool aEnabled)
Function SetSketchMode Turns on/off sketch mode for given item layer.
Definition: pcb_painter.h:111
VIEW.
Definition: view.h:61

References KIGFX::VIEW::GetPainter(), KIGFX::PAINTER::GetSettings(), PCB_DRAW_PANEL_GAL::GetView(), LAYER_PAD_BK, LAYER_PAD_FR, LAYER_PADS_TH, DIALOG_PAD_PROPERTIES_BASE::m_cbShowPadOutline, DIALOG_PAD_PROPERTIES_BASE::m_panelShowPadGal, m_sketchPreview, redraw(), KIGFX::PCB_RENDER_SETTINGS::SetSketchMode(), and KIGFX::PCB_RENDER_SETTINGS::SetSketchModeGraphicItems().

◆ onCornerRadiusChange()

void DIALOG_PAD_PROPERTIES::onCornerRadiusChange ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 323 of file dialog_pad_properties.cpp.

324 {
327  return;
328 
329  double rrRadius = m_cornerRadius.GetValue();
330 
331  if( rrRadius < 0.0 )
332  {
333  rrRadius = 0.0;
334  m_tcCornerRadius->ChangeValue( wxString::Format( "%.1f", rrRadius ) );
335  }
336 
339 
340  auto ratio = wxString::Format( "%.1f", m_dummyPad->GetRoundRectRadiusRatio() * 100 );
341  m_tcCornerSizeRatio->ChangeValue( ratio );
342  redraw();
343 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad's members.
void SetRoundRectCornerRadius(double aRadius)
Set the rounded rectangle radius ratio based on a given radius.
Definition: class_pad.cpp:210
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
virtual long long int GetValue()
Function GetValue Returns the current value in Internal Units.
double GetRoundRectRadiusRatio() const
has meaning only for rounded rect pads
Definition: class_pad.h:649
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:222

References Format(), D_PAD::GetRoundRectRadiusRatio(), D_PAD::GetShape(), UNIT_BINDER::GetValue(), m_cornerRadius, m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_tcCornerRadius, DIALOG_PAD_PROPERTIES_BASE::m_tcCornerSizeRatio, PAD_SHAPE_CHAMFERED_RECT, PAD_SHAPE_ROUNDRECT, redraw(), D_PAD::SetRoundRectCornerRadius(), and transferDataToPad().

◆ onCornerSizePercentChange()

void DIALOG_PAD_PROPERTIES::onCornerSizePercentChange ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 346 of file dialog_pad_properties.cpp.

347 {
350  return;
351 
352  wxString value = m_tcCornerSizeRatio->GetValue();
353  double ratioPercent;
354 
355  bool asChanged = false;
356 
357  if( value.ToDouble( &ratioPercent ) )
358  {
359  // Clamp ratioPercent to acceptable value (0.0 to 50.0)
360  if( ratioPercent < 0.0 )
361  {
362  ratioPercent = 0.0;
363  value.Printf( "%.1f", ratioPercent );
364  m_tcCornerSizeRatio->ChangeValue( value );
365  }
366 
367  if( ratioPercent > 50.0 )
368  {
369  ratioPercent = 0.5;
370  value.Printf( "%.1f", ratioPercent*100.0 );
371  m_tcCornerSizeRatio->ChangeValue( value );
372  }
373 
374  asChanged = true;
375  }
376 
377  value = m_tcChamferRatio->GetValue();
378 
379  if( value.ToDouble( &ratioPercent ) )
380  {
381  // Clamp ratioPercent to acceptable value (0.0 to 50.0)
382  if( ratioPercent < 0.0 )
383  {
384  ratioPercent = 0.0;
385  value.Printf( "%.1f", ratioPercent );
386  m_tcChamferRatio->ChangeValue( value );
387  }
388 
389  if( ratioPercent > 50.0 )
390  {
391  ratioPercent = 0.5;
392  value.Printf( "%.1f", ratioPercent*100.0 );
393  m_tcChamferRatio->ChangeValue( value );
394  }
395 
396  asChanged = true;
397  }
398 
399  if( asChanged )
400  {
403  redraw();
404  }
405 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad's members.
int GetRoundRectCornerRadius() const
Function GetRoundRectCornerRadius Has meaning only for rounded rect pads.
Definition: class_pad.h:551
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:222
virtual void ChangeValue(int aValue)
Function ChangeValue Changes the value (in Internal Units) for the text field, taking care of units c...

References UNIT_BINDER::ChangeValue(), D_PAD::GetRoundRectCornerRadius(), D_PAD::GetShape(), m_cornerRadius, m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_tcChamferRatio, DIALOG_PAD_PROPERTIES_BASE::m_tcCornerSizeRatio, PAD_SHAPE_CHAMFERED_RECT, PAD_SHAPE_ROUNDRECT, redraw(), and transferDataToPad().

◆ onDeletePrimitive()

void DIALOG_PAD_PROPERTIES::onDeletePrimitive ( wxCommandEvent &  event)
overrideprivatevirtual

Event handlers of basic shapes list panel.

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1814 of file dialog_pad_properties.cpp.

1815 {
1816  long select = m_listCtrlPrimitives->GetFirstSelected();
1817 
1818  if( select < 0 )
1819  return;
1820 
1821  // Multiple selections are allowed. get them and remove corresponding shapes
1822  std::vector<long> indexes;
1823  indexes.push_back( select );
1824 
1825  while( ( select = m_listCtrlPrimitives->GetNextSelected( select ) ) >= 0 )
1826  indexes.push_back( select );
1827 
1828  // Erase all select shapes
1829  for( unsigned ii = indexes.size(); ii > 0; --ii )
1830  m_primitives.erase( m_primitives.begin() + indexes[ii-1] );
1831 
1833 
1834  if( m_canUpdate )
1835  {
1837  redraw();
1838  }
1839 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad's members.
std::vector< PAD_CS_PRIMITIVE > m_primitives

References displayPrimitivesList(), m_canUpdate, m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_listCtrlPrimitives, m_primitives, redraw(), and transferDataToPad().

◆ OnDrillShapeSelected()

void DIALOG_PAD_PROPERTIES::OnDrillShapeSelected ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 864 of file dialog_pad_properties.cpp.

865 {
867  redraw();
868 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad's members.

References m_dummyPad, redraw(), and transferDataToPad().

Referenced by initValues().

◆ onDuplicatePrimitive()

void DIALOG_PAD_PROPERTIES::onDuplicatePrimitive ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1922 of file dialog_pad_properties.cpp.

1923 {
1924  long select = m_listCtrlPrimitives->GetFirstSelected();
1925 
1926  if( select < 0 )
1927  {
1928  wxMessageBox( _( "No shape selected" ) );
1929  return;
1930  }
1931 
1932  // Multiple selections are allowed. Build selected shapes list
1933  std::vector<PAD_CS_PRIMITIVE*> shapeList;
1934  shapeList.push_back( &m_primitives[select] );
1935 
1936  while( ( select = m_listCtrlPrimitives->GetNextSelected( select ) ) >= 0 )
1937  shapeList.push_back( &m_primitives[select] );
1938 
1939  DIALOG_PAD_PRIMITIVES_TRANSFORM dlg( this, m_parent, shapeList, true );
1940 
1941  if( dlg.ShowModal() != wxID_OK )
1942  return;
1943 
1944  // Transfer new settings
1945  // save duplicates to a separate vector to avoid m_primitives reallocation,
1946  // as shapeList contains pointers to its elements
1947  std::vector<PAD_CS_PRIMITIVE> duplicates;
1948  dlg.Transform( &duplicates, dlg.GetDuplicateCount() );
1949  std::move( duplicates.begin(), duplicates.end(), std::back_inserter( m_primitives ) );
1950 
1952 
1953  if( m_canUpdate )
1954  {
1956  redraw();
1957  }
1958 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad's members.
std::vector< PAD_CS_PRIMITIVE > m_primitives
#define _(s)
Definition: 3d_actions.cpp:33
A dialog to apply geometry transforms to a shape or set of shapes (move, rotate around origin,...

References _, displayPrimitivesList(), DIALOG_PAD_PRIMITIVES_TRANSFORM::GetDuplicateCount(), m_canUpdate, m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_listCtrlPrimitives, m_parent, m_primitives, redraw(), transferDataToPad(), and DIALOG_PAD_PRIMITIVES_TRANSFORM::Transform().

◆ onEditPrimitive()

void DIALOG_PAD_PROPERTIES::onEditPrimitive ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1808 of file dialog_pad_properties.cpp.

1809 {
1810  editPrimitive();
1811 }

References editPrimitive().

◆ onGeometryTransform()

void DIALOG_PAD_PROPERTIES::onGeometryTransform ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1887 of file dialog_pad_properties.cpp.

1888 {
1889  long select = m_listCtrlPrimitives->GetFirstSelected();
1890 
1891  if( select < 0 )
1892  {
1893  wxMessageBox( _( "No shape selected" ) );
1894  return;
1895  }
1896 
1897  // Multiple selections are allowed. Build selected shapes list
1898  std::vector<PAD_CS_PRIMITIVE*> shapeList;
1899  shapeList.push_back( &m_primitives[select] );
1900 
1901  while( ( select = m_listCtrlPrimitives->GetNextSelected( select ) ) >= 0 )
1902  shapeList.push_back( &m_primitives[select] );
1903 
1904  DIALOG_PAD_PRIMITIVES_TRANSFORM dlg( this, m_parent, shapeList, false );
1905 
1906  if( dlg.ShowModal() != wxID_OK )
1907  return;
1908 
1909  // Transfert new settings:
1910  dlg.Transform();
1911 
1913 
1914  if( m_canUpdate )
1915  {
1917  redraw();
1918  }
1919 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad's members.
std::vector< PAD_CS_PRIMITIVE > m_primitives
#define _(s)
Definition: 3d_actions.cpp:33
A dialog to apply geometry transforms to a shape or set of shapes (move, rotate around origin,...

References _, displayPrimitivesList(), m_canUpdate, m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_listCtrlPrimitives, m_parent, m_primitives, redraw(), transferDataToPad(), and DIALOG_PAD_PRIMITIVES_TRANSFORM::Transform().

◆ OnInitDialog()

void DIALOG_PAD_PROPERTIES::OnInitDialog ( wxInitDialogEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 218 of file dialog_pad_properties.cpp.

219 {
220  m_selectedColor = COLOR4D( 1.0, 1.0, 1.0, 0.7 );
221 
222  // Needed on some WM to be sure the pad is redrawn according to the final size
223  // of the canvas, with the right zoom factor
224  redraw();
225 }
COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:40

References m_selectedColor, and redraw().

◆ OnPadShapeSelection()

void DIALOG_PAD_PROPERTIES::OnPadShapeSelection ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 770 of file dialog_pad_properties.cpp.

771 {
772  bool is_custom = false;
773 
774  switch( m_PadShape->GetSelection() )
775  {
776  case CHOICE_SHAPE_CIRCLE:
777  m_trapDelta.Enable( false );
778  m_trapAxisLabel->Enable( false );
779  m_trapAxisCtrl->Enable( false );
780  m_sizeY.Enable( false );
781  m_offsetX.Enable( false );
782  m_offsetY.Enable( false );
783  break;
784 
785  case CHOICE_SHAPE_OVAL:
786  m_trapDelta.Enable( false );
787  m_trapAxisLabel->Enable( false );
788  m_trapAxisCtrl->Enable( false );
789  m_sizeY.Enable( true );
790  m_offsetX.Enable( true );
791  m_offsetY.Enable( true );
792  break;
793 
794  case CHOICE_SHAPE_RECT:
795  m_trapDelta.Enable( false );
796  m_trapAxisLabel->Enable( false );
797  m_trapAxisCtrl->Enable( false );
798  m_sizeY.Enable( true );
799  m_offsetX.Enable( true );
800  m_offsetY.Enable( true );
801  break;
802 
804  m_trapDelta.Enable( true );
805  m_trapAxisLabel->Enable( true );
806  m_trapAxisCtrl->Enable( true );
807  m_sizeY.Enable( true );
808  m_offsetX.Enable( true );
809  m_offsetY.Enable( true );
810  break;
811 
814  m_trapDelta.Enable( false );
815  m_trapAxisLabel->Enable( false );
816  m_trapAxisCtrl->Enable( false );
817  m_sizeY.Enable( true );
818  m_offsetX.Enable( true );
819  m_offsetY.Enable( true );
820  // Ensure m_tcCornerSizeRatio contains the right value:
821  m_tcCornerSizeRatio->ChangeValue( wxString::Format( "%.1f",
823  break;
824 
825  case CHOICE_SHAPE_CUSTOM_CIRC_ANCHOR: // PAD_SHAPE_CUSTOM, circular anchor
826  case CHOICE_SHAPE_CUSTOM_RECT_ANCHOR: // PAD_SHAPE_CUSTOM, rect anchor
827  is_custom = true;
828  m_trapDelta.Enable( false );
829  m_trapAxisLabel->Enable( false );
830  m_trapAxisCtrl->Enable( false );
832  m_offsetX.Enable( false );
833  m_offsetY.Enable( false );
834  break;
835  }
836 
837  enablePrimitivePage( is_custom );
838 
839  // A few widgets are enabled only for rounded rect and chamfered pads:
840  bool chamfered_rect_enable = m_PadShape->GetSelection() == CHOICE_SHAPE_CHAMFERED_RECT;
841  bool round_rect_enable = m_PadShape->GetSelection() == CHOICE_SHAPE_ROUNDRECT ||
842  chamfered_rect_enable;
843  m_staticTextCornerSizeRatio->Enable( round_rect_enable );
844  m_tcCornerSizeRatio->Enable( round_rect_enable );
845  m_staticTextCornerSizeRatioUnit->Enable( round_rect_enable );
846  m_cornerRadius.Enable( round_rect_enable );
847 
848  m_cbTopLeft->Enable( chamfered_rect_enable );
849  m_cbTopRight->Enable( chamfered_rect_enable );
850  m_cbBottomLeft->Enable( chamfered_rect_enable );
851  m_cbBottomRight->Enable( chamfered_rect_enable );
852  m_tcChamferRatio->Enable( chamfered_rect_enable );
853 
854  m_staticTextcps->Enable( is_custom );
855  m_ZoneCustomPadShape->Enable( is_custom );
856 
858 
860  redraw();
861 }
void enablePrimitivePage(bool aEnable)
enable (or disable) the primitive page editor
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad's members.
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
double GetRoundRectRadiusRatio() const
has meaning only for rounded rect pads
Definition: class_pad.h:649
void Enable(bool aEnable)
Function Enable Enables/diasables the label, widget and units label.

References CHOICE_SHAPE_CHAMFERED_RECT, CHOICE_SHAPE_CIRCLE, CHOICE_SHAPE_CUSTOM_CIRC_ANCHOR, CHOICE_SHAPE_CUSTOM_RECT_ANCHOR, CHOICE_SHAPE_OVAL, CHOICE_SHAPE_RECT, CHOICE_SHAPE_ROUNDRECT, CHOICE_SHAPE_TRAPEZOID, UNIT_BINDER::Enable(), enablePrimitivePage(), Format(), D_PAD::GetRoundRectRadiusRatio(), DIALOG_PAD_PROPERTIES_BASE::m_cbBottomLeft, DIALOG_PAD_PROPERTIES_BASE::m_cbBottomRight, DIALOG_PAD_PROPERTIES_BASE::m_cbTopLeft, DIALOG_PAD_PROPERTIES_BASE::m_cbTopRight, m_cornerRadius, m_dummyPad, m_offsetX, m_offsetY, DIALOG_PAD_PROPERTIES_BASE::m_PadShape, m_sizeY, DIALOG_PAD_PROPERTIES_BASE::m_staticTextCornerSizeRatio, DIALOG_PAD_PROPERTIES_BASE::m_staticTextCornerSizeRatioUnit, DIALOG_PAD_PROPERTIES_BASE::m_staticTextcps, DIALOG_PAD_PROPERTIES_BASE::m_tcChamferRatio, DIALOG_PAD_PROPERTIES_BASE::m_tcCornerSizeRatio, DIALOG_PAD_PROPERTIES_BASE::m_trapAxisCtrl, DIALOG_PAD_PROPERTIES_BASE::m_trapAxisLabel, m_trapDelta, DIALOG_PAD_PROPERTIES_BASE::m_ZoneCustomPadShape, redraw(), transferDataToPad(), and updateRoundRectCornerValues().

Referenced by initValues().

◆ OnPaint()

void DIALOG_SHIM::OnPaint ( wxPaintEvent &  event)
inherited

Definition at line 322 of file dialog_shim.cpp.

323 {
324  if( m_firstPaintEvent )
325  {
326 #ifdef __WXMAC__
327  fixOSXCancelButtonIssue( this );
328 #endif
329 
330  selectAllInTextCtrls( GetChildren() );
331 
333  m_initialFocusTarget->SetFocus();
334  else
335  SetFocus(); // Focus the dialog itself
336 
337  m_firstPaintEvent = false;
338  }
339 
340  event.Skip();
341 }
wxWindow * m_initialFocusTarget
Definition: dialog_shim.h:203
bool m_firstPaintEvent
Definition: dialog_shim.h:202
static void selectAllInTextCtrls(wxWindowList &children)

References DIALOG_SHIM::m_firstPaintEvent, DIALOG_SHIM::m_initialFocusTarget, and selectAllInTextCtrls().

Referenced by DIALOG_SHIM::DIALOG_SHIM().

◆ onPrimitiveDClick()

void DIALOG_PAD_PROPERTIES::onPrimitiveDClick ( wxMouseEvent &  event)
overrideprivatevirtual

Called on a double click on the basic shapes list.

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1801 of file dialog_pad_properties.cpp.

1802 {
1803  editPrimitive();
1804 }

References editPrimitive().

◆ OnPrimitiveSelection()

void DIALOG_PAD_PROPERTIES::OnPrimitiveSelection ( wxListEvent &  event)
overrideprivatevirtual

Called on selection/deselection of a basic shape.

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1792 of file dialog_pad_properties.cpp.

1793 {
1794  // Called on a double click on the basic shapes list
1795  // To Do: highligth the primitive(s) currently selected.
1796  redraw();
1797 }

References redraw().

◆ OnResize()

void DIALOG_PAD_PROPERTIES::OnResize ( wxSizeEvent &  event)
private

Definition at line 743 of file dialog_pad_properties.cpp.

744 {
745  redraw();
746  event.Skip();
747 }

References redraw().

Referenced by prepareCanvas().

◆ OnSetLayers()

void DIALOG_PAD_PROPERTIES::OnSetLayers ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1009 of file dialog_pad_properties.cpp.

1010 {
1012  redraw();
1013 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad's members.

References m_dummyPad, redraw(), and transferDataToPad().

◆ OnUpdateUI()

void DIALOG_PAD_PROPERTIES::OnUpdateUI ( wxUpdateUIEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 939 of file dialog_pad_properties.cpp.

940 {
941  int ii = m_PadType->GetSelection();
942 
943  if( (unsigned)ii >= arrayDim( code_type ) ) // catches < 0 also
944  ii = 0;
945 
946  bool hasHole, hasConnection;
947 
948  switch( ii )
949  {
950  default:
951  case 0: /* PTH */ hasHole = true; hasConnection = true; break;
952  case 1: /* SMD */ hasHole = false; hasConnection = true; break;
953  case 2: /* CONN */ hasHole = false; hasConnection = true; break;
954  case 3: /* NPTH */ hasHole = true; hasConnection = false; break;
955  case 4: /* Aperture */ hasHole = false; hasConnection = false; break;
956  }
957 
958  // Enable/disable hole controls
959  m_holeShapeLabel->Enable( hasHole );
960  m_holeShapeCtrl->Enable( hasHole );
961  m_holeX.Enable( hasHole );
962  m_holeY.Enable( hasHole && m_holeShapeCtrl->GetSelection() == 1 );
963 
964  // Enable/disable Pad number, net and pad length-to-die
965  m_PadNumText->Enable( hasConnection );
966  m_PadNumCtrl->Enable( hasConnection );
967  m_PadNameText->Enable( hasConnection );
968  m_PadNetSelector->Enable( hasConnection && m_canEditNetName && m_currentPad );
969  m_padToDie.Enable( hasConnection );
970 
971  // Enable/disable Copper Layers control
972  m_rbCopperLayersSel->Enable( ii != 4 );
973 }
static PAD_ATTR_T code_type[]
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Definition: macros.h:160
void Enable(bool aEnable)
Function Enable Enables/diasables the label, widget and units label.

References arrayDim(), code_type, UNIT_BINDER::Enable(), m_canEditNetName, m_currentPad, DIALOG_PAD_PROPERTIES_BASE::m_holeShapeCtrl, DIALOG_PAD_PROPERTIES_BASE::m_holeShapeLabel, m_holeX, m_holeY, DIALOG_PAD_PROPERTIES_BASE::m_PadNameText, DIALOG_PAD_PROPERTIES_BASE::m_PadNetSelector, DIALOG_PAD_PROPERTIES_BASE::m_PadNumCtrl, DIALOG_PAD_PROPERTIES_BASE::m_PadNumText, m_padToDie, DIALOG_PAD_PROPERTIES_BASE::m_PadType, and DIALOG_PAD_PROPERTIES_BASE::m_rbCopperLayersSel.

◆ OnUpdateUINonCopperWarning()

void DIALOG_PAD_PROPERTIES::OnUpdateUINonCopperWarning ( wxUpdateUIEvent &  event)
inlineoverrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 114 of file dialog_pad_properties.h.

115  {
116  bool isOnCopperLayer = ( m_dummyPad->GetLayerSet() & LSET::AllCuMask() ).any();
117  m_nonCopperWarningBook->SetSelection( isOnCopperLayer ? 0 : 1 );
118  }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Function AllCuMask returns a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:712
LSET GetLayerSet() const override
Function GetLayerSet returns a "layer mask", which is a bitmap of all layers on which the TRACK segme...
Definition: class_pad.h:435

References LSET::AllCuMask(), D_PAD::GetLayerSet(), m_dummyPad, and DIALOG_PAD_PROPERTIES_BASE::m_nonCopperWarningBook.

◆ OnValuesChanged()

void DIALOG_PAD_PROPERTIES::OnValuesChanged ( wxCommandEvent &  event)
overrideprivatevirtual

Called when a dimension has changed.

Update the graphical pad shown in the panel.

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1737 of file dialog_pad_properties.cpp.

1738 {
1739  if( m_canUpdate )
1740  {
1742  // If the pad size has changed, update the displayed values
1743  // for rounded rect pads
1745 
1746  redraw();
1747  }
1748 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad's members.

References m_canUpdate, m_dummyPad, redraw(), transferDataToPad(), and updateRoundRectCornerValues().

Referenced by DIALOG_PAD_PROPERTIES(), and ~DIALOG_PAD_PROPERTIES().

◆ PadOrientEvent()

void DIALOG_PAD_PROPERTIES::PadOrientEvent ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 871 of file dialog_pad_properties.cpp.

872 {
874  redraw();
875 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad's members.

References m_dummyPad, redraw(), and transferDataToPad().

◆ PadTypeSelected()

void DIALOG_PAD_PROPERTIES::PadTypeSelected ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 878 of file dialog_pad_properties.cpp.

879 {
880  int ii = m_PadType->GetSelection();
881 
882  if( (unsigned)ii >= arrayDim( code_type ) ) // catches < 0 also
883  ii = 0;
884 
885  bool hasHole, hasConnection;
886  bool hasProperty = true;
887 
888  switch( ii )
889  {
890  default:
891  case 0: /* PTH */ hasHole = true; hasConnection = true; break;
892  case 1: /* SMD */ hasHole = false; hasConnection = true; break;
893  case 2: /* CONN */ hasHole = false; hasConnection = true; break;
894  case 3: /* NPTH */
895  hasHole = true;
896  hasConnection = false;
897  hasProperty = false;
898  break;
899 
900  case 4: /* Aperture */ hasHole = false; hasConnection = false; break;
901  }
902 
903  LSET layer_mask = std_pad_layers[ii];
904  setPadLayersList( layer_mask );
905 
906  if( !hasHole )
907  {
908  m_holeX.SetValue( 0 );
909  m_holeY.SetValue( 0 );
910  }
911  else if ( m_holeX.GetValue() == 0 && m_currentPad )
912  {
915  }
916 
917  if( !hasConnection )
918  {
919  m_PadNumCtrl->SetValue( wxEmptyString );
921  m_padToDie.SetValue( 0 );
922  }
923  else if( m_PadNumCtrl->GetValue().IsEmpty() && m_currentPad )
924  {
925  m_PadNumCtrl->SetValue( m_currentPad->GetName() );
927  }
928 
929  if( !hasProperty )
930  m_choiceFabProperty->SetSelection( 0 );
931 
932  m_choiceFabProperty->Enable( hasProperty );
933 
935  redraw();
936 }
int GetNetCode() const
Function GetNetCode.
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad's members.
void setPadLayersList(LSET layer_mask)
Function setPadLayersList updates the CheckBox states in pad layers list,.
static PAD_ATTR_T code_type[]
LSET is a set of PCB_LAYER_IDs.
void SetSelectedNetcode(int aNetcode)
const wxString & GetName() const
Definition: class_pad.h:200
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Definition: macros.h:160
static const LSET std_pad_layers[]
virtual void SetValue(int aValue)
Function SetValue Sets new value (in Internal Units) for the text field, taking care of units convers...
const wxSize & GetDrillSize() const
Definition: class_pad.h:291
virtual long long int GetValue()
Function GetValue Returns the current value in Internal Units.

References arrayDim(), code_type, D_PAD::GetDrillSize(), D_PAD::GetName(), BOARD_CONNECTED_ITEM::GetNetCode(), UNIT_BINDER::GetValue(), DIALOG_PAD_PROPERTIES_BASE::m_choiceFabProperty, m_currentPad, m_dummyPad, m_holeX, m_holeY, DIALOG_PAD_PROPERTIES_BASE::m_PadNetSelector, DIALOG_PAD_PROPERTIES_BASE::m_PadNumCtrl, m_padToDie, DIALOG_PAD_PROPERTIES_BASE::m_PadType, redraw(), setPadLayersList(), NET_SELECTOR::SetSelectedNetcode(), UNIT_BINDER::SetValue(), std_pad_layers, and transferDataToPad().

◆ padValuesOK()

bool DIALOG_PAD_PROPERTIES::padValuesOK ( )
private

test if all values are acceptable for the pad

Definition at line 1017 of file dialog_pad_properties.cpp.

1018 {
1019  bool error = transferDataToPad( m_dummyPad );
1020  bool skip_tstoffset = false; // the offset prm is not always tested
1021 
1022  wxArrayString error_msgs;
1023  wxString msg;
1024 
1025  // Test for incorrect values
1026  if( (m_dummyPad->GetSize().x <= 0) ||
1027  ((m_dummyPad->GetSize().y <= 0) && (m_dummyPad->GetShape() != PAD_SHAPE_CIRCLE)) )
1028  {
1029  error_msgs.Add( _( "Pad size must be greater than zero" ) );
1030  }
1031 
1032  if( (m_dummyPad->GetSize().x < m_dummyPad->GetDrillSize().x) ||
1033  (m_dummyPad->GetSize().y < m_dummyPad->GetDrillSize().y) )
1034  {
1035  error_msgs.Add( _( "Incorrect value for pad drill: pad drill bigger than pad size" ) );
1036  skip_tstoffset = true; // offset prm will be not tested because if the drill value
1037  // is incorrect the offset prm is always seen as incorrect, even if it is 0
1038  }
1039 
1040  if( m_dummyPad->GetLocalClearance() < 0 )
1041  {
1042  error_msgs.Add( _( "Pad local clearance must be zero or greater than zero" ) );
1043  }
1044 
1045  // Some pads need a negative solder mask clearance (mainly for BGA with small pads)
1046  // However the negative solder mask clearance must not create negative mask size
1047  // Therefore test for minimal acceptable negative value
1048  // Hovewer, a negative value can give strange result with custom shapes, so it is not
1049  // allowed for custom pad shape
1051  {
1053  error_msgs.Add( _( "Pad local solder mask clearance must be zero or greater than zero" ) );
1054  else
1055  {
1056  int min_smClearance = -std::min( m_dummyPad->GetSize().x, m_dummyPad->GetSize().y )/2;
1057 
1058  if( m_dummyPad->GetLocalSolderMaskMargin() <= min_smClearance )
1059  {
1060  error_msgs.Add( wxString::Format(
1061  _( "Pad local solder mask clearance must be greater than %s" ),
1062  StringFromValue( GetUserUnits(), min_smClearance, true, true ) ) );
1063  }
1064  }
1065  }
1066 
1067  // Some pads need a positive solder paste clearance (mainly for BGA with small pads)
1068  // Hovewer, a positive value can create issues if the resulting shape is too big.
1069  // (like a solder paste creating a solder paste area on a neighbour pad or on the solder mask)
1070  // So we could ask for user to confirm the choice
1071  // Currently there are no test
1072 
1073  LSET padlayers_mask = m_dummyPad->GetLayerSet();
1074 
1075  if( padlayers_mask == 0 )
1076  error_msgs.Add( _( "Error: pad has no layer" ) );
1077 
1078  if( !padlayers_mask[F_Cu] && !padlayers_mask[B_Cu] )
1079  {
1080  if( m_dummyPad->GetDrillSize().x || m_dummyPad->GetDrillSize().y )
1081  {
1082  // Note: he message is shown in an HTML window
1083  msg = _( "Error: the pad is not on a copper layer and has a hole" );
1084 
1086  {
1087  msg += wxT( "<br><br><i>" );
1088  msg += _( "For NPTH pad, set pad size value to pad drill value,"
1089  " if you do not want this pad plotted in gerber files" );
1090  }
1091 
1092  error_msgs.Add( msg );
1093  }
1094  }
1095 
1096  if( !skip_tstoffset )
1097  {
1098  wxPoint max_size;
1099  max_size.x = std::abs( m_dummyPad->GetOffset().x );
1100  max_size.y = std::abs( m_dummyPad->GetOffset().y );
1101  max_size.x += m_dummyPad->GetDrillSize().x / 2;
1102  max_size.y += m_dummyPad->GetDrillSize().y / 2;
1103 
1104  if( ( m_dummyPad->GetSize().x / 2 < max_size.x ) ||
1105  ( m_dummyPad->GetSize().y / 2 < max_size.y ) )
1106  {
1107  error_msgs.Add( _( "Incorrect value for pad offset" ) );
1108  }
1109  }
1110 
1111  if( error )
1112  error_msgs.Add( _( "Too large value for pad delta size" ) );
1113 
1114  switch( m_dummyPad->GetAttribute() )
1115  {
1116  case PAD_ATTRIB_HOLE_NOT_PLATED: // Not plated, but through hole, a hole is expected
1117  case PAD_ATTRIB_STANDARD : // Pad through hole, a hole is also expected
1118  if( m_dummyPad->GetDrillSize().x <= 0 ||
1120  error_msgs.Add( _( "Error: Through hole pad: drill diameter set to 0" ) );
1121  break;
1122 
1123  case PAD_ATTRIB_CONN: // Connector pads are smd pads, just they do not have solder paste.
1124  if( padlayers_mask[B_Paste] || padlayers_mask[F_Paste] )
1125  error_msgs.Add( _( "Error: Connector pads are not on the solder paste layer\n"
1126  "Use SMD pads instead" ) );
1128 
1129  case PAD_ATTRIB_SMD: // SMD and Connector pads (One external copper layer only)
1130  {
1131  LSET innerlayers_mask = padlayers_mask & LSET::InternalCuMask();
1132 
1133  if( ( padlayers_mask[F_Cu] && padlayers_mask[B_Cu] ) ||
1134  innerlayers_mask.count() != 0 )
1135  error_msgs.Add( _( "Error: only one external copper layer allowed for SMD or Connector pads" ) );
1136  }
1137  break;
1138  }
1139 
1140  if( m_dummyPad->GetProperty() != PAD_PROP_NONE &&
1142  error_msgs.Add( _( "Property cannot be set for NPTH" ) );
1143 
1146  error_msgs.Add( _( "Castellated property can be set only for PTH" ) );
1147 
1148  if( m_dummyPad->GetProperty() == PAD_PROP_BGA &&
1150  error_msgs.Add( _( "BGA property can be set only for SMD pads" ) );
1151 
1154  {
1155  wxString value = m_tcCornerSizeRatio->GetValue();
1156  double rrRadiusRatioPercent;
1157 
1158  if( !value.ToDouble( &rrRadiusRatioPercent ) )
1159  error_msgs.Add( _( "Incorrect corner size value" ) );
1160  else
1161  {
1162  if( rrRadiusRatioPercent < 0.0 )
1163  error_msgs.Add( _( "Incorrect (negative) corner size value" ) );
1164  else if( rrRadiusRatioPercent > 50.0 )
1165  error_msgs.Add( _( "Corner size value must be smaller than 50%" ) );
1166  }
1167  }
1168 
1170  {
1172  error_msgs.Add( _( "Incorrect pad shape: the shape must be equivalent to only one polygon" ) );
1173  }
1174 
1175 
1176  if( error_msgs.GetCount() )
1177  {
1178  HTML_MESSAGE_BOX dlg( this, _("Pad setup errors list" ) );
1179  dlg.ListSet( error_msgs );
1180  dlg.ShowModal();
1181  }
1182 
1183  return error_msgs.GetCount() == 0;
1184 }
int GetLocalSolderMaskMargin() const
Definition: class_pad.h:450
#define KI_FALLTHROUGH
no special fabrication property
Definition: pad_shapes.h:78
like PAD_STANDARD, but not plated mechanical use only, no connection allowed
Definition: pad_shapes.h:66
int GetLocalClearance(wxString *aSource=nullptr) const override
Function GetLocalClearance returns any local clearances set in the "classic" (ie: pre-rule) system.
Definition: class_pad.cpp:630
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad's members.
Smd pad, appears on the solder paste layer (default)
Definition: pad_shapes.h:62
wxString StringFromValue(EDA_UNITS aUnits, double aValue, bool aAddUnitSymbol, bool aUseMils)
Function StringFromValue returns the string from aValue according to units (inch, mm ....
Definition: base_units.cpp:233
Smd pad, used in BGA footprints.
Definition: pad_shapes.h:79
PAD_ATTR_T GetAttribute() const
Definition: class_pad.h:438
a pad with a castellated through hole
Definition: pad_shapes.h:84
EDA_UNITS GetUserUnits() const
Definition: dialog_shim.h:132
LSET is a set of PCB_LAYER_IDs.
bool MergePrimitivesAsPolygon(SHAPE_POLY_SET *aMergedPolygon=NULL)
Merge all basic shapes, converted to a polygon in one polygon, in m_customShapeAsPolygon.
const wxPoint & GetOffset() const
Definition: class_pad.h:294
PAD_DRILL_SHAPE_T GetDrillShape() const
Definition: class_pad.h:417
LSET GetLayerSet() const override
Function GetLayerSet returns a "layer mask", which is a bitmap of all layers on which the TRACK segme...
Definition: class_pad.h:435
static LSET InternalCuMask()
Function InternalCuMask() returns a complete set of internal copper layers, which is all Cu layers ex...
Definition: lset.cpp:672
PAD_PROP_T GetProperty() const
Definition: class_pad.h:441
HTML_MESSAGE_BOX.
Like smd, does not appear on the solder paste layer (default) note also has a special attribute in Ge...
Definition: pad_shapes.h:63
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
#define _(s)
Definition: 3d_actions.cpp:33
const wxSize & GetDrillSize() const
Definition: class_pad.h:291
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:222
const wxSize & GetSize() const
Definition: class_pad.h:285

References _, B_Cu, B_Paste, F_Cu, F_Paste, Format(), D_PAD::GetAttribute(), D_PAD::GetDrillShape(), D_PAD::GetDrillSize(), D_PAD::GetLayerSet(), D_PAD::GetLocalClearance(), D_PAD::GetLocalSolderMaskMargin(), D_PAD::GetOffset(), D_PAD::GetProperty(), D_PAD::GetShape(), D_PAD::GetSize(), DIALOG_SHIM::GetUserUnits(), LSET::InternalCuMask(), KI_FALLTHROUGH, HTML_MESSAGE_BOX::ListSet(), m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_tcCornerSizeRatio, D_PAD::MergePrimitivesAsPolygon(), PAD_ATTRIB_CONN, PAD_ATTRIB_HOLE_NOT_PLATED, PAD_ATTRIB_SMD, PAD_ATTRIB_STANDARD, PAD_DRILL_SHAPE_OBLONG, PAD_PROP_BGA, PAD_PROP_CASTELLATED, PAD_PROP_NONE, PAD_SHAPE_CHAMFERED_RECT, PAD_SHAPE_CIRCLE, PAD_SHAPE_CUSTOM, PAD_SHAPE_ROUNDRECT, StringFromValue(), transferDataToPad(), wxPoint::x, and wxPoint::y.

Referenced by TransferDataFromWindow().

◆ prepareCanvas()

void DIALOG_PAD_PROPERTIES::prepareCanvas ( )
private

Definition at line 251 of file dialog_pad_properties.cpp.

252 {
253  // Initialize the canvas to display the pad
254 
255  // Show the X and Y axis. It is usefull because pad shape can have an offset
256  // or be a complex shape.
257  KIGFX::COLOR4D axis_color = LIGHTBLUE;
258 
260  Millimeter2iu( 0.2 ),
262  m_axisOrigin->SetDrawAtZero( true );
263 
267 
270 
271  m_panelShowPadGal->Show();
272 
274 
275  // fix the pad render mode (filled/not filled)
276  auto settings = static_cast<KIGFX::PCB_RENDER_SETTINGS*>( view->GetPainter()->GetSettings() );
277  bool sketchMode = m_cbShowPadOutline->IsChecked();
278  settings->SetSketchMode( LAYER_PADS_TH, sketchMode );
279  settings->SetSketchMode( LAYER_PAD_FR, sketchMode );
280  settings->SetSketchMode( LAYER_PAD_BK, sketchMode );
281  settings->SetSketchModeGraphicItems( sketchMode );
282 
283  // gives a non null grid size (0.001mm) because GAL layer does not like a 0 size grid:
284  double gridsize = 0.001 * IU_PER_MM;
285  view->GetGAL()->SetGridSize( VECTOR2D( gridsize, gridsize ) );
286  // And do not show the grid:
287  view->GetGAL()->SetGridVisibility( false );
288  view->Add( m_dummyPad );
289  view->Add( m_axisOrigin );
290 
292  Connect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_PAD_PROPERTIES::OnResize ) );
293 }
KIGFX::VIEW_CONTROLS * GetViewControls() const
Function GetViewControls() Returns a pointer to the VIEW_CONTROLS instance used in the panel.
multilayer pads, usually with holes
void ApplySettings(const VC_SETTINGS &aSettings)
Applies VIEW_CONTROLS settings from an object
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
GAL * GetGAL() const
Function GetGAL() Returns the GAL this view is using to draw graphical primitives.
Definition: view.h:180
PAINTER * GetPainter() const
Function GetPainter() Returns the painter object used by the view for drawing VIEW_ITEMS.
Definition: view.h:199
const VC_SETTINGS & GetSettings() const
Returns the current VIEW_CONTROLS settings
KIGFX::ORIGIN_VIEWITEM * m_axisOrigin
VECTOR2< double > VECTOR2D
Definition: vector2d.h:593
void SetDrawAtZero(bool aDrawFlag)
Function SetDrawAtZero() Set the draw at zero flag.
void SetStealsFocus(bool aStealsFocus)
Set whether focus is taken on certain events (mouseover, keys, etc).
void OnResize(wxSizeEvent &event)
virtual KIGFX::PCB_VIEW * GetView() const override
Function GetView() Returns a pointer to the VIEW instance used in the panel.
void SetGridSize(const VECTOR2D &aGridSize)
Set the grid size.
void StartDrawing()
Function StartDrawing() Begins drawing if it was stopped previously.
void UpdateColors()
Updates the color settings in the painter and GAL.
bool SwitchBackend(GAL_TYPE aGalType) override
Function SwitchBackend Switches method of rendering graphics.
virtual RENDER_SETTINGS * GetSettings()=0
Function GetAdapter Returns pointer to current settings that are going to be used when drawing items.
smd pads, front layer
void SetGridVisibility(bool aVisibility)
Sets the visibility setting of the grid.
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:346
GAL_TYPE GetBackend() const
Function GetBackend Returns the type of backend currently used by GAL canvas.
VIEW.
Definition: view.h:61
const wxPoint GetPosition() const override
Definition: class_pad.h:226
COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:40

References KIGFX::VIEW::Add(), KIGFX::VIEW_CONTROLS::ApplySettings(), KIGFX::ORIGIN_VIEWITEM::CROSS, EDA_DRAW_PANEL_GAL::GetBackend(), PCB_BASE_FRAME::GetCanvas(), KIGFX::VIEW::GetGAL(), KIGFX::VIEW::GetPainter(), D_PAD::GetPosition(), KIGFX::PAINTER::GetSettings(), KIGFX::VIEW_CONTROLS::GetSettings(), PCB_DRAW_PANEL_GAL::GetView(), EDA_DRAW_PANEL_GAL::GetViewControls(), LAYER_PAD_BK, LAYER_PAD_FR, LAYER_PADS_TH, LIGHTBLUE, m_axisOrigin, DIALOG_PAD_PROPERTIES_BASE::m_cbShowPadOutline, m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_panelShowPadGal, m_parent, OnResize(), KIGFX::ORIGIN_VIEWITEM::SetDrawAtZero(), KIGFX::GAL::SetGridSize(), KIGFX::GAL::SetGridVisibility(), EDA_DRAW_PANEL_GAL::SetStealsFocus(), EDA_DRAW_PANEL_GAL::StartDrawing(), PCB_DRAW_PANEL_GAL::SwitchBackend(), and PCB_DRAW_PANEL_GAL::UpdateColors().

Referenced by DIALOG_PAD_PROPERTIES().

◆ Prj()

PROJECT & KIWAY_HOLDER::Prj ( ) const
inherited

Function Prj returns a reference to the PROJECT "associated with" this KIWAY.

Definition at line 35 of file kiway_holder.cpp.

36 {
37  return Kiway().Prj();
38 }
KIWAY & Kiway() const
Function Kiway returns a reference to the KIWAY that this object has an opportunity to participate in...
Definition: kiway_holder.h:56
VTBL_ENTRY PROJECT & Prj() const
Function Prj returns the PROJECT associated with this KIWAY.
Definition: kiway.cpp:171

References KIWAY_HOLDER::Kiway(), and KIWAY::Prj().

Referenced by PCB_BASE_EDIT_FRAME::AddLibrary(), LIB_MANAGER::addLibrary(), SCH_EDIT_FRAME::AppendSchematic(), PCB_EDIT_FRAME::ArchiveModulesOnBoard(), DIALOG_SYMBOL_REMAP::backupProject(), CVPCB_MAINFRAME::BuildLIBRARY_LISTBOX(), DIALOG_FOOTPRINT_FP_EDITOR::Cfg3DPath(), DIALOG_FOOTPRINT_BOARD_EDITOR::Cfg3DPath(), DIALOG_GEN_FOOTPRINT_POSITION::CreateGerberFiles(), PCB_BASE_EDIT_FRAME::CreateNewLibrary(), KICAD_MANAGER_FRAME::CreateNewProject(), DIALOG_PLOT_SCHEMATIC::createPlotFileName(), DIALOG_SYMBOL_REMAP::createProjectSymbolLibTable(), FOOTPRINT_EDIT_FRAME::DeleteModuleFromLibrary(), DIALOG_BOARD_SETUP::DIALOG_BOARD_SETUP(), DIALOG_BOARD_STATISTICS::DIALOG_BOARD_STATISTICS(), DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT(), DIALOG_CHOOSE_FOOTPRINT::DIALOG_CHOOSE_FOOTPRINT(), DIALOG_CONFIG_EQUFILES::DIALOG_CONFIG_EQUFILES(), DIALOG_FOOTPRINT_BOARD_EDITOR::DIALOG_FOOTPRINT_BOARD_EDITOR(), DIALOG_FOOTPRINT_FP_EDITOR::DIALOG_FOOTPRINT_FP_EDITOR(), DIALOG_PAGES_SETTINGS::DIALOG_PAGES_SETTINGS(), DIALOG_SCHEMATIC_SETUP::DIALOG_SCHEMATIC_SETUP(), DIALOG_SYMBOL_REMAP::DIALOG_SYMBOL_REMAP(), LIB_VIEW_FRAME::DisplayLibInfos(), CVPCB_MAINFRAME::DisplayStatus(), PL_DRAW_PANEL_GAL::DisplayWorksheet(), PCB_EDIT_FRAME::doAutoSave(), FIELDS_GRID_TRICKS::doPopupSelection(), FIELDS_EDITOR_GRID_TRICKS::doPopupSelection(), KICAD_MANAGER_CONTROL::Execute(), PCB_EDIT_FRAME::Export_IDF3(), DIALOG_EXPORT_SVG::ExportSVGFile(), LIB_CONTROL::ExportSymbolAsSVG(), LIB_CONTROL::ExportView(), PCB_EDIT_FRAME::ExportVRML_File(), PCB_EDIT_FRAME::Files_io_from_id(), PCB_EDIT_FRAME::GenD356File(), DIALOG_GENDRILL::GenDrillAndMapFiles(), DISPLAY_FOOTPRINTS_FRAME::Get_Module(), FOOTPRINT_VIEWER_FRAME::getCurFootprintName(), LIB_EDIT_FRAME::GetCurLib(), FOOTPRINT_VIEWER_FRAME::getCurNickname(), SCH_BASE_FRAME::GetLibPart(), DIALOG_SYMBOL_REMAP::getLibsNotInGlobalSymbolLibTable(), KICAD_MANAGER_FRAME::GetProjectFileName(), LIB_VIEW_FRAME::GetSelectedSymbol(), FP_THREAD_IFACE::GetTable(), PCB_EDIT_FRAME::importFile(), SCH_EDIT_FRAME::importFile(), SCH_EDITOR_CONTROL::ImportFPAssignments(), FOOTPRINT_EDIT_FRAME::initLibraryTree(), LIB_EDIT_FRAME::KiwayMailIn(), EDA_DRAW_FRAME::LibraryFileBrowser(), LIB_EDIT_FRAME::LoadComponentFromCurrentLib(), CVPCB_MAINFRAME::LoadFootprintFiles(), DIALOG_SPICE_MODEL::loadLibrary(), LIB_EDIT_FRAME::LoadOneSymbol(), KICAD_MANAGER_FRAME::LoadProject(), SCH_EDIT_FRAME::LoadProject(), SCH_EDIT_FRAME::LoadProjectFile(), CVPCB_MAINFRAME::LoadProjectFile(), PCB_EDIT_FRAME::LoadProjectSettings(), DRC::LoadRules(), SCH_EDIT_FRAME::LoadSheetFromFile(), DIALOG_FOOTPRINT_FP_EDITOR::On3DModelCellChanged(), DIALOG_FOOTPRINT_BOARD_EDITOR::On3DModelCellChanged(), FOOTPRINT_VIEWER_FRAME::OnActivate(), DIALOG_FOOTPRINT_FP_EDITOR::OnAdd3DModel(), DIALOG_FOOTPRINT_BOARD_EDITOR::OnAdd3DModel(), KICAD_MANAGER_FRAME::OnBrowseInFileExplorer(), TEXT_BUTTON_URL::OnButtonClick(), TEXT_BUTTON_FILE_BROWSER::OnButtonClick(), DIALOG_EDIT_COMPONENTS_LIBID::onClickOrphansButton(), SCH_EDIT_FRAME::OnCloseWindow(), DIALOG_GENDRILL::OnGenReportFile(), SCH_EDIT_FRAME::OnImportProject(), DIALOG_CHOOSE_COMPONENT::OnInitDialog(), SCH_EDIT_FRAME::OnOpenCvpcb(), KICAD_MANAGER_FRAME::OnOpenFileInTextEditor(), DIALOG_NETLIST::OnOpenNetlistClick(), SCH_EDIT_FRAME::OnOpenPcbnew(), DIALOG_EXPORT_SVG::OnOutputDirectoryBrowseClicked(), DIALOG_PLOT::OnOutputDirectoryBrowseClicked(), DIALOG_PLOT_SCHEMATIC::OnOutputDirectoryBrowseClicked(), DIALOG_GEN_FOOTPRINT_POSITION::OnOutputDirectoryBrowseClicked(), DIALOG_GENDRILL::OnOutputDirectoryBrowseClicked(), DIALOG_SYMBOL_REMAP::OnRemapSymbols(), DIALOG_BOM::OnRunGenerator(), FOOTPRINT_EDIT_FRAME::OnSaveFootprintAsPng(), DIALOG_ERC::OnSaveReport(), DIALOG_DRC::OnSaveReport(), DIALOG_LABEL_EDITOR::onScintillaCharAdded(), DIALOG_SCH_EDIT_ONE_FIELD::onScintillaCharAdded(), DIALOG_SPICE_MODEL::onSelectLibrary(), LIB_VIEW_FRAME::OnSelectSymbol(), KICAD_MANAGER_FRAME::OnUnarchiveFiles(), SCH_EDIT_FRAME::OnUpdatePCB(), SCH_EDIT_FRAME::OpenProjectFiles(), PCB_EDIT_FRAME::OpenProjectFiles(), PANEL_PREV_3D::PANEL_PREV_3D(), SCH_EDITOR_CONTROL::Paste(), FOOTPRINT_EDITOR_TOOLS::PasteFootprint(), PCB_BASE_EDIT_FRAME::PCB_BASE_EDIT_FRAME(), DIALOG_PLOT::Plot(), DIALOG_PLOT_SCHEMATIC::Plot_1_Page_HPGL(), DIALOG_PLOT_SCHEMATIC::PlotOneSheetDXF(), DIALOG_CHOOSE_COMPONENT::PopulateFootprintSelector(), SCH_EDITOR_CONTROL::Print(), SCH_EDIT_FRAME::PrintPage(), EDA_DRAW_FRAME::PrintWorkSheet(), CVPCB_MAINFRAME::ReadNetListAndFpFiles(), PCB_EDIT_FRAME::RecreateCmpFileFromBoard(), FOOTPRINT_VIEWER_FRAME::ReCreateFootprintList(), FOOTPRINT_VIEWER_FRAME::ReCreateLibraryList(), LIB_VIEW_FRAME::ReCreateListCmp(), LIB_VIEW_FRAME::ReCreateListLib(), EDA_3D_VIEWER::ReloadRequest(), DIALOG_SYMBOL_REMAP::remapSymbolToLibTable(), SCH_EDITOR_CONTROL::RescueLegacyProject(), SCH_EDITOR_CONTROL::RescueSymbolLibTableProject(), FOOTPRINT_EDIT_FRAME::restoreLastFootprint(), FOOTPRINT_EDIT_FRAME::retainLastFootprint(), DIALOG_EDIT_COMPONENTS_LIBID::revertChanges(), SCH_EDIT_FRAME::SaveEEFile(), FOOTPRINT_EDIT_FRAME::SaveFootprint(), FOOTPRINT_EDIT_FRAME::SaveFootprintAs(), FOOTPRINT_EDIT_FRAME::SaveFootprintInLibrary(), LIB_EDIT_FRAME::saveLibrary(), LIB_EDIT_FRAME::SaveOneSymbol(), LIB_EDIT_FRAME::savePartAs(), SCH_EDIT_FRAME::SaveProject(), CVPCB_MAINFRAME::SaveProjectFile(), SCH_EDIT_FRAME::SaveProjectSettings(), PCB_EDIT_FRAME::SaveProjectSettings(), DIALOG_BOARD_STATISTICS::saveReportClicked(), SCH_BASE_FRAME::saveSymbolLibTables(), FOOTPRINT_VIEWER_FRAME::SelectAndViewFootprint(), SCH_BASE_FRAME::SelectCompFromLibTree(), PCB_BASE_FRAME::SelectLibrary(), LIB_EDIT_FRAME::SelectLibraryFromList(), LIB_EDIT_FRAME::selectSymLibTable(), FOOTPRINT_VIEWER_FRAME::setCurFootprintName(), LIB_EDIT_FRAME::SetCurLib(), FOOTPRINT_VIEWER_FRAME::setCurNickname(), LIB_EDIT_FRAME::SetCurPart(), GERBVIEW_FRAME::SetPageSettings(), KICAD_MANAGER_FRAME::SetProjectFileName(), EE_INSPECTION_TOOL::ShowDatasheet(), DIALOG_CHOOSE_COMPONENT::ShowFootprintFor(), COMMON_CONTROL::ShowHelp(), LIB_VIEW_FRAME::ShowModal(), FOOTPRINT_VIEWER_FRAME::ShowModal(), SIM_PLOT_FRAME::SIM_PLOT_FRAME(), LIB_MANAGER::symTable(), SYMBOL_TREE_SYNCHRONIZING_ADAPTER::Sync(), FOOTPRINT_EDIT_FRAME::SyncLibraryTree(), EDA_3D_VIEWER::takeScreenshot(), PANEL_SETUP_RULES::TransferDataFromWindow(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::TransferDataFromWindow(), NETLIST_DIALOG::TransferDataFromWindow(), DIALOG_EDIT_COMPONENTS_LIBID::TransferDataFromWindow(), PANEL_SETUP_RULES::TransferDataToWindow(), DIALOG_FOOTPRINT_FP_EDITOR::TransferDataToWindow(), DIALOG_FOOTPRINT_BOARD_EDITOR::TransferDataToWindow(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::UpdateFieldsFromLibrary(), DIALOG_PAGES_SETTINGS::UpdatePageLayoutExample(), FOOTPRINT_VIEWER_FRAME::UpdateTitle(), FOOTPRINT_EDIT_FRAME::updateTitle(), SCH_EDIT_FRAME::UpdateTitle(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::Validate(), SCH_EDIT_FRAME::WriteNetListFile(), DIALOG_FOOTPRINT_BOARD_EDITOR::~DIALOG_FOOTPRINT_BOARD_EDITOR(), DIALOG_FOOTPRINT_FP_EDITOR::~DIALOG_FOOTPRINT_FP_EDITOR(), and PCB_BASE_EDIT_FRAME::~PCB_BASE_EDIT_FRAME().

◆ redraw()

void DIALOG_PAD_PROPERTIES::redraw ( )
private

Definition at line 1187 of file dialog_pad_properties.cpp.

1188 {
1191 
1192  // The layer used to place primitive items selected when editing custom pad shapes
1193  // we use here a layer never used in a pad:
1194  #define SELECTED_ITEMS_LAYER Dwgs_User
1195 
1197  KIGFX::PCB_RENDER_SETTINGS* settings =
1198  static_cast<KIGFX::PCB_RENDER_SETTINGS*>( view->GetPainter()->GetSettings() );
1200 
1201  view->Update( m_dummyPad );
1202 
1203  // delete previous items if highlight list
1204  while( m_highlight.size() )
1205  {
1206  delete m_highlight.back(); // the dtor also removes item from view
1207  m_highlight.pop_back();
1208  }
1209 
1210  // highlight selected primitives:
1211  long select = m_listCtrlPrimitives->GetFirstSelected();
1212 
1213  while( select >= 0 )
1214  {
1215  PAD_CS_PRIMITIVE& primitive = m_primitives[select];
1216 
1217  DRAWSEGMENT* dummySegment = new DRAWSEGMENT;
1218  dummySegment->SetLayer( SELECTED_ITEMS_LAYER );
1219  primitive.ExportTo( dummySegment );
1220  dummySegment->Rotate( wxPoint( 0, 0), m_dummyPad->GetOrientation() );
1221  dummySegment->Move( m_dummyPad->GetPosition() );
1222 
1223  // Update selected primitive (highlight selected)
1224  switch( primitive.m_Shape )
1225  {
1226  case S_SEGMENT:
1227  case S_ARC:
1228  case S_CURVE:
1229  break;
1230 
1231  case S_CIRCLE: // ring or circle
1232  if( primitive.m_Thickness == 0 ) // filled circle
1233  { // the filled circle option does not exist in a DRAWSEGMENT
1234  // but it is easy to create it with a circle having the
1235  // right radius and outline width
1236  wxPoint end = dummySegment->GetCenter();
1237  end.x += primitive.m_Radius / 2;
1238  dummySegment->SetEnd( end );
1239  dummySegment->SetWidth( primitive.m_Radius );
1240  }
1241  break;
1242 
1243  case S_POLYGON:
1244  break;
1245 
1246  default:
1247  delete dummySegment;
1248  dummySegment = nullptr;
1249  break;
1250  }
1251 
1252  if( dummySegment )
1253  {
1254  view->Add( dummySegment );
1255  m_highlight.push_back( dummySegment );
1256  }
1257 
1258  select = m_listCtrlPrimitives->GetNextSelected( select );
1259  }
1260 
1261  BOX2I bbox = m_dummyPad->ViewBBox();
1262 
1263  if( bbox.GetSize().x > 0 && bbox.GetSize().y > 0 )
1264  {
1265  // gives a size to the full drawable area
1266  BOX2I drawbox;
1267  drawbox.Move( m_dummyPad->GetPosition() );
1268  drawbox.Inflate( bbox.GetSize().x * 2, bbox.GetSize().y * 2 );
1269 
1270  view->SetBoundary( drawbox );
1271 
1272  // Autozoom
1273  view->SetViewport( BOX2D( bbox.GetOrigin(), bbox.GetSize() ) );
1274 
1275  // Add a margin
1276  view->SetScale( m_panelShowPadGal->GetView()->GetScale() * 0.7 );
1277 
1280  }
1281 }
void Move(const Vec &aMoveVector)
Function Move moves the rectangle by the aMoveVector.
Definition: box2.h:119
void SetViewport(const BOX2D &aViewport)
Function SetViewport() Sets the visible area of the VIEW.
Definition: view.cpp:550
virtual void Move(const wxPoint &aMoveVector) override
Function Move move this object.
virtual void SetTopLayer(int aLayer, bool aEnabled=true)
Function SetTopLayer() Sets given layer to be displayed on the top or sets back the default order of ...
Definition: view.cpp:860
virtual void SetLayer(PCB_LAYER_ID aLayer)
Function SetLayer sets the layer this item is on.
const wxPoint GetCenter() const override
Function GetCenter()
void ExportTo(DRAWSEGMENT *aTarget)
Export the PAD_CS_PRIMITIVE parameters to a DRAWSEGMENT useful to draw a primitive shape.
polygon (not yet used for tracks, but could be in microwave apps)
BOX2< VECTOR2D > BOX2D
Definition: box2.h:522
usual segment : line with rounded ends
PAINTER * GetPainter() const
Function GetPainter() Returns the painter object used by the view for drawing VIEW_ITEMS.
Definition: view.h:199
PCB_RENDER_SETTINGS Stores PCB specific render settings.
Definition: pcb_painter.h:60
virtual const BOX2I ViewBBox() const override
Function ViewBBox() returns the bounding box of the item covering all its layers.
Definition: class_pad.cpp:1577
int m_Radius
thickness of segment or outline For filled S_CIRCLE shape, thickness = 0.
Definition: class_pad.h:72
Arcs (with rounded ends)
Helper class to handle a primitive (basic shape: polygon, segment, circle or arc) to build a custom p...
Definition: class_pad.h:65
void SetLayerColor(int aLayer, const COLOR4D &aColor)
Function SetLayerColor Changes the color used to draw a layer.
Bezier Curve.
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags)
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1540
virtual KIGFX::PCB_VIEW * GetView() const override
Function GetView() Returns a pointer to the VIEW instance used in the panel.
STROKE_T m_Shape
Definition: class_pad.h:68
void StartDrawing()
Function StartDrawing() Begins drawing if it was stopped previously.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=NULL) override
Update the board display after modifying it by a python script (note: it is automatically called by a...
virtual void SetScale(double aScale, VECTOR2D aAnchor={ 0, 0 })
Function SetScale() Sets the scaling factor, zooming around a given anchor point.
Definition: view.cpp:578
int m_Thickness
S_SEGMENT, S_ARC, S_CIRCLE, S_POLYGON only (same as DRAWSEGMENT)
Definition: class_pad.h:69
virtual RENDER_SETTINGS * GetSettings()=0
Function GetAdapter Returns pointer to current settings that are going to be used when drawing items.
BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Function Inflate inflates the rectangle horizontally by dx and vertically by dy.
Definition: box2.h:301
virtual void Rotate(const wxPoint &aRotCentre, double aAngle) override
Function Rotate Rotate this object.
std::vector< PAD_CS_PRIMITIVE > m_primitives
double GetOrientation() const
Function GetOrientation returns the rotation angle of the pad in tenths of degrees,...
Definition: class_pad.h:411
#define SELECTED_ITEMS_LAYER
void SetEnd(const wxPoint &aEnd)
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:346
const Vec & GetSize() const
Definition: box2.h:188
const Vec & GetOrigin() const
Definition: box2.h:192
VIEW.
Definition: view.h:61
void SetBoundary(const BOX2D &aBoundary)
Function SetBoundary() Sets limits for view area.
Definition: view.h:267
const wxPoint GetPosition() const override
Definition: class_pad.h:226
double GetScale() const
Function GetScale()
Definition: view.h:257
std::vector< DRAWSEGMENT * > m_highlight
void StopDrawing()
Function StopDrawing() Prevents the GAL canvas from further drawing till it is recreated or StartDraw...
void SetWidth(int aWidth)

References KIGFX::VIEW::Add(), PAD_CS_PRIMITIVE::ExportTo(), DRAWSEGMENT::GetCenter(), D_PAD::GetOrientation(), BOX2< Vec >::GetOrigin(), KIGFX::VIEW::GetPainter(), D_PAD::GetPosition(), KIGFX::VIEW::GetScale(), KIGFX::PAINTER::GetSettings(), BOX2< Vec >::GetSize(), PCB_DRAW_PANEL_GAL::GetView(), BOX2< Vec >::Inflate(), m_dummyPad, m_highlight, DIALOG_PAD_PROPERTIES_BASE::m_listCtrlPrimitives, DIALOG_PAD_PROPERTIES_BASE::m_panelShowPadGal, m_primitives, PAD_CS_PRIMITIVE::m_Radius, m_selectedColor, PAD_CS_PRIMITIVE::m_Shape, PAD_CS_PRIMITIVE::m_Thickness, BOX2< Vec >::Move(), DRAWSEGMENT::Move(), EDA_DRAW_PANEL_GAL::Refresh(), DRAWSEGMENT::Rotate(), S_ARC, S_CIRCLE, S_CURVE, S_POLYGON, S_SEGMENT, SELECTED_ITEMS_LAYER, KIGFX::VIEW::SetBoundary(), DRAWSEGMENT::SetEnd(), BOARD_ITEM::SetLayer(), KIGFX::RENDER_SETTINGS::SetLayerColor(), KIGFX::VIEW::SetScale(), KIGFX::VIEW::SetTopLayer(), KIGFX::VIEW::SetViewport(), DRAWSEGMENT::SetWidth(), EDA_DRAW_PANEL_GAL::StartDrawing(), EDA_DRAW_PANEL_GAL::StopDrawing(), KIGFX::VIEW::Update(), D_PAD::ViewBBox(), wxPoint::x, VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by editPrimitive(), onAddPrimitive(), onChangePadMode(), onCornerRadiusChange(), onCornerSizePercentChange(), onDeletePrimitive(), OnDrillShapeSelected(), onDuplicatePrimitive(), onGeometryTransform(), OnInitDialog(), OnPadShapeSelection(), OnPrimitiveSelection(), OnResize(), OnSetLayers(), OnValuesChanged(), PadOrientEvent(), and PadTypeSelected().

◆ ResetSize()

void DIALOG_SHIM::ResetSize ( )
protectedinherited

Clear the existing dialog size and position.

This will cause the dialog size to be clear so the next time the dialog is shown the sizers will layout the dialog accordingly. This useful when there are dialog windows that size changes due to layout dependency hidden controls.

Definition at line 239 of file dialog_shim.cpp.

240 {
241  const char* hash_key;
242 
243  if( m_hash_key.size() )
244  {
245  // a special case like EDA_LIST_DIALOG, which has multiple uses.
246  hash_key = m_hash_key.c_str();
247  }
248  else
249  {
250  hash_key = typeid(*this).name();
251  }
252 
253  RECT_MAP::iterator it = class_map.find( hash_key );
254 
255  if( it == class_map.end() )
256  return;
257 
258  EDA_RECT rect = it->second;
259  rect.SetSize( 0, 0 );
260  class_map[ hash_key ] = rect;
261 }
std::string m_hash_key
Definition: dialog_shim.h:197
static RECT_MAP class_map
void SetSize(const wxSize &size)
Definition: eda_rect.h:144
EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44

References class_map, DIALOG_SHIM::m_hash_key, and EDA_RECT::SetSize().

Referenced by DIALOG_EDIT_COMPONENT_IN_LIBRARY::DIALOG_EDIT_COMPONENT_IN_LIBRARY().

◆ SetInitialFocus()

void DIALOG_SHIM::SetInitialFocus ( wxWindow *  aWindow)
inlineinherited

Sets the window (usually a wxTextCtrl) that should be focused when the dialog is shown.

Definition at line 115 of file dialog_shim.h.

116  {
117  m_initialFocusTarget = aWindow;
118  }
wxWindow * m_initialFocusTarget
Definition: dialog_shim.h:203

References DIALOG_SHIM::m_initialFocusTarget.

Referenced by DIALOG_BOM::DIALOG_BOM(), DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT(), DIALOG_CHOOSE_FOOTPRINT::DIALOG_CHOOSE_FOOTPRINT(), DIALOG_CONFIGURE_PATHS::DIALOG_CONFIGURE_PATHS(), DIALOG_EDIT_LINE_STYLE::DIALOG_EDIT_LINE_STYLE(), DIALOG_EDIT_SHEET_PIN::DIALOG_EDIT_SHEET_PIN(), DIALOG_FIELDS_EDITOR_GLOBAL::DIALOG_FIELDS_EDITOR_GLOBAL(), DIALOG_FIND::DIALOG_FIND(), DIALOG_FOOTPRINT_BOARD_EDITOR::DIALOG_FOOTPRINT_BOARD_EDITOR(), DIALOG_FOOTPRINT_FP_EDITOR::DIALOG_FOOTPRINT_FP_EDITOR(), DIALOG_FP_PLUGIN_OPTIONS::DIALOG_FP_PLUGIN_OPTIONS(), DIALOG_GRAPHIC_ITEM_PROPERTIES::DIALOG_GRAPHIC_ITEM_PROPERTIES(), DIALOG_IMPORT_GFX::DIALOG_IMPORT_GFX(), DIALOG_LABEL_EDITOR::DIALOG_LABEL_EDITOR(), DIALOG_LIB_EDIT_DRAW_ITEM::DIALOG_LIB_EDIT_DRAW_ITEM(), DIALOG_LIB_EDIT_PIN::DIALOG_LIB_EDIT_PIN(), DIALOG_LIB_EDIT_TEXT::DIALOG_LIB_EDIT_TEXT(), DIALOG_PAD_PRIMITIVES_PROPERTIES::DIALOG_PAD_PRIMITIVES_PROPERTIES(), DIALOG_PAD_PROPERTIES(), DIALOG_POSITION_RELATIVE::DIALOG_POSITION_RELATIVE(), DIALOG_SCH_FIND::DIALOG_SCH_FIND(), DIALOG_SET_GRID::DIALOG_SET_GRID(), DIALOG_TARGET_PROPERTIES::DIALOG_TARGET_PROPERTIES(), DIALOG_TEXT_PROPERTIES::DIALOG_TEXT_PROPERTIES(), DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES(), DIALOG_EDIT_ONE_FIELD::init(), DIALOG_EXCHANGE_FOOTPRINTS::OnMatchAllClicked(), DIALOG_EXCHANGE_FOOTPRINTS::OnMatchIDClicked(), DIALOG_EXCHANGE_FOOTPRINTS::OnMatchRefClicked(), DIALOG_EXCHANGE_FOOTPRINTS::OnMatchSelectedClicked(), DIALOG_EXCHANGE_FOOTPRINTS::OnMatchValueClicked(), PANEL_FP_LIB_TABLE::PANEL_FP_LIB_TABLE(), PANEL_SYM_LIB_TABLE::PANEL_SYM_LIB_TABLE(), FOOTPRINT_EDIT_FRAME::SaveFootprintAs(), LIB_EDIT_FRAME::savePartAs(), DIALOG_KEEPOUT_AREA_PROPERTIES::TransferDataToWindow(), DIALOG_NON_COPPER_ZONES_EDITOR::TransferDataToWindow(), and DIALOG_COPPER_ZONE::TransferDataToWindow().

◆ SetKiway()

void KIWAY_HOLDER::SetKiway ( wxWindow *  aDest,
KIWAY aKiway 
)
inherited

Function SetKiway.

Parameters
aDestis the recipient of aKiway pointer. It is only used for debugging, since "this" is not a wxWindow*. "this" is a KIWAY_HOLDER mix-in.
aKiwayis often from a parent window, or from KIFACE::CreateWindow().

Definition at line 42 of file kiway_holder.cpp.

43 {
44 #if defined(DEBUG)
45  // offer a trap point for debugging most any window
46  wxASSERT( aDest );
47  if( !strcmp( typeid(aDest).name(), "DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB" ) )
48  {
49  int breakhere=1;
50  (void) breakhere;
51  }
52 #endif
53 
54  (void) aDest;
55 
56  m_kiway = aKiway;
57 }
KIWAY * m_kiway
Definition: kiway_holder.h:81
const char * name
Definition: DXF_plotter.cpp:60

References KIWAY_HOLDER::m_kiway, and name.

Referenced by BM2CMP_FRAME::BM2CMP_FRAME(), PCB::IFACE::CreateWindow(), InvokePcbLibTableEditor(), PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME(), and SIM_PLOT_FRAME::SIM_PLOT_FRAME().

◆ setPadLayersList()

void DIALOG_PAD_PROPERTIES::setPadLayersList ( LSET  layer_mask)
private

Function setPadLayersList updates the CheckBox states in pad layers list,.

Parameters
layer_mask= pad layer mask (ORed layers bit mask)

Definition at line 976 of file dialog_pad_properties.cpp.

977 {
978  LSET cu_set = layer_mask & LSET::AllCuMask();
979 
980  if( cu_set == LSET( F_Cu ) )
981  m_rbCopperLayersSel->SetSelection( 0 );
982  else if( cu_set == LSET( B_Cu ) )
983  m_rbCopperLayersSel->SetSelection( 1 );
984  else if( cu_set.any() )
985  m_rbCopperLayersSel->SetSelection( 2 );
986  else
987  m_rbCopperLayersSel->SetSelection( 3 );
988 
989  m_PadLayerAdhCmp->SetValue( layer_mask[F_Adhes] );
990  m_PadLayerAdhCu->SetValue( layer_mask[B_Adhes] );
991 
992  m_PadLayerPateCmp->SetValue( layer_mask[F_Paste] );
993  m_PadLayerPateCu->SetValue( layer_mask[B_Paste] );
994 
995  m_PadLayerSilkCmp->SetValue( layer_mask[F_SilkS] );
996  m_PadLayerSilkCu->SetValue( layer_mask[B_SilkS] );
997 
998  m_PadLayerMaskCmp->SetValue( layer_mask[F_Mask] );
999  m_PadLayerMaskCu->SetValue( layer_mask[B_Mask] );
1000 
1001  m_PadLayerECO1->SetValue( layer_mask[Eco1_User] );
1002  m_PadLayerECO2->SetValue( layer_mask[Eco2_User] );
1003 
1004  m_PadLayerDraft->SetValue( layer_mask[Dwgs_User] );
1005 }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Function AllCuMask returns a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:712
LSET is a set of PCB_LAYER_IDs.

References LSET::AllCuMask(), B_Adhes, B_Cu, B_Mask, B_Paste, B_SilkS, Dwgs_User, Eco1_User, Eco2_User, F_Adhes, F_Cu, F_Mask, F_Paste, F_SilkS, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerAdhCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerAdhCu, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerDraft, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerECO1, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerECO2, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerMaskCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerMaskCu, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerPateCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerPateCu, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerSilkCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerSilkCu, and DIALOG_PAD_PROPERTIES_BASE::m_rbCopperLayersSel.

Referenced by initValues(), and PadTypeSelected().

◆ SetSizeInDU()

void DIALOG_SHIM::SetSizeInDU ( int  x,
int  y 
)
protectedinherited

Set the dialog to the given dimensions in "dialog units".

These are units equivalent to 4* the average character width and 8* the average character height, allowing a dialog to be sized in a way that scales it with the system font.

Definition at line 153 of file dialog_shim.cpp.

154 {
155  wxSize sz( x, y );
156  SetSize( ConvertDialogToPixels( sz ) );
157 }

Referenced by DIALOG_RESCUE_EACH::DIALOG_RESCUE_EACH(), HTML_MESSAGE_BOX::HTML_MESSAGE_BOX(), and HTML_MESSAGE_BOX::SetDialogSizeInDU().

◆ Show()

bool DIALOG_SHIM::Show ( bool  show)
overrideinherited

Definition at line 180 of file dialog_shim.cpp.

181 {
182  bool ret;
183  const char* hash_key;
184 
185  if( m_hash_key.size() )
186  {
187  // a special case like EDA_LIST_DIALOG, which has multiple uses.
188  hash_key = m_hash_key.c_str();
189  }
190  else
191  {
192  hash_key = typeid(*this).name();
193  }
194 
195  // Show or hide the window. If hiding, save current position and size.
196  // If showing, use previous position and size.
197  if( show )
198  {
199 #ifndef __WINDOWS__
200  wxDialog::Raise(); // Needed on OS X and some other window managers (i.e. Unity)
201 #endif
202  ret = wxDialog::Show( show );
203 
204  // classname is key, returns a zeroed out default EDA_RECT if none existed before.
205  EDA_RECT savedDialogRect = class_map[ hash_key ];
206 
207  if( savedDialogRect.GetSize().x != 0 && savedDialogRect.GetSize().y != 0 )
208  {
209  SetSize( savedDialogRect.GetPosition().x,
210  savedDialogRect.GetPosition().y,
211  std::max( wxDialog::GetSize().x, savedDialogRect.GetSize().x ),
212  std::max( wxDialog::GetSize().y, savedDialogRect.GetSize().y ),
213  0 );
214  }
215 
216  // Be sure that the dialog appears in a visible area
217  // (the dialog position might have been stored at the time when it was
218  // shown on another display)
219  if( wxDisplay::GetFromWindow( this ) == wxNOT_FOUND )
220  Centre();
221  }
222  else
223  {
224  // Save the dialog's position & size before hiding, using classname as key
225  class_map[ hash_key ] = EDA_RECT( wxDialog::GetPosition(), wxDialog::GetSize() );
226 
227 #ifdef __WXMAC__
228  if ( m_eventLoop )
229  m_eventLoop->Exit( GetReturnCode() ); // Needed for APP-MODAL dlgs on OSX
230 #endif
231 
232  ret = wxDialog::Show( show );
233  }
234 
235  return ret;
236 }
std::string m_hash_key
Definition: dialog_shim.h:197
static RECT_MAP class_map
const wxPoint GetPosition() const
Definition: eda_rect.h:115
EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
const wxSize GetSize() const
Definition: eda_rect.h:103

References class_map, EDA_RECT::GetPosition(), EDA_RECT::GetSize(), DIALOG_SHIM::m_hash_key, wxPoint::x, and wxPoint::y.

Referenced by DIALOG_SHIM::EndQuasiModal(), InvokeDialogERC(), SCH_EDIT_FRAME::OnAnnotate(), DIALOG_DRC::OnDRCItemDClick(), DIALOG_ERC::OnERCItemDClick(), DIALOG_CLEANUP_TRACKS_AND_VIAS::OnLeftDClickItem(), POSITION_RELATIVE_TOOL::PositionRelative(), CVPCB_MAINFRAME::ReadNetListAndFpFiles(), DRC::ShowDRCDialog(), SCH_EDIT_FRAME::ShowFindReplaceDialog(), DIALOG_SHIM::ShowQuasiModal(), DIALOG_POSITION_RELATIVE::UpdateAnchor(), and SCH_EDIT_FRAME::UpdateHierarchyNavigator().

◆ ShowQuasiModal()

int DIALOG_SHIM::ShowQuasiModal ( )
inherited

Definition at line 367 of file dialog_shim.cpp.

368 {
369  // This is an exception safe way to zero a pointer before returning.
370  // Yes, even though DismissModal() clears this first normally, this is
371  // here in case there's an exception before the dialog is dismissed.
372  struct NULLER
373  {
374  void*& m_what;
375  NULLER( void*& aPtr ) : m_what( aPtr ) {}
376  ~NULLER() { m_what = 0; } // indeed, set it to NULL on destruction
377  } clear_this( (void*&) m_qmodal_loop );
378 
379  // release the mouse if it's currently captured as the window having it
380  // will be disabled when this dialog is shown -- but will still keep the
381  // capture making it impossible to do anything in the modal dialog itself
382  wxWindow* win = wxWindow::GetCapture();
383  if( win )
384  win->ReleaseMouse();
385 
386  // Get the optimal parent
387  wxWindow* parent = GetParentForModalDialog( GetParent(), GetWindowStyle() );
388 
389  // Show the optimal parent
390  DBG( if( parent ) printf( "%s: optimal parent: %s\n", __func__, typeid(*parent).name() );)
391 
392  wxASSERT_MSG( !m_qmodal_parent_disabler,
393  wxT( "Caller using ShowQuasiModal() twice on same window?" ) );
394 
395  // quasi-modal: disable only my "optimal" parent
397 
398 #ifdef __WXMAC__
399  // Apple in its infinite wisdom will raise a disabled window before even passing
400  // us the event, so we have no way to stop it. Instead, we must set an order on
401  // the windows so that the quasi-modal will be pushed in front of the disabled
402  // window when it is raised.
403  ReparentQuasiModal();
404 #endif
405  Show( true );
406 
407  m_qmodal_showing = true;
408 
409  WX_EVENT_LOOP event_loop;
410 
411  m_qmodal_loop = &event_loop;
412 
413  event_loop.Run();
414 
415  m_qmodal_showing = false;
416 
417  return GetReturnCode();
418 }
bool m_qmodal_showing
Definition: dialog_shim.h:207
#define WX_EVENT_LOOP
Definition: kiway_player.h:41
WX_EVENT_LOOP * m_qmodal_loop
Definition: dialog_shim.h:205
bool Show(bool show) override
WDO_ENABLE_DISABLE * m_qmodal_parent_disabler
Definition: dialog_shim.h:208
Toggle a window's "enable" status to disabled, then enabled on destruction.
Definition: dialog_shim.cpp:35
#define DBG(x)
Definition: fctsys.h:33

References DBG, DIALOG_SHIM::m_qmodal_loop, DIALOG_SHIM::m_qmodal_parent_disabler, DIALOG_SHIM::m_qmodal_showing, DIALOG_SHIM::Show(), and WX_EVENT_LOOP.

Referenced by LIB_EDIT_TOOL::editFieldProperties(), SCH_EDITOR_CONTROL::EditSymbolFields(), LIB_EDIT_TOOL::editSymbolProperties(), GLOBAL_EDIT_TOOL::EditTracksAndVias(), GLOBAL_EDIT_TOOL::ExchangeFootprints(), PCB_EDIT_FRAME::InstallExchangeModuleFrame(), PCB_BASE_FRAME::InstallPadOptionsFrame(), InvokeDialogEditComponentsLibId(), InvokeDialogRescueEach(), InvokeDialogUpdateFields(), LIB_VIEW_FRAME::OnSelectSymbol(), SCH_EDIT_FRAME::OpenProjectFiles(), SCH_EDIT_TOOL::Properties(), EDIT_TOOL::Properties(), SCH_EDITOR_CONTROL::RemapSymbols(), SCH_BASE_FRAME::SelectCompFromLibTree(), PCB_BASE_FRAME::SelectFootprintFromLibTree(), PCB_EDIT_FRAME::ShowBoardSetupDialog(), and SCH_EDIT_FRAME::ShowSchematicSetupDialog().

◆ TransferDataFromWindow()

bool DIALOG_PAD_PROPERTIES::TransferDataFromWindow ( )
overrideprivate

Updates the different parameters for the component being edited.

Automatically fired from the OK button click.

Definition at line 1299 of file dialog_pad_properties.cpp.

1300 {
1301  BOARD_COMMIT commit( m_parent );
1302 
1303  if( !wxDialog::TransferDataFromWindow() )
1304  return false;
1305 
1306  if( !m_panelGeneral->TransferDataFromWindow() )
1307  return false;
1308 
1309  if( !m_localSettingsPanel->TransferDataFromWindow() )
1310  return false;
1311 
1312  if( !padValuesOK() )
1313  return false;
1314 
1315  int isign = m_isFlipped ? -1 : 1;
1316 
1318  // m_padMaster is a pattern: ensure there is no net for this pad:
1320 
1321  if( !m_currentPad ) // Set current Pad parameters
1322  return true;
1323 
1324  commit.Modify( m_currentPad );
1325 
1326  // redraw the area where the pad was, without pad (delete pad on screen)
1328  m_parent->GetCanvas()->Refresh();
1330 
1331  // Update values
1335 
1336  wxSize size;
1337  MODULE* footprint = m_currentPad->GetParent();
1338 
1339  if( footprint )
1340  {
1341  footprint->SetLastEditTime();
1342 
1343  // compute the pos 0 value, i.e. pad position for footprint with orientation = 0
1344  // i.e. relative to footprint origin (footprint position)
1345  wxPoint pt = m_currentPad->GetPosition() - footprint->GetPosition();
1346  RotatePoint( &pt, -footprint->GetOrientation() );
1347  m_currentPad->SetPos0( pt );
1349  + footprint->GetOrientation() );
1350  }
1351 
1353 
1354  size = m_padMaster->GetDelta();
1355  size.y *= isign;
1356  m_currentPad->SetDelta( size );
1357 
1360 
1361  wxPoint offset = m_padMaster->GetOffset();
1362  offset.y *= isign;
1363  m_currentPad->SetOffset( offset );
1364 
1366 
1369 
1370 
1373 
1374  if( m_isFlipped )
1375  {
1378  }
1379 
1381 
1382  if( m_isFlipped )
1383  {
1385  }
1386 
1388 
1389  int padNetcode = NETINFO_LIST::UNCONNECTED;
1390 
1391  // For PAD_ATTRIB_HOLE_NOT_PLATED, ensure there is no net name selected
1393  padNetcode = m_PadNetSelector->GetSelectedNetcode();
1394 
1395  m_currentPad->SetNetCode( padNetcode );
1406 
1407  // rounded rect pads with radius ratio = 0 are in fact rect pads.
1408  // So set the right shape (and perhaps issues with a radius = 0)
1411  {
1413  }
1414 
1415  // Set the fabrication property:
1417 
1418  // define the way the clearance area is defined in zones
1420 
1421  if( footprint )
1422  footprint->CalculateBoundingBox();
1423 
1425 
1426  // redraw the area where the pad was
1427  m_parent->GetCanvas()->Refresh();
1428 
1429  commit.Push( _( "Modify pad" ) );
1430 
1431  return true;
1432 }
int GetLocalSolderMaskMargin() const
Definition: class_pad.h:450
double GetOrientation() const
Definition: class_module.h:211
LSET FlipLayerMask(LSET aMask, int aCopperLayersCount)
Calculate the mask layer when flipping a footprint BACK and FRONT copper layers, mask,...
Definition: lset.cpp:531
void FlipPrimitives()
Flip the basic shapes, in custom pads.
Definition: class_pad.cpp:509
like PAD_STANDARD, but not plated mechanical use only, no connection allowed
Definition: pad_shapes.h:66
PAD_PROP_T getSelectedProperty()
Return the pad property currently selected.
PAD_SHAPE_T GetAnchorPadShape() const
Function GetAnchorPadShape.
Definition: class_pad.h:232
int GetLocalClearance(wxString *aSource=nullptr) const override
Function GetLocalClearance returns any local clearances set in the "classic" (ie: pre-rule) system.
Definition: class_pad.cpp:630
void CalculateBoundingBox()
Function CalculateBoundingBox calculates the bounding box in board coordinates.
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad's members.
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
int GetPadToDieLength() const
Definition: class_pad.h:448
void SetPosition(const wxPoint &aPos) override
Definition: class_pad.h:225
int GetSelectedNetcode()
void SetDrillSize(const wxSize &aSize)
Definition: class_pad.h:290
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:208
void SetRoundRectRadiusRatio(double aRadiusScale)
has meaning only for rounded rect pads Set the scaling factor between the smaller Y or Y size and the...
Definition: class_pad.h:661
int GetThermalGap() const
Definition: class_pad.cpp:760
PAD_ATTR_T GetAttribute() const
Definition: class_pad.h:438
int GetChamferPositions() const
has meaning only for chamfered rect pads
Definition: class_pad.h:698
void SetAnchorPadShape(PAD_SHAPE_T aShape)
Function SetAnchorPadShape Set the shape of the anchor pad for custm shped pads.
Definition: class_pad.h:259
const std::vector< PAD_CS_PRIMITIVE > & GetPrimitives() const
Accessor to the basic shape list.
Definition: class_pad.h:358
void SetFlags(STATUS_FLAGS aMask)
Definition: base_struct.h:239
void SetMsgPanel(const std::vector< MSG_PANEL_ITEM > &aList)
Clear the message panel and populates it with the contents of aList.
void SetName(const wxString &aName)
Set the pad name (sometimes called pad number, although it can be an array reference like AA12).
Definition: class_pad.h:184
void SetPos0(const wxPoint &aPos)
Definition: class_pad.h:278
const wxPoint & GetOffset() const
Definition: class_pad.h:294
ZONE_CONNECTION GetZoneConnection() const
Definition: class_pad.cpp:738
PAD_DRILL_SHAPE_T GetDrillShape() const
Definition: class_pad.h:417
double GetChamferRectRatio() const
has meaning only for chamfered rect pads
Definition: class_pad.h:675
int GetThermalWidth() const
Definition: class_pad.cpp:749
LSET GetLayerSet() const override
Function GetLayerSet returns a "layer mask", which is a bitmap of all layers on which the TRACK segme...
Definition: class_pad.h:435
void SetLastEditTime(timestamp_t aTime)
Definition: class_module.h:350
void SetThermalWidth(int aWidth)
Definition: class_pad.h:528
const wxString & GetName() const
Definition: class_pad.h:200
void SetSize(const wxSize &aSize)
Definition: class_pad.h:284
bool SetNetCode(int aNetCode, bool aNoAssert=false)
Sets net using a net code.
void SetZoneConnection(ZONE_CONNECTION aType)
Definition: class_pad.h:516
void SetPadToDieLength(int aLength)
Definition: class_pad.h:447
const wxSize & GetDelta() const
Definition: class_pad.h:288
void SetAttribute(PAD_ATTR_T aAttribute)
Definition: class_pad.cpp:454
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=NULL) override
Update the board display after modifying it by a python script (note: it is automatically called by a...
void SetLocalClearance(int aClearance)
Definition: class_pad.h:454
MODULE * GetParent() const
Definition: class_pad.h:164
void SetLocalSolderPasteMarginRatio(double aRatio)
Definition: class_pad.h:460
CUST_PAD_SHAPE_IN_ZONE GetCustomShapeInZoneOpt() const
Definition: class_pad.h:238
void SetLayerSet(LSET aLayerMask)
Definition: class_pad.h:434
void SetDrillShape(PAD_DRILL_SHAPE_T aDrillShape)
Definition: class_pad.h:415
void SetLocalSolderMaskMargin(int aMargin)
Definition: class_pad.h:451
#define _(s)
Definition: 3d_actions.cpp:33
double GetOrientation() const
Function GetOrientation returns the rotation angle of the pad in tenths of degrees,...
Definition: class_pad.h:411
const wxSize & GetDrillSize() const
Definition: class_pad.h:291
void SetShape(PAD_SHAPE_T aShape)
Definition: class_pad.h:223
void SetOrientation(double aAngle)
Function SetOrientation sets the rotation angle of the pad.
Definition: class_pad.cpp:469
double GetRoundRectRadiusRatio() const
has meaning only for rounded rect pads
Definition: class_pad.h:649
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: base_struct.h:240
bool padValuesOK()
test if all values are acceptable for the pad
void SetChamferRectRatio(double aChamferScale)
has meaning only for chamfered rect pads Set the ratio between the smaller Y or Y size and the radius...
Definition: class_pad.h:686
void SetLocalSolderPasteMargin(int aMargin)
Definition: class_pad.h:457
void SetCustomShapeInZoneOpt(CUST_PAD_SHAPE_IN_ZONE aOption)
Set the option for the custom pad shape to use as clearance area in copper zones.
Definition: class_pad.h:248
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:222
const wxSize & GetSize() const
Definition: class_pad.h:285
void SetProperty(PAD_PROP_T aProperty)
Definition: class_pad.cpp:463
const wxPoint GetPosition() const override
Definition: class_pad.h:226
int GetLocalSolderPasteMargin() const
Definition: class_pad.h:456
void SetOffset(const wxPoint &aOffset)
Definition: class_pad.h:293
void SetThermalGap(int aGap)
Definition: class_pad.h:531
static const int UNCONNECTED
Constant that holds the "unconnected net" number (typically 0) all items "connected" to this net are ...
Definition: netinfo.h:461
const wxPoint GetPosition() const override
Definition: class_module.h:206
bool SetPrimitives(const std::vector< PAD_CS_PRIMITIVE > &aPrimitivesList)
Import to the basic shape list.
void DeletePrimitivesList()
clear the basic shapes list
double GetLocalSolderPasteMarginRatio() const
Definition: class_pad.h:459
#define DO_NOT_DRAW
Used to disable draw function.
Definition: base_struct.h:129
void SetDelta(const wxSize &aSize)
Definition: class_pad.h:287
void SetChamferPositions(int aChamferPositions)
has meaning only for chamfered rect pads set the position of the chamfer for a 0 orientation,...
Definition: class_pad.h:706

References _, MODULE::CalculateBoundingBox(), EDA_ITEM::ClearFlags(), D_PAD::DeletePrimitivesList(), DO_NOT_DRAW, FlipLayerMask(), D_PAD::FlipPrimitives(), D_PAD::GetAnchorPadShape(), D_PAD::GetAttribute(), PCB_BASE_FRAME::GetCanvas(), D_PAD::GetChamferPositions(), D_PAD::GetChamferRectRatio(), D_PAD::GetCustomShapeInZoneOpt(), D_PAD::GetDelta(), D_PAD::GetDrillShape(), D_PAD::GetDrillSize(), D_PAD::GetLayerSet(), D_PAD::GetLocalClearance(), D_PAD::GetLocalSolderMaskMargin(), D_PAD::GetLocalSolderPasteMargin(), D_PAD::GetLocalSolderPasteMarginRatio(), D_PAD::GetName(), D_PAD::GetOffset(), MODULE::GetOrientation(), D_PAD::GetOrientation(), D_PAD::GetPadToDieLength(), D_PAD::GetParent(), MODULE::GetPosition(), D_PAD::GetPosition(), D_PAD::GetPrimitives(), D_PAD::GetRoundRectRadiusRatio(), NET_SELECTOR::GetSelectedNetcode(), getSelectedProperty(), D_PAD::GetShape(), D_PAD::GetSize(), D_PAD::GetThermalGap(), D_PAD::GetThermalWidth(), D_PAD::GetZoneConnection(), m_currentPad, m_isFlipped, DIALOG_PAD_PROPERTIES_BASE::m_localSettingsPanel, m_padMaster, DIALOG_PAD_PROPERTIES_BASE::m_PadNetSelector, DIALOG_PAD_PROPERTIES_BASE::m_panelGeneral, m_parent, COMMIT::Modify(), PAD_ATTRIB_HOLE_NOT_PLATED, PAD_SHAPE_CUSTOM, PAD_SHAPE_RECT, PAD_SHAPE_ROUNDRECT, padValuesOK(), BOARD_COMMIT::Push(), EDA_DRAW_PANEL_GAL::Refresh(), RotatePoint(), D_PAD::SetAnchorPadShape(), D_PAD::SetAttribute(), D_PAD::SetChamferPositions(), D_PAD::SetChamferRectRatio(), D_PAD::SetCustomShapeInZoneOpt(), D_PAD::SetDelta(), D_PAD::SetDrillShape(), D_PAD::SetDrillSize(), EDA_ITEM::SetFlags(), MODULE::SetLastEditTime(), D_PAD::SetLayerSet(), D_PAD::SetLocalClearance(), D_PAD::SetLocalSolderMaskMargin(), D_PAD::SetLocalSolderPasteMargin(), D_PAD::SetLocalSolderPasteMarginRatio(), EDA_DRAW_FRAME::SetMsgPanel(), D_PAD::SetName(), BOARD_CONNECTED_ITEM::SetNetCode(), D_PAD::SetOffset(), D_PAD::SetOrientation(), D_PAD::SetPadToDieLength(), D_PAD::SetPos0(), D_PAD::SetPosition(), D_PAD::SetPrimitives(), D_PAD::SetProperty(), D_PAD::SetRoundRectRadiusRatio(), D_PAD::SetShape(), D_PAD::SetSize(), D_PAD::SetThermalGap(), D_PAD::SetThermalWidth(), D_PAD::SetZoneConnection(), transferDataToPad(), NETINFO_LIST::UNCONNECTED, and wxPoint::y.

◆ transferDataToPad()

bool DIALOG_PAD_PROPERTIES::transferDataToPad ( D_PAD aPad)
private

Copy values from dialog field to aPad's members.

Definition at line 1454 of file dialog_pad_properties.cpp.

1455 {
1456  wxString msg;
1457 
1458  if( !Validate() )
1459  return true;
1460  if( !m_panelGeneral->Validate() )
1461  return true;
1462  if( !m_localSettingsPanel->Validate() )
1463  return true;
1464  if( !m_spokeWidth.Validate( 0, INT_MAX ) )
1465  return false;
1466 
1467  m_OrientValidator.TransferFromWindow();
1468 
1469  aPad->SetAttribute( code_type[m_PadType->GetSelection()] );
1470  aPad->SetShape( code_shape[m_PadShape->GetSelection()] );
1473 
1474  if( aPad->GetShape() == PAD_SHAPE_CUSTOM )
1475  aPad->SetPrimitives( m_primitives );
1476 
1477  // Read pad clearances values:
1482  aPad->SetThermalGap( m_thermalGap.GetValue() );
1483  double dtmp = 0.0;
1484  msg = m_SolderPasteMarginRatioCtrl->GetValue();
1485  msg.ToDouble( &dtmp );
1486 
1487  // A -50% margin ratio means no paste on a pad, the ratio must be >= -50%
1488  if( dtmp < -50.0 )
1489  dtmp = -50.0;
1490  // A margin ratio is always <= 0
1491  // 0 means use full pad copper area
1492  if( dtmp > 0.0 )
1493  dtmp = 0.0;
1494 
1495  aPad->SetLocalSolderPasteMarginRatio( dtmp / 100 );
1496 
1497  switch( m_ZoneConnectionChoice->GetSelection() )
1498  {
1499  default:
1500  case 0:
1502  break;
1503  case 1:
1505  break;
1506  case 2:
1508  break;
1509  case 3:
1511  break;
1512  }
1513 
1514  aPad->SetPosition( wxPoint( m_posX.GetValue(), m_posY.GetValue() ) );
1515  aPad->SetPos0( wxPoint( m_posX.GetValue(), m_posY.GetValue() ) );
1516 
1517  if( m_holeShapeCtrl->GetSelection() == 0 )
1518  {
1520  aPad->SetDrillSize( wxSize( m_holeX.GetValue(), m_holeX.GetValue() ) );
1521  }
1522  else
1523  {
1525  aPad->SetDrillSize( wxSize( m_holeX.GetValue(), m_holeY.GetValue() ) );
1526  }
1527 
1528  if( aPad->GetShape() == PAD_SHAPE_CIRCLE )
1529  aPad->SetSize( wxSize( m_sizeX.GetValue(), m_sizeX.GetValue() ) );
1530  else
1531  aPad->SetSize( wxSize( m_sizeX.GetValue(), m_sizeY.GetValue() ) );
1532 
1533  // Read pad length die
1535 
1536  // For a trapezoid, test delta value (be sure delta is not too large for pad size)
1537  // remember DeltaSize.x is the Y size variation
1538  bool error = false;
1539 
1540  if( aPad->GetShape() == PAD_SHAPE_TRAPEZOID )
1541  {
1542  wxSize delta;
1543 
1544  // For a trapezoid, only one of delta.x or delta.y is not 0, depending on
1545  // the direction.
1546  if( m_trapAxisCtrl->GetSelection() == 0 )
1547  delta.x = m_trapDelta.GetValue();
1548  else
1549  delta.y = m_trapDelta.GetValue();
1550 
1551  if( delta.x < 0 && delta.x <= -aPad->GetSize().y )
1552  {
1553  delta.x = -aPad->GetSize().y + 2;
1554  error = true;
1555  }
1556 
1557  if( delta.x > 0 && delta.x >= aPad->GetSize().y )
1558  {
1559  delta.x = aPad->GetSize().y - 2;
1560  error = true;
1561  }
1562 
1563  if( delta.y < 0 && delta.y <= -aPad->GetSize().x )
1564  {
1565  delta.y = -aPad->GetSize().x + 2;
1566  error = true;
1567  }
1568 
1569  if( delta.y > 0 && delta.y >= aPad->GetSize().x )
1570  {
1571  delta.y = aPad->GetSize().x - 2;
1572  error = true;
1573  }
1574 
1575  aPad->SetDelta( delta );
1576  }
1577 
1579  aPad->SetOrientation( m_OrientValue * 10.0 );
1580  aPad->SetName( m_PadNumCtrl->GetValue() );
1582 
1583  int chamfers = 0;
1584 
1585  if( m_cbTopLeft->GetValue() )
1586  chamfers |= RECT_CHAMFER_TOP_LEFT;
1587 
1588  if( m_cbTopRight->GetValue() )
1589  chamfers |= RECT_CHAMFER_TOP_RIGHT;
1590 
1591  if( m_cbBottomLeft->GetValue() )
1592  chamfers |= RECT_CHAMFER_BOTTOM_LEFT;
1593 
1594  if( m_cbBottomRight->GetValue() )
1595  chamfers |= RECT_CHAMFER_BOTTOM_RIGHT;
1596 
1597  aPad->SetChamferPositions( chamfers );
1598 
1599  // Clear some values, according to the pad type and shape
1600  switch( aPad->GetShape() )
1601  {
1602  case PAD_SHAPE_CIRCLE:
1603  aPad->SetOffset( wxPoint( 0, 0 ) );
1604  aPad->SetDelta( wxSize( 0, 0 ) );
1605  break;
1606 
1607  case PAD_SHAPE_RECT:
1608  aPad->SetDelta( wxSize( 0, 0 ) );
1609  break;
1610 
1611  case PAD_SHAPE_OVAL:
1612  aPad->SetDelta( wxSize( 0, 0 ) );
1613  break;
1614 
1615  case PAD_SHAPE_TRAPEZOID:
1616  break;
1617 
1618  case PAD_SHAPE_ROUNDRECT:
1620  aPad->SetDelta( wxSize( 0, 0 ) );
1621  break;
1622 
1623  case PAD_SHAPE_CUSTOM:
1624  aPad->SetOffset( wxPoint( 0, 0 ) );
1625  aPad->SetDelta( wxSize( 0, 0 ) );
1626 
1627  // The pad custom has a "anchor pad" (a basic shape: round or rect pad)
1628  // that is the minimal area of this pad, and is usefull to ensure a hole
1629  // diameter is acceptable, and is used in Gerber files as flashed area
1630  // reference
1631  if( aPad->GetAnchorPadShape() == PAD_SHAPE_CIRCLE )
1632  aPad->SetSize( wxSize( m_sizeX.GetValue(), m_sizeX.GetValue() ) );
1633 
1634  // define the way the clearance area is defined in zones
1635  aPad->SetCustomShapeInZoneOpt( m_ZoneCustomPadShape->GetSelection() == 0 ?
1638  break;
1639 
1640  default:
1641  ;
1642  }
1643 
1644  switch( aPad->GetAttribute() )
1645  {
1646  case PAD_ATTRIB_STANDARD:
1647  break;
1648 
1649  case PAD_ATTRIB_CONN:
1650  case PAD_ATTRIB_SMD:
1651  // SMD and PAD_ATTRIB_CONN has no hole.
1652  // basically, SMD and PAD_ATTRIB_CONN are same type of pads
1653  // PAD_ATTRIB_CONN has just a default non technical layers that differs from SMD
1654  // and are intended to be used in virtual edge board connectors
1655  // However we can accept a non null offset,
1656  // mainly to allow complex pads build from a set of basic pad shapes
1657  aPad->SetDrillSize( wxSize( 0, 0 ) );
1658  break;
1659 
1661  // Mechanical purpose only:
1662  // no net name, no pad name allowed
1663  aPad->SetName( wxEmptyString );
1665  break;
1666 
1667  default:
1668  DisplayError( NULL, wxT( "Error: unknown pad type" ) );
1669  break;
1670  }
1671 
1672  if( aPad->GetShape() == PAD_SHAPE_ROUNDRECT || aPad->GetShape() == PAD_SHAPE_CHAMFERED_RECT )
1673  {
1674  wxString value = m_tcCornerSizeRatio->GetValue();
1675  double ratioPercent;
1676 
1677  if( value.ToDouble( &ratioPercent ) )
1678  aPad->SetRoundRectRadiusRatio( ratioPercent / 100.0 );
1679 
1680  value = m_tcChamferRatio->GetValue();
1681 
1682  if( value.ToDouble( &ratioPercent ) )
1683  aPad->SetChamferRectRatio( ratioPercent / 100.0 );
1684  }
1685 
1686  aPad->SetProperty( getSelectedProperty() );
1687 
1688  LSET padLayerMask;
1689 
1690  switch( m_rbCopperLayersSel->GetSelection() )
1691  {
1692  case 0: padLayerMask.set( F_Cu ); break;
1693  case 1: padLayerMask.set( B_Cu ); break;
1694  case 2: padLayerMask |= LSET::AllCuMask(); break;
1695  case 3: break; // No copper layers
1696  }
1697 
1698  if( m_PadLayerAdhCmp->GetValue() )
1699  padLayerMask.set( F_Adhes );
1700 
1701  if( m_PadLayerAdhCu->GetValue() )
1702  padLayerMask.set( B_Adhes );
1703 
1704  if( m_PadLayerPateCmp->GetValue() )
1705  padLayerMask.set( F_Paste );
1706 
1707  if( m_PadLayerPateCu->GetValue() )
1708  padLayerMask.set( B_Paste );
1709 
1710  if( m_PadLayerSilkCmp->GetValue() )
1711  padLayerMask.set( F_SilkS );
1712 
1713  if( m_PadLayerSilkCu->GetValue() )
1714  padLayerMask.set( B_SilkS );
1715 
1716  if( m_PadLayerMaskCmp->GetValue() )
1717  padLayerMask.set( F_Mask );
1718 
1719  if( m_PadLayerMaskCu->GetValue() )
1720  padLayerMask.set( B_Mask );
1721 
1722  if( m_PadLayerECO1->GetValue() )
1723  padLayerMask.set( Eco1_User );
1724 
1725  if( m_PadLayerECO2->GetValue() )
1726  padLayerMask.set( Eco2_User );
1727 
1728  if( m_PadLayerDraft->GetValue() )
1729  padLayerMask.set( Dwgs_User );
1730 
1731  aPad->SetLayerSet( padLayerMask );
1732 
1733  return error;
1734 }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Function AllCuMask returns a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:712
void DisplayError(wxWindow *aParent, const wxString &aText, int aDisplayTime)
Display an error or warning message box with aMessage.
Definition: confirm.cpp:239
like PAD_STANDARD, but not plated mechanical use only, no connection allowed
Definition: pad_shapes.h:66
PAD_PROP_T getSelectedProperty()
Return the pad property currently selected.