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, SCREEN }
 

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
 
wxPanel * m_panelShowPad
 
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
 
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 OnPaintShowPanel (wxPaintEvent &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 
SCREEN 

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 102 of file dialog_pad_properties.cpp.

102  :
103  DIALOG_PAD_PROPERTIES_BASE( aParent ),
104  m_parent( aParent ),
105  m_canUpdate( false ),
108  m_sizeX( aParent, m_sizeXLabel, m_sizeXCtrl, m_sizeXUnits, true ),
109  m_sizeY( aParent, m_sizeYLabel, m_sizeYCtrl, m_sizeYUnits, true ),
115  m_holeX( aParent, m_holeXLabel, m_holeXCtrl, m_holeXUnits, true ),
116  m_holeY( aParent, m_holeYLabel, m_holeYCtrl, m_holeYUnits, true ),
123 {
124  m_currentPad = aPad; // aPad can be NULL, if the dialog is called
125  // from the footprint editor to set default pad setup
126 
128 
129  // Disable the pad property if not allowed in advanced config
130  if( !ADVANCED_CFG::GetCfg().m_EnableUsePadProperty )
131  {
132  m_staticTextFabProperty->Show( false );
133  m_choiceFabProperty->Show( false );
134  }
135 
137 
138  m_OrientValidator.SetRange( -360.0, 360.0 );
139  m_orientation->SetValidator( m_OrientValidator );
140  m_OrientValidator.SetWindow( m_orientation );
141 
142  m_cbShowPadOutline->SetValue( m_sketchPreview );
143 
146 
148  m_dummyPad = new D_PAD( (MODULE*) NULL );
149 
150  if( aPad )
151  {
152  *m_dummyPad = *aPad;
154  }
155  else // We are editing a "master" pad, i.e. a template to create new pads
157 
158  initValues();
159 
160  wxFont infoFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
161  infoFont.SetSymbolicSize( wxFONTSIZE_SMALL );
162  m_techLayersLabel->SetFont( infoFont );
163  m_parentInfoLine1->SetFont( infoFont );
164  m_parentInfoLine2->SetFont( infoFont );
165 
166  infoFont.SetStyle( wxFONTSTYLE_ITALIC );
167  m_nonCopperNote->SetFont( infoFont );
168  m_staticTextInfoPaste->SetFont( infoFont );
169  m_staticTextInfoNegVal->SetFont( infoFont );
170  m_staticTextInfoPosValue->SetFont( infoFont );
171 
172  // Usually, TransferDataToWindow is called by OnInitDialog
173  // calling it here fixes all widget sizes so FinishDialogSettings can safely fix minsizes
175 
176  // Initialize canvas to be able to display the dummy pad:
177  prepareCanvas();
178 
180  m_sdbSizerOK->SetDefault();
181  m_canUpdate = true;
182 
183  m_PadNetSelector->Connect( NET_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES::OnValuesChanged ), NULL, this );
184 
185  // Now all widgets have the size fixed, call FinishDialogSettings
187 }
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 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:79
#define SELECTED
Definition: base_struct.h:127
#define NULL
const BITMAP_OPAQUE dialog_warning_xpm[1]
#define BRIGHTENED
item is drawn with a bright contour
Definition: base_struct.h:143
void SetNetInfo(NETINFO_LIST *aNetInfoList)
NETINFO_LIST & GetNetInfo()
Definition: class_board.h:737
#define HIGHLIGHTED
item is drawn in normal colors, when the rest is darkened
Definition: base_struct.h:142
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:256
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, DIALOG_SHIM::SetInitialFocus(), NET_SELECTOR::SetNetInfo(), and TransferDataToWindow().

◆ ~DIALOG_PAD_PROPERTIES()

DIALOG_PAD_PROPERTIES::~DIALOG_PAD_PROPERTIES ( )

Definition at line 190 of file dialog_pad_properties.cpp.

191 {
192  m_PadNetSelector->Disconnect( NET_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES::OnValuesChanged ), NULL, this );
193 
194  delete m_dummyPad;
195  delete m_axisOrigin;
196 }
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 823 of file dialog_pad_properties.cpp.

824 {
825  m_listCtrlPrimitives->ClearAll();
826 
827  wxListItem itemCol;
828  itemCol.SetImage(-1);
829 
830  for( int ii = 0; ii < 5; ++ii )
831  m_listCtrlPrimitives->InsertColumn(ii, itemCol);
832 
833  wxString bs_info[5];
834 
835  for( unsigned ii = 0; ii < m_primitives.size(); ++ii )
836  {
837  const PAD_CS_PRIMITIVE& primitive = m_primitives[ii];
838 
839  for( unsigned jj = 0; jj < 5; ++jj )
840  bs_info[jj].Empty();
841 
842  bs_info[4] = wxString::Format( _( "width %s" ),
843  MessageTextFromValue( m_units, primitive.m_Thickness, true ) );
844 
845  switch( primitive.m_Shape )
846  {
847  case S_SEGMENT: // usual segment : line with rounded ends
848  bs_info[0] = _( "Segment" );
849  bs_info[1] = _( "from " ) + formatCoord( m_units, primitive.m_Start );
850  bs_info[2] = _( "to " ) + formatCoord( m_units, primitive.m_End );
851  break;
852 
853  case S_CURVE: // Bezier segment
854  bs_info[0] = _( "Bezier" );
855  bs_info[1] = _( "from " ) + formatCoord( m_units, primitive.m_Start );
856  bs_info[2] = _( "to " ) + formatCoord( m_units, primitive.m_End );
857  break;
858 
859  case S_ARC: // Arc with rounded ends
860  bs_info[0] = _( "Arc" );
861  bs_info[1] = _( "center " ) + formatCoord( m_units, primitive.m_Start );// Center
862  bs_info[2] = _( "start " ) + formatCoord( m_units, primitive.m_End ); // Start point
863  bs_info[3] = wxString::Format( _( "angle %s" ), FormatAngle( primitive.m_ArcAngle ) );
864  break;
865 
866  case S_CIRCLE: // ring or circle
867  if( primitive.m_Thickness )
868  bs_info[0] = _( "ring" );
869  else
870  bs_info[0] = _( "circle" );
871 
872  bs_info[1] = formatCoord( m_units, primitive.m_Start );
873  bs_info[2] = wxString::Format( _( "radius %s" ),
874  MessageTextFromValue( m_units, primitive.m_Radius, true ) );
875  break;
876 
877  case S_POLYGON: // polygon
878  bs_info[0] = "Polygon";
879  bs_info[1] = wxString::Format( _( "corners count %d" ), (int) primitive.m_Poly.size() );
880  break;
881 
882  default:
883  bs_info[0] = "Unknown primitive";
884  break;
885  }
886 
887  long tmp = m_listCtrlPrimitives->InsertItem(ii, bs_info[0]);
888  m_listCtrlPrimitives->SetItemData(tmp, ii);
889 
890  for( int jj = 0, col = 0; jj < 5; ++jj )
891  {
892  m_listCtrlPrimitives->SetItem(tmp, col++, bs_info[jj]);
893  }
894  }
895 
896  // Now columns are filled, ensure correct width of columns
897  for( unsigned ii = 0; ii < 5; ++ii )
898  m_listCtrlPrimitives->SetColumnWidth( ii, wxLIST_AUTOSIZE );
899 }
static wxString formatCoord(EDA_UNITS aUnits, wxPoint aCoord)
wxString MessageTextFromValue(EDA_UNITS aUnits, int aValue, bool aUseMils)
Definition: base_units.cpp:127
wxPoint m_Start
angle of an arc, from its starting point, in 0.1 deg
Definition: class_pad.h:98
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:513
int m_Radius
thickness of segment or outline For filled S_CIRCLE shape, thickness = 0.
Definition: class_pad.h:96
std::vector< wxPoint > m_Poly
Bezier Control point 2.
Definition: class_pad.h:102
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:89
Bezier Curve.
wxPoint m_End
is also the center of the circle and arc
Definition: class_pad.h:99
STROKE_T m_Shape
Definition: class_pad.h:92
int m_Thickness
S_SEGMENT, S_ARC, S_CIRCLE, S_POLYGON only (same as DRAWSEGMENT)
Definition: class_pad.h:93
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:31
double m_ArcAngle
radius of a circle
Definition: class_pad.h:97

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 1908 of file dialog_pad_properties.cpp.

1909 {
1910  long select = m_listCtrlPrimitives->GetFirstSelected();
1911 
1912  if( select < 0 )
1913  {
1914  wxMessageBox( _( "No shape selected" ) );
1915  return;
1916  }
1917 
1918  PAD_CS_PRIMITIVE& shape = m_primitives[select];
1919 
1920  if( shape.m_Shape == S_POLYGON )
1921  {
1922  DIALOG_PAD_PRIMITIVE_POLY_PROPS dlg( this, m_parent, &shape );
1923 
1924  if( dlg.ShowModal() != wxID_OK )
1925  return;
1926 
1927  dlg.TransferDataFromWindow();
1928  }
1929 
1930  else
1931  {
1932  DIALOG_PAD_PRIMITIVES_PROPERTIES dlg( this, m_parent, &shape );
1933 
1934  if( dlg.ShowModal() != wxID_OK )
1935  return;
1936 
1937  dlg.TransferDataFromWindow();
1938  }
1939 
1941 
1942  if( m_canUpdate )
1943  {
1945  redraw();
1946  }
1947 }
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:89
STROKE_T m_Shape
Definition: class_pad.h:92
a dialog to edit basic polygonal shape parameters
std::vector< PAD_CS_PRIMITIVE > m_primitives
#define _(s)
Definition: 3d_actions.cpp:31
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 262 of file dialog_shim.cpp.

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

◆ enablePrimitivePage()

void DIALOG_PAD_PROPERTIES::enablePrimitivePage ( bool  aEnable)
private

enable (or disable) the primitive page editor

Definition at line 223 of file dialog_pad_properties.cpp.

224 {
225  // Enable or disable the widgets in page managing custom shape primitives
226  m_listCtrlPrimitives->Enable( aEnable );
227  m_buttonDel->Enable( aEnable );
228  m_buttonEditShape->Enable( aEnable );
229  m_buttonAddShape->Enable( aEnable );
230  m_buttonDup->Enable( aEnable );
231  m_buttonGeometry->Enable( aEnable );
232 }

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 419 of file dialog_shim.cpp.

420 {
421  // Hook up validator and transfer data from controls handling so quasi-modal dialogs
422  // handle validation in the same way as other dialogs.
423  if( ( retCode == wxID_OK ) && ( !Validate() || !TransferDataFromWindow() ) )
424  return;
425 
426  SetReturnCode( retCode );
427 
428  if( !IsQuasiModal() )
429  {
430  wxFAIL_MSG( "either DIALOG_SHIM::EndQuasiModal called twice or ShowQuasiModal"
431  "wasn't called" );
432  return;
433  }
434 
435  if( m_qmodal_loop )
436  {
437  if( m_qmodal_loop->IsRunning() )
438  m_qmodal_loop->Exit( 0 );
439  else
440  m_qmodal_loop->ScheduleExit( 0 );
441 
443  }
444 
447 
448  Show( false );
449 }
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 137 of file dialog_shim.cpp.

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

