104 _(
"Numerals (0,1,2,...,9,10)" ),
108 _(
"Hexadecimal (0,1,...,F,10,...)" ),
112 _(
"Alphabet, minus IOSQXZ" ),
116 _(
"Alphabet, full 26 characters" ),
121 std::unique_ptr<ARRAY_OPTIONS>& aSettings,
122 bool aIsFootprintEditor,
const VECTOR2I& aOrigPos ) :
125 m_settings( aSettings ),
126 m_originalItemPosition( aOrigPos ), m_isFootprintEditor( aIsFootprintEditor ),
127 m_hSpacing( aParent, m_labelDx, m_entryDx, m_unitLabelDx ),
128 m_vSpacing( aParent, m_labelDy, m_entryDy, m_unitLabelDy ),
129 m_hOffset( aParent, m_labelOffsetX, m_entryOffsetX, m_unitLabelOffsetX ),
130 m_vOffset( aParent, m_labelOffsetY, m_entryOffsetY, m_unitLabelOffsetY ),
131 m_hCentre( aParent, m_labelCentreX, m_entryCentreX, m_unitLabelCentreX ),
132 m_vCentre( aParent, m_labelCentreY, m_entryCentreY, m_unitLabelCentreY ),
133 m_circAngle( aParent, m_labelCircAngle, m_entryCircAngle, m_unitLabelCircAngle ),
147 const wxString label = wxGetTranslation( numData.m_label );
148 void* clientData = (
void*) &numData;
215 SetMinSize( GetSize() );
241 wxCHECK( pickerTool, );
257 wxFAIL_MSG(
"Unknown event source" );
269 const unsigned newAlphabet = aEvent.GetSelection();
276 wxTextCtrl* matchingTextCtrl =
nullptr;
285 wxCHECK( matchingTextCtrl, );
293 const bool isAlreadyOK = dummyAxis.
SetOffset( matchingTextCtrl->GetValue() );
337static bool validateLongEntry(
const wxTextEntry& entry,
long& dest,
const wxString& description,
338 wxArrayString& errors )
342 if( !entry.GetValue().ToLong( &dest ) )
345 err.Printf(
_(
"Bad numeric value for %s: %s" ), description, entry.GetValue() );
365 const wxTextCtrl& aStepEntry,
ARRAY_AXIS& aAxis,
366 wxArrayString& errors )
368 void* clientData = typeEntry.GetClientData( typeEntry.GetSelection() );
371 wxCHECK_MSG( numberingData,
false, wxT(
"Failed to get client data from list control." ) );
375 const wxString
text = offsetEntry.GetValue();
381 errors.Add( wxString::Format(
_(
"Could not determine numbering start from '%s': "
382 "expected value consistent with alphabet '%s'." ),
400 std::unique_ptr<ARRAY_OPTIONS> newSettings;
402 wxArrayString errors;
407 auto newGrid = std::make_unique<ARRAY_GRID_OPTIONS>();
435 if( newGrid->GetNumberingStartIsSpecified() )
443 newGrid->m_pri_axis, errors );
445 if( newGrid->m_2dArrayNumbering )
450 newGrid->m_sec_axis, errors );
458 newGrid->m_2dArrayNumbering =
false;
460 newGrid->m_pri_axis.SetOffset( 1 );
466 newSettings = std::move( newGrid );
470 auto newCirc = std::make_unique<ARRAY_CIRCULAR_OPTIONS>();
487 if( newCirc->GetNumberingStartIsSpecified() )
496 newCirc->m_axis.SetOffset( 1 );
502 newSettings = std::move( newCirc );
524 if( errors.IsEmpty() )
525 errorStr =
_(
"Bad parameters");
527 errorStr = wxJoin( errors,
'\n' );
529 wxMessageBox( errorStr );
constexpr EDA_IU_SCALE pcbIUScale
Class that contains information about a single array axis and the numbering of items along that axis.
bool SetOffset(const wxString &aOffsetName)
Set the axis start (as a string, which should decode to a valid index in the alphabet),...
wxString GetItemNumber(int n) const
Get the position number (name) for the n'th axis point.
static bool TypeIsNumeric(NUMBERING_TYPE type)
Check if a numbering type is a numeric type.
const wxString & GetAlphabet() const
Get the alphabet for the current numbering scheme.
void SetAxisType(NUMBERING_TYPE aType)
Set the axis numbering type.
@ NUMBERING_NUMERIC
Arabic numerals: 0,1,2,3,4,5,6,7,8,9,10,11...
@ NUMBERING_ALPHA_NO_IOSQXZ
Alphabet, excluding IOSQXZ.
@ NUMBERING_ALPHA_FULL
Full 26-character alphabet.
void SetStep(int aStep)
Set the skip between consecutive numbers (useful when doing a partial array, e.g.
Class DIALOG_CREATE_ARRAY_BASE.
wxRadioBox * m_radioBoxGridNumberingAxis
wxRadioBox * m_radioBoxGridNumberingScheme
wxCheckBox * m_entryRotateItemsCb
wxTextCtrl * m_entryGridSecNumberingOffset
wxChoice * m_choiceSecAxisNumbering
wxButton * m_btnSelectCenterItem
wxRadioBox * m_rbCircStartNumberingOpt
wxNotebook * m_gridTypeNotebook
wxPanel * m_gridPadNumberingPanel
wxButton * m_btnSelectCenterPoint
wxTextCtrl * m_entryGridPriNumberingOffset
wxTextCtrl * m_entryGridPriNumberingStep
wxPanel * m_circularPadNumberingPanel
wxRadioButton * m_radioBtnUniqueRefs
TEXT_CTRL_EVAL * m_entryCircCount
TEXT_CTRL_EVAL * m_entryNx
wxStaticText * m_labelPriAxisNumbering
wxTextCtrl * m_entryCircAngle
wxChoice * m_choicePriAxisNumbering
wxPanel * m_footprintReannotatePanel
wxRadioButton * m_staggerRows
wxCheckBox * m_checkBoxFullCircle
wxStaticText * m_labelSecAxisNumbering
wxTextCtrl * m_entryCircNumberingStart
wxPanel * m_circularPanel
wxRadioButton * m_radioBtnKeepRefs
wxStaticText * m_labelGridNumberingOffset
wxRadioButton * m_rbCentreOnSource
wxChoice * m_choiceCircNumbering
wxCheckBox * m_checkBoxGridReverseNumbering
TEXT_CTRL_EVAL * m_entryStagger
wxTextCtrl * m_entryGridSecNumberingStep
wxRadioBox * m_rbGridStartNumberingOpt
TEXT_CTRL_EVAL * m_entryNy
wxTextCtrl * m_entryCircNumberingStep
WIDGET_SAVE_RESTORE m_cfg_persister
DIALOG_CREATE_ARRAY(PCB_BASE_FRAME *aParent, std::unique_ptr< ARRAY_OPTIONS > &aOptions, bool enableNumbering, const VECTOR2I &aOrigPos)
Construct a new dialog.
bool TransferDataFromWindow() override
void OnSelectCenterButton(wxCommandEvent &aEvent) override
void calculateCircularArrayProperties()
std::unique_ptr< ARRAY_OPTIONS > & m_settings
The settings to re-seat on dialog OK.
void OnParameterChanged(wxCommandEvent &aEvent) override
void UpdatePickedItem(const EDA_ITEM *aItem) override
void UpdatePickedPoint(const std::optional< VECTOR2I > &aPoint) override
void setControlEnablement()
void OnAxisNumberingChange(wxCommandEvent &aEvent) override
bool Show(bool show) override
void SetupStandardButtons(std::map< int, wxString > aLabels={})
A base class for most all the KiCad significant classes used in schematics and boards.
virtual VECTOR2I GetPosition() const
static TOOL_ACTION selectPointInteractively
static TOOL_ACTION selectItemInteractively
Selection of reference points/items.
Base PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
virtual void SetUnits(EDA_UNITS aUnits)
Normally not needed (as the UNIT_BINDER inherits from the parent frame), but can be used to set to DE...
virtual void SetAngleValue(const EDA_ANGLE &aValue)
virtual void SetValue(long long int aValue)
Set new value (in Internal Units) for the text field, taking care of units conversion.
void SetCoordType(ORIGIN_TRANSFORMS::COORD_TYPES_T aCoordType)
Set the current origin transform mode.
static const std::vector< NUMBERING_LIST_DATA > numberingTypeData
List of type <--> name mappings (in order) for the numbering type list boxes.
static bool validateAxisOptions(const wxTextCtrl &offsetEntry, const wxChoice &typeEntry, const wxTextCtrl &aStepEntry, ARRAY_AXIS &aAxis, wxArrayString &errors)
Validates and saves (if valid) the type and offset of an array axis numbering.
static bool validateLongEntry(const wxTextEntry &entry, long &dest, const wxString &description, wxArrayString &errors)
Validate and save a long integer entry.
static CREATE_ARRAY_DIALOG_ENTRIES s_arrayOptions
static constexpr EDA_ANGLE ANGLE_90
KICOMMON_API double DoubleValueFromString(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnits, const wxString &aTextValue, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
Convert aTextValue to a double.
Struct containing the last-entered values for the dialog.
long m_GridPrimaryAxisStep
CREATE_ARRAY_DIALOG_ENTRIES()
Construct with some sensible defaults.
long m_GridSecondaryAxisStep
wxString m_GridPrimaryNumOffset
wxString m_GridSecondaryNumOffset
bool m_FootprintKeepAnnotations
bool m_FootprintReannotate
long m_GridSecondaryAxisScheme
bool m_CircRotatationStep
long m_GridPrimaryAxisScheme
wxString m_CircNumberingOffset
bool m_GridPositionCentreOnItems
long m_Grid2dArrayNumbering
constexpr int mmToIU(double mm) const
Local mapping for list-box <-> numbering type.
ARRAY_AXIS::NUMBERING_TYPE m_numbering_type