From e016bf0224276119897dbd2aab6f8459b093f5aa Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 6 Jan 2021 15:05:22 +0200 Subject: [PATCH] - allowed some more parameters to have negative values (tool diameters especially) - some more tools now have a Beginner/Advanced mode --- CHANGELOG.md | 5 + appGUI/GUIElements.py | 4 +- .../geometry/GeometryAdvOptPrefGroupUI.py | 4 +- .../tools/ToolsDrillPrefGroupUI.py | 2 +- .../tools/ToolsPaintPrefGroupUI.py | 2 +- appTools/ToolCorners.py | 90 ++++++++++++++++-- appTools/ToolDrilling.py | 2 +- appTools/ToolFollow.py | 82 ++++++++++++++-- appTools/ToolIsolation.py | 11 ++- appTools/ToolMilling.py | 2 +- appTools/ToolNCC.py | 2 +- appTools/ToolPaint.py | 2 +- appTools/ToolPanelize.py | 93 +++++++++++++++++-- appTools/ToolPunchGerber.py | 79 ++++++++++++++-- 14 files changed, 342 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 328d758f..56208fb3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ CHANGELOG for FlatCAM beta ================================================= +6.01.2021 + +- allowed some more parameters to have negative values (tool diameters especially) +- some more tools now have a Beginner/Advanced mode + 5.01.2021 - changing some parameters from 'geometry_' to 'tools_mill_' format diff --git a/appGUI/GUIElements.py b/appGUI/GUIElements.py index a3649784..cb8b9cd1 100644 --- a/appGUI/GUIElements.py +++ b/appGUI/GUIElements.py @@ -21,6 +21,7 @@ import re import logging import html import sys +import inspect import gettext import appTranslation as fcTranslate @@ -97,7 +98,8 @@ class RadioSet(QtWidgets.QWidget): if choice['value'] == val: choice['radio'].setChecked(True) return - log.error("Value given is not part of this RadioSet: %s" % str(val)) + log.error(str(inspect.stack()[1][3]) + " -> Value given is not part of this RadioSet: %s" % str(val)) + log.error(str(self.choices)) def setOptionsDisabled(self, options: list, val: bool) -> None: for option in self.choices: diff --git a/appGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py b/appGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py index 5c151689..fcbe17dc 100644 --- a/appGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py +++ b/appGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py @@ -236,7 +236,7 @@ class GeometryAdvOptPrefGroupUI(OptionsGroupUI): self.over_z_label.setToolTip(_("The height Z to which the tool will rise in order to avoid\n" "an interdiction area.")) self.over_z_entry = FCDoubleSpinner() - self.over_z_entry.set_range(0.000, 10000.0000) + self.over_z_entry.set_range(-10000.000, 10000.0000) self.over_z_entry.set_precision(self.decimals) grid1.addWidget(self.over_z_label, 18, 0) @@ -264,7 +264,7 @@ class GeometryAdvOptPrefGroupUI(OptionsGroupUI): ) self.polish_dia_entry = FCDoubleSpinner() self.polish_dia_entry.set_precision(self.decimals) - self.polish_dia_entry.set_range(0.000, 10000.0000) + self.polish_dia_entry.set_range(-10000.000, 10000.0000) grid1.addWidget(self.polish_dia_lbl, 24, 0) grid1.addWidget(self.polish_dia_entry, 24, 1) diff --git a/appGUI/preferences/tools/ToolsDrillPrefGroupUI.py b/appGUI/preferences/tools/ToolsDrillPrefGroupUI.py index d09b096d..4a95e899 100644 --- a/appGUI/preferences/tools/ToolsDrillPrefGroupUI.py +++ b/appGUI/preferences/tools/ToolsDrillPrefGroupUI.py @@ -422,7 +422,7 @@ class ToolsDrillPrefGroupUI(OptionsGroupUI): self.over_z_label.setToolTip(_("The height Z to which the tool will rise in order to avoid\n" "an interdiction area.")) self.over_z_entry = FCDoubleSpinner() - self.over_z_entry.set_range(0.000, 10000.0000) + self.over_z_entry.set_range(-10000.000, 10000.0000) self.over_z_entry.set_precision(self.decimals) grid0.addWidget(self.over_z_label, 55, 0) diff --git a/appGUI/preferences/tools/ToolsPaintPrefGroupUI.py b/appGUI/preferences/tools/ToolsPaintPrefGroupUI.py index 6dabfc07..21713613 100644 --- a/appGUI/preferences/tools/ToolsPaintPrefGroupUI.py +++ b/appGUI/preferences/tools/ToolsPaintPrefGroupUI.py @@ -119,7 +119,7 @@ class ToolsPaintPrefGroupUI(OptionsGroupUI): ) self.newdia_entry = FCDoubleSpinner() self.newdia_entry.set_precision(self.decimals) - self.newdia_entry.set_range(0.000, 10000.0000) + self.newdia_entry.set_range(-10000.000, 10000.0000) self.newdia_entry.setObjectName(_("Tool Dia")) grid0.addWidget(self.newdialabel, 5, 0) diff --git a/appTools/ToolCorners.py b/appTools/ToolCorners.py index 3aee874e..7dfddefd 100644 --- a/appTools/ToolCorners.py +++ b/appTools/ToolCorners.py @@ -58,7 +58,10 @@ class ToolCorners(AppTool): self.grb_steps_per_circle = self.app.defaults["gerber_circle_steps"] - # SIGNALS + # ############################################################################# + # ############################ SIGNALS ######################################## + # ############################################################################# + self.ui.level.toggled.connect(self.on_level_changed) self.ui.add_marker_button.clicked.connect(self.add_markers) self.ui.toggle_all_cb.toggled.connect(self.on_toggle_all) self.ui.drill_button.clicked.connect(self.on_create_drill_object) @@ -122,6 +125,62 @@ class ToolCorners(AppTool): self.ui.type_radio.set_value(self.app.defaults["tools_corners_type"]) self.ui.drill_dia_entry.set_value(self.app.defaults["tools_corners_drill_dia"]) + # Show/Hide Advanced Options + app_mode = self.app.defaults["global_app_level"] + self.change_level(app_mode) + + def change_level(self, level): + """ + + :param level: application level: either 'b' or 'a' + :type level: str + :return: + """ + + if level == 'a': + self.ui.level.setChecked(True) + else: + self.ui.level.setChecked(False) + self.on_level_changed(self.ui.level.isChecked()) + + def on_level_changed(self, checked): + if not checked: + self.ui.level.setText('%s' % _('Beginner')) + self.ui.level.setStyleSheet(""" + QToolButton + { + color: green; + } + """) + + self.ui.drills_label.hide() + self.ui.drill_dia_label.hide() + self.ui.drill_dia_entry.hide() + self.ui.drill_button.hide() + + self.ui.separator_line_2.hide() + + self.ui.check_label.hide() + self.ui.check_button.hide() + else: + self.ui.level.setText('%s' % _('Advanced')) + self.ui.level.setStyleSheet(""" + QToolButton + { + color: red; + } + """) + + self.ui.drills_label.show() + self.ui.drill_dia_label.show() + self.ui.drill_dia_entry.show() + self.ui.drill_button.show() + + self.ui.separator_line_2.show() + + self.ui.check_label.show() + self.ui.check_button.show() + def on_toggle_all(self, val): self.ui.bl_cb.set_value(val) self.ui.br_cb.set_value(val) @@ -583,6 +642,9 @@ class CornersUI: self.decimals = self.app.decimals self.layout = layout + self.title_box = QtWidgets.QHBoxLayout() + self.layout.addLayout(self.title_box) + # ## Title title_label = FCLabel("%s" % self.toolName) title_label.setStyleSheet(""" @@ -592,7 +654,23 @@ class CornersUI: font-weight: bold; } """) - self.layout.addWidget(title_label) + self.title_box.addWidget(title_label) + + # App Level label + self.level = QtWidgets.QToolButton() + self.level.setToolTip( + _( + "BASIC is suitable for a beginner. Many parameters\n" + "are hidden from the user in this mode.\n" + "ADVANCED mode will make available all parameters.\n\n" + "To change the application LEVEL, go to:\n" + "Edit -> Preferences -> General and check:\n" + "'APP. LEVEL' radio button." + ) + ) + self.level.setCheckable(True) + self.title_box.addWidget(self.level) + self.layout.addWidget(FCLabel("")) # Gerber object # @@ -775,10 +853,10 @@ class CornersUI: """) grid_lay.addWidget(self.drill_button, 20, 0, 1, 2) - separator_line_2 = QtWidgets.QFrame() - separator_line_2.setFrameShape(QtWidgets.QFrame.HLine) - separator_line_2.setFrameShadow(QtWidgets.QFrame.Sunken) - grid_lay.addWidget(separator_line_2, 22, 0, 1, 2) + self.separator_line_2 = QtWidgets.QFrame() + self.separator_line_2.setFrameShape(QtWidgets.QFrame.HLine) + self.separator_line_2.setFrameShadow(QtWidgets.QFrame.Sunken) + grid_lay.addWidget(self.separator_line_2, 22, 0, 1, 2) # Check is corners self.check_label = FCLabel('%s' % _('Check in Locations').upper()) diff --git a/appTools/ToolDrilling.py b/appTools/ToolDrilling.py index b62e9d2c..0b87453e 100644 --- a/appTools/ToolDrilling.py +++ b/appTools/ToolDrilling.py @@ -2750,7 +2750,7 @@ class DrillingUI: self.over_z_label.setToolTip(_("The height Z to which the tool will rise in order to avoid\n" "an interdiction area.")) self.over_z_entry = FCDoubleSpinner() - self.over_z_entry.set_range(0.000, 10000.0000) + self.over_z_entry.set_range(-10000.0000, 10000.0000) self.over_z_entry.set_precision(self.decimals) self.over_z_entry.setObjectName("e_area_overz") diff --git a/appTools/ToolFollow.py b/appTools/ToolFollow.py index 1f09ba1d..8539d476 100644 --- a/appTools/ToolFollow.py +++ b/appTools/ToolFollow.py @@ -69,7 +69,10 @@ class ToolFollow(AppTool, Gerber): # it is made False by first click to signify that the shape is complete self.poly_drawn = False - # Signals + # ############################################################################# + # ############################ SIGNALS ######################################## + # ############################################################################# + self.ui.level.toggled.connect(self.on_level_changed) self.ui.selectmethod_radio.activated_custom.connect(self.ui.on_selection) self.ui.generate_geometry_button.clicked.connect(self.on_generate_geometry_click) @@ -132,6 +135,54 @@ class ToolFollow(AppTool, Gerber): self.poly_drawn = False self.area_sel_disconnect_flag = False + # Show/Hide Advanced Options + app_mode = self.app.defaults["global_app_level"] + self.change_level(app_mode) + + def change_level(self, level): + """ + + :param level: application level: either 'b' or 'a' + :type level: str + :return: + """ + + if level == 'a': + self.ui.level.setChecked(True) + else: + self.ui.level.setChecked(False) + self.on_level_changed(self.ui.level.isChecked()) + + def on_level_changed(self, checked): + if not checked: + self.ui.level.setText('%s' % _('Beginner')) + self.ui.level.setStyleSheet(""" + QToolButton + { + color: green; + } + """) + + # Add Tool section + self.ui.select_label.hide() + self.ui.selectmethod_radio.hide() + self.ui.param_title.hide() + self.ui.separator_line.hide() + else: + self.ui.level.setText('%s' % _('Advanced')) + self.ui.level.setStyleSheet(""" + QToolButton + { + color: red; + } + """) + + # Add Tool section + self.ui.select_label.show() + self.ui.selectmethod_radio.show() + self.ui.param_title.show() + self.ui.separator_line.show() + def on_generate_geometry_click(self): obj_name = self.ui.object_combo.currentText() @@ -625,6 +676,21 @@ class FollowUI: self.title_box.addWidget(title_label) + # App Level label + self.level = QtWidgets.QToolButton() + self.level.setToolTip( + _( + "BASIC is suitable for a beginner. Many parameters\n" + "are hidden from the user in this mode.\n" + "ADVANCED mode will make available all parameters.\n\n" + "To change the application LEVEL, go to:\n" + "Edit -> Preferences -> General and check:\n" + "'APP. LEVEL' radio button." + ) + ) + self.level.setCheckable(True) + self.title_box.addWidget(self.level) + self.obj_combo_label = FCLabel('%s:' % _("GERBER")) self.obj_combo_label.setToolTip( _("Source object for following geometry.") @@ -658,8 +724,8 @@ class FollowUI: grid0.addWidget(self.param_title, 0, 0, 1, 2) # Polygon selection - selectlabel = FCLabel('%s:' % _('Selection')) - selectlabel.setToolTip( + self.select_label = FCLabel('%s:' % _('Selection')) + self.select_label.setToolTip( _("Selection of area to be processed.\n" "- 'All Polygons' - the process will start after click.\n" "- 'Area Selection' - left mouse click to start selection of the area to be processed.") @@ -668,7 +734,7 @@ class FollowUI: self.selectmethod_radio = RadioSet([{'label': _("All"), 'value': 'all'}, {'label': _("Area Selection"), 'value': 'area'}]) - grid0.addWidget(selectlabel, 2, 0) + grid0.addWidget(self.select_label, 2, 0) grid0.addWidget(self.selectmethod_radio, 2, 1) # Area Selection shape @@ -686,10 +752,10 @@ class FollowUI: self.area_shape_label.hide() self.area_shape_radio.hide() - separator_line = QtWidgets.QFrame() - separator_line.setFrameShape(QtWidgets.QFrame.HLine) - separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) - grid0.addWidget(separator_line, 6, 0, 1, 2) + self.separator_line = QtWidgets.QFrame() + self.separator_line.setFrameShape(QtWidgets.QFrame.HLine) + self.separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) + grid0.addWidget(self.separator_line, 6, 0, 1, 2) self.generate_geometry_button = FCButton("%s" % _("Generate Geometry")) self.generate_geometry_button.setIcon(QtGui.QIcon(self.app.resource_location + '/geometry32.png')) diff --git a/appTools/ToolIsolation.py b/appTools/ToolIsolation.py index 5e6acc00..8e9d93d7 100644 --- a/appTools/ToolIsolation.py +++ b/appTools/ToolIsolation.py @@ -311,7 +311,7 @@ class ToolIsolation(AppTool, Gerber): oname = option[len(kind) + 1:] self.default_data[oname] = self.app.options[option] - if option.find('tools_mill_') == 0 or option.find('tools_iso_') == 0: + if option.find('tools_') == 0: self.default_data[option] = self.app.options[option] self.default_data.update({ @@ -451,6 +451,9 @@ class ToolIsolation(AppTool, Gerber): self.ui.type_excobj_radio.hide() self.ui.exc_obj_combo.hide() + self.ui.select_label.hide() + self.ui.select_combo.hide() + # Context Menu section self.ui.tools_table.removeContextMenu() else: @@ -503,6 +506,9 @@ class ToolIsolation(AppTool, Gerber): self.ui.type_excobj_radio.show() self.ui.exc_obj_combo.show() + self.ui.select_label.show() + self.ui.select_combo.show() + # Context Menu section self.ui.tools_table.setupContextMenu() @@ -3180,7 +3186,6 @@ class IsoUI: "'APP. LEVEL' radio button." ) ) - # self.level.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) self.level.setCheckable(True) self.title_box.addWidget(self.level) @@ -3299,7 +3304,7 @@ class IsoUI: self.new_tooldia_entry = FCDoubleSpinner(callback=self.confirmation_message) self.new_tooldia_entry.set_precision(self.decimals) - self.new_tooldia_entry.set_range(0.000, 10000.0000) + self.new_tooldia_entry.set_range(-10000.0000, 10000.0000) self.new_tooldia_entry.setObjectName("i_new_tooldia") new_tool_lay.addWidget(self.new_tooldia_entry) diff --git a/appTools/ToolMilling.py b/appTools/ToolMilling.py index 1a567b69..dabb2cd8 100644 --- a/appTools/ToolMilling.py +++ b/appTools/ToolMilling.py @@ -4300,7 +4300,7 @@ class MillingUI: self.over_z_label.setToolTip(_("The height Z to which the tool will rise in order to avoid\n" "an interdiction area.")) self.over_z_entry = FCDoubleSpinner() - self.over_z_entry.set_range(0.000, 10000.0000) + self.over_z_entry.set_range(-10000.0000, 10000.0000) self.over_z_entry.set_precision(self.decimals) grid_a1.addWidget(self.over_z_label, 2, 0) diff --git a/appTools/ToolNCC.py b/appTools/ToolNCC.py index a1662b4b..b4dc64b2 100644 --- a/appTools/ToolNCC.py +++ b/appTools/ToolNCC.py @@ -4264,7 +4264,7 @@ class NccUI: self.new_tooldia_entry = FCDoubleSpinner(callback=self.confirmation_message) self.new_tooldia_entry.set_precision(self.decimals) - self.new_tooldia_entry.set_range(0.000, 10000.0000) + self.new_tooldia_entry.set_range(-10000.0000, 10000.0000) self.new_tooldia_entry.setObjectName(_("Tool Dia")) new_tool_lay.addWidget(self.new_tooldia_entry) diff --git a/appTools/ToolPaint.py b/appTools/ToolPaint.py index a7969a75..34c32821 100644 --- a/appTools/ToolPaint.py +++ b/appTools/ToolPaint.py @@ -3048,7 +3048,7 @@ class PaintUI: ) self.new_tooldia_entry = FCDoubleSpinner(callback=self.confirmation_message) self.new_tooldia_entry.set_precision(self.decimals) - self.new_tooldia_entry.set_range(0.000, 10000.0000) + self.new_tooldia_entry.set_range(-10000.0000, 10000.0000) self.new_tooldia_entry.setObjectName('p_tool_dia') self.grid3.addWidget(self.new_tooldia_lbl, 2, 0) diff --git a/appTools/ToolPanelize.py b/appTools/ToolPanelize.py index a90c4ecf..e3a49f3f 100644 --- a/appTools/ToolPanelize.py +++ b/appTools/ToolPanelize.py @@ -46,7 +46,10 @@ class Panelize(AppTool): self.ui = PanelizeUI(layout=self.layout, app=self.app) self.toolName = self.ui.toolName - # Signals + # ############################################################################# + # ############################ SIGNALS ######################################## + # ############################################################################# + self.ui.level.toggled.connect(self.on_level_changed) self.ui.reference_radio.activated_custom.connect(self.on_reference_radio_changed) self.ui.panelize_object_button.clicked.connect(self.on_panelize) self.ui.type_obj_combo.currentIndexChanged.connect(self.on_type_obj_index_changed) @@ -161,6 +164,10 @@ class Panelize(AppTool): self.on_type_obj_index_changed() self.on_type_box_index_changed() + # Show/Hide Advanced Options + app_mode = self.app.defaults["global_app_level"] + self.change_level(app_mode) + def on_type_obj_index_changed(self): obj_type = self.ui.type_obj_combo.currentIndex() self.ui.object_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex())) @@ -219,6 +226,62 @@ class Panelize(AppTool): except Exception: pass + def change_level(self, level): + """ + + :param level: application level: either 'b' or 'a' + :type level: str + :return: + """ + + if level == 'a': + self.ui.level.setChecked(True) + else: + self.ui.level.setChecked(False) + self.on_level_changed(self.ui.level.isChecked()) + + def on_level_changed(self, checked): + if not checked: + self.ui.level.setText('%s' % _('Beginner')) + self.ui.level.setStyleSheet(""" + QToolButton + { + color: green; + } + """) + + # Add Tool section + self.ui.panel_type_label.hide() + self.ui.panel_type_radio.hide() + self.ui.optimization_cb.hide() + + self.ui.constrain_cb.hide() + self.ui.x_width_lbl.hide() + self.ui.x_width_entry.hide() + self.ui.y_height_lbl.hide() + self.ui.y_height_entry.hide() + self.ui.separator_line.hide() + else: + self.ui.level.setText('%s' % _('Advanced')) + self.ui.level.setStyleSheet(""" + QToolButton + { + color: red; + } + """) + + # Add Tool section + self.ui.panel_type_label.show() + self.ui.panel_type_radio.show() + self.ui.optimization_cb.show() + + self.ui.constrain_cb.show() + self.ui.x_width_lbl.show() + self.ui.x_width_entry.show() + self.ui.y_height_lbl.show() + self.ui.y_height_entry.show() + self.ui.separator_line.show() + def on_panelize(self): name = self.ui.object_combo.currentText() @@ -989,6 +1052,9 @@ class PanelizeUI: self.decimals = self.app.decimals self.layout = layout + self.title_box = QtWidgets.QHBoxLayout() + self.layout.addLayout(self.title_box) + # ## Title title_label = FCLabel("%s" % self.toolName) title_label.setStyleSheet(""" @@ -998,7 +1064,22 @@ class PanelizeUI: font-weight: bold; } """) - self.layout.addWidget(title_label) + self.title_box.addWidget(title_label) + + # App Level label + self.level = QtWidgets.QToolButton() + self.level.setToolTip( + _( + "BASIC is suitable for a beginner. Many parameters\n" + "are hidden from the user in this mode.\n" + "ADVANCED mode will make available all parameters.\n\n" + "To change the application LEVEL, go to:\n" + "Edit -> Preferences -> General and check:\n" + "'APP. LEVEL' radio button." + ) + ) + self.level.setCheckable(True) + self.title_box.addWidget(self.level) grid0 = QtWidgets.QGridLayout() grid0.setColumnStretch(0, 0) @@ -1219,10 +1300,10 @@ class PanelizeUI: self.constrain_sel = OptionalInputSection( self.constrain_cb, [self.x_width_lbl, self.x_width_entry, self.y_height_lbl, self.y_height_entry]) - separator_line = QtWidgets.QFrame() - separator_line.setFrameShape(QtWidgets.QFrame.HLine) - separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) - grid0.addWidget(separator_line, 38, 0, 1, 2) + self.separator_line = QtWidgets.QFrame() + self.separator_line.setFrameShape(QtWidgets.QFrame.HLine) + self.separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) + grid0.addWidget(self.separator_line, 38, 0, 1, 2) # Buttons self.panelize_object_button = FCButton(_("Panelize Object")) diff --git a/appTools/ToolPunchGerber.py b/appTools/ToolPunchGerber.py index 2991da1d..8c437d83 100644 --- a/appTools/ToolPunchGerber.py +++ b/appTools/ToolPunchGerber.py @@ -73,8 +73,9 @@ class ToolPunchGerber(AppTool, Gerber): self.toolName = self.ui.toolName # ############################################################################# - # ## Signals + # ############################ SIGNALS ######################################## # ############################################################################# + self.ui.level.toggled.connect(self.on_level_changed) self.ui.method_punch.activated_custom.connect(self.on_method) self.ui.reset_button.clicked.connect(self.set_tool_ui) self.ui.punch_object_button.clicked.connect(self.on_punch_object_click) @@ -225,6 +226,10 @@ class ToolPunchGerber(AppTool, Gerber): # list of dicts to store the selection result in the manual selection self.manual_pads = [] + # Show/Hide Advanced Options + app_mode = self.app.defaults["global_app_level"] + self.change_level(app_mode) + def build_tool_ui(self): self.ui_disconnect() @@ -349,6 +354,50 @@ class ToolPunchGerber(AppTool, Gerber): self.ui_connect() + def change_level(self, level): + """ + + :param level: application level: either 'b' or 'a' + :type level: str + :return: + """ + + if level == 'a': + self.ui.level.setChecked(True) + else: + self.ui.level.setChecked(False) + self.on_level_changed(self.ui.level.isChecked()) + + def on_level_changed(self, checked): + if not checked: + self.ui.level.setText('%s' % _('Beginner')) + self.ui.level.setStyleSheet(""" + QToolButton + { + color: green; + } + """) + + # Add Tool section + self.ui.sel_label.hide() + self.ui.punch_type_label.hide() + self.ui.punch_type_radio.hide() + self.ui.separator_line3.hide() + else: + self.ui.level.setText('%s' % _('Advanced')) + self.ui.level.setStyleSheet(""" + QToolButton + { + color: red; + } + """) + + # Add Tool section + self.ui.sel_label.show() + self.ui.punch_type_label.show() + self.ui.punch_type_radio.show() + self.ui.separator_line3.show() + def on_select_all(self, state): self.ui_disconnect() if state: @@ -1894,6 +1943,9 @@ class PunchUI: self.decimals = self.app.decimals self.layout = layout + self.title_box = QtWidgets.QHBoxLayout() + self.layout.addLayout(self.title_box) + # ## Title title_label = FCLabel("%s" % self.toolName) title_label.setStyleSheet(""" @@ -1903,7 +1955,22 @@ class PunchUI: font-weight: bold; } """) - self.layout.addWidget(title_label) + self.title_box.addWidget(title_label) + + # App Level label + self.level = QtWidgets.QToolButton() + self.level.setToolTip( + _( + "BASIC is suitable for a beginner. Many parameters\n" + "are hidden from the user in this mode.\n" + "ADVANCED mode will make available all parameters.\n\n" + "To change the application LEVEL, go to:\n" + "Edit -> Preferences -> General and check:\n" + "'APP. LEVEL' radio button." + ) + ) + self.level.setCheckable(True) + self.title_box.addWidget(self.level) # Punch Drill holes self.layout.addWidget(FCLabel("")) @@ -2241,10 +2308,10 @@ class PunchUI: sel_hlay.addWidget(self.clear_all_btn) grid0.addLayout(sel_hlay, 22, 0, 1, 2) - separator_line3 = QtWidgets.QFrame() - separator_line3.setFrameShape(QtWidgets.QFrame.HLine) - separator_line3.setFrameShadow(QtWidgets.QFrame.Sunken) - grid0.addWidget(separator_line3, 24, 0, 1, 2) + self.separator_line3 = QtWidgets.QFrame() + self.separator_line3.setFrameShape(QtWidgets.QFrame.HLine) + self.separator_line3.setFrameShadow(QtWidgets.QFrame.Sunken) + grid0.addWidget(self.separator_line3, 24, 0, 1, 2) # Buttons self.punch_object_button = FCButton(_("Punch Gerber"))