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"))