302 lines
12 KiB
Python
302 lines
12 KiB
Python
from PyQt6 import QtWidgets
|
|
|
|
from appGUI.GUIElements import FCSpinner, FCDoubleSpinner, FCComboBox, FCLabel, RadioSet, NumericalEvalTupleEntry, \
|
|
GLay, FCFrame
|
|
from appGUI.preferences.OptionsGroupUI import OptionsGroupUI
|
|
|
|
import gettext
|
|
import appTranslation as fcTranslate
|
|
import builtins
|
|
|
|
fcTranslate.apply_language('strings')
|
|
if '_' not in builtins.__dict__:
|
|
_ = gettext.gettext
|
|
|
|
|
|
class GerberEditorPrefGroupUI(OptionsGroupUI):
|
|
def __init__(self, app, parent=None):
|
|
# OptionsGroupUI.__init__(self, "Gerber Adv. Options Preferences", parent=parent)
|
|
super(GerberEditorPrefGroupUI, self).__init__(self, parent=parent)
|
|
|
|
self.setTitle(str(_("Editor")))
|
|
self.decimals = app.decimals
|
|
self.options = app.options
|
|
|
|
# #############################################################################################################
|
|
# Gerber Editor Parameters Frame
|
|
# #############################################################################################################
|
|
|
|
self.param_label = FCLabel('%s' % _("Parameters"), color='blue', bold=True)
|
|
self.param_label.setToolTip(
|
|
_("A list of Gerber Editor parameters.")
|
|
)
|
|
self.layout.addWidget(self.param_label)
|
|
|
|
par_frame = FCFrame()
|
|
self.layout.addWidget(par_frame)
|
|
|
|
param_grid = GLay(v_spacing=5, h_spacing=3)
|
|
par_frame.setLayout(param_grid)
|
|
|
|
# Selection Limit
|
|
self.sel_limit_label = FCLabel('%s:' % _("Selection limit"))
|
|
self.sel_limit_label.setToolTip(
|
|
_("Set the number of selected Gerber geometry\n"
|
|
"items above which the utility geometry\n"
|
|
"becomes just a selection rectangle.\n"
|
|
"Increases the performance when moving a\n"
|
|
"large number of geometric elements.")
|
|
)
|
|
self.sel_limit_entry = FCSpinner()
|
|
self.sel_limit_entry.set_range(0, 10000)
|
|
|
|
param_grid.addWidget(self.sel_limit_label, 0, 0)
|
|
param_grid.addWidget(self.sel_limit_entry, 0, 1)
|
|
|
|
# New aperture code
|
|
self.addcode_entry_lbl = FCLabel('%s:' % _('New Aperture code'))
|
|
self.addcode_entry_lbl.setToolTip(
|
|
_("Code for the new aperture")
|
|
)
|
|
|
|
self.addcode_entry = FCSpinner()
|
|
self.addcode_entry.set_range(10, 99)
|
|
self.addcode_entry.setWrapping(True)
|
|
|
|
param_grid.addWidget(self.addcode_entry_lbl, 2, 0)
|
|
param_grid.addWidget(self.addcode_entry, 2, 1)
|
|
|
|
# New aperture size
|
|
self.addsize_entry_lbl = FCLabel('%s:' % _('New Aperture size'))
|
|
self.addsize_entry_lbl.setToolTip(
|
|
_("Size for the new aperture")
|
|
)
|
|
|
|
self.addsize_entry = FCDoubleSpinner()
|
|
self.addsize_entry.set_range(0, 100)
|
|
self.addsize_entry.set_precision(self.decimals)
|
|
|
|
param_grid.addWidget(self.addsize_entry_lbl, 4, 0)
|
|
param_grid.addWidget(self.addsize_entry, 4, 1)
|
|
|
|
# New aperture type
|
|
self.addtype_combo_lbl = FCLabel('%s:' % _('New Aperture type'))
|
|
self.addtype_combo_lbl.setToolTip(
|
|
_("Type for the new aperture.\n"
|
|
"Can be 'C', 'R' or 'O'.")
|
|
)
|
|
|
|
self.addtype_combo = FCComboBox()
|
|
self.addtype_combo.addItems(['C', 'R', 'O'])
|
|
|
|
param_grid.addWidget(self.addtype_combo_lbl, 6, 0)
|
|
param_grid.addWidget(self.addtype_combo, 6, 1)
|
|
|
|
# Number of pads in a pad array
|
|
self.grb_array_size_label = FCLabel('%s:' % _('Nr of pads'))
|
|
self.grb_array_size_label.setToolTip(
|
|
_("Specify how many pads to be in the array.")
|
|
)
|
|
|
|
self.grb_array_size_entry = FCSpinner()
|
|
self.grb_array_size_entry.set_range(0, 10000)
|
|
|
|
param_grid.addWidget(self.grb_array_size_label, 8, 0)
|
|
param_grid.addWidget(self.grb_array_size_entry, 8, 1)
|
|
|
|
self.adddim_label = FCLabel('%s:' % _('Aperture Dimensions'))
|
|
self.adddim_label.setToolTip(
|
|
_("Diameters of the tools, separated by comma.\n"
|
|
"The value of the diameter has to use the dot decimals separator.\n"
|
|
"Valid values: 0.3, 1.0")
|
|
)
|
|
self.adddim_entry = NumericalEvalTupleEntry(border_color='#0069A9')
|
|
|
|
param_grid.addWidget(self.adddim_label, 10, 0)
|
|
param_grid.addWidget(self.adddim_entry, 10, 1)
|
|
|
|
# #############################################################################################################
|
|
# Linear Pad Array Frame
|
|
# #############################################################################################################
|
|
self.grb_array_linear_label = FCLabel('%s' % _("Linear Pad Array"), color='brown', bold=True)
|
|
self.layout.addWidget(self.grb_array_linear_label)
|
|
|
|
lin_frame = FCFrame()
|
|
self.layout.addWidget(lin_frame)
|
|
|
|
# ## Grid Layout
|
|
lin_grid = GLay(v_spacing=5, h_spacing=3)
|
|
lin_frame.setLayout(lin_grid)
|
|
|
|
# Linear Pad Array direction
|
|
self.grb_axis_label = FCLabel('%s:' % _('Linear Direction'))
|
|
self.grb_axis_label.setToolTip(
|
|
_("Direction on which the linear array is oriented:\n"
|
|
"- 'X' - horizontal axis \n"
|
|
"- 'Y' - vertical axis or \n"
|
|
"- 'Angle' - a custom angle for the array inclination")
|
|
)
|
|
|
|
self.grb_axis_radio = RadioSet([{'label': _('X'), 'value': 'X'},
|
|
{'label': _('Y'), 'value': 'Y'},
|
|
{'label': _('Angle'), 'value': 'A'}])
|
|
|
|
lin_grid.addWidget(self.grb_axis_label, 0, 0)
|
|
lin_grid.addWidget(self.grb_axis_radio, 0, 1)
|
|
|
|
# Linear Pad Array pitch distance
|
|
self.grb_pitch_label = FCLabel('%s:' % _('Pitch'))
|
|
self.grb_pitch_label.setToolTip(
|
|
_("Pitch = Distance between elements of the array.")
|
|
)
|
|
# self.drill_pitch_label.setMinimumWidth(100)
|
|
self.grb_pitch_entry = FCDoubleSpinner()
|
|
self.grb_pitch_entry.set_precision(self.decimals)
|
|
|
|
lin_grid.addWidget(self.grb_pitch_label, 2, 0)
|
|
lin_grid.addWidget(self.grb_pitch_entry, 2, 1)
|
|
|
|
# Linear Pad Array custom angle
|
|
self.grb_angle_label = FCLabel('%s:' % _('Angle'))
|
|
self.grb_angle_label.setToolTip(
|
|
_("Angle at which each element in circular array is placed.")
|
|
)
|
|
self.grb_angle_entry = FCDoubleSpinner()
|
|
self.grb_angle_entry.set_precision(self.decimals)
|
|
self.grb_angle_entry.set_range(-360, 360)
|
|
self.grb_angle_entry.setSingleStep(5)
|
|
|
|
lin_grid.addWidget(self.grb_angle_label, 4, 0)
|
|
lin_grid.addWidget(self.grb_angle_entry, 4, 1)
|
|
|
|
# #############################################################################################################
|
|
# Circular Pad Array Frame
|
|
# #############################################################################################################
|
|
self.grb_array_circ_label = FCLabel('%s' % _("Circular Pad Array"), color='green', bold=True)
|
|
self.layout.addWidget(self.grb_array_circ_label)
|
|
|
|
circ_frame = FCFrame()
|
|
self.layout.addWidget(circ_frame)
|
|
|
|
# ## Grid Layout
|
|
circ_grid = GLay(v_spacing=5, h_spacing=3)
|
|
circ_frame.setLayout(circ_grid)
|
|
|
|
# Circular Pad Array direction
|
|
self.grb_circular_direction_label = FCLabel('%s:' % _('Circular Direction'))
|
|
self.grb_circular_direction_label.setToolTip(
|
|
_("Direction for circular array.\n"
|
|
"Can be CW = clockwise or CCW = counter clockwise.")
|
|
)
|
|
|
|
self.grb_circular_dir_radio = RadioSet([{'label': _('CW'), 'value': 'CW'},
|
|
{'label': _('CCW'), 'value': 'CCW'}])
|
|
|
|
circ_grid.addWidget(self.grb_circular_direction_label, 0, 0)
|
|
circ_grid.addWidget(self.grb_circular_dir_radio, 0, 1)
|
|
|
|
# Circular Pad Array Angle
|
|
self.grb_circular_angle_label = FCLabel('%s:' % _('Circular Angle'))
|
|
self.grb_circular_angle_label.setToolTip(
|
|
_("Angle at which each element in circular array is placed.")
|
|
)
|
|
self.grb_circular_angle_entry = FCDoubleSpinner()
|
|
self.grb_circular_angle_entry.set_precision(self.decimals)
|
|
self.grb_circular_angle_entry.set_range(-360, 360)
|
|
|
|
self.grb_circular_angle_entry.setSingleStep(5)
|
|
|
|
circ_grid.addWidget(self.grb_circular_angle_label, 2, 0)
|
|
circ_grid.addWidget(self.grb_circular_angle_entry, 2, 1)
|
|
|
|
# #############################################################################################################
|
|
# Buffer Frame
|
|
# #############################################################################################################
|
|
self.grb_array_tools_b_label = FCLabel('%s' % _("Buffer Tool"), color='darkorange', bold=True)
|
|
self.layout.addWidget(self.grb_array_tools_b_label)
|
|
|
|
buff_frame = FCFrame()
|
|
self.layout.addWidget(buff_frame)
|
|
|
|
# ## Grid Layout
|
|
buf_grid = GLay(v_spacing=5, h_spacing=3)
|
|
buff_frame.setLayout(buf_grid)
|
|
|
|
# Buffer Distance
|
|
self.grb_buff_label = FCLabel('%s:' % _('Buffer distance'))
|
|
self.grb_buff_label.setToolTip(
|
|
_("Distance at which to buffer the Gerber element.")
|
|
)
|
|
self.grb_buff_entry = FCDoubleSpinner()
|
|
self.grb_buff_entry.set_precision(self.decimals)
|
|
self.grb_buff_entry.set_range(-10000, 10000)
|
|
|
|
buf_grid.addWidget(self.grb_buff_label, 0, 0)
|
|
buf_grid.addWidget(self.grb_buff_entry, 0, 1)
|
|
|
|
# #############################################################################################################
|
|
# Scale Frame
|
|
# #############################################################################################################
|
|
self.grb_array_tools_s_label = FCLabel('%s' % _("Scale Tool"), color='magenta', bold=True)
|
|
self.layout.addWidget(self.grb_array_tools_s_label)
|
|
|
|
scale_frame = FCFrame()
|
|
self.layout.addWidget(scale_frame)
|
|
|
|
# ## Grid Layout
|
|
scale_grid = GLay(v_spacing=5, h_spacing=3)
|
|
scale_frame.setLayout(scale_grid)
|
|
|
|
# Scale Factor
|
|
self.grb_scale_label = FCLabel('%s:' % _('Scale factor'))
|
|
self.grb_scale_label.setToolTip(
|
|
_("Factor to scale the Gerber element.")
|
|
)
|
|
self.grb_scale_entry = FCDoubleSpinner()
|
|
self.grb_scale_entry.set_precision(self.decimals)
|
|
self.grb_scale_entry.set_range(0, 10000)
|
|
|
|
scale_grid.addWidget(self.grb_scale_label, 0, 0)
|
|
scale_grid.addWidget(self.grb_scale_entry, 0, 1)
|
|
|
|
# #############################################################################################################
|
|
# Mark Area Frame
|
|
# #############################################################################################################
|
|
self.grb_array_tools_ma_label = FCLabel('%s' % _("Mark Area Tool"), color='blue', bold=True)
|
|
self.layout.addWidget(self.grb_array_tools_ma_label)
|
|
|
|
ma_frame = FCFrame()
|
|
self.layout.addWidget(ma_frame)
|
|
|
|
# ## Grid Layout
|
|
ma_grid = GLay(v_spacing=5, h_spacing=3)
|
|
ma_frame.setLayout(ma_grid)
|
|
|
|
# Mark area Tool low threshold
|
|
self.grb_ma_low_label = FCLabel('%s:' % _('Threshold low'))
|
|
self.grb_ma_low_label.setToolTip(
|
|
_("Threshold value under which the apertures are not marked.")
|
|
)
|
|
self.grb_ma_low_entry = FCDoubleSpinner()
|
|
self.grb_ma_low_entry.set_precision(self.decimals)
|
|
self.grb_ma_low_entry.set_range(0, 10000)
|
|
|
|
ma_grid.addWidget(self.grb_ma_low_label, 0, 0)
|
|
ma_grid.addWidget(self.grb_ma_low_entry, 0, 1)
|
|
|
|
# Mark area Tool high threshold
|
|
self.grb_ma_high_label = FCLabel('%s:' % _('Threshold high'))
|
|
self.grb_ma_high_label.setToolTip(
|
|
_("Threshold value over which the apertures are not marked.")
|
|
)
|
|
self.grb_ma_high_entry = FCDoubleSpinner()
|
|
self.grb_ma_high_entry.set_precision(self.decimals)
|
|
self.grb_ma_high_entry.set_range(0, 10000)
|
|
|
|
ma_grid.addWidget(self.grb_ma_high_label, 2, 0)
|
|
ma_grid.addWidget(self.grb_ma_high_entry, 2, 1)
|
|
|
|
GLay.set_common_column_size([param_grid, lin_grid, circ_grid, buf_grid, scale_grid, ma_grid], 0)
|
|
|
|
self.layout.addStretch()
|