diff --git a/CHANGELOG.md b/CHANGELOG.md
index a2dd532a..ba05583d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,10 @@ CHANGELOG for FlatCAM beta
=================================================
+8.01.2021
+
+- added the toggle button for Beginner/Advanced mode for the CNCjob, Geometry, Gerber, Excellon Objects UI (Properties Tab)
+
6.01.2021
- allowed some more parameters to have negative values (tool diameters especially)
diff --git a/appGUI/ObjectUI.py b/appGUI/ObjectUI.py
index 944c492d..512a1953 100644
--- a/appGUI/ObjectUI.py
+++ b/appGUI/ObjectUI.py
@@ -65,8 +65,8 @@ class ObjectUI(QtWidgets.QWidget):
self.title_label.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
self.title_box.addWidget(self.title_label, stretch=1)
- # ## App Level label
- self.level = FCLabel("")
+ # App Level label
+ self.level = QtWidgets.QToolButton()
self.level.setToolTip(
_(
"BASIC is suitable for a beginner. Many parameters\n"
@@ -77,7 +77,7 @@ class ObjectUI(QtWidgets.QWidget):
"'APP. LEVEL' radio button."
)
)
- self.level.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
+ self.level.setCheckable(True)
self.title_box.addWidget(self.level)
# ## Box box for custom widgets
diff --git a/appObjects/FlatCAMCNCJob.py b/appObjects/FlatCAMCNCJob.py
index c11e803b..31418b96 100644
--- a/appObjects/FlatCAMCNCJob.py
+++ b/appObjects/FlatCAMCNCJob.py
@@ -453,6 +453,8 @@ class CNCJobObject(FlatCAMObj, CNCjob):
# ##################################### SIGNALS CONNECTIONS ###################################################
# #############################################################################################################
+ self.ui.level.toggled.connect(self.on_level_changed)
+
# annotation signal
try:
self.ui.annotation_cb.stateChanged.disconnect(self.on_annotation_change)
@@ -510,6 +512,46 @@ class CNCJobObject(FlatCAMObj, CNCjob):
# gc is text
self.source_file = gc
+ # 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.annotation_cb.hide()
+ else:
+ self.ui.level.setText('%s' % _('Advanced'))
+ self.ui.level.setStyleSheet("""
+ QToolButton
+ {
+ color: red;
+ }
+ """)
+
+ self.ui.annotation_cb.show()
+
def ui_connect(self):
for row in range(self.ui.cnc_tools_table.rowCount()):
self.ui.cnc_tools_table.cellWidget(row, 6).clicked.connect(self.on_plot_cb_click_table)
diff --git a/appObjects/FlatCAMExcellon.py b/appObjects/FlatCAMExcellon.py
index 997d69c9..68071877 100644
--- a/appObjects/FlatCAMExcellon.py
+++ b/appObjects/FlatCAMExcellon.py
@@ -145,26 +145,17 @@ class ExcellonObject(FlatCAMObj, Excellon):
self.to_form()
- # Show/Hide Advanced Options
- if self.app.defaults["global_app_level"] == 'b':
- self.ui.level.setText('%s' % _('Beginner'))
-
- self.ui.tools_table.setColumnHidden(4, True)
- self.ui.tools_table.setColumnHidden(5, True)
- self.ui.table_visibility_cb.set_value(True)
- self.ui.table_visibility_cb.hide()
- self.ui.autoload_db_cb.set_value(False)
- self.ui.autoload_db_cb.hide()
- else:
- self.ui.level.setText('%s' % _('Advanced'))
- self.ui.table_visibility_cb.show()
- self.ui.table_visibility_cb.set_value(self.app.defaults["excellon_tools_table_display"])
- self.on_table_visibility_toggle(state=self.app.defaults["excellon_tools_table_display"])
- self.ui.autoload_db_cb.show()
-
assert isinstance(self.ui, ExcellonObjectUI), \
"Expected a ExcellonObjectUI, got %s" % type(self.ui)
+ # Show/Hide Advanced Options
+ app_mode = self.app.defaults["global_app_level"]
+ self.change_level(app_mode)
+
+ # #############################################################################
+ # ############################ SIGNALS ########################################
+ # #############################################################################
+ self.ui.level.toggled.connect(self.on_level_changed)
self.ui.plot_cb.stateChanged.connect(self.on_plot_cb_click)
self.ui.solid_cb.stateChanged.connect(self.on_solid_cb_click)
self.ui.multicolored_cb.stateChanged.connect(self.on_multicolored_cb_click)
@@ -196,6 +187,51 @@ class ExcellonObject(FlatCAMObj, Excellon):
self.units_found = self.app.defaults['units']
+ 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.tools_table.setColumnHidden(4, True)
+ self.ui.tools_table.setColumnHidden(5, True)
+ self.ui.table_visibility_cb.set_value(True)
+ self.ui.table_visibility_cb.hide()
+ self.ui.autoload_db_cb.hide()
+ else:
+ self.ui.level.setText('%s' % _('Advanced'))
+ self.ui.level.setStyleSheet("""
+ QToolButton
+ {
+ color: red;
+ }
+ """)
+
+ self.ui.tools_table.setColumnHidden(4, False)
+ self.ui.tools_table.setColumnHidden(5, False)
+ self.ui.table_visibility_cb.show()
+ self.ui.table_visibility_cb.set_value(self.app.defaults["excellon_tools_table_display"])
+ self.on_table_visibility_toggle(state=self.app.defaults["excellon_tools_table_display"])
+ self.ui.autoload_db_cb.show()
+
def build_ui(self):
"""
Will (re)build the Excellon UI updating it (the tool table)
diff --git a/appObjects/FlatCAMGeometry.py b/appObjects/FlatCAMGeometry.py
index c4830377..0a092b60 100644
--- a/appObjects/FlatCAMGeometry.py
+++ b/appObjects/FlatCAMGeometry.py
@@ -649,7 +649,9 @@ class GeometryObject(FlatCAMObj, Geometry):
# self.ui.e_cut_entry.setDisabled(False) if self.app.defaults['geometry_extracut'] else \
# self.ui.e_cut_entry.setDisabled(True)
# self.ui.extracut_cb.toggled.connect(lambda state: self.ui.e_cut_entry.setDisabled(not state))
- #
+
+ self.ui.level.toggled.connect(self.on_level_changed)
+
# Plot state signals
# self.ui.plot_cb.stateChanged.connect(self.on_plot_cb_click)
self.ui.multicolored_cb.stateChanged.connect(self.on_multicolored_cb_click)
@@ -700,10 +702,41 @@ class GeometryObject(FlatCAMObj, Geometry):
# self.launch_job.connect(self.mtool_gen_cncjob)
# Show/Hide Advanced Options
- if self.app.defaults["global_app_level"] == 'b':
- self.ui.level.setText('%s' % _('Beginner'))
+ 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.setText('%s' % _('Advanced'))
+ 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;
+ }
+ """)
+
+ else:
+ self.ui.level.setText('%s' % _('Advanced'))
+ self.ui.level.setStyleSheet("""
+ QToolButton
+ {
+ color: red;
+ }
+ """)
def on_properties(self, state):
if state:
diff --git a/appObjects/FlatCAMGerber.py b/appObjects/FlatCAMGerber.py
index 8954d3db..dbb341ff 100644
--- a/appObjects/FlatCAMGerber.py
+++ b/appObjects/FlatCAMGerber.py
@@ -141,6 +141,11 @@ class GerberObject(FlatCAMObj, Gerber):
assert isinstance(self.ui, GerberObjectUI), \
"Expected a GerberObjectUI, got %s" % type(self.ui)
+ # #############################################################################
+ # ############################ SIGNALS ########################################
+ # #############################################################################
+ self.ui.level.toggled.connect(self.on_level_changed)
+
self.ui.plot_cb.stateChanged.connect(self.on_plot_cb_click)
self.ui.solid_cb.stateChanged.connect(self.on_solid_cb_click)
self.ui.multicolored_cb.stateChanged.connect(self.on_multicolored_cb_click)
@@ -171,16 +176,8 @@ class GerberObject(FlatCAMObj, Gerber):
self.do_buffer_signal.connect(self.on_generate_buffer)
# Show/Hide Advanced Options
- if self.app.defaults["global_app_level"] == 'b':
- self.ui.level.setText('%s' % _('Beginner'))
-
- self.ui.apertures_table_label.hide()
- self.ui.aperture_table_visibility_cb.hide()
-
- self.ui.follow_cb.hide()
-
- else:
- self.ui.level.setText('%s' % _('Advanced'))
+ app_mode = self.app.defaults["global_app_level"]
+ self.change_level(app_mode)
if self.app.defaults["gerber_buffering"] == 'no':
self.ui.create_buffer_button.show()
@@ -198,6 +195,49 @@ class GerberObject(FlatCAMObj, Gerber):
self.build_ui()
self.units_found = self.app.defaults['units']
+ 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.apertures_table_label.hide()
+ self.ui.aperture_table_visibility_cb.set_value(False)
+ self.ui.aperture_table_visibility_cb.hide()
+
+ self.ui.follow_cb.hide()
+ else:
+ self.ui.level.setText('%s' % _('Advanced'))
+ self.ui.level.setStyleSheet("""
+ QToolButton
+ {
+ color: red;
+ }
+ """)
+
+ self.ui.apertures_table_label.show()
+ self.ui.aperture_table_visibility_cb.show()
+
+ self.ui.follow_cb.show()
+
def build_ui(self):
FlatCAMObj.build_ui(self)