References PCAD2KICAD::Center.

Referenced by DIALOG_3D_VIEW_OPTIONS::DIALOG_3D_VIEW_OPTIONS(), DIALOG_ANNOTATE::DIALOG_ANNOTATE(), DIALOG_BOM::DIALOG_BOM(), DIALOG_COPPER_ZONE::DIALOG_COPPER_ZONE(), DIALOG_DRC_CONTROL::DIALOG_DRC_CONTROL(), 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_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_FP_BROWSER_DISPLAY_OPTIONS::DIALOG_FP_BROWSER_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_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_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_PCB::DIALOG_UPDATE_PCB(), PAGED_DIALOG::finishInitialization(), DIALOG_EDIT_ONE_FIELD::init(), DIALOG_EDIT_LIBRARY_TABLES::InstallPanel(), NETLIST_DIALOG::NETLIST_DIALOG(), DIALOG_GRAPHIC_ITEM_PROPERTIES::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 1592 of file dialog_pad_properties.cpp.

1593 {
1594  PAD_PROP_T prop = PAD_PROP_NONE;
1595 
1596  switch( m_choiceFabProperty->GetSelection() )
1597  {
1598  case 0: prop = PAD_PROP_NONE; break;
1599  case 1: prop = PAD_PROP_BGA; break;
1600  case 2: prop = PAD_PROP_FIDUCIAL_LOCAL; break;
1601  case 3: prop = PAD_PROP_FIDUCIAL_GLBL; break;
1602  case 4: prop = PAD_PROP_TESTPOINT; break;
1603  case 5: prop = PAD_PROP_HEATSINK; break;
1604  case 6: prop = PAD_PROP_CASTELLATED; break;
1605  }
1606 
1607  return prop;
1608 }
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(), and GERBVIEW_FRAME::SaveSettings().

◆ 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 158 of file dialog_shim.cpp.

159 {
160  wxSize sz( x, 0 );
161  return ConvertDialogToPixels( sz ).x;
162 }

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 566 of file dialog_pad_properties.cpp.

567 {
568  wxString msg;
569  double angle;
570 
571  // Disable pad net name wxTextCtrl if the caller is the footprint editor
572  // because nets are living only in the board managed by the board editor
574 
575  // Setup layers names from board
576  // Should be made first, before calling m_rbCopperLayersSel->SetSelection()
577  m_rbCopperLayersSel->SetString( 0, m_board->GetLayerName( F_Cu ) );
578  m_rbCopperLayersSel->SetString( 1, m_board->GetLayerName( B_Cu ) );
579 
580  m_PadLayerAdhCmp->SetLabel( m_board->GetLayerName( F_Adhes ) );
581  m_PadLayerAdhCu->SetLabel( m_board->GetLayerName( B_Adhes ) );
583  m_PadLayerPateCu->SetLabel( m_board->GetLayerName( B_Paste ) );
585  m_PadLayerSilkCu->SetLabel( m_board->GetLayerName( B_SilkS ) );
586  m_PadLayerMaskCmp->SetLabel( m_board->GetLayerName( F_Mask ) );
587  m_PadLayerMaskCu->SetLabel( m_board->GetLayerName( B_Mask ) );
588  m_PadLayerECO1->SetLabel( m_board->GetLayerName( Eco1_User ) );
589  m_PadLayerECO2->SetLabel( m_board->GetLayerName( Eco2_User ) );
591 
592  m_isFlipped = false;
593 
594  if( m_currentPad )
595  {
597 
598  // Diplay parent footprint info
599  MODULE* footprint = m_currentPad->GetParent();
600  wxString msg1, msg2;
601 
602  if( footprint )
603  {
604  wxString side = footprint->IsFlipped() ? _( "back side (mirrored)" ) : _( "front side" );
605  msg1.Printf( _("Footprint %s (%s),"), footprint->GetReference(), footprint->GetValue() );
606  msg2.Printf( _("%s, rotated %.1f deg"), side, footprint->GetOrientation() / 10.0 );
607  }
608 
609  m_parentInfoLine1->SetLabel( msg1 );
610  m_parentInfoLine2->SetLabel( msg2 );
611  }
612 
613  if( m_isFlipped )
614  {
615  wxPoint pt = m_dummyPad->GetOffset();
616  pt.y = -pt.y;
617  m_dummyPad->SetOffset( pt );
618 
619  wxSize sz = m_dummyPad->GetDelta();
620  sz.y = -sz.y;
621  m_dummyPad->SetDelta( sz );
622 
623  // flip pad's layers
625 
626  // flip custom pad shapes
628  }
629 
631 
633 
634  m_PadNumCtrl->SetValue( m_dummyPad->GetName() );
636 
637  // Display current pad parameters units:
640 
643 
646 
649 
650  if( m_dummyPad->GetDelta().x )
651  {
653  m_trapAxisCtrl->SetSelection( 0 );
654  }
655  else
656  {
658  m_trapAxisCtrl->SetSelection( 1 );
659  }
660 
662 
668 
669  // Prefer "-0" to "0" for normally negative values
671  m_pasteClearanceCtrl->SetValue( wxT( "-" ) + m_pasteClearanceCtrl->GetValue() );
672 
673  msg.Printf( wxT( "%f" ), m_dummyPad->GetLocalSolderPasteMarginRatio() * 100.0 );
674 
675  if( m_dummyPad->GetLocalSolderPasteMarginRatio() == 0.0 && msg[0] == '0' )
676  // Sometimes Printf adds a sign if the value is small
677  m_SolderPasteMarginRatioCtrl->SetValue( wxT( "-" ) + msg );
678  else
680 
682  {
683  default:
685  m_ZoneConnectionChoice->SetSelection( 0 );
686  break;
688  m_ZoneConnectionChoice->SetSelection( 1 );
689  break;
691  m_ZoneConnectionChoice->SetSelection( 2 );
692  break;
694  m_ZoneConnectionChoice->SetSelection( 3 );
695  break;
696  }
697 
699  m_ZoneCustomPadShape->SetSelection( 1 );
700  else
701  m_ZoneCustomPadShape->SetSelection( 0 );
702 
703  if( m_currentPad )
704  {
706  MODULE* footprint = m_currentPad->GetParent();
707 
708  if( footprint )
709  angle -= footprint->GetOrientation();
710 
711  if( m_isFlipped )
712  angle = -angle;
713 
715  }
716 
718 
719  NORMALIZE_ANGLE_180( angle ); // ? normalizing is in D_PAD::SetOrientation()
720 
721  // Set layers used by this pad: :
723 
724  // Pad Orient
725  // Note: use ChangeValue() instead of SetValue() so that we don't generate events
727 
728  switch( m_dummyPad->GetShape() )
729  {
730  default:
731  case PAD_SHAPE_CIRCLE: m_PadShape->SetSelection( CHOICE_SHAPE_CIRCLE ); break;
732  case PAD_SHAPE_OVAL: m_PadShape->SetSelection( CHOICE_SHAPE_OVAL ); break;
733  case PAD_SHAPE_RECT: m_PadShape->SetSelection( CHOICE_SHAPE_RECT ); break;
734  case PAD_SHAPE_TRAPEZOID: m_PadShape->SetSelection( CHOICE_SHAPE_TRAPEZOID ); break;
735  case PAD_SHAPE_ROUNDRECT: m_PadShape->SetSelection( CHOICE_SHAPE_ROUNDRECT ); break;
737 
738  case PAD_SHAPE_CUSTOM:
741  else
743  break;
744  }
745 
746 
751 
753 
754  // Type of pad selection
755  bool aperture = m_dummyPad->GetAttribute() == PAD_ATTRIB_CONN && m_dummyPad->IsAperturePad();
756  bool mechanical = m_dummyPad->GetAttribute() == PAD_ATTRIB_HOLE_NOT_PLATED;
757 
758  if( aperture )
759  {
760  m_PadType->SetSelection( 4 );
761  }
762  else
763  {
764  switch( m_dummyPad->GetAttribute() )
765  {
766  case PAD_ATTRIB_STANDARD: m_PadType->SetSelection( 0 ); break;
767  case PAD_ATTRIB_SMD: m_PadType->SetSelection( 1 ); break;
768  case PAD_ATTRIB_CONN: m_PadType->SetSelection( 2 ); break;
769  case PAD_ATTRIB_HOLE_NOT_PLATED: m_PadType->SetSelection( 3 ); break;
770  }
771  }
772 
773  switch( m_dummyPad->GetProperty() )
774  {
775  case PAD_PROP_NONE: m_choiceFabProperty->SetSelection( 0 ); break;
776  case PAD_PROP_BGA: m_choiceFabProperty->SetSelection( 1 ); break;
777  case PAD_PROP_FIDUCIAL_LOCAL: m_choiceFabProperty->SetSelection( 2 ); break;
778  case PAD_PROP_FIDUCIAL_GLBL: m_choiceFabProperty->SetSelection( 3 ); break;
779  case PAD_PROP_TESTPOINT: m_choiceFabProperty->SetSelection( 4 ); break;
780  case PAD_PROP_HEATSINK: m_choiceFabProperty->SetSelection( 5 ); break;
781  case PAD_PROP_CASTELLATED: m_choiceFabProperty->SetSelection( 6 ); break;
782  }
783 
784  // Ensure the pad property is compatible with the pad type
786  {
787  m_choiceFabProperty->SetSelection( 0 );
788  m_choiceFabProperty->Enable( false );
789  }
790 
791 
792  // Disable Pad name,and pad to die length for mechanical and aperture pads
793  m_PadNumText->Enable( !mechanical && !aperture );
794  m_PadNumCtrl->Enable( !mechanical && !aperture );
795  m_PadNameText->Enable( !mechanical && !aperture && m_canEditNetName && m_currentPad );
796  m_PadNetSelector->Enable( !mechanical && !aperture && m_canEditNetName && m_currentPad );
797  m_padToDie.Enable( !mechanical && !aperture );
798 
800  m_holeShapeCtrl->SetSelection( 0 );
801  else
802  m_holeShapeCtrl->SetSelection( 1 );
803 
804  // Update some dialog widgets state (Enable/disable options):
805  wxCommandEvent cmd_event;
807  OnDrillShapeSelected( cmd_event );
808  OnPadShapeSelection( cmd_event );
810 
811  // Update basic shapes list
813 }
int GetLocalSolderMaskMargin() const
Definition: class_pad.h:457
double GetOrientation() const
Definition: class_module.h:215
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:478
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Function GetLayerName returns the name of a layer given by aLayer.
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:292
PAD_SHAPE_T GetAnchorPadShape() const
Function GetAnchorPadShape.
Definition: class_pad.h:247
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:139
int GetPadToDieLength() const
Definition: class_pad.h:455
Smd pad, appears on the solder paste layer (default)
Definition: pad_shapes.h:62
const wxString GetValue() const
Function GetValue.
Definition: class_module.h:461
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:219
Smd pad, used in BGA footprints.
Definition: pad_shapes.h:79
void NORMALIZE_ANGLE_180(T &Angle)
Definition: trigo.h:346
a pad used as heat sink, usually in SMD footprints
Definition: pad_shapes.h:83
int GetThermalGap() const
Definition: class_pad.cpp:747
int GetLocalClearance() const
Definition: class_pad.h:460
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:445
const wxString GetReference() const
Function GetReference.
Definition: class_module.h:436
int GetChamferPositions() const
has meaning only for chamfered rect pads
Definition: class_pad.h:720
a pad with a castellated through hole
Definition: pad_shapes.h:84
ZONE_CONNECTION GetLocalZoneConnection() const
Definition: class_pad.h:533
pads are covered by copper
const std::vector< PAD_CS_PRIMITIVE > & GetPrimitives() const
Accessor to the basic shape list.
Definition: class_pad.h:369
const wxPoint & GetOffset() const
Definition: class_pad.h:309
PAD_DRILL_SHAPE_T GetDrillShape() const
Definition: class_pad.h:428
int GetThermalWidth() const
Definition: class_pad.cpp:736
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:442
void SetSelectedNetcode(int aNetcode)
void OnPadShapeSelection(wxCommandEvent &event) override
const wxString & GetName() const
Definition: class_pad.h:203
void OnDrillShapeSelected(wxCommandEvent &event) override
PAD_PROP_T GetProperty() const
Definition: class_pad.h:448
const wxSize & GetDelta() const
Definition: class_pad.h:303
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:167
CUST_PAD_SHAPE_IN_ZONE GetCustomShapeInZoneOpt() const
Definition: class_pad.h:253
Use thermal relief for pads.
void SetLayerSet(LSET aLayerMask)
Definition: class_pad.h:441
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:31
double GetOrientation() const
Function GetOrientation returns the rotation angle of the pad in tenths of degrees,...
Definition: class_pad.h:422
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:306
bool IsAperturePad() const
Definition: class_pad.h:452
Pads are not covered.
void SetOrientation(double aAngle)
Function SetOrientation sets the rotation angle of the pad.
Definition: class_pad.cpp:438
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:237
const wxSize & GetSize() const
Definition: class_pad.h:300
const wxPoint GetPosition() const override
Definition: class_pad.h:241
int GetLocalSolderPasteMargin() const
Definition: class_pad.h:463
void SetOffset(const wxPoint &aOffset)
Definition: class_pad.h:308
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:466
void SetDelta(const wxSize &aSize)
Definition: class_pad.h:302

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(), and DIALOG_LABEL_EDITOR::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(), and DIALOG_LABEL_EDITOR::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(), SCH_EDIT_FRAME::CreateScreens(), 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_EDIT_FRAME::EditSheet(), SCH_EDITOR_CONTROL::EditWithLibEdit(), DISPLAY_FOOTPRINTS_FRAME::Get_Module(), LIB_MANAGER::GetBufferedPart(), LIB_MANAGER::getLibraryBuffer(), FOOTPRINT_EDIT_FRAME::GetPlotSettings(), PCB_EDIT_FRAME::importFile(), SCH_EDIT_FRAME::importFile(), SCH_EDIT_FRAME::InitSheet(), KICAD_MANAGER_FRAME::language_change(), KIWAY_PLAYER::language_change(), CVPCB_MAINFRAME::LoadFootprintFiles(), KICAD_MANAGER_FRAME::LoadProject(), SCH_EDIT_FRAME::LoadSheetFromFile(), TEXT_BUTTON_SYMBOL_CHOOSER::OnButtonClick(), TEXT_BUTTON_FP_CHOOSER::OnButtonClick(), KICAD_MANAGER_FRAME::OnCloseWindow(), SCH_EDIT_FRAME::OnCloseWindow(), 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(), SCH_EDIT_FRAME::OpenProjectFiles(), SCH_EDITOR_CONTROL::Paste(), KIWAY_HOLDER::Prj(), CVPCB_MAINFRAME::ReadNetListAndFpFiles(), FOOTPRINT_VIEWER_FRAME::ReCreateFootprintList(), LIB_EDIT_FRAME::refreshSchematic(), SCH_EDIT_FRAME::rescueProject(), EE_INSPECTION_TOOL::RunSimulation(), SCH_EDIT_FRAME::SaveEEFile(), CVPCB_MAINFRAME::SaveFootprintAssociation(), FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard(), 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(), FOOTPRINT_EDIT_FRAME::SetPlotSettings(), CVPCB_CONTROL::ShowFootprintViewer(), COMMON_CONTROL::ShowLibraryTable(), COMMON_CONTROL::ShowPlayer(), KICAD_MANAGER_CONTROL::ShowPlayer(), SIM_PLOT_FRAME::SIM_PLOT_FRAME(), LIB_MANAGER::UpdatePart(), and DIALOG_EXCHANGE_FOOTPRINTS::ViewAndSelectFootprint().

