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

+ 0 - 8
flatcamGUI/preferences/PreferencesUIManager.py

@@ -60,14 +60,6 @@ class PreferencesUIManager:
             "excellon_f_plunge": self.ui.excellon_defaults_form.excellon_adv_opt_group.fplunge_cb,
             "excellon_f_retract": self.ui.excellon_defaults_form.excellon_adv_opt_group.fretract_cb,
 
-            # Excellon Export
-            "excellon_exp_units": self.ui.excellon_defaults_form.excellon_exp_group.excellon_units_radio,
-            "excellon_exp_format": self.ui.excellon_defaults_form.excellon_exp_group.format_radio,
-            "excellon_exp_integer": self.ui.excellon_defaults_form.excellon_exp_group.format_whole_entry,
-            "excellon_exp_decimals": self.ui.excellon_defaults_form.excellon_exp_group.format_dec_entry,
-            "excellon_exp_zeros": self.ui.excellon_defaults_form.excellon_exp_group.zeros_radio,
-            "excellon_exp_slot_type": self.ui.excellon_defaults_form.excellon_exp_group.slot_type_radio,
-
             # Excellon Editor
             "excellon_editor_sel_limit": self.ui.excellon_defaults_form.excellon_editor_group.sel_limit_entry,
             "excellon_editor_newdia": self.ui.excellon_defaults_form.excellon_editor_group.addtool_entry,

+ 72 - 154
flatcamGUI/preferences/excellon/ExcellonExpPrefGroupUI.py

@@ -1,168 +1,86 @@
-from PyQt5 import QtWidgets, QtCore
-from PyQt5.QtCore import QSettings
+from flatcamGUI.preferences.OptionUI import *
+from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI2
 
-from flatcamGUI.GUIElements import RadioSet, FCSpinner
-from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI
 import gettext
 import FlatCAMTranslation as fcTranslate
 import builtins
-
 fcTranslate.apply_language('strings')
 if '_' not in builtins.__dict__:
     _ = gettext.gettext
 
-settings = QSettings("Open Source", "FlatCAM")
-if settings.contains("machinist"):
-    machinist_setting = settings.value('machinist', type=int)
-else:
-    machinist_setting = 0
-
-
-class ExcellonExpPrefGroupUI(OptionsGroupUI):
 
-    def __init__(self, decimals=4, parent=None):
-        super(ExcellonExpPrefGroupUI, self).__init__(self, parent=parent)
+class ExcellonExpPrefGroupUI(OptionsGroupUI2):
 
-        self.setTitle(str(_("Excellon Export")))
+    def __init__(self, decimals=4, **kwargs):
         self.decimals = decimals
+        super().__init__(**kwargs)
+        self.setTitle(str(_("Excellon Export")))
 
