David Robertson 5 лет назад
Родитель
Сommit
126ed47783

+ 0 - 11
flatcamGUI/preferences/PreferencesUIManager.py

@@ -50,19 +50,8 @@ class PreferencesUIManager:
         self.defaults_form_fields = {
 
             # Gerber Advanced Options
-            "gerber_aperture_display": self.ui.gerber_defaults_form.gerber_adv_opt_group.aperture_table_visibility_cb,
             # "gerber_aperture_scale_factor": self.ui.gerber_defaults_form.gerber_adv_opt_group.scale_aperture_entry,
             # "gerber_aperture_buffer_factor": self.ui.gerber_defaults_form.gerber_adv_opt_group.buffer_aperture_entry,
-            "gerber_follow": self.ui.gerber_defaults_form.gerber_adv_opt_group.follow_cb,
-            "gerber_tool_type": self.ui.gerber_defaults_form.gerber_adv_opt_group.tool_type_radio,
-            "gerber_vtipdia": self.ui.gerber_defaults_form.gerber_adv_opt_group.tipdia_spinner,
-            "gerber_vtipangle": self.ui.gerber_defaults_form.gerber_adv_opt_group.tipangle_spinner,
-            "gerber_vcutz": self.ui.gerber_defaults_form.gerber_adv_opt_group.cutz_spinner,
-            "gerber_iso_type": self.ui.gerber_defaults_form.gerber_adv_opt_group.iso_type_radio,
-
-            "gerber_buffering": self.ui.gerber_defaults_form.gerber_adv_opt_group.buffering_radio,
-            "gerber_simplification": self.ui.gerber_defaults_form.gerber_adv_opt_group.simplify_cb,
-            "gerber_simp_tolerance": self.ui.gerber_defaults_form.gerber_adv_opt_group.simplification_tol_spinner,
 
 
             # Gerber Editor

+ 109 - 165
flatcamGUI/preferences/gerber/GerberAdvOptPrefGroupUI.py

@@ -1,7 +1,6 @@
-from PyQt5 import QtWidgets
-
-from flatcamGUI.GUIElements import FCCheckBox, RadioSet, FCDoubleSpinner, FCSpinner, OptionalInputSection
-from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI
+from flatcamGUI.GUIElements import OptionalInputSection
+from flatcamGUI.preferences.OptionUI import *
+from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI2
 
 import gettext
 import FlatCAMTranslation as fcTranslate
@@ -12,167 +11,112 @@ if '_' not in builtins.__dict__:
     _ = gettext.gettext
 
 
-class GerberAdvOptPrefGroupUI(OptionsGroupUI):
-    def __init__(self, decimals=4, parent=None):
-        super(GerberAdvOptPrefGroupUI, self).__init__(self, parent=parent)
+class GerberAdvOptPrefGroupUI(OptionsGroupUI2):
 
-        self.setTitle(str(_("Gerber Adv. Options")))
+    def __init__(self, decimals=4, **kwargs):
         self.decimals = decimals
+        super().__init__(**kwargs)
+        self.setTitle(str(_("Gerber Adv. Options")))
 
-        # ## Advanced Gerber Parameters
-        self.adv_param_label = QtWidgets.QLabel('<b>%s:</b>' % _('Advanced Options'))
-        self.adv_param_label.setToolTip(
-            _("A list of Gerber advanced parameters.\n"
-              "Those parameters are available only for\n"
-              "Advanced App. Level.")
-        )
-        self.layout.addWidget(self.adv_param_label)
-
-        grid0 = QtWidgets.QGridLayout()
-        self.layout.addLayout(grid0)
-
-        # Follow Attribute
-        self.follow_cb = FCCheckBox(label=_('"Follow"'))
-        self.follow_cb.setToolTip(
-            _("Generate a 'Follow' geometry.\n"
-              "This means that it will cut through\n"
-              "the middle of the trace.")
-        )
-        grid0.addWidget(self.follow_cb, 0, 0, 1, 2)
-
-        # Aperture Table Visibility CB
-        self.aperture_table_visibility_cb = FCCheckBox(label=_('Table Show/Hide'))
-        self.aperture_table_visibility_cb.setToolTip(
-            _("Toggle the display of the Gerber Apertures Table.\n"
-              "Also, on hide, it will delete all mark shapes\n"
-              "that are drawn on canvas.")
-
-        )
-        grid0.addWidget(self.aperture_table_visibility_cb, 1, 0, 1, 2)
-
-        separator_line = QtWidgets.QFrame()
-        separator_line.setFrameShape(QtWidgets.QFrame.HLine)
-        separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
-        grid0.addWidget(separator_line, 2, 0, 1, 2)
-
-        # Tool Type
-        self.tool_type_label = QtWidgets.QLabel('<b>%s</b>' % _('Tool Type'))
-        self.tool_type_label.setToolTip(
-            _("Choose which tool to use for Gerber isolation:\n"
-              "'Circular' or 'V-shape'.\n"
-              "When the 'V-shape' is selected then the tool\n"
-              "diameter will depend on the chosen cut depth.")
-        )
-        self.tool_type_radio = RadioSet([{'label': 'Circular', 'value': 'circular'},
-                                         {'label': 'V-Shape', 'value': 'v'}])
-
-        grid0.addWidget(self.tool_type_label, 3, 0)
-        grid0.addWidget(self.tool_type_radio, 3, 1, 1, 2)
-
-        # Tip Dia
-        self.tipdialabel = QtWidgets.QLabel('%s:' % _('V-Tip Dia'))
-        self.tipdialabel.setToolTip(
-            _("The tip diameter for V-Shape Tool")
-        )
-        self.tipdia_spinner = FCDoubleSpinner()
-        self.tipdia_spinner.set_precision(self.decimals)
-        self.tipdia_spinner.set_range(-99.9999, 99.9999)
-        self.tipdia_spinner.setSingleStep(0.1)
-        self.tipdia_spinner.setWrapping(True)
-        grid0.addWidget(self.tipdialabel, 4, 0)
-        grid0.addWidget(self.tipdia_spinner, 4, 1, 1, 2)
-
-        # Tip Angle
-        self.tipanglelabel = QtWidgets.QLabel('%s:' % _('V-Tip Angle'))
-        self.tipanglelabel.setToolTip(
-            _("The tip angle for V-Shape Tool.\n"
-              "In degree.")
-        )
-        self.tipangle_spinner = FCSpinner()
-        self.tipangle_spinner.set_range(1, 180)
-        self.tipangle_spinner.set_step(5)
-        self.tipangle_spinner.setWrapping(True)
-        grid0.addWidget(self.tipanglelabel, 5, 0)
-        grid0.addWidget(self.tipangle_spinner, 5, 1, 1, 2)
-
-        # Cut Z
-        self.cutzlabel = QtWidgets.QLabel('%s:' % _('Cut Z'))
-        self.cutzlabel.setToolTip(
-            _("Cutting depth (negative)\n"
-              "below the copper surface.")
-        )
-        self.cutz_spinner = FCDoubleSpinner()
-        self.cutz_spinner.set_precision(self.decimals)
-        self.cutz_spinner.set_range(-99.9999, 0.0000)
-        self.cutz_spinner.setSingleStep(0.1)
-        self.cutz_spinner.setWrapping(True)
-
-        grid0.addWidget(self.cutzlabel, 6, 0)
-        grid0.addWidget(self.cutz_spinner, 6, 1, 1, 2)
-
-        # Isolation Type
-        self.iso_type_label = QtWidgets.QLabel('%s:' % _('Isolation Type'))
-        self.iso_type_label.setToolTip(
-            _("Choose how the isolation will be executed:\n"
-              "- 'Full' -> complete isolation of polygons\n"
-              "- 'Ext' -> will isolate only on the outside\n"
-              "- 'Int' -> will isolate only on the inside\n"
-              "'Exterior' isolation is almost always possible\n"
-              "(with the right tool) but 'Interior'\n"
-              "isolation can be done only when there is an opening\n"
-              "inside of the polygon (e.g polygon is a 'doughnut' shape).")
-        )
-        self.iso_type_radio = RadioSet([{'label': _('Full'), 'value': 'full'},
-                                        {'label': _('Exterior'), 'value': 'ext'},
-                                        {'label': _('Interior'), 'value': 'int'}])
-
-        grid0.addWidget(self.iso_type_label, 7, 0,)
-        grid0.addWidget(self.iso_type_radio, 7, 1, 1, 2)
-
-        separator_line = QtWidgets.QFrame()
-        separator_line.setFrameShape(QtWidgets.QFrame.HLine)
-        separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
-        grid0.addWidget(separator_line, 8, 0, 1, 2)
-
-        # Buffering Type
-        buffering_label = QtWidgets.QLabel('%s:' % _('Buffering'))
-        buffering_label.setToolTip(
-            _("Buffering type:\n"
-              "- None --> best performance, fast file loading but no so good display\n"
-              "- Full --> slow file loading but good visuals. This is the default.\n"
-              "<<WARNING>>: Don't change this unless you know what you are doing !!!")
-        )
-        self.buffering_radio = RadioSet([{'label': _('None'), 'value': 'no'},
-                                         {'label': _('Full'), 'value': 'full'}])
-        grid0.addWidget(buffering_label, 9, 0)
-        grid0.addWidget(self.buffering_radio, 9, 1)
-
-        # Simplification
-        self.simplify_cb = FCCheckBox(label=_('Simplify'))
-        self.simplify_cb.setToolTip(
-            _("When checked all the Gerber polygons will be\n"
-              "loaded with simplification having a set tolerance.\n"
-              "<<WARNING>>: Don't change this unless you know what you are doing !!!")
-                                    )
-        grid0.addWidget(self.simplify_cb, 10, 0, 1, 2)
-
-        # Simplification tolerance
-        self.simplification_tol_label = QtWidgets.QLabel(_('Tolerance'))
-        self.simplification_tol_label.setToolTip(_("Tolerance for polygon simplification."))
-
-        self.simplification_tol_spinner = FCDoubleSpinner()
-        self.simplification_tol_spinner.set_precision(self.decimals + 1)
-        self.simplification_tol_spinner.setWrapping(True)
-        self.simplification_tol_spinner.setRange(0.00000, 0.01000)
-        self.simplification_tol_spinner.setSingleStep(0.0001)
-
-        grid0.addWidget(self.simplification_tol_label, 11, 0)
-        grid0.addWidget(self.simplification_tol_spinner, 11, 1)
-        self.ois_simplif = OptionalInputSection(
-            self.simplify_cb,
-            [
-                self.simplification_tol_label, self.simplification_tol_spinner
-            ],
-            logic=True)
-
-        self.layout.addStretch()
+        self.simplify_cb = self.option_dict()["gerber_simplification"].get_field()
+        self.simplification_tol_label = self.option_dict()["gerber_simp_tolerance"].label_widget
+        self.simplification_tol_spinner = self.option_dict()["gerber_simp_tolerance"].get_field()
+        self.ois_simplif = OptionalInputSection(self.simplify_cb, [self.simplification_tol_label, self.simplification_tol_spinner], logic=True)
+
+    def build_options(self) -> [OptionUI]:
+        return [
+            HeadingOptionUI(
+                label_text="Advanced Options",
+                label_tooltip="A list of Gerber advanced parameters.\n"
+                              "Those parameters are available only for\n"
+                              "Advanced App. Level."
+            ),
+            CheckboxOptionUI(
+                option="gerber_follow",
+                label_text='"Follow"',
+                label_tooltip="Generate a 'Follow' geometry.\n"
+                              "This means that it will cut through\n"
+                              "the middle of the trace."
+            ),
+            CheckboxOptionUI(
+                option="gerber_aperture_display",
+                label_text="Table Show/Hide",
+                label_tooltip="Toggle the display of the Gerber Apertures Table.\n"
+                              "Also, on hide, it will delete all mark shapes\n"
+                              "that are drawn on canvas."
+            ),
+            SeparatorOptionUI(),
+
+            RadioSetOptionUI(
+                option="gerber_tool_type",
+                label_text="Tool Type",
+                label_bold=True,
+                label_tooltip="Choose which tool to use for Gerber isolation:\n"
+                              "'Circular' or 'V-shape'.\n"
+                              "When the 'V-shape' is selected then the tool\n"
+                              "diameter will depend on the chosen cut depth.",
+                choices=[{'label': 'Circular', 'value': 'circular'},
+                         {'label': 'V-Shape', 'value': 'v'}]
+            ),
+            DoubleSpinnerOptionUI(
+                option="gerber_vtipdia",
+                label_text="V-Tip Dia",
+                label_tooltip="The tip diameter for V-Shape Tool",
+                min_value=-99.9999, max_value=99.9999, step=0.1, decimals=self.decimals
+            ),
+            SpinnerOptionUI(
+                option="gerber_vtipangle",
+                label_text="V-Tip Angle",
+                label_tooltip="The tip angle for V-Shape Tool.\n"
+                              "In degrees.",
+                min_value=1, max_value=180, step=5
+            ),
+            DoubleSpinnerOptionUI(
+                option="gerber_vcutz",
+                label_text="Cut Z",
+                label_tooltip="Cutting depth (negative)\n"
+                              "below the copper surface.",
+                min_value=-99.9999, max_value=0.0000, step=0.1, decimals=self.decimals
+            ),
+
+            RadioSetOptionUI(
+                option="gerber_iso_type",
+                label_text="Isolation Type",
+                label_tooltip="Choose how the isolation will be executed:\n"
+                              "- 'Full' -> complete isolation of polygons\n"
+                              "- 'Ext' -> will isolate only on the outside\n"
+                              "- 'Int' -> will isolate only on the inside\n"
+                              "'Exterior' isolation is almost always possible\n"
+                              "(with the right tool) but 'Interior'\n"
+                              "isolation can be done only when there is an opening\n"
+                              "inside of the polygon (e.g polygon is a 'doughnut' shape).",
+                choices=[{'label': _('Full'), 'value': 'full'},
+                         {'label': _('Exterior'), 'value': 'ext'},
+                         {'label': _('Interior'), 'value': 'int'}]
+            ),
+            SeparatorOptionUI(),
+
+            RadioSetOptionUI(
+                option="gerber_buffering",
+                label_text="Buffering",
+                label_tooltip="Buffering type:\n"
+                              "- None --> best performance, fast file loading but no so good display\n"
+                              "- Full --> slow file loading but good visuals. This is the default.\n"
+                              "<<WARNING>>: Don't change this unless you know what you are doing !!!",
+                choices=[{'label': _('None'), 'value': 'no'},
+                         {'label': _('Full'), 'value': 'full'}]
+            ),
+            CheckboxOptionUI(
+                option="gerber_simplification",
+                label_text="Simplify",
+                label_tooltip="When checked all the Gerber polygons will be\n"
+                              "loaded with simplification having a set tolerance.\n"
+                              "<<WARNING>>: Don't change this unless you know what you are doing !!!"
+            ),
+            DoubleSpinnerOptionUI(
+                option="gerber_simp_tolerance",
+                label_text="Tolerance",
+                label_tooltip="Tolerance for polygon simplification.",
+                min_value=0.0, max_value=0.01, step=0.0001, decimals=self.decimals+1
+            )
+        ]