138 _(
"Numerals (0,1,2,...,9,10)" ),
142 _(
"Hexadecimal (0,1,...,F,10,...)" ),
146 _(
"Alphabet, minus IOSQXZ" ),
150 _(
"Alphabet, full 26 characters" ),
155 std::unique_ptr<ARRAY_OPTIONS>& aSettings,
156 bool aIsFootprintEditor,
const VECTOR2I& aOrigPos ) :
159 m_settings( aSettings ),
160 m_originalItemPosition( aOrigPos ), m_isFootprintEditor( aIsFootprintEditor ),
161 m_hSpacing( aParent, m_labelDx, m_entryDx, m_unitLabelDx ),
162 m_vSpacing( aParent, m_labelDy, m_entryDy, m_unitLabelDy ),
163 m_hOffset( aParent, m_labelOffsetX, m_entryOffsetX, m_unitLabelOffsetX ),
164 m_vOffset( aParent, m_labelOffsetY, m_entryOffsetY, m_unitLabelOffsetY ),
165 m_hCentre( aParent, m_labelCentreX, m_entryCentreX, m_unitLabelCentreX ),
166 m_vCentre( aParent, m_labelCentreY, m_entryCentreY, m_unitLabelCentreY ),
167 m_circAngle( aParent, m_labelCircAngle, m_entryCircAngle, m_unitLabelCircAngle ),
181 const wxString label = wxGetTranslation( numData.m_label );
182 void* clientData = (
void*) &numData;
249 SetMinSize( GetSize() );
275 wxCHECK( pickerTool, );
291 wxFAIL_MSG(
"Unknown event source" );
333static bool validateLongEntry(
const wxTextEntry& entry,
long& dest,
const wxString& description,
334 wxArrayString& errors )
338 if( !entry.GetValue().ToLong( &dest ) )
341 err.Printf(
_(
"Bad numeric value for %s: %s" ), description, entry.GetValue() );
361 const wxTextCtrl& aStepEntry,
ARRAY_AXIS& aAxis,
362 wxArrayString& errors )
364 void* clientData = typeEntry.GetClientData( typeEntry.GetSelection() );
367 wxCHECK_MSG( numberingData,
false, wxT(
"Failed to get client data from list control." ) );
371 const wxString
text = offsetEntry.GetValue();
377 errors.Add( wxString::Format(
_(
"Could not determine numbering start from '%s': "
378 "expected value consistent with alphabet '%s'." ),
396 std::cout <<
"DIALOG_CREATE_ARRAY::TransferDataFromWindow()" << std::endl;
397 std::unique_ptr<ARRAY_OPTIONS> newSettings;
399 wxArrayString errors;
404 auto newGrid = std::make_unique<ARRAY_GRID_OPTIONS>();
432 if( newGrid->GetNumberingStartIsSpecified() )
440 newGrid->m_pri_axis, errors );
442 if( newGrid->m_2dArrayNumbering )
447 newGrid->m_sec_axis, errors );
455 newGrid->m_2dArrayNumbering =
false;
457 newGrid->m_pri_axis.SetOffset( 1 );
463 newSettings = std::move( newGrid );
467 auto newCirc = std::make_unique<ARRAY_CIRCULAR_OPTIONS>();
484 if( newCirc->GetNumberingStartIsSpecified() )
493 newCirc->m_axis.SetOffset( 1 );
499 newSettings = std::move( newCirc );
521 if( errors.IsEmpty() )
522 errorStr =
_(
"Bad parameters");
524 errorStr = wxJoin( errors,
'\n' );
526 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)
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
@ 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 OnParameterChanged(wxCommandEvent &event) override
void calculateCircularArrayProperties()
std::unique_ptr< ARRAY_OPTIONS > & m_settings
The settings to re-seat on dialog OK.
void UpdatePickedItem(const EDA_ITEM *aItem) override
void UpdatePickedPoint(const std::optional< VECTOR2I > &aPoint) override
void OnSelectCenterButton(wxCommandEvent &event) override
void setControlEnablement()
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)
Function DoubleValueFromString converts 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
Local mapping for list-box <-> numbering type.
ARRAY_AXIS::NUMBERING_TYPE m_numbering_type