-        # Plot options
-        self.export_options_label = QtWidgets.QLabel("<b>%s:</b>" % _("Export Options"))
-        self.export_options_label.setToolTip(
-            _("The parameters set here are used in the file exported\n"
-              "when using the File -> Export -> Export Excellon menu entry.")
-        )
-        self.layout.addWidget(self.export_options_label)
-
-        form = QtWidgets.QFormLayout()
-        self.layout.addLayout(form)
-
-        # Excellon Units
-        self.excellon_units_label = QtWidgets.QLabel('%s:' % _('Units'))
-        self.excellon_units_label.setToolTip(
-            _("The units used in the Excellon file.")
-        )
-
-        self.excellon_units_radio = RadioSet([{'label': _('INCH'), 'value': 'INCH'},
-                                              {'label': _('MM'), 'value': 'METRIC'}])
-        self.excellon_units_radio.setToolTip(
-            _("The units used in the Excellon file.")
-        )
-
-        form.addRow(self.excellon_units_label, self.excellon_units_radio)
-
-        # Excellon non-decimal format
-        self.digits_label = QtWidgets.QLabel("%s:" % _("Int/Decimals"))
-        self.digits_label.setToolTip(
-            _("The NC drill files, usually named Excellon files\n"
-              "are files that can be found in different formats.\n"
-              "Here we set the format used when the provided\n"
-              "coordinates are not using period.")
-        )
-
-        hlay1 = QtWidgets.QHBoxLayout()
-
-        self.format_whole_entry = FCSpinner()
-        self.format_whole_entry.set_range(0, 9)
-        self.format_whole_entry.setMinimumWidth(30)
-        self.format_whole_entry.setToolTip(
-            _("This numbers signify the number of digits in\n"
-              "the whole part of Excellon coordinates.")
-        )
-        hlay1.addWidget(self.format_whole_entry, QtCore.Qt.AlignLeft)
-
-        excellon_separator_label = QtWidgets.QLabel(':')
-        excellon_separator_label.setFixedWidth(5)
-        hlay1.addWidget(excellon_separator_label, QtCore.Qt.AlignLeft)
-
-        self.format_dec_entry = FCSpinner()
-        self.format_dec_entry.set_range(0, 9)
-        self.format_dec_entry.setMinimumWidth(30)
-        self.format_dec_entry.setToolTip(
-            _("This numbers signify the number of digits in\n"
-              "the decimal part of Excellon coordinates.")
-        )
-        hlay1.addWidget(self.format_dec_entry, QtCore.Qt.AlignLeft)
-        hlay1.addStretch()
-
-        form.addRow(self.digits_label, hlay1)
-
-        # Select the Excellon Format
-        self.format_label = QtWidgets.QLabel("%s:" % _("Format"))
-        self.format_label.setToolTip(
-            _("Select the kind of coordinates format used.\n"
-              "Coordinates can be saved with decimal point or without.\n"
-              "When there is no decimal point, it is required to specify\n"
-              "the number of digits for integer part and the number of decimals.\n"
-              "Also it will have to be specified if LZ = leading zeros are kept\n"
-              "or TZ = trailing zeros are kept.")
-        )
-        self.format_radio = RadioSet([{'label': _('Decimal'), 'value': 'dec'},
-                                      {'label': _('No-Decimal'), 'value': 'ndec'}])
-        self.format_radio.setToolTip(
-            _("Select the kind of coordinates format used.\n"
-              "Coordinates can be saved with decimal point or without.\n"
-              "When there is no decimal point, it is required to specify\n"
-              "the number of digits for integer part and the number of decimals.\n"
-              "Also it will have to be specified if LZ = leading zeros are kept\n"
-              "or TZ = trailing zeros are kept.")
-        )
-
-        form.addRow(self.format_label, self.format_radio)
-
-        # Excellon Zeros
-        self.zeros_label = QtWidgets.QLabel('%s:' % _('Zeros'))
-        self.zeros_label.setAlignment(QtCore.Qt.AlignLeft)
-        self.zeros_label.setToolTip(
-            _("This sets the type of Excellon zeros.\n"
-              "If LZ then Leading Zeros are kept and\n"
-              "Trailing Zeros are removed.\n"
-              "If TZ is checked then Trailing Zeros are kept\n"
-              "and Leading Zeros are removed.")
-        )
-
-        self.zeros_radio = RadioSet([{'label': _('LZ'), 'value': 'LZ'},
-                                     {'label': _('TZ'), 'value': 'TZ'}])
-        self.zeros_radio.setToolTip(
-            _("This sets the default type of Excellon zeros.\n"
-              "If LZ then Leading Zeros are kept and\n"
-              "Trailing Zeros are removed.\n"
-              "If TZ is checked then Trailing Zeros are kept\n"
-              "and Leading Zeros are removed.")
-        )
-
-        form.addRow(self.zeros_label, self.zeros_radio)
-
-        # Slot type
-        self.slot_type_label = QtWidgets.QLabel('%s:' % _('Slot type'))
-        self.slot_type_label.setAlignment(QtCore.Qt.AlignLeft)
-        self.slot_type_label.setToolTip(
-            _("This sets how the slots will be exported.\n"
-              "If ROUTED then the slots will be routed\n"
-              "using M15/M16 commands.\n"
-              "If DRILLED(G85) the slots will be exported\n"
-              "using the Drilled slot command (G85).")
-        )
-
-        self.slot_type_radio = RadioSet([{'label': _('Routed'), 'value': 'routing'},
-                                         {'label': _('Drilled(G85)'), 'value': 'drilling'}])
-        self.slot_type_radio.setToolTip(
-            _("This sets how the slots will be exported.\n"
-              "If ROUTED then the slots will be routed\n"
-              "using M15/M16 commands.\n"
-              "If DRILLED(G85) the slots will be exported\n"
-              "using the Drilled slot command (G85).")
-        )
-
-        form.addRow(self.slot_type_label, self.slot_type_radio)
-
-        self.layout.addStretch()
-        self.format_radio.activated_custom.connect(self.optimization_selection)
+        self.option_dict()["excellon_exp_format"].get_field().activated_custom.connect(self.optimization_selection)
+
+    def build_options(self) -> [OptionUI]:
+        return [
+            HeadingOptionUI(
+                label_text="Export Options",
+                label_tooltip="The parameters set here are used in the file exported\n"
+                              "when using the File -> Export -> Export Excellon menu entry."
+            ),
+            RadioSetOptionUI(
+                option="excellon_exp_units",
+                label_text="Units",
+                label_tooltip="The units used in the Excellon file.",
+                choices=[{'label': _('INCH'), 'value': 'INCH'},
+                         {'label': _('MM'),   'value': 'METRIC'}]
+            ),
+            SpinnerOptionUI(
+                option="excellon_exp_integer",
+                label_text="Int",
+                label_tooltip="This number signifies the number of digits in\nthe whole part of Excellon coordinates.",
+                min_value=0, max_value=9, step=1
+            ),
+            SpinnerOptionUI(
+                option="excellon_exp_decimals",
+                label_text="Decimals",
+                label_tooltip="This number signifies the number of digits in\nthe decimal part of Excellon coordinates.",
+                min_value=0, max_value=9, step=1
+            ),
+            RadioSetOptionUI(
+                option="excellon_exp_format",
+                label_text="Format",
+                label_tooltip="Select the kind of coordinates format used.\n"
+                              "Coordinates can be saved with decimal point or without.\n"
+                              "When there is no decimal point, it is required to specify\n"
+                              "the number of digits for integer part and the number of decimals.\n"
+                              "Also it will have to be specified if LZ = leading zeros are kept\n"
+                              "or TZ = trailing zeros are kept.",
+                choices=[{'label': _('Decimal'), 'value': 'dec'},
+                         {'label': _('No-Decimal'), 'value': 'ndec'}]
+            ),
+            RadioSetOptionUI(
+                option="excellon_exp_zeros",
+                label_text="Zeros",
+                label_tooltip="This sets the type of Excellon zeros.\n"
+                              "If LZ then Leading Zeros are kept and\n"
+                              "Trailing Zeros are removed.\n"
+                              "If TZ is checked then Trailing Zeros are kept\n"
+                              "and Leading Zeros are removed.",
+                choices=[{'label': _('LZ'), 'value': 'LZ'},
+                         {'label': _('TZ'), 'value': 'TZ'}]
+            ),
+            RadioSetOptionUI(
+                option="excellon_exp_slot_type",
+                label_text="Slot type",
+                label_tooltip="This sets how the slots will be exported.\n"
+                              "If ROUTED then the slots will be routed\n"
+                              "using M15/M16 commands.\n"
+                              "If DRILLED(G85) the slots will be exported\n"
+                              "using the Drilled slot command (G85).",
+                choices=[{'label': _('Routed'),       'value': 'routing'},
+                         {'label': _('Drilled(G85)'), 'value': 'drilling'}]
+            )
+        ]
 
     def optimization_selection(self):
