diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c46f50b..d01a2faa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ CHANGELOG for FlatCAM beta ================================================= +21.07.2020 + +- updated the FCRadio class with a method that allow disabling certain options +- the Path optimization options for Excellon and Geometry objects are now available depending on the OS platform used (32bit vs 64bit) + 20.07.2020 - fixed a bug in the FlatCAMGerber.on_mark_cb_click_table() method when moving a Gerber object diff --git a/appGUI/GUIElements.py b/appGUI/GUIElements.py index 15b92673..3039d10b 100644 --- a/appGUI/GUIElements.py +++ b/appGUI/GUIElements.py @@ -99,6 +99,11 @@ class RadioSet(QtWidgets.QWidget): return log.error("Value given is not part of this RadioSet: %s" % str(val)) + def setOptionsDisabled(self, options: list, val: bool) -> None: + for option in self.choices: + if option['label'] in options: + option['radio'].setDisabled(val) + # class RadioGroupChoice(QtWidgets.QWidget): # def __init__(self, label_1, label_2, to_check, hide_list, show_list, parent=None): diff --git a/appGUI/preferences/excellon/ExcellonGenPrefGroupUI.py b/appGUI/preferences/excellon/ExcellonGenPrefGroupUI.py index 19ed9452..b08954a6 100644 --- a/appGUI/preferences/excellon/ExcellonGenPrefGroupUI.py +++ b/appGUI/preferences/excellon/ExcellonGenPrefGroupUI.py @@ -1,9 +1,9 @@ import platform -from PyQt5 import QtWidgets, QtCore, QtGui +from PyQt5 import QtWidgets, QtCore from PyQt5.QtCore import QSettings -from appGUI.GUIElements import FCCheckBox, FCSpinner, RadioSet, FCEntry, FCSliderWithSpinner, FCColorEntry +from appGUI.GUIElements import FCCheckBox, FCSpinner, RadioSet, FCSliderWithSpinner, FCColorEntry from appGUI.preferences.OptionsGroupUI import OptionsGroupUI import gettext import appTranslation as fcTranslate @@ -219,25 +219,13 @@ class ExcellonGenPrefGroupUI(OptionsGroupUI): "If <> is checked then Travelling Salesman algorithm is used for\n" "drill path optimization.\n" "\n" - "If this control is disabled, then FlatCAM works in 32bit mode and it uses\n" - "Travelling Salesman algorithm for path optimization.") + "Some options are disabled when FlatCAM works in 32bit mode.") ) self.excellon_optimization_radio = RadioSet([{'label': _('MetaHeuristic'), 'value': 'M'}, {'label': _('Basic'), 'value': 'B'}, {'label': _('TSA'), 'value': 'T'}], orientation='vertical', stretch=False) - self.excellon_optimization_radio.setToolTip( - _("This sets the optimization type for the Excellon drill path.\n" - "If <> is checked then Google OR-Tools algorithm with\n" - "MetaHeuristic Guided Local Path is used. Default search time is 3sec.\n" - "If <> is checked then Google OR-Tools Basic algorithm is used.\n" - "If <> is checked then Travelling Salesman algorithm is used for\n" - "drill path optimization.\n" - "\n" - "If this control is disabled, then FlatCAM works in 32bit mode and it uses\n" - "Travelling Salesman algorithm for path optimization.") - ) grid2.addWidget(self.excellon_optimization_label, 9, 0) grid2.addWidget(self.excellon_optimization_radio, 9, 1) @@ -319,15 +307,11 @@ class ExcellonGenPrefGroupUI(OptionsGroupUI): current_platform = platform.architecture()[0] if current_platform == '64bit': - self.excellon_optimization_label.setDisabled(False) - self.excellon_optimization_radio.setDisabled(False) + self.excellon_optimization_radio.setOptionsDisabled([_('MetaHeuristic'), _('Basic')], False) self.optimization_time_label.setDisabled(False) self.optimization_time_entry.setDisabled(False) - self.excellon_optimization_radio.activated_custom.connect(self.optimization_selection) - else: - self.excellon_optimization_label.setDisabled(True) - self.excellon_optimization_radio.setDisabled(True) + self.excellon_optimization_radio.setOptionsDisabled([_('MetaHeuristic'), _('Basic')], True) self.optimization_time_label.setDisabled(True) self.optimization_time_entry.setDisabled(True) @@ -346,6 +330,8 @@ class ExcellonGenPrefGroupUI(OptionsGroupUI): # call it once to make sure it is updated at startup self.on_update_exc_export(state=self.app.defaults["excellon_update"]) + self.excellon_optimization_radio.activated_custom.connect(self.optimization_selection) + def optimization_selection(self): if self.excellon_optimization_radio.get_value() == 'M': self.optimization_time_label.setDisabled(False) diff --git a/appGUI/preferences/geometry/GeometryGenPrefGroupUI.py b/appGUI/preferences/geometry/GeometryGenPrefGroupUI.py index bd264d9f..8e4bdb0f 100644 --- a/appGUI/preferences/geometry/GeometryGenPrefGroupUI.py +++ b/appGUI/preferences/geometry/GeometryGenPrefGroupUI.py @@ -4,6 +4,8 @@ from PyQt5.QtCore import QSettings from appGUI.GUIElements import FCCheckBox, FCSpinner, FCEntry, FCColorEntry, RadioSet from appGUI.preferences.OptionsGroupUI import OptionsGroupUI +import platform + import gettext import appTranslation as fcTranslate import builtins @@ -98,8 +100,7 @@ class GeometryGenPrefGroupUI(OptionsGroupUI): "- Basic -> Using Google OR-Tools Basic algorithm\n" "- TSA -> Using Travelling Salesman algorithm\n" "\n" - "If this control is disabled, then FlatCAM works in 32bit mode and it uses\n" - "Travelling Salesman algorithm for path optimization.") + "Some options are disabled when FlatCAM works in 32bit mode.") ) self.opt_algorithm_radio = RadioSet( @@ -165,8 +166,28 @@ class GeometryGenPrefGroupUI(OptionsGroupUI): self.layout.addStretch() + current_platform = platform.architecture()[0] + if current_platform == '64bit': + self.opt_algorithm_radio.setOptionsDisabled([_('MetaHeuristic'), _('Basic')], False) + self.optimization_time_label.setDisabled(False) + self.optimization_time_entry.setDisabled(False) + else: + self.opt_algorithm_radio.setOptionsDisabled([_('MetaHeuristic'), _('Basic')], True) + self.optimization_time_label.setDisabled(True) + self.optimization_time_entry.setDisabled(True) + + self.opt_algorithm_radio.activated_custom.connect(self.optimization_selection) + # Setting plot colors signals self.line_color_entry.editingFinished.connect(self.on_line_color_entry) def on_line_color_entry(self): self.app.defaults['geometry_plot_line'] = self.line_color_entry.get_value()[:7] + 'FF' + + def optimization_selection(self, val): + if val == 'M': + self.optimization_time_label.setDisabled(False) + self.optimization_time_entry.setDisabled(False) + else: + self.optimization_time_label.setDisabled(True) + self.optimization_time_entry.setDisabled(True) diff --git a/app_Main.py b/app_Main.py index b7256f3c..4b36832e 100644 --- a/app_Main.py +++ b/app_Main.py @@ -1578,11 +1578,16 @@ class App(QtCore.QObject): self.set_ui_title(name=_("New Project - Not saved")) - # disable the Excellon path optimizations made with Google OR-Tools if the app is run on a 32bit platform current_platform = platform.architecture()[0] if current_platform != '64bit': - self.ui.excellon_defaults_form.excellon_gen_group.excellon_optimization_radio.set_value('T') - self.ui.excellon_defaults_form.excellon_gen_group.excellon_optimization_radio.setDisabled(True) + # set Excellon path optimizations algorithm to TSA if the app is run on a 32bit platform + # modes 'M' or 'B' are not allowed when the app is running in 32bit platform + if self.defaults['excellon_optimization_type'] in ['M', 'B']: + self.ui.excellon_defaults_form.excellon_gen_group.excellon_optimization_radio.set_value('T') + # set Geometry path optimizations algorithm to Rtree if the app is run on a 32bit platform + # modes 'M' or 'B' are not allowed when the app is running in 32bit platform + if self.defaults['geometry_optimization_type'] in ['M', 'B']: + self.ui.geometry_defaults_form.geometry_gen_group.opt_algorithm_radio.set_value('R') # ########################################################################################################### # ########################################### EXCLUSION AREAS ###############################################