Files
flatcam-wsl/appGUI/preferences/tools/Tools2ExtractPrefGroupUI.py
Marius Stanciu a59f996819 - some reformatting and class rename
- when clicking the coordinates toolbars in the status bar now the Distance Plugin is shown and if already displayed, it is closed (toggle action)
2022-04-03 15:06:36 +03:00

327 lines
13 KiB
Python

from PyQt6 import QtWidgets
from appGUI.GUIElements import FCCheckBox, RadioSet, FCDoubleSpinner, FCLabel, 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 Tools2EDrillsPrefGroupUI(OptionsGroupUI):
def __init__(self, app, parent=None):
super(Tools2EDrillsPrefGroupUI, self).__init__(self, parent=parent)
self.setTitle(str(_("Extract Drills Options")))
self.decimals = app.decimals
self.options = app.options
# #############################################################################################################
# PARAMETERS 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 = GLay(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 = GLay(v_spacing=5, h_spacing=3)
met_frame.setLayout(met_grid)
self.method_radio = RadioSet(
[
{'label': _("Fixed Diameter"), 'value': 'fixed'},
{'label': _("Fixed Annular Ring"), 'value': 'ring'},
{'label': _("Proportional"), 'value': 'prop'}
],
orientation='vertical',
compact=True)
self.method_label = FCLabel('<span style="color:green;"><b>%s:</b></span>' % _("Method"))
self.method_label.setToolTip(
_("The method for processing pads. Can be:\n"
"- Fixed Diameter -> all holes will have a set size\n"
"- Fixed Annular Ring -> all holes will have a set annular ring\n"
"- Proportional -> each hole size will be a fraction of the pad size"))
met_grid.addWidget(self.method_label, 0, 0)
met_grid.addWidget(self.method_radio, 0, 1)
# separator_line = QtWidgets.QFrame()
# separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
# separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
# param_grid.addWidget(separator_line, 10, 0, 1, 2)
# #############################################################################################################
# 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 = GLay(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 = GLay(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 = GLay(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)
# #############################################################################################################
# Extract Soldermask Frame
# #############################################################################################################
self.extract_sm_label = FCLabel('<span style="color:magenta;"><b>%s</b></span>' % _("Extract Soldermask"))
self.extract_sm_label.setToolTip(
_("Extract soldermask from a given Gerber file."))
self.layout.addWidget(self.extract_sm_label)
solder_frame = FCFrame()
self.layout.addWidget(solder_frame)
solder_grid = GLay(v_spacing=5, h_spacing=3)
solder_frame.setLayout(solder_grid)
# CLEARANCE soldermask extraction
self.clearance_label = FCLabel('%s:' % _("Clearance"))
self.clearance_label.setToolTip(
_("This set how much the soldermask extends\n"
"beyond the margin of the pads.")
)
self.clearance_entry = FCDoubleSpinner()
self.clearance_entry.set_range(0.0000, 10000.0000)
self.clearance_entry.set_precision(self.decimals)
self.clearance_entry.setSingleStep(0.1)
solder_grid.addWidget(self.clearance_label, 0, 0)
solder_grid.addWidget(self.clearance_entry, 0, 1)
# #############################################################################################################
# Extract CutOut Frame
# #############################################################################################################
self.extract_cut_label = FCLabel('<span style="color:brown;"><b>%s</b></span>' % _("Extract Cutout"))
self.extract_cut_label.setToolTip(
_("Extract a cutout from a given Gerber file."))
self.layout.addWidget(self.extract_cut_label)
ecut_frame = FCFrame()
self.layout.addWidget(ecut_frame)
ecut_grid = GLay(v_spacing=5, h_spacing=3)
ecut_frame.setLayout(ecut_grid)
# Margin Cutout
self.margin_cut_label = FCLabel('%s:' % _("Margin"))
self.margin_cut_label.setToolTip(
_("Margin over bounds. A positive value here\n"
"will make the cutout of the PCB further from\n"
"the actual PCB border")
)
self.margin_cut_entry = FCDoubleSpinner()
self.margin_cut_entry.set_range(-10000.0000, 10000.0000)
self.margin_cut_entry.set_precision(self.decimals)
self.margin_cut_entry.setSingleStep(0.1)
ecut_grid.addWidget(self.margin_cut_label, 0, 0)
ecut_grid.addWidget(self.margin_cut_entry, 0, 1)
# Thickness Cutout
self.thick_cut_label = FCLabel('%s:' % _("Thickness"))
self.thick_cut_label.setToolTip(
_("The thickness of the line that makes the cutout geometry.")
)
self.thick_cut_entry = FCDoubleSpinner()
self.thick_cut_entry.set_range(0.0000, 10000.0000)
self.thick_cut_entry.set_precision(self.decimals)
self.thick_cut_entry.setSingleStep(0.1)
ecut_grid.addWidget(self.thick_cut_label, 2, 0)
ecut_grid.addWidget(self.thick_cut_entry, 2, 1)
GLay.set_common_column_size(
[param_grid, ring_grid, fix_grid, prop_grid, met_grid, solder_grid, ecut_grid], 0)
self.layout.addStretch()