-        if self.format_radio.get_value() == 'dec':
-            self.zeros_label.setDisabled(True)
-            self.zeros_radio.setDisabled(True)
-        else:
-            self.zeros_label.setDisabled(False)
-            self.zeros_radio.setDisabled(False)
+        disable_zeros = self.option_dict()["excellon_exp_format"].get_field().get_value() == "dec"
+        self.option_dict()["excellon_exp_zeros"].label_widget.setDisabled(disable_zeros)
+        self.option_dict()["excellon_exp_zeros"].get_field().setDisabled(disable_zeros)

+ 15 - 12
flatcamGUI/preferences/excellon/ExcellonPreferencesUI.py

@@ -18,24 +18,21 @@ class ExcellonPreferencesUI(PreferencesSectionUI):
 
     def __init__(self, decimals, **kwargs):
         self.decimals = decimals
-        self.excellon_gen_group = ExcellonGenPrefGroupUI(decimals=self.decimals)
 
         # FIXME: remove the need for external access to excellon_opt_group
         self.excellon_opt_group = ExcellonOptPrefGroupUI(decimals=self.decimals)
 
-        self.excellon_exp_group = ExcellonExpPrefGroupUI(decimals=self.decimals)
         self.excellon_adv_opt_group = ExcellonAdvOptPrefGroupUI(decimals=self.decimals)
         self.excellon_editor_group = ExcellonEditorPrefGroupUI(decimals=self.decimals)
 
         super().__init__(**kwargs)
         self.init_sync_export()
 
