Files
flatcam-wsl/appGUI/preferences/tools/Tools2PunchGerberPrefGroupUI.py

254 lines
10 KiB
Python

from PyQt6 import QtWidgets
from appGUI.GUIElements import FCCheckBox, RadioSet, FCDoubleSpinner, FCLabel, FCGridLayout, 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 Tools2PunchGerberPrefGroupUI(OptionsGroupUI):
def __init__(self, app, parent=None):
super(Tools2PunchGerberPrefGroupUI, self).__init__(self, parent=parent)
self.setTitle(str(_("Punch Gerber Options")))
self.decimals = app.decimals
self.options = app.options
# #############################################################################################################
# Processed Pads Frame
# #############################################################################################################
self.padt_label = FCLabel('<span style="color:blue;"><b>%s</b></span>' % _("Processed Pads Type"))
self.padt_label.setToolTip(
_("The type of pads shape to be processed.\n"
"If the PCB has many SMD pads with rectangular pads,\n"
"disable the Rectangular aperture.")
)
self.layout.addWidget(self.padt_label)
param_frame = FCFrame()
self.layout.addWidget(param_frame)
param_grid = FCGridLayout(v_spacing=5, h_spacing=3)
param_frame.setLayout(param_grid)
# Circular Aperture Selection
self.circular_cb = FCCheckBox('%s' % _("Circular"))
self.circular_cb.setToolTip(
_("Process Circular Pads.")
)
param_grid.addWidget(self.circular_cb, 3, 0, 1, 2)
# Oblong Aperture Selection
self.oblong_cb = FCCheckBox('%s' % _("Oblong"))
self.oblong_cb.setToolTip(
_("Process Oblong Pads.")
)
param_grid.addWidget(self.oblong_cb, 4, 0, 1, 2)
# Square Aperture Selection
self.square_cb = FCCheckBox('%s' % _("Square"))
self.square_cb.setToolTip(
_("Process Square Pads.")
)
param_grid.addWidget(self.square_cb, 5, 0, 1, 2)
# Rectangular Aperture Selection
self.rectangular_cb = FCCheckBox('%s' % _("Rectangular"))
self.rectangular_cb.setToolTip(
_("Process Rectangular Pads.")
)
param_grid.addWidget(self.rectangular_cb, 6, 0, 1, 2)
# Others type of Apertures Selection
self.other_cb = FCCheckBox('%s' % _("Others"))
self.other_cb.setToolTip(
_("Process pads not in the categories above.")
)
param_grid.addWidget(self.other_cb, 7, 0, 1, 2)
# separator_line = QtWidgets.QFrame()
# separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
# separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
# param_grid.addWidget(separator_line, 8, 0, 1, 2)
# #############################################################################################################
# Method Frame
# #############################################################################################################
met_frame = FCFrame()
self.layout.addWidget(met_frame)
met_grid = FCGridLayout(v_spacing=5, h_spacing=3)
met_frame.setLayout(met_grid)
self.hole_size_radio = RadioSet(
[
{'label': _("Excellon"), 'value': 'exc'},
{'label': _("Fixed Diameter"), 'value': 'fixed'},
{'label': _("Fixed Annular Ring"), 'value': 'ring'},
{'label': _("Proportional"), 'value': 'prop'}
],
orientation='vertical',
compact=True)
self.hole_size_label = FCLabel('<span style="color:green;"><b>%s:</b></span>' % _("Method"))
self.hole_size_label.setToolTip(
_("The punch hole source can be:\n"
"- Excellon Object-> the Excellon object drills center will serve as reference.\n"
"- Fixed Diameter -> will try to use the pads center as reference adding fixed diameter holes.\n"
"- Fixed Annular Ring -> will try to keep a set annular ring.\n"
"- Proportional -> will make a Gerber punch hole having the diameter a percentage of the pad diameter.")
)
met_grid.addWidget(self.hole_size_label, 9, 0)
met_grid.addWidget(self.hole_size_radio, 9, 1)
# #############################################################################################################
# Fixed Diameter Frame
# #############################################################################################################
self.fixed_label = FCLabel('<span style="color:teal;"><b>%s</b></span>' % _("Fixed Diameter"))
self.layout.addWidget(self.fixed_label)
fix_frame = FCFrame()
self.layout.addWidget(fix_frame)
fix_grid = FCGridLayout(v_spacing=5, h_spacing=3)
fix_frame.setLayout(fix_grid)
# Diameter value
self.dia_entry = FCDoubleSpinner()
self.dia_entry.set_precision(self.decimals)
self.dia_entry.set_range(0.0000, 10000.0000)
self.dia_label = FCLabel('%s:' % _("Value"))
self.dia_label.setToolTip(
_("Fixed hole diameter.")
)
fix_grid.addWidget(self.dia_label, 0, 0)
fix_grid.addWidget(self.dia_entry, 0, 1)
# #############################################################################################################
# Annular ring Frame
# #############################################################################################################
self.ring_label = FCLabel('<span style="color:darkorange;"><b>%s</b></span>' % _("Fixed Annular Ring"))
self.ring_label.setToolTip(
_("The size of annular ring.\n"
"The copper sliver between the hole exterior\n"
"and the margin of the copper pad.")
)
self.layout.addWidget(self.ring_label)
ring_frame = FCFrame()
self.layout.addWidget(ring_frame)
ring_grid = FCGridLayout(v_spacing=5, h_spacing=3)
ring_frame.setLayout(ring_grid)
# Circular Annular Ring Value
self.circular_ring_label = FCLabel('%s:' % _("Circular"))
self.circular_ring_label.setToolTip(
_("The size of annular ring for circular pads.")
)
self.circular_ring_entry = FCDoubleSpinner()
self.circular_ring_entry.set_precision(self.decimals)
self.circular_ring_entry.set_range(0.0000, 10000.0000)
ring_grid.addWidget(self.circular_ring_label, 0, 0)
ring_grid.addWidget(self.circular_ring_entry, 0, 1)
# Oblong Annular Ring Value
self.oblong_ring_label = FCLabel('%s:' % _("Oblong"))
self.oblong_ring_label.setToolTip(
_("The size of annular ring for oblong pads.")
)
self.oblong_ring_entry = FCDoubleSpinner()
self.oblong_ring_entry.set_precision(self.decimals)
self.oblong_ring_entry.set_range(0.0000, 10000.0000)
ring_grid.addWidget(self.oblong_ring_label, 2, 0)
ring_grid.addWidget(self.oblong_ring_entry, 2, 1)
# Square Annular Ring Value
self.square_ring_label = FCLabel('%s:' % _("Square"))
self.square_ring_label.setToolTip(
_("The size of annular ring for square pads.")
)
self.square_ring_entry = FCDoubleSpinner()
self.square_ring_entry.set_precision(self.decimals)
self.square_ring_entry.set_range(0.0000, 10000.0000)
ring_grid.addWidget(self.square_ring_label, 4, 0)
ring_grid.addWidget(self.square_ring_entry, 4, 1)
# Rectangular Annular Ring Value
self.rectangular_ring_label = FCLabel('%s:' % _("Rectangular"))
self.rectangular_ring_label.setToolTip(
_("The size of annular ring for rectangular pads.")
)
self.rectangular_ring_entry = FCDoubleSpinner()
self.rectangular_ring_entry.set_precision(self.decimals)
self.rectangular_ring_entry.set_range(0.0000, 10000.0000)
ring_grid.addWidget(self.rectangular_ring_label, 6, 0)
ring_grid.addWidget(self.rectangular_ring_entry, 6, 1)
# Others Annular Ring Value
self.other_ring_label = FCLabel('%s:' % _("Others"))
self.other_ring_label.setToolTip(
_("The size of annular ring for other pads.")
)
self.other_ring_entry = FCDoubleSpinner()
self.other_ring_entry.set_precision(self.decimals)
self.other_ring_entry.set_range(0.0000, 10000.0000)
ring_grid.addWidget(self.other_ring_label, 8, 0)
ring_grid.addWidget(self.other_ring_entry, 8, 1)
# #############################################################################################################
# Proportional Diameter Frame
# #############################################################################################################
self.prop_label = FCLabel('<span style="color:indigo;"><b>%s</b></span>' % _("Proportional Diameter"))
self.layout.addWidget(self.prop_label)
prop_frame = FCFrame()
self.layout.addWidget(prop_frame)
prop_grid = FCGridLayout(v_spacing=5, h_spacing=3)
prop_frame.setLayout(prop_grid)
# Factor value
self.factor_entry = FCDoubleSpinner(suffix='%')
self.factor_entry.set_precision(self.decimals)
self.factor_entry.set_range(0.0000, 100.0000)
self.factor_entry.setSingleStep(0.1)
self.factor_label = FCLabel('%s:' % _("Factor"))
self.factor_label.setToolTip(
_("Proportional Diameter.\n"
"The hole diameter will be a fraction of the pad size.")
)
prop_grid.addWidget(self.factor_label, 0, 0)
prop_grid.addWidget(self.factor_entry, 0, 1)
FCGridLayout.set_common_column_size(
[param_grid, ring_grid, prop_grid, met_grid, fix_grid], 0)
self.layout.addStretch()