◆ onAddPrimitive()

void DIALOG_PAD_PROPERTIES::onAddPrimitive ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 2000 of file dialog_pad_properties.cpp.

2001 {
2002  // Ask user for shape type
2003  wxString shapelist[] = { _( "Segment" ), _( "Arc" ), _( "Bezier" ),
2004  _( "Ring/Circle" ), _( "Polygon" ) };
2005 
2006  int type = wxGetSingleChoiceIndex( _( "Shape type:" ), _( "Add Primitive" ),
2007  arrayDim( shapelist ), shapelist, 0, this );
2008 
2009  // User pressed cancel
2010  if( type == -1 )
2011  return;
2012 
2013  STROKE_T listtype[] = { S_SEGMENT, S_ARC, S_CURVE, S_CIRCLE, S_POLYGON };
2014 
2015  PAD_CS_PRIMITIVE primitive( listtype[type] );
2016  primitive.m_Thickness = m_board->GetDesignSettings().GetLineThickness( F_Cu );
2017 
2018  if( listtype[type] == S_POLYGON )
2019  {
2020  DIALOG_PAD_PRIMITIVE_POLY_PROPS dlg( this, m_parent, &primitive );
2021 
2022  if( dlg.ShowModal() != wxID_OK )
2023  return;
2024  }
2025  else
2026  {
2027  DIALOG_PAD_PRIMITIVES_PROPERTIES dlg( this, m_parent, &primitive );
2028 
2029  if( dlg.ShowModal() != wxID_OK )
2030  return;
2031  }
2032 
2033  m_primitives.push_back( primitive );
2034 
2036 
2037  if( m_canUpdate )
2038  {
2040  redraw();
2041  }
2042 }
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:530
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:89
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:108
std::vector< PAD_CS_PRIMITIVE > m_primitives
#define _(s)
Definition: 3d_actions.cpp:31
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 212 of file dialog_pad_properties.cpp.

213 {
214  // Mandatory to avoid m_panelShowPadGal trying to draw something
215  // in a non valid context during closing process:
217 
218  // Now call default handler for wxID_CANCEL command event
219  event.Skip();
220 }
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 908 of file dialog_pad_properties.cpp.

909 {
910  m_sketchPreview = m_cbShowPadOutline->GetValue();
911 
913 
914  // fix the pad render mode (filled/not filled)
915  KIGFX::PCB_RENDER_SETTINGS* settings =
916  static_cast<KIGFX::PCB_RENDER_SETTINGS*>( view->GetPainter()->GetSettings() );
917 
922 
923  redraw();
924 }
multilayer pads, usually with holes
void SetSketchModeGraphicItems(bool aEnabled)
Turns on/off sketch mode for graphic items (DRAWSEGMENTs, texts).
Definition: pcb_painter.h:133
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:61
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 GetSettings 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:113
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 481 of file dialog_pad_properties.cpp.

482 {
485  return;
486 
487  double rrRadius = m_cornerRadius.GetValue();
488 
489  if( rrRadius < 0.0 )
490  {
491  rrRadius = 0.0;
492  m_tcCornerRadius->ChangeValue( wxString::Format( "%.1f", rrRadius ) );
493  }
494 
497 
498  auto ratio = wxString::Format( "%.1f", m_dummyPad->GetRoundRectRadiusRatio() * 100 );
499  m_tcCornerSizeRatio->ChangeValue( ratio );
500  redraw();
501 }
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:220
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:671
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:237

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 504 of file dialog_pad_properties.cpp.

505 {
508  return;
509 
510  wxString value = m_tcCornerSizeRatio->GetValue();
511  double ratioPercent;
512 
513  bool asChanged = false;
514 
515  if( value.ToDouble( &ratioPercent ) )
516  {
517  // Clamp ratioPercent to acceptable value (0.0 to 50.0)
518  if( ratioPercent < 0.0 )
519  {
520  ratioPercent = 0.0;
521  value.Printf( "%.1f", ratioPercent );
522  m_tcCornerSizeRatio->ChangeValue( value );
523  }
524 
525  if( ratioPercent > 50.0 )
526  {
527  ratioPercent = 0.5;
528  value.Printf( "%.1f", ratioPercent*100.0 );
529  m_tcCornerSizeRatio->ChangeValue( value );
530  }
531 
532  asChanged = true;
533  }
534 
535  value = m_tcChamferRatio->GetValue();
536 
537  if( value.ToDouble( &ratioPercent ) )
538  {
539  // Clamp ratioPercent to acceptable value (0.0 to 50.0)
540  if( ratioPercent < 0.0 )
541  {
542  ratioPercent = 0.0;
543  value.Printf( "%.1f", ratioPercent );
544  m_tcChamferRatio->ChangeValue( value );
545  }
546 
547  if( ratioPercent > 50.0 )
548  {
549  ratioPercent = 0.5;
550  value.Printf( "%.1f", ratioPercent*100.0 );
551  m_tcChamferRatio->ChangeValue( value );
552  }
553 
554  asChanged = true;
555  }
556 
557  if( asChanged )
558  {
561  redraw();
562  }
563 }
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:573
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:237
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 1972 of file dialog_pad_properties.cpp.

1973 {
1974  long select = m_listCtrlPrimitives->GetFirstSelected();
1975 
1976  if( select < 0 )
1977  return;
1978 
1979  // Multiple selections are allowed. get them and remove corresponding shapes
1980  std::vector<long> indexes;
1981  indexes.push_back( select );
1982 
1983  while( ( select = m_listCtrlPrimitives->GetNextSelected( select ) ) >= 0 )
1984  indexes.push_back( select );
1985 
1986  // Erase all select shapes
1987  for( unsigned ii = indexes.size(); ii > 0; --ii )
1988  m_primitives.erase( m_primitives.begin() + indexes[ii-1] );
1989 
1991 
1992  if( m_canUpdate )
1993  {
1995  redraw();
1996  }
1997 }
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 1022 of file dialog_pad_properties.cpp.

