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)