-
     def build_groups(self) -> [OptionsGroupUI]:
         return [
-            self.excellon_gen_group,
+            ExcellonGenPrefGroupUI(decimals=self.decimals),
             self.excellon_opt_group,
-            self.excellon_exp_group,
+            ExcellonExpPrefGroupUI(decimals=self.decimals),
             self.excellon_adv_opt_group,
             self.excellon_editor_group
         ]
@@ -60,13 +57,19 @@ class ExcellonPreferencesUI(PreferencesSectionUI):
             # User has disabled sync.
             return
 
-        self.excellon_exp_group.zeros_radio.set_value(self.option_dict()["excellon_zeros"].get_field().get_value() + 'Z')
-        self.excellon_exp_group.excellon_units_radio.set_value(self.option_dict()["excellon_units"].get_field().get_value())
-        if self.option_dict()["excellon_units"].get_field().get_value().upper() == 'METRIC':
-            self.excellon_exp_group.format_whole_entry.set_value(self.option_dict()["excellon_format_upper_mm"].get_field().get_value())
-            self.excellon_exp_group.format_dec_entry.set_value(self.option_dict()["excellon_format_lower_mm"].get_field().get_value())
+        zeros = self.option_dict()["excellon_zeros"].get_field().get_value() + 'Z'
+        self.option_dict()["excellon_exp_zeros"].get_field().set_value(zeros)
+
+        units = self.option_dict()["excellon_units"].get_field().get_value()
+        self.option_dict()["excellon_exp_units"].get_field().set_value(units)
+
+        if units.upper() == 'METRIC':
+            whole = self.option_dict()["excellon_format_upper_mm"].get_field().get_value()
+            dec = self.option_dict()["excellon_format_lower_mm"].get_field().get_value()
         else:
-            self.excellon_exp_group.format_whole_entry.set_value(self.option_dict()["excellon_format_upper_in"].get_field().get_value())
-            self.excellon_exp_group.format_dec_entry.set_value(self.option_dict()["excellon_format_lower_in"].get_field().get_value())
+            whole = self.option_dict()["excellon_format_upper_in"].get_field().get_value()
+            dec = self.option_dict()["excellon_format_lower_in"].get_field().get_value()
+        self.option_dict()["excellon_exp_integer"].get_field().set_value(whole)
+        self.option_dict()["excellon_exp_decimals"].get_field().set_value(dec)