1023 {
1025  redraw();
1026 }
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 2080 of file dialog_pad_properties.cpp.

2081 {
2082  long select = m_listCtrlPrimitives->GetFirstSelected();
2083 
2084  if( select < 0 )
2085  {
2086  wxMessageBox( _( "No shape selected" ) );
2087  return;
2088  }
2089 
2090  // Multiple selections are allowed. Build selected shapes list
2091  std::vector<PAD_CS_PRIMITIVE*> shapeList;
2092  shapeList.push_back( &m_primitives[select] );
2093 
2094  while( ( select = m_listCtrlPrimitives->GetNextSelected( select ) ) >= 0 )
2095  shapeList.push_back( &m_primitives[select] );
2096 
2097  DIALOG_PAD_PRIMITIVES_TRANSFORM dlg( this, m_parent, shapeList, true );
2098 
2099  if( dlg.ShowModal() != wxID_OK )
2100  return;
2101 
2102  // Transfer new settings
2103  // save duplicates to a separate vector to avoid m_primitives reallocation,
2104  // as shapeList contains pointers to its elements
2105  std::vector<PAD_CS_PRIMITIVE> duplicates;
2106  dlg.Transform( &duplicates, dlg.GetDuplicateCount() );
2107  std::move( duplicates.begin(), duplicates.end(), std::back_inserter( m_primitives ) );
2108 
2110 
2111  if( m_canUpdate )
2112  {
2114  redraw();
2115  }
2116 }
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:31
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 1966 of file dialog_pad_properties.cpp.

1967 {
1968  editPrimitive();
1969 }

References editPrimitive().

◆ onGeometryTransform()

void DIALOG_PAD_PROPERTIES::onGeometryTransform ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 2045 of file dialog_pad_properties.cpp.

2046 {
2047  long select = m_listCtrlPrimitives->GetFirstSelected();
2048 
2049  if( select < 0 )
2050  {
2051  wxMessageBox( _( "No shape selected" ) );
2052  return;
2053  }
2054 
2055  // Multiple selections are allowed. Build selected shapes list
2056  std::vector<PAD_CS_PRIMITIVE*> shapeList;
2057  shapeList.push_back( &m_primitives[select] );
2058 
2059  while( ( select = m_listCtrlPrimitives->GetNextSelected( select ) ) >= 0 )
2060  shapeList.push_back( &m_primitives[select] );
2061 
2062  DIALOG_PAD_PRIMITIVES_TRANSFORM dlg( this, m_parent, shapeList, false );
2063 
2064  if( dlg.ShowModal() != wxID_OK )
2065  return;
2066 
2067  // Transfert new settings:
2068  dlg.Transform();
2069 
2071 
2072  if( m_canUpdate )
2073  {
2075  redraw();
2076  }
2077 }
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:31
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 202 of file dialog_pad_properties.cpp.

203 {
204  m_selectedColor = COLOR4D( 1.0, 1.0, 1.0, 0.7 );
205 
206  // Needed on some WM to be sure the pad is redrawn according to the final size
207  // of the canvas, with the right zoom factor
208  redraw();
209 }
COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:39

References m_selectedColor, and redraw().

◆ OnPadShapeSelection()

void DIALOG_PAD_PROPERTIES::OnPadShapeSelection ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 928 of file dialog_pad_properties.cpp.

