33#include <boost/algorithm/string/join.hpp>
133 _(
"Numerals (0,1,2,...,9,10)" ),
137 _(
"Hexadecimal (0,1,...,F,10,...)" ),
141 _(
"Alphabet, minus IOSQXZ" ),
145 _(
"Alphabet, full 26 characters" ),
150 std::unique_ptr<ARRAY_OPTIONS>& aSettings,
151 bool aIsFootprintEditor,
const VECTOR2I& aOrigPos ) :
153 m_settings( aSettings ),
154 m_originalItemPosition( aOrigPos ),
155 m_isFootprintEditor( aIsFootprintEditor ),
156 m_hSpacing( aParent, m_labelDx, m_entryDx, m_unitLabelDx ),
157 m_vSpacing( aParent, m_labelDy, m_entryDy, m_unitLabelDy ),
158 m_hOffset( aParent, m_labelOffsetX, m_entryOffsetX, m_unitLabelOffsetX ),
159 m_vOffset( aParent, m_labelOffsetY, m_entryOffsetY, m_unitLabelOffsetY ),
160 m_hCentre( aParent, m_labelCentreX, m_entryCentreX, m_unitLabelCentreX ),
161 m_vCentre( aParent, m_labelCentreY, m_entryCentreY, m_unitLabelCentreY ),
162 m_circRadius( aParent, m_labelCircRadius, m_valueCircRadius, m_unitLabelCircRadius ),
163 m_circAngle( aParent, m_labelCircAngle, m_entryCircAngle, m_unitLabelCircAngle ),
177 const wxString label = wxGetTranslation( numData.m_label );
178 void* clientData = (
void*) &numData;
241 SetMinSize( GetSize() );
261static bool validateLongEntry(
const wxTextEntry& entry,
long& dest,
const wxString& description,
262 wxArrayString& errors )
266 if( !entry.GetValue().ToLong( &dest ) )
269 err.Printf(
_(
"Bad numeric value for %s: %s" ), description, entry.GetValue() );
289 const wxTextCtrl& aStepEntry,
ARRAY_AXIS& aAxis,
290 wxArrayString& errors )
292 void* clientData = typeEntry.GetClientData( typeEntry.GetSelection() );
295 wxCHECK_MSG( numberingData,
false, wxT(
"Failed to get client data from list control." ) );
299 const wxString
text = offsetEntry.GetValue();
305 errors.Add( wxString::Format(
_(
"Could not determine numbering start from '%s': "
306 "expected value consistent with alphabet '%s'." ),
324 std::unique_ptr<ARRAY_OPTIONS> newSettings;
326 wxArrayString errors;
331 auto newGrid = std::make_unique<ARRAY_GRID_OPTIONS>();
357 if( newGrid->GetNumberingStartIsSpecified() )
365 newGrid->m_pri_axis, errors );
367 if( newGrid->m_2dArrayNumbering )
372 newGrid->m_sec_axis, errors );
380 newGrid->m_2dArrayNumbering =
false;
382 newGrid->m_pri_axis.SetOffset( 1 );
388 newSettings = std::move( newGrid );
392 auto newCirc = std::make_unique<ARRAY_CIRCULAR_OPTIONS>();
409 if( newCirc->GetNumberingStartIsSpecified() )
418 newCirc->m_axis.SetOffset( 1 );
424 newSettings = std::move( newCirc );
444 if( errors.IsEmpty() )
445 errorStr =
_(
"Bad parameters");
447 errorStr = boost::algorithm::join( errors, wxT(
"\n" ) );
449 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
wxRadioBox * m_radioBoxGridStaggerType
wxRadioBox * m_rbCircStartNumberingOpt
wxNotebook * m_gridTypeNotebook
wxPanel * m_gridPadNumberingPanel
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
wxStaticText * m_labelSecAxisNumbering
wxTextCtrl * m_entryCircNumberingStart
wxPanel * m_circularPanel
wxRadioButton * m_radioBtnKeepRefs
wxStaticText * m_labelGridNumberingOffset
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()
const VECTOR2I m_originalItemPosition
std::unique_ptr< ARRAY_OPTIONS > & m_settings
The settings to re-seat on dialog OK.
void setControlEnablement()
void SetupStandardButtons(std::map< int, wxString > aLabels={})
Base PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
virtual long long int GetValue()
Return the current value in Internal Units.
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 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.
T EuclideanNorm() const
Compute the Euclidean norm of the vector, which is defined as sqrt(x ** 2 + y ** 2).
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
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
long m_Grid2dArrayNumbering
Local mapping for list-box <-> numbering type.
ARRAY_AXIS::NUMBERING_TYPE m_numbering_type