929 {
930  bool is_custom = false;
931 
932  switch( m_PadShape->GetSelection() )
933  {
934  case CHOICE_SHAPE_CIRCLE:
935  m_trapDelta.Enable( false );
936  m_trapAxisLabel->Enable( false );
937  m_trapAxisCtrl->Enable( false );
938  m_sizeY.Enable( false );
939  m_offsetX.Enable( false );
940  m_offsetY.Enable( false );
941  break;
942 
943  case CHOICE_SHAPE_OVAL:
944  m_trapDelta.Enable( false );
945  m_trapAxisLabel->Enable( false );
946  m_trapAxisCtrl->Enable( false );
947  m_sizeY.Enable( true );
948  m_offsetX.Enable( true );
949  m_offsetY.Enable( true );
950  break;
951 
952  case CHOICE_SHAPE_RECT:
953  m_trapDelta.Enable( false );
954  m_trapAxisLabel->Enable( false );
955  m_trapAxisCtrl->Enable( false );
956  m_sizeY.Enable( true );
957  m_offsetX.Enable( true );
958  m_offsetY.Enable( true );
959  break;
960 
962  m_trapDelta.Enable( true );
963  m_trapAxisLabel->Enable( true );
964  m_trapAxisCtrl->Enable( true );
965  m_sizeY.Enable( true );
966  m_offsetX.Enable( true );
967  m_offsetY.Enable( true );
968  break;
969 
972  m_trapDelta.Enable( false );
973  m_trapAxisLabel->Enable( false );
974  m_trapAxisCtrl->Enable( false );
975  m_sizeY.Enable( true );
976  m_offsetX.Enable( true );
977  m_offsetY.Enable( true );
978  // Ensure m_tcCornerSizeRatio contains the right value:
979  m_tcCornerSizeRatio->ChangeValue( wxString::Format( "%.1f",
981  break;
982 
983  case CHOICE_SHAPE_CUSTOM_CIRC_ANCHOR: // PAD_SHAPE_CUSTOM, circular anchor
984  case CHOICE_SHAPE_CUSTOM_RECT_ANCHOR: // PAD_SHAPE_CUSTOM, rect anchor
985  is_custom = true;
986  m_trapDelta.Enable( false );
987  m_trapAxisLabel->Enable( false );
988  m_trapAxisCtrl->Enable( false );
990  m_offsetX.Enable( false );
991  m_offsetY.Enable( false );
992  break;
993  }
994 
995  enablePrimitivePage( is_custom );
996 
997  // A few widgets are enabled only for rounded rect and chamfered pads:
998  bool chamfered_rect_enable = m_PadShape->GetSelection() == CHOICE_SHAPE_CHAMFERED_RECT;
999  bool round_rect_enable = m_PadShape->GetSelection() == CHOICE_SHAPE_ROUNDRECT ||
1000  chamfered_rect_enable;
1001  m_staticTextCornerSizeRatio->Enable( round_rect_enable );
1002  m_tcCornerSizeRatio->Enable( round_rect_enable );
1003  m_staticTextCornerSizeRatioUnit->Enable( round_rect_enable );
1004  m_cornerRadius.Enable( round_rect_enable );
1005 
1006  m_cbTopLeft->Enable( chamfered_rect_enable );
1007  m_cbTopRight->Enable( chamfered_rect_enable );
1008  m_cbBottomLeft->Enable( chamfered_rect_enable );
1009  m_cbBottomRight->Enable( chamfered_rect_enable );
1010  m_tcChamferRatio->Enable( chamfered_rect_enable );
1011 
1012  m_staticTextcps->Enable( is_custom );
1013  m_ZoneCustomPadShape->Enable( is_custom );
1014 
1016 
1018  redraw();
1019 }
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:671
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 320 of file dialog_shim.cpp.

321 {
322  if( m_firstPaintEvent )
323  {
324 #ifdef __WXMAC__
325  fixOSXCancelButtonIssue( this );
326 #endif
327 
328  selectAllInTextCtrls( GetChildren() );
329 
331  m_initialFocusTarget->SetFocus();
332  else
333  SetFocus(); // Focus the dialog itself
334 
335  m_firstPaintEvent = false;
336  }
337 
338  event.Skip();
339 }
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().

◆ OnPaintShowPanel()

void DIALOG_PAD_PROPERTIES::OnPaintShowPanel ( wxPaintEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 281 of file dialog_pad_properties.cpp.

282 {
283  wxPaintDC dc( m_panelShowPad );
284  PAD_DRAWINFO drawInfo;
285 
287 
288  if( m_dummyPad->GetLayerSet()[F_Cu] )
290 
291  if( m_dummyPad->GetLayerSet()[B_Cu] )
293 
294  // What could happen: the pad color is *actually* black, or no copper was selected
295  if( color == BLACK )
296  color = LIGHTGRAY;
297 
298  drawInfo.m_Color = color;
299  drawInfo.m_HoleColor = DARKGRAY;
300  drawInfo.m_Offset = m_dummyPad->GetPosition();
301  drawInfo.m_Display_padnum = true;
302  drawInfo.m_Display_netname = true;
303  drawInfo.m_ShowPadFilled = !m_sketchPreview;
304 
306  drawInfo.m_ShowNotPlatedHole = true;
307 
308  // Shows the local pad clearance
310 
311  wxSize dc_size = dc.GetSize();
312  dc.SetDeviceOrigin( dc_size.x / 2, dc_size.y / 2 );
313 
314  // Calculate a suitable scale to fit the available draw area
315  int dim = m_dummyPad->GetBoundingRadius() *2;
316 
317  // Invalid x size. User could enter zero, or have deleted all text prior to
318  // entering a new value; this is also treated as zero. If dim is left at
319  // zero, the drawing scale is zero and we get a crash.
320  if( dim == 0 )
321  {
322  // If drill size has been set, use that. Otherwise default to 1mm.
323  dim = m_dummyPad->GetDrillSize().x;
324 
325  if( dim == 0 )
326  dim = Millimeter2iu( 1.0 );
327  }
328 
329  if( m_dummyPad->GetLocalClearance() > 0 )
330  dim += m_dummyPad->GetLocalClearance() * 2;
331 
332  double scale = (double) dc_size.x / dim;
333 
334  // If the pad is a circle, use the x size here instead.
335  int ysize;
336 
338  ysize = m_dummyPad->GetSize().x;
339  else
340  ysize = m_dummyPad->GetSize().y;
341 
342  dim = ysize + std::abs( m_dummyPad->GetDelta().x );
343 
344  // Invalid y size. See note about x size above.
345  if( dim == 0 )
346  {
347  dim = m_dummyPad->GetDrillSize().y;
348 
349  if( dim == 0 )
350  dim = Millimeter2iu( 0.1 );
351  }
352 
353  if( m_dummyPad->GetLocalClearance() > 0 )
354  dim += m_dummyPad->GetLocalClearance() * 2;
355 
356  double altscale = (double) dc_size.y / dim;
357  scale = std::min( scale, altscale );
358 
359  // Give a margin
360  scale *= 0.7;
361  dc.SetUserScale( scale, scale );
362 
363  GRResetPenAndBrush( &dc );
364  m_dummyPad->PrintShape( &dc, drawInfo );
365 
366  // draw selected primitives:
367  long select = m_listCtrlPrimitives->GetFirstSelected();
368 
369  while( select >= 0 )
370  {
371  PAD_CS_PRIMITIVE& primitive = m_primitives[select];
372 
373  // The best way to calculate parameters to draw a primitive is to
374  // use a dummy DRAWSEGMENT and use its methods
375  // Note: in legacy canvas, the pad has the 0,0 position
376  DRAWSEGMENT dummySegment;
377  primitive.ExportTo( &dummySegment );
378  dummySegment.Rotate( wxPoint( 0, 0), m_dummyPad->GetOrientation() );
379 
380  switch( primitive.m_Shape )
381  {
382  case S_SEGMENT: // usual segment : line with rounded ends
383  if( !m_sketchPreview )
384  GRFilledSegment( NULL, &dc, dummySegment.GetStart(), dummySegment.GetEnd(),
385  primitive.m_Thickness, m_selectedColor );
386  else
387  GRCSegm( NULL, &dc, dummySegment.GetStart(), dummySegment.GetEnd(),
388  primitive.m_Thickness, m_selectedColor );
389  break;
390 
391  case S_ARC: // Arc with rounded ends
392  if( !m_sketchPreview )
393  GRArc1( NULL, &dc, dummySegment.GetArcEnd(), dummySegment.GetArcStart(),
394  dummySegment.GetCenter(), primitive.m_Thickness, m_selectedColor );
395  else
396  {
397  GRArc1( NULL, &dc, dummySegment.GetArcEnd(), dummySegment.GetArcStart(),
398  dummySegment.GetCenter(), 0, m_selectedColor );
399 /* GRArc1( NULL, &dc, dummySegment.GetArcEnd(), dummySegment.GetArcStart(),
400  dummySegment.GetCenter() - primitive.m_Thickness, 0, m_selectedColor );*/
401  }
402  break;
403 
404  case S_CIRCLE: // ring or circle
405  if( primitive.m_Thickness )
406  {
407  if( !m_sketchPreview )
408  GRCircle( nullptr, &dc, dummySegment.GetCenter(), primitive.m_Radius,
409  primitive.m_Thickness, m_selectedColor );
410  else
411  {
412  GRCircle( nullptr, &dc, dummySegment.GetCenter(),
413  primitive.m_Radius + primitive.m_Thickness/2, 0, m_selectedColor );
414  GRCircle( nullptr, &dc, dummySegment.GetCenter(),
415  primitive.m_Radius - primitive.m_Thickness/2, 0, m_selectedColor );
416  }
417  }
418  else
419  {
420  if( !m_sketchPreview )
421  GRFilledCircle( nullptr, &dc, dummySegment.GetCenter(), primitive.m_Radius,
422  m_selectedColor );
423  else
424  GRCircle( nullptr, &dc, dummySegment.GetCenter(), primitive.m_Radius, 0,
425  m_selectedColor );
426  }
427  break;
428 
429  case S_POLYGON: // polygon
430  {
431  std::vector<wxPoint> poly = dummySegment.BuildPolyPointsList();
432  GRClosedPoly( nullptr, &dc, poly.size(), &poly[0], !m_sketchPreview,
434  }
435  break;
436 
437  default:
438  break;
439  }
440 
441  select = m_listCtrlPrimitives->GetNextSelected( select );
442  }
443 
444  // Draw X and Y axis. This is particularly useful to show the
445  // reference position of pads with offset and no hole, or custom pad shapes
446  const int t = 0; // line thickness
447  GRLine( nullptr, &dc, -int( dc_size.x/scale ), 0, int( dc_size.x/scale ), 0, t, LIGHTBLUE );
448  GRLine( nullptr, &dc, 0, -int( dc_size.y/scale ), 0, int( dc_size.y/scale ), t, LIGHTBLUE );
449 
450  event.Skip();
451 }
void GRResetPenAndBrush(wxDC *DC)
Definition: gr_basic.cpp:120
bool m_Display_padnum
Definition: class_pad.h:73
like PAD_STANDARD, but not plated mechanical use only, no connection allowed
Definition: pad_shapes.h:66
const wxPoint GetCenter() const override
Function GetCenter()
const wxPoint GetArcEnd() const
void ExportTo(DRAWSEGMENT *aTarget)
Export the PAD_CS_PRIMITIVE parameters to a DRAWSEGMENT useful to draw a primitive shape.
int color
Definition: DXF_plotter.cpp:61
polygon (not yet used for tracks, but could be in microwave apps)
void GRCSegm(EDA_RECT *ClipBox, wxDC *DC, int x1, int y1, int x2, int y2, int width, int aPenSize, COLOR4D Color)
Definition: gr_basic.cpp:312
usual segment : line with rounded ends
const std::vector< wxPoint > BuildPolyPointsList() const
Build and return the list of corners in a std::vector<wxPoint> It must be used only to convert the SH...
const wxPoint & GetEnd() const
Function GetEnd returns the ending point of the graphic.
void GRFilledCircle(EDA_RECT *ClipBox, wxDC *DC, int x, int y, int r, int width, COLOR4D Color, COLOR4D BgColor)
Definition: gr_basic.cpp:619
int GetLocalClearance() const
Definition: class_pad.h:460
PAD_ATTR_T GetAttribute() const
Definition: class_pad.h:445
COLOR4D GetItemColor(int aItemIdx) const
Function GetItemColor.
int m_Radius
thickness of segment or outline For filled S_CIRCLE shape, thickness = 0.
Definition: class_pad.h:96
#define NULL
PCB_GENERAL_SETTINGS & Settings()
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:89
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:442
COLOR4D m_HoleColor
Definition: class_pad.h:68
int GetBoundingRadius() const
Function GetBoundingRadius returns the radius of a minimum sized circle which fully encloses this pad...
Definition: class_pad.h:649
void PrintShape(wxDC *aDC, PAD_DRAWINFO &aDrawInfo)
Function PrintShape basic function to print a pad.
const wxPoint & GetArcStart() const
bool m_ShowNotPlatedHole
Definition: class_pad.h:78
const wxSize & GetDelta() const
Definition: class_pad.h:303
void GRLine(EDA_RECT *ClipBox, wxDC *DC, int x1, int y1, int x2, int y2, int width, COLOR4D Color, wxPenStyle aStyle)
Definition: gr_basic.cpp:230
STROKE_T m_Shape
Definition: class_pad.h:92
int m_PadClearance
Definition: class_pad.h:71
COLORS_DESIGN_SETTINGS & Colors()
int m_Thickness
S_SEGMENT, S_ARC, S_CIRCLE, S_POLYGON only (same as DRAWSEGMENT)
Definition: class_pad.h:93
virtual void Rotate(const wxPoint &aRotCentre, double aAngle) override
Function Rotate Rotate this object.
wxPoint m_Offset
Definition: class_pad.h:81
const int scale
smd pads, front layer
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:422
void GRFilledSegment(EDA_RECT *aClipBox, wxDC *aDC, wxPoint aStart, wxPoint aEnd, int aWidth, COLOR4D aColor)
Definition: gr_basic.cpp:423
void GRCircle(EDA_RECT *ClipBox, wxDC *DC, int xc, int yc, int r, int width, COLOR4D Color)
Definition: gr_basic.cpp:596
const wxSize & GetDrillSize() const
Definition: class_pad.h:306
bool m_ShowPadFilled
Definition: class_pad.h:75
COLOR4D m_Color
Definition: class_pad.h:66
const wxPoint & GetStart() const
Function GetStart returns the starting point of the graphic.
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:237
Definition: colors.h:45
bool m_Display_netname
Definition: class_pad.h:74
const wxSize & GetSize() const
Definition: class_pad.h:300
const wxPoint GetPosition() const override
Definition: class_pad.h:241
void GRClosedPoly(EDA_RECT *ClipBox, wxDC *DC, int n, const wxPoint *Points, bool Fill, COLOR4D Color, COLOR4D BgColor)
Function GRClosedPoly draws a closed polygon onto the drawing context aDC and optionally fills and/or...
Definition: gr_basic.cpp:552
void GRArc1(EDA_RECT *ClipBox, wxDC *DC, int x1, int y1, int x2, int y2, int xc, int yc, COLOR4D Color)
Definition: gr_basic.cpp:640
COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:39

References B_Cu, BLACK, DRAWSEGMENT::BuildPolyPointsList(), color, PCB_GENERAL_SETTINGS::Colors(), DARKGRAY, PAD_CS_PRIMITIVE::ExportTo(), F_Cu, DRAWSEGMENT::GetArcEnd(), DRAWSEGMENT::GetArcStart(), D_PAD::GetAttribute(), D_PAD::GetBoundingRadius(), DRAWSEGMENT::GetCenter(), D_PAD::GetDelta(), D_PAD::GetDrillSize(), DRAWSEGMENT::GetEnd(), COLORS_DESIGN_SETTINGS::GetItemColor(), D_PAD::GetLayerSet(), D_PAD::GetLocalClearance(), D_PAD::GetOrientation(), D_PAD::GetPosition(), D_PAD::GetShape(), D_PAD::GetSize(), DRAWSEGMENT::GetStart(), GRArc1(), GRCircle(), GRClosedPoly(), GRCSegm(), GRFilledCircle(), GRFilledSegment(), GRLine(), GRResetPenAndBrush(), LAYER_PAD_BK, LAYER_PAD_FR, LIGHTBLUE, LIGHTGRAY, PAD_DRAWINFO::m_Color, PAD_DRAWINFO::m_Display_netname, PAD_DRAWINFO::m_Display_padnum, m_dummyPad, PAD_DRAWINFO::m_HoleColor, DIALOG_PAD_PROPERTIES_BASE::m_listCtrlPrimitives, PAD_DRAWINFO::m_Offset, PAD_DRAWINFO::m_PadClearance, DIALOG_PAD_PROPERTIES_BASE::m_panelShowPad, m_parent, m_primitives, PAD_CS_PRIMITIVE::m_Radius, m_selectedColor, PAD_CS_PRIMITIVE::m_Shape, PAD_DRAWINFO::m_ShowNotPlatedHole, PAD_DRAWINFO::m_ShowPadFilled, m_sketchPreview, PAD_CS_PRIMITIVE::m_Thickness, NULL, PAD_ATTRIB_HOLE_NOT_PLATED, PAD_SHAPE_CIRCLE, D_PAD::PrintShape(), DRAWSEGMENT::Rotate(), S_ARC, S_CIRCLE, S_POLYGON, S_SEGMENT, scale, and PCB_BASE_FRAME::Settings().

◆ 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 1959 of file dialog_pad_properties.cpp.

1960 {
1961  editPrimitive();
1962 }

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 1950 of file dialog_pad_properties.cpp.

1951 {
1952  // Called on a double click on the basic shapes list
1953  // To Do: highligth the primitive(s) currently selected.
1954  redraw();
1955 }

References redraw().

◆ OnResize()

void DIALOG_PAD_PROPERTIES::OnResize ( wxSizeEvent &  event)
private

Definition at line 901 of file dialog_pad_properties.cpp.

902 {
903  redraw();
904  event.Skip();
905 }

References redraw().

Referenced by prepareCanvas().

◆ OnSetLayers()

void DIALOG_PAD_PROPERTIES::OnSetLayers ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1167 of file dialog_pad_properties.cpp.

1168 {
1170  redraw();
1171 }
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 1097 of file dialog_pad_properties.cpp.

1098 {
1099  int ii = m_PadType->GetSelection();
1100 
1101  if( (unsigned)ii >= arrayDim( code_type ) ) // catches < 0 also
1102  ii = 0;
1103 
1104  bool hasHole, hasConnection;
1105 
1106  switch( ii )
1107  {
1108  default:
1109  case 0: /* PTH */ hasHole = true; hasConnection = true; break;
1110  case 1: /* SMD */ hasHole = false; hasConnection = true; break;
1111  case 2: /* CONN */ hasHole = false; hasConnection = true; break;
1112  case 3: /* NPTH */ hasHole = true; hasConnection = false; break;
1113  case 4: /* Aperture */ hasHole = false; hasConnection = false; break;
1114  }
1115 
1116  // Enable/disable hole controls
1117  m_holeShapeLabel->Enable( hasHole );
1118  m_holeShapeCtrl->Enable( hasHole );
1119  m_holeX.Enable( hasHole );
1120  m_holeY.Enable( hasHole && m_holeShapeCtrl->GetSelection() == 1 );
1121 
1122  // Enable/disable Pad number, net and pad length-to-die
1123  m_PadNumText->Enable( hasConnection );
1124  m_PadNumCtrl->Enable( hasConnection );
1125  m_PadNameText->Enable( hasConnection );
1126  m_PadNetSelector->Enable( hasConnection && m_canEditNetName && m_currentPad );
1127  m_padToDie.Enable( hasConnection );
1128 
1129  // Enable/disable Copper Layers control
1130  m_rbCopperLayersSel->Enable( ii != 4 );
1131 }
static PAD_ATTR_T code_type[]
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Definition: macros.h:108
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:686
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:442

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 1895 of file dialog_pad_properties.cpp.

1896 {
1897  if( m_canUpdate )
1898  {
1900  // If the pad size has changed, update the displayed values
1901  // for rounded rect pads
1903 
1904  redraw();
1905  }
1906 }
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 1029 of file dialog_pad_properties.cpp.

1030 {
1032  redraw();
1033 }
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 1036 of file dialog_pad_properties.cpp.

1037 {
1038  int ii = m_PadType->GetSelection();
1039 
1040  if( (unsigned)ii >= arrayDim( code_type ) ) // catches < 0 also
1041  ii = 0;
1042 
1043  bool hasHole, hasConnection;
1044  bool hasProperty = true;
1045 
1046  switch( ii )
1047  {
1048  default:
1049  case 0: /* PTH */ hasHole = true; hasConnection = true; break;
1050  case 1: /* SMD */ hasHole = false; hasConnection = true; break;
1051  case 2: /* CONN */ hasHole = false; hasConnection = true; break;
1052  case 3: /* NPTH */
1053  hasHole = true;
1054  hasConnection = false;
1055  hasProperty = false;
1056  break;
1057 
1058  case 4: /* Aperture */ hasHole = false; hasConnection = false; break;
1059  }
1060 
1061  LSET layer_mask = std_pad_layers[ii];
1062  setPadLayersList( layer_mask );
1063 
1064  if( !hasHole )
1065  {
1066  m_holeX.SetValue( 0 );
1067  m_holeY.SetValue( 0 );
1068  }
1069  else if ( m_holeX.GetValue() == 0 && m_currentPad )
1070  {
1073  }
1074 
1075  if( !hasConnection )
1076  {
1077  m_PadNumCtrl->SetValue( wxEmptyString );
1079  m_padToDie.SetValue( 0 );
1080  }
1081  else if( m_PadNumCtrl->GetValue().IsEmpty() && m_currentPad )
1082  {
1083  m_PadNumCtrl->SetValue( m_currentPad->GetName() );
1085  }
1086 
1087  if( !hasProperty )
1088  m_choiceFabProperty->SetSelection( 0 );
1089 
1090  m_choiceFabProperty->Enable( hasProperty );
1091 
1093  redraw();
1094 }
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:203
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Definition: macros.h:108
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:306
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 1175 of file dialog_pad_properties.cpp.

1176 {
1177  bool error = transferDataToPad( m_dummyPad );
1178  bool skip_tstoffset = false; // the offset prm is not always tested
1179 
1180  wxArrayString error_msgs;
1181  wxString msg;
1182 
1183  // Test for incorrect values
1184  if( (m_dummyPad->GetSize().x <= 0) ||
1185  ((m_dummyPad->GetSize().y <= 0) && (m_dummyPad->GetShape() != PAD_SHAPE_CIRCLE)) )
1186  {
1187  error_msgs.Add( _( "Pad size must be greater than zero" ) );
1188  }
1189 
1190  if( (m_dummyPad->GetSize().x < m_dummyPad->GetDrillSize().x) ||
1191  (m_dummyPad->GetSize().y < m_dummyPad->GetDrillSize().y) )
1192  {
1193  error_msgs.Add( _( "Incorrect value for pad drill: pad drill bigger than pad size" ) );
1194  skip_tstoffset = true; // offset prm will be not tested because if the drill value
1195  // is incorrect the offset prm is always seen as incorrect, even if it is 0
1196  }
1197 
1198  if( m_dummyPad->GetLocalClearance() < 0 )
1199  {
1200  error_msgs.Add( _( "Pad local clearance must be zero or greater than zero" ) );
1201  }
1202 
1203  // Some pads need a negative solder mask clearance (mainly for BGA with small pads)
1204  // However the negative solder mask clearance must not create negative mask size
1205  // Therefore test for minimal acceptable negative value
1206  // Hovewer, a negative value can give strange result with custom shapes, so it is not
1207  // allowed for custom pad shape
1209  {
1211  error_msgs.Add( _( "Pad local solder mask clearance must be zero or greater than zero" ) );
1212  else
1213  {
1214  int min_smClearance = -std::min( m_dummyPad->GetSize().x, m_dummyPad->GetSize().y )/2;
1215 
1216  if( m_dummyPad->GetLocalSolderMaskMargin() <= min_smClearance )
1217  {
1218  error_msgs.Add( wxString::Format(
1219  _( "Pad local solder mask clearance must be greater than %s" ),
1220  StringFromValue( GetUserUnits(), min_smClearance, true, true ) ) );
1221  }
1222  }
1223  }
1224 
1225  // Some pads need a positive solder paste clearance (mainly for BGA with small pads)
1226  // Hovewer, a positive value can create issues if the resulting shape is too big.
1227  // (like a solder paste creating a solder paste area on a neighbour pad or on the solder mask)
1228  // So we could ask for user to confirm the choice
1229  // Currently there are no test
1230 
1231  LSET padlayers_mask = m_dummyPad->GetLayerSet();
1232 
1233  if( padlayers_mask == 0 )
1234  error_msgs.Add( _( "Error: pad has no layer" ) );
1235 
1236  if( !padlayers_mask[F_Cu] && !padlayers_mask[B_Cu] )
1237  {
1238  if( m_dummyPad->GetDrillSize().x || m_dummyPad->GetDrillSize().y )
1239  {
1240  // Note: he message is shown in an HTML window
1241  msg = _( "Error: the pad is not on a copper layer and has a hole" );
1242 
1244  {
1245  msg += wxT( "<br><br><i>" );
1246  msg += _( "For NPTH pad, set pad size value to pad drill value,"
1247  " if you do not want this pad plotted in gerber files" );
1248  }
1249 
1250  error_msgs.Add( msg );
1251  }
1252  }
1253 
1254  if( !skip_tstoffset )
1255  {
1256  wxPoint max_size;
1257  max_size.x = std::abs( m_dummyPad->GetOffset().x );
1258  max_size.y = std::abs( m_dummyPad->GetOffset().y );
1259  max_size.x += m_dummyPad->GetDrillSize().x / 2;
1260  max_size.y += m_dummyPad->GetDrillSize().y / 2;
1261 
1262  if( ( m_dummyPad->GetSize().x / 2 < max_size.x ) ||
1263  ( m_dummyPad->GetSize().y / 2 < max_size.y ) )
1264  {
1265  error_msgs.Add( _( "Incorrect value for pad offset" ) );
1266  }
1267  }
1268 
1269  if( error )
1270  error_msgs.Add( _( "Too large value for pad delta size" ) );
1271 
1272  switch( m_dummyPad->GetAttribute() )
1273  {
1274  case PAD_ATTRIB_HOLE_NOT_PLATED: // Not plated, but through hole, a hole is expected
1275  case PAD_ATTRIB_STANDARD : // Pad through hole, a hole is also expected
1276  if( m_dummyPad->GetDrillSize().x <= 0 ||
1278  error_msgs.Add( _( "Error: Through hole pad: drill diameter set to 0" ) );
1279  break;
1280 
1281  case PAD_ATTRIB_CONN: // Connector pads are smd pads, just they do not have solder paste.
1282  if( padlayers_mask[B_Paste] || padlayers_mask[F_Paste] )
1283  error_msgs.Add( _( "Error: Connector pads are not on the solder paste layer\n"
1284  "Use SMD pads instead" ) );
1285  // Intentionally fall through
1286  case PAD_ATTRIB_SMD: // SMD and Connector pads (One external copper layer only)
1287  {
1288  LSET innerlayers_mask = padlayers_mask & LSET::InternalCuMask();
1289 
1290  if( ( padlayers_mask[F_Cu] && padlayers_mask[B_Cu] ) ||
1291  innerlayers_mask.count() != 0 )
1292  error_msgs.Add( _( "Error: only one external copper layer allowed for SMD or Connector pads" ) );
1293  }
1294  break;
1295  }
1296 
1297  if( m_dummyPad->GetProperty() != PAD_PROP_NONE &&
1299  error_msgs.Add( _( "Property cannot be set for NPTH" ) );
1300 
1303  error_msgs.Add( _( "Castellated property can be set only for PTH" ) );
1304 
1305  if( m_dummyPad->GetProperty() == PAD_PROP_BGA &&
1307  error_msgs.Add( _( "BGA property can be set only for SMD pads" ) );
1308 
1311  {
1312  wxString value = m_tcCornerSizeRatio->GetValue();
1313  double rrRadiusRatioPercent;
1314 
1315  if( !value.ToDouble( &rrRadiusRatioPercent ) )
1316  error_msgs.Add( _( "Incorrect corner size value" ) );
1317  else
1318  {
1319  if( rrRadiusRatioPercent < 0.0 )
1320  error_msgs.Add( _( "Incorrect (negative) corner size value" ) );
1321  else if( rrRadiusRatioPercent > 50.0 )
1322  error_msgs.Add( _( "Corner size value must be smaller than 50%" ) );
1323  }
1324  }
1325 
1327  {
1329  error_msgs.Add( _( "Incorrect pad shape: the shape must be equivalent to only one polygon" ) );
1330  }
1331 
1332 
1333  if( error_msgs.GetCount() )
1334  {
1335  HTML_MESSAGE_BOX dlg( this, _("Pad setup errors list" ) );
1336  dlg.ListSet( error_msgs );
1337  dlg.ShowModal();
1338  }
1339 
1340  return error_msgs.GetCount() == 0;
1341 }
int GetLocalSolderMaskMargin() const
Definition: class_pad.h:457
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 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:219
Smd pad, used in BGA footprints.
Definition: pad_shapes.h:79
int GetLocalClearance() const
Definition: class_pad.h:460
PAD_ATTR_T GetAttribute() const
Definition: class_pad.h:445
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:309
PAD_DRILL_SHAPE_T GetDrillShape() const
Definition: class_pad.h:428
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:442
static LSET InternalCuMask()
Function InternalCuMask() returns a complete set of internal copper layers, which is all Cu layers ex...
Definition: lset.cpp:646
PAD_PROP_T GetProperty() const
Definition: class_pad.h:448
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:31
const wxSize & GetDrillSize() const
Definition: class_pad.h:306
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:237
const wxSize & GetSize() const
Definition: class_pad.h:300

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(), 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 235 of file dialog_pad_properties.cpp.

236 {
237  // Initialize the canvas to display the pad
238 
239  // Show the X and Y axis. It is usefull because pad shape can have an offset
240  // or be a complex shape.
241  KIGFX::COLOR4D axis_color = LIGHTBLUE;
242 
244  Millimeter2iu( 0.2 ),
246  m_axisOrigin->SetDrawAtZero( true );
247 
251 
252  bool mousewheelPan = m_parent->GetCanvas()->GetViewControls()->IsMousewheelPanEnabled();
254 
255  m_panelShowPadGal->Show();
256  m_panelShowPad->Hide();
257 
259 
260  // fix the pad render mode (filled/not filled)
261  auto settings = static_cast<KIGFX::PCB_RENDER_SETTINGS*>( view->GetPainter()->GetSettings() );
262  bool sketchMode = m_cbShowPadOutline->IsChecked();
263  settings->SetSketchMode( LAYER_PADS_TH, sketchMode );
264  settings->SetSketchMode( LAYER_PAD_FR, sketchMode );
265  settings->SetSketchMode( LAYER_PAD_BK, sketchMode );
266  settings->SetSketchModeGraphicItems( sketchMode );
267 
268  // gives a non null grid size (0.001mm) because GAL layer does not like a 0 size grid:
269  double gridsize = 0.001 * IU_PER_MM;
270  view->GetGAL()->SetGridSize( VECTOR2D( gridsize, gridsize ) );
271  // And do not show the grid:
272  view->GetGAL()->SetGridVisibility( false );
273  view->Add( m_dummyPad );
274  view->Add( m_axisOrigin );
275 
277  Connect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_PAD_PROPERTIES::OnResize ) );
278 }
KIGFX::VIEW_CONTROLS * GetViewControls() const
Function GetViewControls() Returns a pointer to the VIEW_CONTROLS instance used in the panel.
multilayer pads, usually with holes
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
virtual void EnableMousewheelPan(bool aEnable)
Function EnableMousewheelPan() Enables or disables mousewheel panning.
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
KIGFX::ORIGIN_VIEWITEM * m_axisOrigin
VECTOR2< double > VECTOR2D
Definition: vector2d.h:593
PCB_GENERAL_SETTINGS & Settings()
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 UseColorScheme(const COLORS_DESIGN_SETTINGS *aSettings)
Function UseColorScheme Applies layer color settings.
COLORS_DESIGN_SETTINGS & Colors()
bool SwitchBackend(GAL_TYPE aGalType) override
Function SwitchBackend Switches method of rendering graphics.
virtual RENDER_SETTINGS * GetSettings()=0
Function GetSettings Returns pointer to current settings that are going to be used when drawing items...
smd pads, front layer
virtual bool IsMousewheelPanEnabled() const
Function IsMousewheelPanEnabled()
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:241
COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:39

References KIGFX::VIEW::Add(), PCB_GENERAL_SETTINGS::Colors(), KIGFX::ORIGIN_VIEWITEM::CROSS, KIGFX::VIEW_CONTROLS::EnableMousewheelPan(), EDA_DRAW_PANEL_GAL::GetBackend(), PCB_BASE_FRAME::GetCanvas(), KIGFX::VIEW::GetGAL(), KIGFX::VIEW::GetPainter(), D_PAD::GetPosition(), KIGFX::PAINTER::GetSettings(), PCB_DRAW_PANEL_GAL::GetView(), EDA_DRAW_PANEL_GAL::GetViewControls(), KIGFX::VIEW_CONTROLS::IsMousewheelPanEnabled(), 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_panelShowPad, DIALOG_PAD_PROPERTIES_BASE::m_panelShowPadGal, m_parent, OnResize(), KIGFX::ORIGIN_VIEWITEM::SetDrawAtZero(), KIGFX::GAL::SetGridSize(), KIGFX::GAL::SetGridVisibility(), EDA_DRAW_PANEL_GAL::SetStealsFocus(), PCB_BASE_FRAME::Settings(), EDA_DRAW_PANEL_GAL::StartDrawing(), PCB_DRAW_PANEL_GAL::SwitchBackend(), and PCB_DRAW_PANEL_GAL::UseColorScheme().

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(), LIB_CONTROL::AddSymbolToSchematic(), 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(), PCB_BASE_EDIT_FRAME::CreateNewLibrary(), KICAD_MANAGER_FRAME::CreateNewProject(), DIALOG_PLOT_SCHEMATIC::createPlotFileName(), DIALOG_SYMBOL_REMAP::createProjectSymbolLibTable(), FOOTPRINT_EDIT_FRAME::DeleteModuleFromLibrary(), 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_SYMBOL_REMAP::DIALOG_SYMBOL_REMAP(), LIB_VIEW_FRAME::DisplayLibInfos(), CVPCB_MAINFRAME::DisplayStatus(), PCB_EDIT_FRAME::doAutoSave(), KICAD_MANAGER_CONTROL::Execute(), PCB_EDIT_FRAME::Export_IDF3(), LIB_CONTROL::ExportSymbolAsSVG(), LIB_CONTROL::ExportView(), PCB_EDIT_FRAME::ExportVRML_File(), PCB_EDIT_FRAME::Files_io_from_id(), PCB_EDIT_FRAME::GenD356File(), 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(), SCH_EDIT_FRAME::LoadSheetFromFile(), DIALOG_DRC_CONTROL::makeValidFileNameReport(), DIALOG_FOOTPRINT_FP_EDITOR::On3DModelCellChanged(), DIALOG_FOOTPRINT_BOARD_EDITOR::On3DModelCellChanged(), FOOTPRINT_VIEWER_FRAME::OnActivate(), DIALOG_FOOTPRINT_FP_EDITOR::OnAdd3DModel(), DIALOG_FOOTPRINT_BOARD_EDITOR::OnAdd3DModel(), DIALOG_SCH_SHEET_PROPS::OnBrowseClicked(), KICAD_MANAGER_FRAME::OnBrowseInFileExplorer(), DIALOG_DRC_CONTROL::OnButtonBrowseRptFileClick(), 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_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(), MODULE_EDITOR_TOOLS::PasteFootprint(), PCB_BASE_EDIT_FRAME::PCB_BASE_EDIT_FRAME(), SCH_DRAWING_TOOLS::PlaceComponent(), DIALOG_CHOOSE_COMPONENT::PopulateFootprintSelector(), SCH_EDIT_FRAME::Print(), SCH_EDIT_FRAME::PrintPage(), 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_EDIT_FRAME::RescueLegacyProject(), SCH_EDIT_FRAME::RescueSymbolLibTableProject(), FOOTPRINT_EDIT_FRAME::restoreLastFootprint(), FOOTPRINT_EDIT_FRAME::retainLastFootprint(), 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(), KICAD_MANAGER_FRAME::SetProjectFileName(), EE_INSPECTION_TOOL::ShowDatasheet(), DIALOG_CHOOSE_COMPONENT::ShowFootprintFor(), 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(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::TransferDataFromWindow(), NETLIST_DIALOG::TransferDataFromWindow(), DIALOG_FOOTPRINT_FP_EDITOR::TransferDataToWindow(), DIALOG_FOOTPRINT_BOARD_EDITOR::TransferDataToWindow(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::UpdateFieldsFromLibrary(), SIM_PLOT_FRAME::updateNetlistExporter(), SCH_SCREEN::UpdateSymbolLinks(), 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 1344 of file dialog_pad_properties.cpp.

1345 {
1348 
1349  // The layer used to place primitive items selected when editing custom pad shapes
1350  // we use here a layer never used in a pad:
1351  #define SELECTED_ITEMS_LAYER Dwgs_User
1352 
1354  KIGFX::PCB_RENDER_SETTINGS* settings =
1355  static_cast<KIGFX::PCB_RENDER_SETTINGS*>( view->GetPainter()->GetSettings() );
1357 
1358  view->Update( m_dummyPad );
1359 
1360  // delete previous items if highlight list
1361  while( m_highlight.size() )
1362  {
1363  delete m_highlight.back(); // the dtor also removes item from view
1364  m_highlight.pop_back();
1365  }
1366 
1367  // highlight selected primitives:
1368  long select = m_listCtrlPrimitives->GetFirstSelected();
1369 
1370  while( select >= 0 )
1371  {
1372  PAD_CS_PRIMITIVE& primitive = m_primitives[select];
1373 
1374  DRAWSEGMENT* dummySegment = new DRAWSEGMENT;
1375  dummySegment->SetLayer( SELECTED_ITEMS_LAYER );
1376  primitive.ExportTo( dummySegment );
1377  dummySegment->Rotate( wxPoint( 0, 0), m_dummyPad->GetOrientation() );
1378  dummySegment->Move( m_dummyPad->GetPosition() );
1379 
1380  // Update selected primitive (highlight selected)
1381  switch( primitive.m_Shape )
1382  {
1383  case S_SEGMENT:
1384  case S_ARC:
1385  case S_CURVE:
1386  break;
1387 
1388  case S_CIRCLE: // ring or circle
1389  if( primitive.m_Thickness == 0 ) // filled circle
1390  { // the filled circle option does not exist in a DRAWSEGMENT
1391  // but it is easy to create it with a circle having the
1392  // right radius and outline width
1393  wxPoint end = dummySegment->GetCenter();
1394  end.x += primitive.m_Radius / 2;
1395  dummySegment->SetEnd( end );
1396  dummySegment->SetWidth( primitive.m_Radius );
1397  }
1398  break;
1399 
1400  case S_POLYGON:
1401  break;
1402 
1403  default:
1404  delete dummySegment;
1405  dummySegment = nullptr;
1406  break;
1407  }
1408 
1409  if( dummySegment )
1410  {
1411  view->Add( dummySegment );
1412  m_highlight.push_back( dummySegment );
1413  }
1414 
1415  select = m_listCtrlPrimitives->GetNextSelected( select );
1416  }
1417 
1418  BOX2I bbox = m_dummyPad->ViewBBox();
1419 
1420  if( bbox.GetSize().x > 0 && bbox.GetSize().y > 0 )
1421  {
1422  // gives a size to the full drawable area
1423  BOX2I drawbox;
1424  drawbox.Move( m_dummyPad->GetPosition() );
1425  drawbox.Inflate( bbox.GetSize().x * 2, bbox.GetSize().y * 2 );
1426 
1427  view->SetBoundary( drawbox );
1428 
1429  // Autozoom
1430  view->SetViewport( BOX2D( bbox.GetOrigin(), bbox.GetSize() ) );
1431 
1432  // Add a margin
1433  view->SetScale( m_panelShowPadGal->GetView()->GetScale() * 0.7 );
1434 
1437  }
1438 }
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:61
virtual const BOX2I ViewBBox() const override
Function ViewBBox() returns the bounding box of the item covering all its layers.
Definition: class_pad.cpp:1439
int m_Radius
thickness of segment or outline For filled S_CIRCLE shape, thickness = 0.
Definition: class_pad.h:96
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:89
void SetLayerColor(int aLayer, const COLOR4D &aColor)
Function SetLayerColor Changes the color used to draw a layer.
Definition: painter.h:232
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:92
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:93
virtual RENDER_SETTINGS * GetSettings()=0
Function GetSettings 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:422
#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:241
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 237 of file dialog_shim.cpp.

238 {
239  const char* hash_key;
240 
241  if( m_hash_key.size() )
242  {
243  // a special case like EDA_LIST_DIALOG, which has multiple uses.
244  hash_key = m_hash_key.c_str();
245  }
246  else
247  {
248  hash_key = typeid(*this).name();
249  }
250 
251  RECT_MAP::iterator it = class_map.find( hash_key );
252 
253  if( it == class_map.end() )
254  return;
255 
256  EDA_RECT rect = it->second;
257  rect.SetSize( 0, 0 );
258  class_map[ hash_key ] = rect;
259 }
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_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_SCH_SHEET_PROPS::DIALOG_SCH_SHEET_PROPS(), 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_NON_COPPER_ZONES_EDITOR::TransferDataToWindow(), DIALOG_KEEPOUT_AREA_PROPERTIES::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(), 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 1134 of file dialog_pad_properties.cpp.

1135 {
1136  LSET cu_set = layer_mask & LSET::AllCuMask();
1137 
1138  if( cu_set == LSET( F_Cu ) )
1139  m_rbCopperLayersSel->SetSelection( 0 );
1140  else if( cu_set == LSET( B_Cu ) )
1141  m_rbCopperLayersSel->SetSelection( 1 );
1142  else if( cu_set.any() )
1143  m_rbCopperLayersSel->SetSelection( 2 );
1144  else
1145  m_rbCopperLayersSel->SetSelection( 3 );
1146 
1147  m_PadLayerAdhCmp->SetValue( layer_mask[F_Adhes] );
1148  m_PadLayerAdhCu->SetValue( layer_mask[B_Adhes] );
1149 
1150  m_PadLayerPateCmp->SetValue( layer_mask[F_Paste] );
1151  m_PadLayerPateCu->SetValue( layer_mask[B_Paste] );
1152 
1153  m_PadLayerSilkCmp->SetValue( layer_mask[F_SilkS] );
1154  m_PadLayerSilkCu->SetValue( layer_mask[B_SilkS] );
1155 
1156  m_PadLayerMaskCmp->SetValue( layer_mask[F_Mask] );
1157  m_PadLayerMaskCu->SetValue( layer_mask[B_Mask] );
1158 
1159  m_PadLayerECO1->SetValue( layer_mask[Eco1_User] );
1160  m_PadLayerECO2->SetValue( layer_mask[Eco2_User] );
1161 
1162  m_PadLayerDraft->SetValue( layer_mask[Dwgs_User] );
1163 }
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:686
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 151 of file dialog_shim.cpp.

152 {
153  wxSize sz( x, y );
154  SetSize( ConvertDialogToPixels( sz ) );
155 }

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 178 of file dialog_shim.cpp.

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

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

◆ 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 1456 of file dialog_pad_properties.cpp.

1457 {
1458  BOARD_COMMIT commit( m_parent );
1459 
1460  if( !wxDialog::TransferDataFromWindow() )
1461  return false;
1462 
1463  if( !m_panelGeneral->TransferDataFromWindow() )
1464  return false;
1465 
1466  if( !m_localSettingsPanel->TransferDataFromWindow() )
1467  return false;
1468 
1469  if( !padValuesOK() )
1470  return false;
1471 
1472  int isign = m_isFlipped ? -1 : 1;
1473 
1475  // m_padMaster is a pattern: ensure there is no net for this pad:
1477 
1478  if( !m_currentPad ) // Set current Pad parameters
1479  return true;
1480 
1481  commit.Modify( m_currentPad );
1482 
1483  // redraw the area where the pad was, without pad (delete pad on screen)
1485  m_parent->GetCanvas()->Refresh();
1487 
1488  // Update values
1492 
1493  wxSize size;
1494  MODULE* footprint = m_currentPad->GetParent();
1495 
1496  if( footprint )
1497  {
1498  footprint->SetLastEditTime();
1499 
1500  // compute the pos 0 value, i.e. pad position for footprint with orientation = 0
1501  // i.e. relative to footprint origin (footprint position)
1502  wxPoint pt = m_currentPad->GetPosition() - footprint->GetPosition();
1503  RotatePoint( &pt, -footprint->GetOrientation() );
1504  m_currentPad->SetPos0( pt );
1506  + footprint->GetOrientation() );
1507  }
1508 
1510 
1511  size = m_padMaster->GetDelta();
1512  size.y *= isign;
1513  m_currentPad->SetDelta( size );
1514 
1517 
1518  wxPoint offset = m_padMaster->GetOffset();
1519  offset.y *= isign;
1520  m_currentPad->SetOffset( offset );
1521 
1523 
1526 
1527 
1530 
1531  if( m_isFlipped )
1532  {
1535  }
1536 
1538 
1539  if( m_isFlipped )
1540  {
1542  }
1543 
1545 
1546  int padNetcode = NETINFO_LIST::UNCONNECTED;
1547 
1548  // For PAD_ATTRIB_HOLE_NOT_PLATED, ensure there is no net name selected
1550  padNetcode = m_PadNetSelector->GetSelectedNetcode();
1551 
1552  m_currentPad->SetNetCode( padNetcode );
1563 
1564  // rounded rect pads with radius ratio = 0 are in fact rect pads.
1565  // So set the right shape (and perhaps issues with a radius = 0)
1568  {
1570  }
1571 
1572  // Set the fabrication property:
1574 
1575  // define the way the clearance area is defined in zones
1577 
1578  if( footprint )
1579  footprint->CalculateBoundingBox();
1580 
1582 
1583  // redraw the area where the pad was
1584  m_parent->GetCanvas()->Refresh();
1585 
1586  commit.Push( _( "Modify pad" ) );
1587 
1588  return true;
1589 }
int GetLocalSolderMaskMargin() const
Definition: class_pad.h:457
double GetOrientation() const
Definition: class_module.h:215
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:478
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:247
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:455
void SetPosition(const wxPoint &aPos) override
Definition: class_pad.h:240
int GetSelectedNetcode()
void SetDrillSize(const wxSize &aSize)
Definition: class_pad.h:305
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:683
int GetThermalGap() const
Definition: class_pad.cpp:747
int GetLocalClearance() const
Definition: class_pad.h:460
PAD_ATTR_T GetAttribute() const
Definition: class_pad.h:445
int GetChamferPositions() const
has meaning only for chamfered rect pads
Definition: class_pad.h:720
void SetAnchorPadShape(PAD_SHAPE_T aShape)
Function SetAnchorPadShape Set the shape of the anchor pad for custm shped pads.
Definition: class_pad.h:274
const std::vector< PAD_CS_PRIMITIVE > & GetPrimitives() const
Accessor to the basic shape list.
Definition: class_pad.h:369
void SetFlags(STATUS_FLAGS aMask)
Definition: base_struct.h:255
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:187
void SetPos0(const wxPoint &aPos)
Definition: class_pad.h:293
const wxPoint & GetOffset() const
Definition: class_pad.h:309
ZONE_CONNECTION GetZoneConnection() const
Definition: class_pad.cpp:725
PAD_DRILL_SHAPE_T GetDrillShape() const
Definition: class_pad.h:428
double GetChamferRectRatio() const
has meaning only for chamfered rect pads
Definition: class_pad.h:697
int GetThermalWidth() const
Definition: class_pad.cpp:736
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:442
void SetLastEditTime(timestamp_t aTime)
Definition: class_module.h:347
void SetThermalWidth(int aWidth)
Definition: class_pad.h:538
const wxString & GetName() const
Definition: class_pad.h:203
void SetSize(const wxSize &aSize)
Definition: class_pad.h:299
bool SetNetCode(int aNetCode, bool aNoAssert=false)
Sets net using a net code.
void SetZoneConnection(ZONE_CONNECTION aType)
Definition: class_pad.h:526
void SetPadToDieLength(int aLength)
Definition: class_pad.h:454
const wxSize & GetDelta() const
Definition: class_pad.h:303
void SetAttribute(PAD_ATTR_T aAttribute)
Definition: class_pad.cpp:423
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:461
MODULE * GetParent() const
Definition: class_pad.h:167
void SetLocalSolderPasteMarginRatio(double aRatio)
Definition: class_pad.h:467
CUST_PAD_SHAPE_IN_ZONE GetCustomShapeInZoneOpt() const
Definition: class_pad.h:253
void SetLayerSet(LSET aLayerMask)
Definition: class_pad.h:441
void SetDrillShape(PAD_DRILL_SHAPE_T aDrillShape)
Definition: class_pad.h:426
void SetLocalSolderMaskMargin(int aMargin)
Definition: class_pad.h:458
#define _(s)
Definition: 3d_actions.cpp:31
double GetOrientation() const
Function GetOrientation returns the rotation angle of the pad in tenths of degrees,...
Definition: class_pad.h:422
const wxSize & GetDrillSize() const
Definition: class_pad.h:306
void SetShape(PAD_SHAPE_T aShape)
Definition: class_pad.h:238
void SetOrientation(double aAngle)
Function SetOrientation sets the rotation angle of the pad.
Definition: class_pad.cpp:438
double GetRoundRectRadiusRatio() const
has meaning only for rounded rect pads
Definition: class_pad.h:671
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: base_struct.h:256
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:708
void SetLocalSolderPasteMargin(int aMargin)
Definition: class_pad.h:464
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:263
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:237
const wxSize & GetSize() const
Definition: class_pad.h:300
void SetProperty(PAD_PROP_T aProperty)
Definition: class_pad.cpp:432
const wxPoint GetPosition() const override
Definition: class_pad.h:241
int GetLocalSolderPasteMargin() const
Definition: class_pad.h:463
void SetOffset(const wxPoint &aOffset)
Definition: class_pad.h:308
void SetThermalGap(int aGap)
Definition: class_pad.h:541
static const int UNCONNECTED
Constant that holds the "unconn