From a05c174ec87ba772952f93519ae8e4121b063398 Mon Sep 17 00:00:00 2001 From: David Robertson Date: Wed, 29 Apr 2020 02:46:52 +0100 Subject: [PATCH] Fix some things that I broke and further cleanup --- FlatCAMApp.py | 314 +++++++++------------------- FlatCAMBookmark.py | 2 +- FlatCAMDB.py | 8 +- defaults.py | 23 +- flatcamEditors/FlatCAMGeoEditor.py | 8 +- flatcamEditors/FlatCAMGrbEditor.py | 2 +- flatcamEditors/FlatCAMTextEditor.py | 12 +- flatcamGUI/PreferencesUI.py | 165 ++++++++++++--- flatcamObjects/FlatCAMCNCJob.py | 2 +- flatcamObjects/FlatCAMExcellon.py | 6 +- flatcamObjects/FlatCAMGeometry.py | 2 +- flatcamObjects/FlatCAMGerber.py | 6 +- flatcamObjects/FlatCAMObj.py | 4 +- flatcamTools/ToolAlignObjects.py | 2 +- flatcamTools/ToolCalculators.py | 2 +- flatcamTools/ToolCalibration.py | 2 +- flatcamTools/ToolCopperThieving.py | 2 +- flatcamTools/ToolCutOut.py | 2 +- flatcamTools/ToolDblSided.py | 2 +- flatcamTools/ToolDistance.py | 2 +- flatcamTools/ToolDistanceMin.py | 2 +- flatcamTools/ToolExtractDrills.py | 2 +- flatcamTools/ToolFiducials.py | 2 +- flatcamTools/ToolFilm.py | 6 +- flatcamTools/ToolImage.py | 4 +- flatcamTools/ToolInvertGerber.py | 2 +- flatcamTools/ToolMove.py | 2 +- flatcamTools/ToolNCC.py | 4 +- flatcamTools/ToolOptimal.py | 2 +- flatcamTools/ToolPDF.py | 4 +- flatcamTools/ToolPaint.py | 4 +- flatcamTools/ToolPanelize.py | 2 +- flatcamTools/ToolPcbWizard.py | 2 +- flatcamTools/ToolProperties.py | 2 +- flatcamTools/ToolPunchGerber.py | 2 +- flatcamTools/ToolQRCode.py | 2 +- flatcamTools/ToolRulesCheck.py | 2 +- flatcamTools/ToolShell.py | 2 +- flatcamTools/ToolSolderPaste.py | 2 +- flatcamTools/ToolSub.py | 2 +- flatcamTools/ToolTransform.py | 2 +- 41 files changed, 314 insertions(+), 308 deletions(-) diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 83a166ae..e63786ef 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -543,7 +543,8 @@ class App(QtCore.QObject): # ##################################### UPDATE PREFERENCES GUI FORMS ######################################## # ########################################################################################################### - self.preferencesUiManager = PreferencesUIManager(defaults=self.defaults, data_path=self.data_path, ui=self.ui, inform=self.inform) + self.preferencesUiManager = PreferencesUIManager(defaults=self.defaults, data_path=self.data_path, ui=self.ui, + inform=self.inform, app=self) self.preferencesUiManager.defaults_write_form() # When the self.defaults dictionary changes will update the Preferences GUI forms @@ -2137,7 +2138,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("object2editor()") + self.defaults.report_usage("object2editor()") # disable the objects menu as it may interfere with the Editors self.ui.menuobjects.setDisabled(True) @@ -2231,7 +2232,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("editor2object()") + self.defaults.report_usage("editor2object()") # re-enable the objects menu that was disabled on entry in Editor mode self.ui.menuobjects.setDisabled(False) @@ -2409,19 +2410,6 @@ class App(QtCore.QObject): loc = os.path.dirname(__file__) return loc - def report_usage(self, resource): - """ - Increments usage counter for the given resource - in self.defaults['global_stats']. - - :param resource: Name of the resource. - :return: None - """ - - if resource in self.defaults['global_stats']: - self.defaults['global_stats'][resource] += 1 - else: - self.defaults['global_stats'][resource] = 1 def info(self, msg): """ @@ -2530,7 +2518,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_import_preferences") + self.defaults.report_usage("on_import_preferences") App.log.debug("App.on_import_preferences()") # Show file chooser @@ -2550,7 +2538,7 @@ class App(QtCore.QObject): # Load in the defaults from the chosen file self.defaults.load(filename=filename) - self.on_preferences_edited() + self.preferencesUiManager.on_preferences_edited() self.inform.emit('[success] %s: %s' % (_("Imported Defaults from"), filename)) def on_export_preferences(self): @@ -2559,7 +2547,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_export_preferences") + self.defaults.report_usage("on_export_preferences") App.log.debug("on_export_preferences()") defaults_file_content = None @@ -2604,7 +2592,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("save_to_file") + self.defaults.report_usage("save_to_file") App.log.debug("save_to_file()") self.date = str(datetime.today()).rpartition('.')[0] @@ -2902,7 +2890,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("new_excellon_object()") + self.defaults.report_usage("new_excellon_object()") self.new_object('excellon', 'new_exc', lambda x, y: None, plot=False) @@ -2912,7 +2900,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("new_geometry_object()") + self.defaults.report_usage("new_geometry_object()") def initialize(obj, app): obj.multitool = False @@ -2925,7 +2913,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("new_gerber_object()") + self.defaults.report_usage("new_gerber_object()") def initialize(grb_obj, app): grb_obj.multitool = False @@ -2952,7 +2940,7 @@ class App(QtCore.QObject): :param text: pass a source file to the newly created script to be loaded in it :return: None """ - self.report_usage("new_script_object()") + self.defaults.report_usage("new_script_object()") if text is not None: new_source_file = text @@ -2991,7 +2979,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("new_document_object()") + self.defaults.report_usage("new_document_object()") def initialize(obj, app): obj.source_file = "" @@ -3117,7 +3105,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_about") + self.defaults.report_usage("on_about") version = self.version version_date = self.version_date @@ -3521,46 +3509,6 @@ class App(QtCore.QObject): """ self.preferencesUiManager.save_defaults() - def save_toolbar_view(self): - """ - Will save the toolbar view state to the defaults - - :return: None - """ - - # Save the toolbar view - tb_status = 0 - if self.ui.toolbarfile.isVisible(): - tb_status += 1 - - if self.ui.toolbargeo.isVisible(): - tb_status += 2 - - if self.ui.toolbarview.isVisible(): - tb_status += 4 - - if self.ui.toolbartools.isVisible(): - tb_status += 8 - - if self.ui.exc_edit_toolbar.isVisible(): - tb_status += 16 - - if self.ui.geo_edit_toolbar.isVisible(): - tb_status += 32 - - if self.ui.grb_edit_toolbar.isVisible(): - tb_status += 64 - - if self.ui.snap_toolbar.isVisible(): - tb_status += 128 - - if self.ui.toolbarshell.isVisible(): - tb_status += 256 - - self.defaults["global_toolbar_view"] = tb_status - - - def final_save(self): """ Callback for doing a preferences save to file whenever the application is about to quit. @@ -4053,7 +4001,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_edit_join()") + self.defaults.report_usage("on_edit_join()") obj_name_single = str(name) if name else "Combo_SingleGeo" obj_name_multi = str(name) if name else "Combo_MultiGeo" @@ -4112,7 +4060,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_edit_join_exc()") + self.defaults.report_usage("on_edit_join_exc()") objs = self.collection.get_selected() @@ -4127,7 +4075,7 @@ class App(QtCore.QObject): return 'fail' def initialize(exc_obj, app): - ExcellonObject.merge(self, exc_list=objs, exc_final=exc_obj) + ExcellonObject.merge(exc_list=objs, exc_final=exc_obj) app.inform.emit('[success] %s.' % _("Excellon merging finished")) self.new_object("excellon", 'Combo_Excellon', initialize) @@ -4140,7 +4088,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_edit_join_grb()") + self.defaults.report_usage("on_edit_join_grb()") objs = self.collection.get_selected() @@ -4171,7 +4119,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_convert_singlegeo_to_multigeo()") + self.defaults.report_usage("on_convert_singlegeo_to_multigeo()") obj = self.collection.get_active() @@ -4205,7 +4153,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_convert_multigeo_to_singlegeo()") + self.defaults.report_usage("on_convert_multigeo_to_singlegeo()") obj = self.collection.get_active() @@ -4241,7 +4189,7 @@ class App(QtCore.QObject): :param field: the key of the self.defaults dictionary that was changed. :return: None """ - self.preferencesUiManager.defaults_write_form(field) + self.preferencesUiManager.defaults_write_form_field(field=field) if field == "units": self.set_screen_units(self.defaults['units']) @@ -4281,7 +4229,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_toggle_units") + self.defaults.report_usage("on_toggle_units") if self.toggle_units_ignore: return @@ -4538,7 +4486,7 @@ class App(QtCore.QObject): self.ui.grid_gap_y_entry.set_value(val_y, decimals=self.decimals) def on_fullscreen(self, disable=False): - self.report_usage("on_fullscreen()") + self.defaults.report_usage("on_fullscreen()") flags = self.ui.windowFlags() if self.toggle_fscreen is False and disable is False: @@ -4579,7 +4527,7 @@ class App(QtCore.QObject): self.toggle_fscreen = False def on_toggle_plotarea(self): - self.report_usage("on_toggle_plotarea()") + self.defaults.report_usage("on_toggle_plotarea()") try: name = self.ui.plot_tab_area.widget(0).objectName() @@ -4605,7 +4553,7 @@ class App(QtCore.QObject): self.ui.menu_toggle_nb.setChecked(False) def on_toggle_axis(self): - self.report_usage("on_toggle_axis()") + self.defaults.report_usage("on_toggle_axis()") if self.toggle_axis is False: if self.is_legacy is False: @@ -4635,13 +4583,13 @@ class App(QtCore.QObject): self.toggle_axis = False def on_toggle_grid(self): - self.report_usage("on_toggle_grid()") + self.defaults.report_usage("on_toggle_grid()") self.ui.grid_snap_btn.trigger() self.on_grid_snap_triggered(state=True) def on_toggle_grid_lines(self): - self.report_usage("on_toggle_grd_lines()") + self.defaults.report_usage("on_toggle_grd_lines()") tt_settings = QtCore.QSettings("Open Source", "FlatCAM") if tt_settings.contains("theme"): @@ -4839,7 +4787,7 @@ class App(QtCore.QObject): # if new color is different then mark that the Preferences are changed if film_color != current_color: - self.on_preferences_edited() + self.preferencesUiManager.on_preferences_edited() self.ui.tools_defaults_form.tools_film_group.film_color_button.setStyleSheet( "background-color:%s;" @@ -4868,7 +4816,7 @@ class App(QtCore.QObject): # if new color is different then mark that the Preferences are changed if fill_color != current_color: - self.on_preferences_edited() + self.preferencesUiManager.on_preferences_edited() self.ui.tools2_defaults_form.tools2_qrcode_group.fill_color_button.setStyleSheet( "background-color:%s;" @@ -4898,7 +4846,7 @@ class App(QtCore.QObject): # if new color is different then mark that the Preferences are changed if back_color != current_color: - self.on_preferences_edited() + self.preferencesUiManager.on_preferences_edited() self.ui.tools2_defaults_form.tools2_qrcode_group.back_color_button.setStyleSheet( "background-color:%s;" @@ -5077,7 +5025,7 @@ class App(QtCore.QObject): :param force_deletion: used by Tcl command :return: None """ - self.report_usage("on_delete()") + self.defaults.report_usage("on_delete()") response = None bt_ok = None @@ -5175,7 +5123,7 @@ class App(QtCore.QObject): # display the message for the user # and ask him to click on the desired position - self.report_usage("on_set_origin()") + self.defaults.report_usage("on_set_origin()") def origin_replot(): @@ -5345,7 +5293,7 @@ class App(QtCore.QObject): :return: """ - self.report_usage("on_jump_to()") + self.defaults.report_usage("on_jump_to()") if not custom_location: dia_box_location = None @@ -5466,7 +5414,7 @@ class App(QtCore.QObject): :return: A point location. (x, y) tuple. """ - self.report_usage("on_locate()") + self.defaults.report_usage("on_locate()") if obj is None: self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected.")) @@ -5611,7 +5559,7 @@ class App(QtCore.QObject): Will copy a selection of objects, creating new objects. :return: """ - self.report_usage("on_copy_command()") + self.defaults.report_usage("on_copy_command()") def initialize(obj_init, app): obj_init.solid_geometry = deepcopy(obj.solid_geometry) @@ -5724,7 +5672,7 @@ class App(QtCore.QObject): :param text: New name for the object. :return: """ - self.report_usage("on_rename_object()") + self.defaults.report_usage("on_rename_object()") named_obj = self.collection.get_active() for obj in named_obj: @@ -5741,7 +5689,7 @@ class App(QtCore.QObject): Will convert any object out of Gerber, Excellon, Geometry to Geometry object. :return: """ - self.report_usage("convert_any2geo()") + self.defaults.report_usage("convert_any2geo()") def initialize(obj_init, app): obj_init.solid_geometry = obj.solid_geometry @@ -5793,7 +5741,7 @@ class App(QtCore.QObject): :return: """ - self.report_usage("convert_any2gerber()") + self.defaults.report_usage("convert_any2gerber()") def initialize_geometry(obj_init, app): apertures = {} @@ -5890,7 +5838,7 @@ class App(QtCore.QObject): :return: """ - self.report_usage("on_selectall()") + self.defaults.report_usage("on_selectall()") # delete the possible selection box around a possible selected object self.delete_selection_shape() @@ -5924,65 +5872,49 @@ class App(QtCore.QObject): for tb in self.ui.pref_tab_area.widget(idx).findChildren(QtCore.QObject): try: try: - tb.textEdited.disconnect(self.on_preferences_edited) + tb.textEdited.disconnect(self.preferencesUiManager.on_preferences_edited) except (TypeError, AttributeError): pass - tb.textEdited.connect(self.on_preferences_edited) + tb.textEdited.connect(self.preferencesUiManager.on_preferences_edited) except AttributeError: pass try: try: - tb.modificationChanged.disconnect(self.on_preferences_edited) + tb.modificationChanged.disconnect(self.preferencesUiManager.on_preferences_edited) except (TypeError, AttributeError): pass - tb.modificationChanged.connect(self.on_preferences_edited) + tb.modificationChanged.connect(self.preferencesUiManager.on_preferences_edited) except AttributeError: pass try: try: - tb.toggled.disconnect(self.on_preferences_edited) + tb.toggled.disconnect(self.preferencesUiManager.on_preferences_edited) except (TypeError, AttributeError): pass - tb.toggled.connect(self.on_preferences_edited) + tb.toggled.connect(self.preferencesUiManager.on_preferences_edited) except AttributeError: pass try: try: - tb.valueChanged.disconnect(self.on_preferences_edited) + tb.valueChanged.disconnect(self.preferencesUiManager.on_preferences_edited) except (TypeError, AttributeError): pass - tb.valueChanged.connect(self.on_preferences_edited) + tb.valueChanged.connect(self.preferencesUiManager.on_preferences_edited) except AttributeError: pass try: try: - tb.currentIndexChanged.disconnect(self.on_preferences_edited) + tb.currentIndexChanged.disconnect(self.preferencesUiManager.on_preferences_edited) except (TypeError, AttributeError): pass - tb.currentIndexChanged.connect(self.on_preferences_edited) + tb.currentIndexChanged.connect(self.preferencesUiManager.on_preferences_edited) except AttributeError: pass - def on_preferences_edited(self): - """ - Executed when a preference was changed in the Edit -> Preferences tab. - Will color the Preferences tab text to Red color. - :return: - """ - if self.preferencesUiManager.preferences_changed_flag is False: - self.inform.emit('[WARNING_NOTCL] %s' % _("Preferences edited but not saved.")) - - for idx in range(self.ui.plot_tab_area.count()): - if self.ui.plot_tab_area.tabText(idx) == _("Preferences"): - self.ui.plot_tab_area.tabBar.setTabTextColor(idx, QtGui.QColor('red')) - - self.ui.pref_apply_button.setStyleSheet("QPushButton {color: red;}") - - self.preferencesUiManager.preferences_changed_flag = True def on_tools_database(self, source='app'): """ @@ -6080,57 +6012,10 @@ class App(QtCore.QObject): :param title: The name of the tab that was closed. :return: """ + # FIXME: doing this based on translated title doesn't seem very robust. if title == _("Preferences"): - # disconnect - for idx in range(self.ui.pref_tab_area.count()): - for tb in self.ui.pref_tab_area.widget(idx).findChildren(QtCore.QObject): - try: - tb.textEdited.disconnect(self.on_preferences_edited) - except (TypeError, AttributeError): - pass - - try: - tb.modificationChanged.disconnect(self.on_preferences_edited) - except (TypeError, AttributeError): - pass - - try: - tb.toggled.disconnect(self.on_preferences_edited) - except (TypeError, AttributeError): - pass - - try: - tb.valueChanged.disconnect(self.on_preferences_edited) - except (TypeError, AttributeError): - pass - - try: - tb.currentIndexChanged.disconnect(self.on_preferences_edited) - except (TypeError, AttributeError): - pass - - if self.preferencesUiManager.preferences_changed_flag is True: - msgbox = QtWidgets.QMessageBox() - msgbox.setText(_("One or more values are changed.\n" - "Do you want to save the Preferences?")) - msgbox.setWindowTitle(_("Save Preferences")) - msgbox.setWindowIcon(QtGui.QIcon(self.resource_location + '/save_as.png')) - - bt_yes = msgbox.addButton(_('Yes'), QtWidgets.QMessageBox.YesRole) - msgbox.addButton(_('No'), QtWidgets.QMessageBox.NoRole) - - msgbox.setDefaultButton(bt_yes) - msgbox.exec_() - response = msgbox.clickedButton() - - if response == bt_yes: - self.preferencesUiManager.on_save_button(save_to_file=True) - self.inform.emit('[success] %s' % _("Preferences saved.")) - else: - self.preferencesUiManager.preferences_changed_flag = False - self.inform.emit('') - return + self.uiPreferencesManager.on_close_preferences_tab() if title == _("Tools Database"): # disconnect the signals from the table widget in tab @@ -6172,7 +6057,7 @@ class App(QtCore.QObject): :return: """ - self.report_usage("on_flipy()") + self.defaults.report_usage("on_flipy()") obj_list = self.collection.get_selected() xminlist = [] @@ -6219,7 +6104,7 @@ class App(QtCore.QObject): :return: """ - self.report_usage("on_flipx()") + self.defaults.report_usage("on_flipx()") obj_list = self.collection.get_selected() xminlist = [] @@ -6268,7 +6153,7 @@ class App(QtCore.QObject): :param preset: A value to be used as predefined angle for rotation. :return: """ - self.report_usage("on_rotate()") + self.defaults.report_usage("on_rotate()") obj_list = self.collection.get_selected() xminlist = [] @@ -6323,7 +6208,7 @@ class App(QtCore.QObject): :return: """ - self.report_usage("on_skewx()") + self.defaults.report_usage("on_skewx()") obj_list = self.collection.get_selected() xminlist = [] @@ -6362,7 +6247,7 @@ class App(QtCore.QObject): :return: """ - self.report_usage("on_skewy()") + self.defaults.report_usage("on_skewy()") obj_list = self.collection.get_selected() xminlist = [] @@ -6417,7 +6302,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_toolbar_replot") + self.defaults.report_usage("on_toolbar_replot") self.log.debug("on_toolbar_replot()") try: @@ -6722,7 +6607,7 @@ class App(QtCore.QObject): _("Delete Grid value cancelled")) def on_shortcut_list(self): - self.report_usage("on_shortcut_list()") + self.defaults.report_usage("on_shortcut_list()") # add the tab if it was closed self.ui.plot_tab_area.addTab(self.ui.shortcuts_tab, _("Key Shortcut List")) @@ -6751,7 +6636,7 @@ class App(QtCore.QObject): self.ui.notebook.setCurrentWidget(self.ui.tool_tab) def on_copy_name(self): - self.report_usage("on_copy_name()") + self.defaults.report_usage("on_copy_name()") obj = self.collection.get_active() try: @@ -7419,7 +7304,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_file_new") + self.defaults.report_usage("on_file_new") # Remove everything from memory App.log.debug("on_file_new()") @@ -7467,7 +7352,7 @@ class App(QtCore.QObject): self.project_filename = None # Load the application defaults - self.load_defaults(filename='current_defaults') + self.defaults.load(filename=os.path.join(self.data_path, 'current_defaults.FlatConfig')) # Re-fresh project options self.on_options_app2project() @@ -7498,7 +7383,7 @@ class App(QtCore.QObject): :return: """ - self.report_usage("obj_properties()") + self.defaults.report_usage("obj_properties()") self.properties_tool.run(toggle=False) def on_project_context_save(self): @@ -7529,7 +7414,7 @@ class App(QtCore.QObject): :return: """ - self.report_usage("obj_move()") + self.defaults.report_usage("obj_move()") self.move_tool.run(toggle=False) def on_fileopengerber(self, signal, name=None): @@ -7541,7 +7426,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_fileopengerber") + self.defaults.report_usage("on_fileopengerber") App.log.debug("on_fileopengerber()") _filter_ = "Gerber Files (*.gbr *.ger *.gtl *.gbl *.gts *.gbs *.gtp *.gbp *.gto *.gbo *.gm1 *.gml *.gm3 *" \ @@ -7588,7 +7473,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_fileopenexcellon") + self.defaults.report_usage("on_fileopenexcellon") App.log.debug("on_fileopenexcellon()") _filter_ = "Excellon Files (*.drl *.txt *.xln *.drd *.tap *.exc *.ncd);;" \ @@ -7626,7 +7511,7 @@ class App(QtCore.QObject): :return: """ - self.report_usage("on_fileopengcode") + self.defaults.report_usage("on_fileopengcode") App.log.debug("on_fileopengcode()") # https://bobcadsupport.com/helpdesk/index.php?/Knowledgebase/Article/View/13/5/known-g-code-file-extensions @@ -7666,7 +7551,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_file_openproject") + self.defaults.report_usage("on_file_openproject") App.log.debug("on_file_openproject()") _filter_ = "FlatCAM Project (*.FlatPrj);;All Files (*.*)" try: @@ -7698,7 +7583,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_fileopenhpgl2") + self.defaults.report_usage("on_fileopenhpgl2") App.log.debug("on_fileopenhpgl2()") _filter_ = "HPGL2 Files (*.plt);;" \ @@ -7736,7 +7621,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_file_openconfig") + self.defaults.report_usage("on_file_openconfig") App.log.debug("on_file_openconfig()") _filter_ = "FlatCAM Config (*.FlatConfig);;FlatCAM Config (*.json);;All Files (*.*)" try: @@ -7757,7 +7642,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_file_exportsvg") + self.defaults.report_usage("on_file_exportsvg") App.log.debug("on_file_exportsvg()") obj = self.collection.get_active() @@ -7808,7 +7693,7 @@ class App(QtCore.QObject): self.file_saved.emit("SVG", filename) def on_file_exportpng(self): - self.report_usage("on_file_exportpng") + self.defaults.report_usage("on_file_exportpng") App.log.debug("on_file_exportpng()") self.date = str(datetime.today()).rpartition('.')[0] @@ -7852,7 +7737,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_file_savegerber") + self.defaults.report_usage("on_file_savegerber") App.log.debug("on_file_savegerber()") obj = self.collection.get_active() @@ -7893,7 +7778,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_file_savescript") + self.defaults.report_usage("on_file_savescript") App.log.debug("on_file_savescript()") obj = self.collection.get_active() @@ -7934,7 +7819,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_file_savedocument") + self.defaults.report_usage("on_file_savedocument") App.log.debug("on_file_savedocument()") obj = self.collection.get_active() @@ -7975,7 +7860,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_file_saveexcellon") + self.defaults.report_usage("on_file_saveexcellon") App.log.debug("on_file_saveexcellon()") obj = self.collection.get_active() @@ -8016,7 +7901,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_file_exportexcellon") + self.defaults.report_usage("on_file_exportexcellon") App.log.debug("on_file_exportexcellon()") obj = self.collection.get_active() @@ -8060,7 +7945,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_file_exportgerber") + self.defaults.report_usage("on_file_exportgerber") App.log.debug("on_file_exportgerber()") obj = self.collection.get_active() @@ -8104,7 +7989,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_file_exportdxf") + self.defaults.report_usage("on_file_exportdxf") App.log.debug("on_file_exportdxf()") obj = self.collection.get_active() @@ -8158,7 +8043,7 @@ class App(QtCore.QObject): :type type_of_obj: str :return: None """ - self.report_usage("on_file_importsvg") + self.defaults.report_usage("on_file_importsvg") App.log.debug("on_file_importsvg()") _filter_ = "SVG File .svg (*.svg);;All Files (*.*)" @@ -8189,7 +8074,7 @@ class App(QtCore.QObject): :type type_of_obj: str :return: None """ - self.report_usage("on_file_importdxf") + self.defaults.report_usage("on_file_importdxf") App.log.debug("on_file_importdxf()") _filter_ = "DXF File .dxf (*.DXF);;All Files (*.*)" @@ -8344,7 +8229,7 @@ class App(QtCore.QObject): # self.ui.show() def on_toggle_code_editor(self): - self.report_usage("on_toggle_code_editor()") + self.defaults.report_usage("on_toggle_code_editor()") if self.toggle_codeeditor is False: self.init_code_editor(name=_("Code Editor")) @@ -8427,7 +8312,7 @@ class App(QtCore.QObject): :return: """ - self.report_usage("on_fileopenscript") + self.defaults.report_usage("on_fileopenscript") App.log.debug("on_fileopenscript()") _filter_ = "TCL script .FlatScript (*.FlatScript);;TCL script .tcl (*.TCL);;TCL script .txt (*.TXT);;" \ @@ -8459,7 +8344,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_filerunscript") + self.defaults.report_usage("on_filerunscript") App.log.debug("on_file_runscript()") if name: @@ -8517,7 +8402,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_file_saveproject") + self.defaults.report_usage("on_file_saveproject") if self.project_filename is None: self.on_file_saveprojectas() @@ -8544,7 +8429,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_file_saveprojectas") + self.defaults.report_usage("on_file_saveprojectas") self.date = str(datetime.today()).rpartition('.')[0] self.date = ''.join(c for c in self.date if c not in ':-') @@ -8813,7 +8698,7 @@ class App(QtCore.QObject): :param scale_stroke_factor: factor by which to change/scale the thickness of the features :return: """ - self.report_usage("export_svg()") + self.defaults.report_usage("export_svg()") if filename is None: filename = self.defaults["global_last_save_folder"] if self.defaults["global_last_save_folder"] \ @@ -8881,7 +8766,7 @@ class App(QtCore.QObject): :param use_thread: if to be run in a separate thread :return: """ - self.report_usage("save source file()") + self.defaults.report_usage("save source file()") if filename is None: filename = self.defaults["global_last_save_folder"] if self.defaults["global_last_save_folder"] \ @@ -8925,7 +8810,7 @@ class App(QtCore.QObject): :param use_thread: if to be run in a separate thread :return: """ - self.report_usage("export_excellon()") + self.defaults.report_usage("export_excellon()") if filename is None: if self.defaults["global_last_save_folder"]: @@ -9080,7 +8965,7 @@ class App(QtCore.QObject): :param use_thread: if to be run in a separate thread :return: """ - self.report_usage("export_gerber()") + self.defaults.report_usage("export_gerber()") if filename is None: filename = self.defaults["global_last_save_folder"] if self.defaults["global_last_save_folder"] \ @@ -9213,7 +9098,7 @@ class App(QtCore.QObject): :param use_thread: if to be run in a separate thread :return: """ - self.report_usage("export_dxf()") + self.defaults.report_usage("export_dxf()") if filename is None: filename = self.defaults["global_last_save_folder"] if self.defaults["global_last_save_folder"] \ @@ -9265,7 +9150,7 @@ class App(QtCore.QObject): :param outname: :return: """ - self.report_usage("import_svg()") + self.defaults.report_usage("import_svg()") log.debug("App.import_svg()") obj_type = "" @@ -9308,7 +9193,7 @@ class App(QtCore.QObject): :param outname: Name for the imported Geometry :return: """ - self.report_usage("import_dxf()") + self.defaults.report_usage("import_dxf()") obj_type = "" if geo_type is None or geo_type == "geometry": @@ -10319,21 +10204,21 @@ class App(QtCore.QObject): self.plotcanvas.zoom(float(self.defaults['global_zoom_ratio'])) def disable_all_plots(self): - self.report_usage("disable_all_plots()") + self.defaults.report_usage("disable_all_plots()") self.disable_plots(self.collection.get_list()) self.inform.emit('[success] %s' % _("All plots disabled.")) def disable_other_plots(self): - self.report_usage("disable_other_plots()") + self.defaults.report_usage("disable_other_plots()") self.disable_plots(self.collection.get_non_selected()) self.inform.emit('[success] %s' % _("All non selected plots disabled.")) def enable_all_plots(self): - self.report_usage("enable_all_plots()") + self.defaults.report_usage("enable_all_plots()") self.enable_plots(self.collection.get_list()) self.inform.emit('[success] %s' % @@ -10624,7 +10509,7 @@ class App(QtCore.QObject): :param objects: Selected objects in the Project Tab :return: """ - self.report_usage("generate_cnc_job()") + self.defaults.report_usage("generate_cnc_job()") # for obj in objects: # obj.generatecncjob() @@ -10797,11 +10682,10 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_options_app2project") + self.defaults.report_usage("on_options_app2project") self.preferencesUiManager.defaults_read_form() self.options.update(self.defaults) - # self.options_write_form() def toggle_shell(self): """ @@ -10809,7 +10693,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("toggle_shell()") + self.defaults.report_usage("toggle_shell()") if self.ui.shell_dock.isVisible(): self.ui.shell_dock.hide() @@ -10837,7 +10721,7 @@ class App(QtCore.QObject): :return: None """ - self.report_usage("on_toggle_shell_from_settings()") + self.defaults.report_usage("on_toggle_shell_from_settings()") if state is True: if not self.ui.shell_dock.isVisible(): diff --git a/FlatCAMBookmark.py b/FlatCAMBookmark.py index af0df8a5..3ed5a74d 100644 --- a/FlatCAMBookmark.py +++ b/FlatCAMBookmark.py @@ -270,7 +270,7 @@ class BookmarkManager(QtWidgets.QWidget): self.build_bm_ui() def on_export_bookmarks(self): - self.app.report_usage("on_export_bookmarks") + self.app.defaults.report_usage("on_export_bookmarks") self.app.log.debug("on_export_bookmarks()") date = str(datetime.today()).rpartition('.')[0] diff --git a/FlatCAMDB.py b/FlatCAMDB.py index 3d7b35a8..36e69ef9 100644 --- a/FlatCAMDB.py +++ b/FlatCAMDB.py @@ -642,7 +642,7 @@ class ToolsDB(QtWidgets.QWidget): self.app.inform.emit('[success] %s' % _("Tool removed from Tools DB.")) def on_export_tools_db_file(self): - self.app.report_usage("on_export_tools_db_file") + self.app.defaults.report_usage("on_export_tools_db_file") self.app.log.debug("on_export_tools_db_file()") date = str(datetime.today()).rpartition('.')[0] @@ -699,7 +699,7 @@ class ToolsDB(QtWidgets.QWidget): self.app.inform.emit('[success] %s: %s' % (_("Exported Tools DB to"), filename)) def on_import_tools_db_file(self): - self.app.report_usage("on_import_tools_db_file") + self.app.defaults.report_usage("on_import_tools_db_file") self.app.log.debug("on_import_tools_db_file()") filter__ = "Text File (*.TXT);;All Files (*.*)" @@ -2072,7 +2072,7 @@ class ToolsDB2(QtWidgets.QWidget): self.app.inform.emit('[success] %s' % _("Tool removed from Tools DB.")) def on_export_tools_db_file(self): - self.app.report_usage("on_export_tools_db_file") + self.app.defaults.report_usage("on_export_tools_db_file") self.app.log.debug("on_export_tools_db_file()") date = str(datetime.today()).rpartition('.')[0] @@ -2129,7 +2129,7 @@ class ToolsDB2(QtWidgets.QWidget): self.app.inform.emit('[success] %s: %s' % (_("Exported Tools DB to"), filename)) def on_import_tools_db_file(self): - self.app.report_usage("on_import_tools_db_file") + self.app.defaults.report_usage("on_import_tools_db_file") self.app.log.debug("on_import_tools_db_file()") filter__ = "Text File (*.TXT);;All Files (*.*)" diff --git a/defaults.py b/defaults.py index e5efdc32..1f68fe23 100644 --- a/defaults.py +++ b/defaults.py @@ -709,11 +709,10 @@ class FlatCAMDefaults: def __iter__(self): return self.defaults.__iter__() - def set_change_callback(self, callback): - self.defaults.set_change_callback(callback) + def __getattr__(self, item): + # Unfortunately this method alone is not enough to pass through the other magic methods above. + return self.defaults.__getattribute__(item) - def update(self, *args, **kwargs): - return self.defaults.update(*args, **kwargs) ##### Additional Methods ##### @@ -828,4 +827,18 @@ class FlatCAMDefaults: if param.find(routes[param].__name__.lower() + "_") == 0: p = param[len(routes[param].__name__) + 1:] if p in routes[param].defaults: - routes[param].defaults[p] = self.defaults[param] \ No newline at end of file + routes[param].defaults[p] = self.defaults[param] + + def report_usage(self, resource): + """ + Increments usage counter for the given resource + in self.defaults['global_stats']. + + :param resource: Name of the resource. + :return: None + """ + + if resource in self.defaults['global_stats']: + self.defaults['global_stats'][resource] += 1 + else: + self.defaults['global_stats'][resource] = 1 diff --git a/flatcamEditors/FlatCAMGeoEditor.py b/flatcamEditors/FlatCAMGeoEditor.py index d329bfcb..4716f831 100644 --- a/flatcamEditors/FlatCAMGeoEditor.py +++ b/flatcamEditors/FlatCAMGeoEditor.py @@ -122,7 +122,7 @@ class BufferSelectionTool(FlatCAMTool): self.buffer_distance_entry.set_value(0.01) def run(self): - self.app.report_usage("Geo Editor ToolBuffer()") + self.app.defaults.report_usage("Geo Editor ToolBuffer()") FlatCAMTool.run(self) # if the splitter us hidden, display it @@ -339,7 +339,7 @@ class TextInputTool(FlatCAMTool): self.font_italic_tb.clicked.connect(self.on_italic_button) def run(self): - self.app.report_usage("Geo Editor TextInputTool()") + self.app.defaults.report_usage("Geo Editor TextInputTool()") FlatCAMTool.run(self) # if the splitter us hidden, display it @@ -537,7 +537,7 @@ class PaintOptionsTool(FlatCAMTool): self.set_tool_ui() def run(self): - self.app.report_usage("Geo Editor ToolPaint()") + self.app.defaults.report_usage("Geo Editor ToolPaint()") FlatCAMTool.run(self) # if the splitter us hidden, display it @@ -980,7 +980,7 @@ class TransformEditorTool(FlatCAMTool): self.set_tool_ui() def run(self): - self.app.report_usage("Geo Editor Transform Tool()") + self.app.defaults.report_usage("Geo Editor Transform Tool()") FlatCAMTool.run(self) self.set_tool_ui() diff --git a/flatcamEditors/FlatCAMGrbEditor.py b/flatcamEditors/FlatCAMGrbEditor.py index b1233e6e..e95f9bd6 100644 --- a/flatcamEditors/FlatCAMGrbEditor.py +++ b/flatcamEditors/FlatCAMGrbEditor.py @@ -5516,7 +5516,7 @@ class TransformEditorTool(FlatCAMTool): self.set_tool_ui() def run(self, toggle=True): - self.app.report_usage("Geo Editor Transform Tool()") + self.app.defaults.report_usage("Geo Editor Transform Tool()") # if the splitter is hidden, display it, else hide it but only if the current widget is the same if self.app.ui.splitter.sizes()[0] == 0: diff --git a/flatcamEditors/FlatCAMTextEditor.py b/flatcamEditors/FlatCAMTextEditor.py index d65dfd7c..327e2406 100644 --- a/flatcamEditors/FlatCAMTextEditor.py +++ b/flatcamEditors/FlatCAMTextEditor.py @@ -152,14 +152,14 @@ class TextEditor(QtWidgets.QWidget): self.code_edited = '' def handlePrint(self): - self.app.report_usage("handlePrint()") + self.app.defaults.report_usage("handlePrint()") dialog = QtPrintSupport.QPrintDialog() if dialog.exec_() == QtWidgets.QDialog.Accepted: self.code_editor.document().print_(dialog.printer()) def handlePreview(self): - self.app.report_usage("handlePreview()") + self.app.defaults.report_usage("handlePreview()") dialog = QtPrintSupport.QPrintPreviewDialog() dialog.paintRequested.connect(self.code_editor.print_) @@ -172,7 +172,7 @@ class TextEditor(QtWidgets.QWidget): pass def handleOpen(self, filt=None): - self.app.report_usage("handleOpen()") + self.app.defaults.report_usage("handleOpen()") if filt: _filter_ = filt @@ -192,7 +192,7 @@ class TextEditor(QtWidgets.QWidget): file.close() def handleSaveGCode(self, name=None, filt=None, callback=None): - self.app.report_usage("handleSaveGCode()") + self.app.defaults.report_usage("handleSaveGCode()") if filt: _filter_ = filt @@ -287,7 +287,7 @@ class TextEditor(QtWidgets.QWidget): callback() def handleFindGCode(self): - self.app.report_usage("handleFindGCode()") + self.app.defaults.report_usage("handleFindGCode()") flags = QtGui.QTextDocument.FindCaseSensitively text_to_be_found = self.entryFind.get_value() @@ -298,7 +298,7 @@ class TextEditor(QtWidgets.QWidget): r = self.code_editor.find(str(text_to_be_found), flags) def handleReplaceGCode(self): - self.app.report_usage("handleReplaceGCode()") + self.app.defaults.report_usage("handleReplaceGCode()") old = self.entryFind.get_value() new = self.entryReplace.get_value() diff --git a/flatcamGUI/PreferencesUI.py b/flatcamGUI/PreferencesUI.py index 964bb485..0d88ac17 100644 --- a/flatcamGUI/PreferencesUI.py +++ b/flatcamGUI/PreferencesUI.py @@ -28,11 +28,14 @@ else: class PreferencesUIManager(): - def __init__(self, defaults: FlatCAMDefaults, data_path: str, ui, inform): + def __init__(self, defaults: FlatCAMDefaults, data_path: str, ui, inform, app): + # FIXME: Ideally we would not pass in the app here + self.app = app self.defaults = defaults self.data_path = data_path self.ui = ui self.inform = inform + self.ignore_tab_close_event = False # if Preferences are changed in the Edit -> Preferences tab the value will be set to True self.preferences_changed_flag = False @@ -621,21 +624,19 @@ class PreferencesUIManager(): """ def_dict = self.defaults if defaults_dict is None else defaults_dict + try: - if factor is None: - if units is None: - self.defaults_form_fields[field].set_value(def_dict[field]) - elif units == 'IN' and (field == 'global_gridx' or field == 'global_gridy'): - self.defaults_form_fields[field].set_value(def_dict[field]) - elif units == 'MM' and (field == 'global_gridx' or field == 'global_gridy'): - self.defaults_form_fields[field].set_value(def_dict[field]) - else: - if units is None: - self.defaults_form_fields[field].set_value(def_dict[field] * factor) - elif units == 'IN' and (field == 'global_gridx' or field == 'global_gridy'): - self.defaults_form_fields[field].set_value((def_dict[field] * factor)) - elif units == 'MM' and (field == 'global_gridx' or field == 'global_gridy'): - self.defaults_form_fields[field].set_value((def_dict[field] * factor)) + value = def_dict[field] + log.debug("value is "+str(value)+ " and factor is "+str(factor)) + if factor is not None: + value *= factor + + form_field = self.defaults_form_fields[field] + if units is None: + form_field.set_value(value) + elif (units == 'IN' or units == 'MM') and (field == 'global_gridx' or field == 'global_gridy'): + form_field.set_value(value) + except KeyError: pass except AttributeError: @@ -909,10 +910,10 @@ class PreferencesUIManager(): if save_to_file: self.save_defaults(silent=False) # load the defaults so they are updated into the app - self.load_defaults(filename='current_defaults') + self.defaults.load(filename=os.path.join(self.data_path, 'current_defaults.FlatConfig')) # Re-fresh project options - self.on_options_app2project() + self.app.on_options_app2project() settgs = QSettings("Open Source", "FlatCAM") @@ -947,10 +948,7 @@ class PreferencesUIManager(): def on_pref_close_button(self): # Preferences saved, update flag self.preferences_changed_flag = False - try: - self.ui.plot_tab_area.tab_closed_signal.disconnect(self.on_plot_area_tab_closed) - except TypeError: - pass + self.ignore_tab_close_event = True try: self.ui.general_defaults_form.general_app_group.units_radio.activated_custom.disconnect() @@ -958,7 +956,7 @@ class PreferencesUIManager(): pass self.defaults_write_form(source_dict=self.defaults.current_defaults) self.ui.general_defaults_form.general_app_group.units_radio.activated_custom.connect( - lambda: self.on_toggle_units(no_pref=False)) + lambda: self.app.on_toggle_units(no_pref=False)) self.defaults.update(self.defaults.current_defaults) # Preferences save, update the color of the Preferences Tab text @@ -969,7 +967,7 @@ class PreferencesUIManager(): break self.inform.emit('%s' % _("Preferences closed without saving.")) - self.ui.plot_tab_area.tab_closed_signal.connect(self.on_plot_area_tab_closed) + self.ignore_tab_close_event = False def on_restore_defaults_preferences(self): """ @@ -995,12 +993,12 @@ class PreferencesUIManager(): :param first_time: Boolean. If True will execute some code when the app is run first time :return: None """ - self.report_usage("save_defaults") + self.defaults.report_usage("save_defaults") if data_path is None: data_path = self.data_path - self.propagate_defaults() + self.defaults.propagate_defaults() if first_time is False: self.save_toolbar_view() @@ -1018,7 +1016,118 @@ class PreferencesUIManager(): self.inform.emit('[success] %s' % _("Preferences saved.")) # update the autosave timer - self.save_project_auto_update() + self.app.save_project_auto_update() + + def save_toolbar_view(self): + """ + Will save the toolbar view state to the defaults + + :return: None + """ + + # Save the toolbar view + tb_status = 0 + if self.ui.toolbarfile.isVisible(): + tb_status += 1 + + if self.ui.toolbargeo.isVisible(): + tb_status += 2 + + if self.ui.toolbarview.isVisible(): + tb_status += 4 + + if self.ui.toolbartools.isVisible(): + tb_status += 8 + + if self.ui.exc_edit_toolbar.isVisible(): + tb_status += 16 + + if self.ui.geo_edit_toolbar.isVisible(): + tb_status += 32 + + if self.ui.grb_edit_toolbar.isVisible(): + tb_status += 64 + + if self.ui.snap_toolbar.isVisible(): + tb_status += 128 + + if self.ui.toolbarshell.isVisible(): + tb_status += 256 + + self.defaults["global_toolbar_view"] = tb_status + + def on_preferences_edited(self): + """ + Executed when a preference was changed in the Edit -> Preferences tab. + Will color the Preferences tab text to Red color. + :return: + """ + if self.preferences_changed_flag is False: + self.inform.emit('[WARNING_NOTCL] %s' % _("Preferences edited but not saved.")) + + for idx in range(self.ui.plot_tab_area.count()): + if self.ui.plot_tab_area.tabText(idx) == _("Preferences"): + self.ui.plot_tab_area.tabBar.setTabTextColor(idx, QtGui.QColor('red')) + + self.ui.pref_apply_button.setStyleSheet("QPushButton {color: red;}") + + self.preferences_changed_flag = True + + def on_close_preferences_tab(self): + if self.ignore_tab_close_event: + return + + # disconnect + for idx in range(self.ui.pref_tab_area.count()): + for tb in self.ui.pref_tab_area.widget(idx).findChildren(QtCore.QObject): + try: + tb.textEdited.disconnect(self.on_preferences_edited) + except (TypeError, AttributeError): + pass + + try: + tb.modificationChanged.disconnect(self.on_preferences_edited) + except (TypeError, AttributeError): + pass + + try: + tb.toggled.disconnect(self.on_preferences_edited) + except (TypeError, AttributeError): + pass + + try: + tb.valueChanged.disconnect(self.on_preferences_edited) + except (TypeError, AttributeError): + pass + + try: + tb.currentIndexChanged.disconnect(self.on_preferences_edited) + except (TypeError, AttributeError): + pass + + # Prompt user to save + if self.preferences_changed_flag is True: + msgbox = QtWidgets.QMessageBox() + msgbox.setText(_("One or more values are changed.\n" + "Do you want to save the Preferences?")) + msgbox.setWindowTitle(_("Save Preferences")) + msgbox.setWindowIcon(QtGui.QIcon(self.app.resource_location + '/save_as.png')) + + bt_yes = msgbox.addButton(_('Yes'), QtWidgets.QMessageBox.YesRole) + msgbox.addButton(_('No'), QtWidgets.QMessageBox.NoRole) + + msgbox.setDefaultButton(bt_yes) + msgbox.exec_() + response = msgbox.clickedButton() + + if response == bt_yes: + self.on_save_button(save_to_file=True) + self.inform.emit('[success] %s' % _("Preferences saved.")) + else: + self.preferences_changed_flag = False + self.inform.emit('') + return + class OptionsGroupUI(QtWidgets.QGroupBox): app = None @@ -1954,7 +2063,7 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): :param lay: Type of layout to be set on the toolbard :return: None """ - self.app.report_usage("on_layout()") + self.app.defaults.report_usage("on_layout()") if lay: current_layout = lay else: @@ -3158,7 +3267,7 @@ class GerberGenPrefGroupUI(OptionsGroupUI): def on_pl_color_entry(self): self.app.defaults['gerber_plot_line'] = self.pl_color_entry.get_value()[:7] + \ self.app.defaults['gerber_plot_line'][7:9] - self.pl_color_button.setStyleSheet("background-color:%s" % str(self.defaults['gerber_plot_line'])[:7]) + self.pl_color_button.setStyleSheet("background-color:%s" % str(self.app.defaults['gerber_plot_line'])[:7]) def on_pl_color_button(self): current_color = QtGui.QColor(self.app.defaults['gerber_plot_line'][:7]) diff --git a/flatcamObjects/FlatCAMCNCJob.py b/flatcamObjects/FlatCAMCNCJob.py index c154965b..2ed64082 100644 --- a/flatcamObjects/FlatCAMCNCJob.py +++ b/flatcamObjects/FlatCAMCNCJob.py @@ -487,7 +487,7 @@ class CNCJobObject(FlatCAMObj, CNCjob): :param args: :return: """ - self.app.report_usage("cncjob_on_exportgcode_button") + self.app.defaults.report_usage("cncjob_on_exportgcode_button") self.read_form() name = self.app.collection.get_active().options['name'] diff --git a/flatcamObjects/FlatCAMExcellon.py b/flatcamObjects/FlatCAMExcellon.py index ee48e2b2..69a2ca97 100644 --- a/flatcamObjects/FlatCAMExcellon.py +++ b/flatcamObjects/FlatCAMExcellon.py @@ -1234,13 +1234,13 @@ class ExcellonObject(FlatCAMObj, Excellon): return True, "" def on_generate_milling_button_click(self, *args): - self.app.report_usage("excellon_on_create_milling_drills button") + self.app.defaults.report_usage("excellon_on_create_milling_drills button") self.read_form() self.generate_milling_drills(use_thread=False) def on_generate_milling_slots_button_click(self, *args): - self.app.report_usage("excellon_on_create_milling_slots_button") + self.app.defaults.report_usage("excellon_on_create_milling_slots_button") self.read_form() self.generate_milling_slots(use_thread=False) @@ -1338,7 +1338,7 @@ class ExcellonObject(FlatCAMObj, Excellon): pass def on_create_cncjob_button_click(self, *args): - self.app.report_usage("excellon_on_create_cncjob_button") + self.app.defaults.report_usage("excellon_on_create_cncjob_button") self.read_form() # Get the tools from the list diff --git a/flatcamObjects/FlatCAMGeometry.py b/flatcamObjects/FlatCAMGeometry.py index aba7b711..a2b82617 100644 --- a/flatcamObjects/FlatCAMGeometry.py +++ b/flatcamObjects/FlatCAMGeometry.py @@ -1575,7 +1575,7 @@ class GeometryObject(FlatCAMObj, Geometry): def on_generatecnc_button_click(self, *args): log.debug("Generating CNCJob from Geometry ...") - self.app.report_usage("geometry_on_generatecnc_button") + self.app.defaults.report_usage("geometry_on_generatecnc_button") # this reads the values in the UI form to the self.options dictionary self.read_form() diff --git a/flatcamObjects/FlatCAMGerber.py b/flatcamObjects/FlatCAMGerber.py index 7f241535..aa169549 100644 --- a/flatcamObjects/FlatCAMGerber.py +++ b/flatcamObjects/FlatCAMGerber.py @@ -505,7 +505,7 @@ class GerberObject(FlatCAMObj, Gerber): self.app.worker_task.emit({'fcn': buffer_task, 'params': []}) def on_generatenoncopper_button_click(self, *args): - self.app.report_usage("gerber_on_generatenoncopper_button") + self.app.defaults.report_usage("gerber_on_generatenoncopper_button") self.read_form() name = self.options["name"] + "_noncopper" @@ -532,7 +532,7 @@ class GerberObject(FlatCAMObj, Gerber): self.app.new_object("geometry", name, geo_init) def on_generatebb_button_click(self, *args): - self.app.report_usage("gerber_on_generatebb_button") + self.app.defaults.report_usage("gerber_on_generatebb_button") self.read_form() name = self.options["name"] + "_bbox" @@ -574,7 +574,7 @@ class GerberObject(FlatCAMObj, Gerber): # in the end toggle the visibility of the origin object so we can see the generated Geometry iso_obj.ui.plot_cb.toggle() else: - app_obj.report_usage("gerber_on_iso_button") + app_obj.defaults.report_usage("gerber_on_iso_button") self.read_form() iso_scope = 'all' if self.ui.iso_scope_radio.get_value() == 'all' else 'single' diff --git a/flatcamObjects/FlatCAMObj.py b/flatcamObjects/FlatCAMObj.py index f86fbfc9..94108cc9 100644 --- a/flatcamObjects/FlatCAMObj.py +++ b/flatcamObjects/FlatCAMObj.py @@ -236,7 +236,7 @@ class FlatCAMObj(QtCore.QObject): ) def on_offset_button_click(self): - self.app.report_usage("obj_on_offset_button") + self.app.defaults.report_usage("obj_on_offset_button") self.read_form() vector_val = self.ui.offsetvector_entry.get_value() @@ -283,7 +283,7 @@ class FlatCAMObj(QtCore.QObject): self.app.worker_task.emit({'fcn': worker_task, 'params': []}) def on_skew_button_click(self): - self.app.report_usage("obj_on_skew_button") + self.app.defaults.report_usage("obj_on_skew_button") self.read_form() x_angle = self.ui.xangle_entry.get_value() y_angle = self.ui.yangle_entry.get_value() diff --git a/flatcamTools/ToolAlignObjects.py b/flatcamTools/ToolAlignObjects.py index a4b825f7..33b9611c 100644 --- a/flatcamTools/ToolAlignObjects.py +++ b/flatcamTools/ToolAlignObjects.py @@ -217,7 +217,7 @@ class AlignObjects(FlatCAMTool): self.aligned_old_line_color = None def run(self, toggle=True): - self.app.report_usage("ToolAlignObjects()") + self.app.defaults.report_usage("ToolAlignObjects()") if toggle: # if the splitter is hidden, display it, else hide it but only if the current widget is the same diff --git a/flatcamTools/ToolCalculators.py b/flatcamTools/ToolCalculators.py index 5b57be84..5a8874a7 100644 --- a/flatcamTools/ToolCalculators.py +++ b/flatcamTools/ToolCalculators.py @@ -271,7 +271,7 @@ class ToolCalculator(FlatCAMTool): self.reset_button.clicked.connect(self.set_tool_ui) def run(self, toggle=True): - self.app.report_usage("ToolCalculators()") + self.app.defaults.report_usage("ToolCalculators()") if toggle: # if the splitter is hidden, display it, else hide it but only if the current widget is the same diff --git a/flatcamTools/ToolCalibration.py b/flatcamTools/ToolCalibration.py index e1e884aa..98b487cf 100644 --- a/flatcamTools/ToolCalibration.py +++ b/flatcamTools/ToolCalibration.py @@ -731,7 +731,7 @@ class ToolCalibration(FlatCAMTool): self.reset_button.clicked.connect(self.set_tool_ui) def run(self, toggle=True): - self.app.report_usage("ToolCalibration()") + self.app.defaults.report_usage("ToolCalibration()") if toggle: # if the splitter is hidden, display it, else hide it but only if the current widget is the same diff --git a/flatcamTools/ToolCopperThieving.py b/flatcamTools/ToolCopperThieving.py index 4b85a8b4..d6fd310a 100644 --- a/flatcamTools/ToolCopperThieving.py +++ b/flatcamTools/ToolCopperThieving.py @@ -540,7 +540,7 @@ class ToolCopperThieving(FlatCAMTool): self.work_finished.connect(self.on_new_pattern_plating_object) def run(self, toggle=True): - self.app.report_usage("ToolCopperThieving()") + self.app.defaults.report_usage("ToolCopperThieving()") if toggle: # if the splitter is hidden, display it, else hide it but only if the current widget is the same diff --git a/flatcamTools/ToolCutOut.py b/flatcamTools/ToolCutOut.py index f8ee8c28..99f4b218 100644 --- a/flatcamTools/ToolCutOut.py +++ b/flatcamTools/ToolCutOut.py @@ -419,7 +419,7 @@ class CutOut(FlatCAMTool): self.obj_combo.obj_type = {"grb": "Gerber", "geo": "Geometry"}[val] def run(self, toggle=True): - self.app.report_usage("ToolCutOut()") + self.app.defaults.report_usage("ToolCutOut()") if toggle: # if the splitter is hidden, display it, else hide it but only if the current widget is the same diff --git a/flatcamTools/ToolDblSided.py b/flatcamTools/ToolDblSided.py index 95654a41..2aed9a3f 100644 --- a/flatcamTools/ToolDblSided.py +++ b/flatcamTools/ToolDblSided.py @@ -514,7 +514,7 @@ class DblSidedTool(FlatCAMTool): FlatCAMTool.install(self, icon, separator, shortcut='Alt+D', **kwargs) def run(self, toggle=True): - self.app.report_usage("Tool2Sided()") + self.app.defaults.report_usage("Tool2Sided()") if toggle: # if the splitter is hidden, display it, else hide it but only if the current widget is the same diff --git a/flatcamTools/ToolDistance.py b/flatcamTools/ToolDistance.py index 61c4df42..ea62c64e 100644 --- a/flatcamTools/ToolDistance.py +++ b/flatcamTools/ToolDistance.py @@ -180,7 +180,7 @@ class Distance(FlatCAMTool): self.measure_btn.clicked.connect(self.activate_measure_tool) def run(self, toggle=False): - self.app.report_usage("ToolDistance()") + self.app.defaults.report_usage("ToolDistance()") self.points[:] = [] diff --git a/flatcamTools/ToolDistanceMin.py b/flatcamTools/ToolDistanceMin.py index 1769f8aa..dc4369ea 100644 --- a/flatcamTools/ToolDistanceMin.py +++ b/flatcamTools/ToolDistanceMin.py @@ -136,7 +136,7 @@ class DistanceMin(FlatCAMTool): self.jump_hp_btn.clicked.connect(self.on_jump_to_half_point) def run(self, toggle=False): - self.app.report_usage("ToolDistanceMin()") + self.app.defaults.report_usage("ToolDistanceMin()") if self.app.tool_tab_locked is True: return diff --git a/flatcamTools/ToolExtractDrills.py b/flatcamTools/ToolExtractDrills.py index e3354978..2c127c2b 100644 --- a/flatcamTools/ToolExtractDrills.py +++ b/flatcamTools/ToolExtractDrills.py @@ -366,7 +366,7 @@ class ToolExtractDrills(FlatCAMTool): FlatCAMTool.install(self, icon, separator, shortcut='Alt+I', **kwargs) def run(self, toggle=True): - self.app.report_usage("Extract Drills()") + self.app.defaults.report_usage("Extract Drills()") if toggle: # if the splitter is hidden, display it, else hide it but only if the current widget is the same diff --git a/flatcamTools/ToolFiducials.py b/flatcamTools/ToolFiducials.py index cfd3b71f..1b3513d4 100644 --- a/flatcamTools/ToolFiducials.py +++ b/flatcamTools/ToolFiducials.py @@ -367,7 +367,7 @@ class ToolFiducials(FlatCAMTool): self.reset_button.clicked.connect(self.set_tool_ui) def run(self, toggle=True): - self.app.report_usage("ToolFiducials()") + self.app.defaults.report_usage("ToolFiducials()") if toggle: # if the splitter is hidden, display it, else hide it but only if the current widget is the same diff --git a/flatcamTools/ToolFilm.py b/flatcamTools/ToolFilm.py index 68dfadd4..12a3b528 100644 --- a/flatcamTools/ToolFilm.py +++ b/flatcamTools/ToolFilm.py @@ -558,7 +558,7 @@ class Film(FlatCAMTool): }[self.tf_type_obj_combo.get_value()] def run(self, toggle=True): - self.app.report_usage("ToolFilm()") + self.app.defaults.report_usage("ToolFilm()") if toggle: # if the splitter is hidden, display it, else hide it but only if the current widget is the same @@ -933,7 +933,7 @@ class Film(FlatCAMTool): :param ftype: the type of file for saving the film: 'svg', 'png' or 'pdf' :return: """ - self.app.report_usage("export_negative()") + self.app.defaults.report_usage("export_negative()") if filename is None: filename = self.app.defaults["global_last_save_folder"] @@ -1116,7 +1116,7 @@ class Film(FlatCAMTool): :return: """ - self.app.report_usage("export_positive()") + self.app.defaults.report_usage("export_positive()") if filename is None: filename = self.app.defaults["global_last_save_folder"] diff --git a/flatcamTools/ToolImage.py b/flatcamTools/ToolImage.py index f984d7a0..6a077a0d 100644 --- a/flatcamTools/ToolImage.py +++ b/flatcamTools/ToolImage.py @@ -155,7 +155,7 @@ class ToolImage(FlatCAMTool): self.image_type.activated_custom.connect(self.on_image_type) def run(self, toggle=True): - self.app.report_usage("ToolImage()") + self.app.defaults.report_usage("ToolImage()") if toggle: # if the splitter is hidden, display it, else hide it but only if the current widget is the same @@ -263,7 +263,7 @@ class ToolImage(FlatCAMTool): :return: """ - self.app.report_usage("import_image()") + self.app.defaults.report_usage("import_image()") if mask is None: mask = [250, 250, 250, 250] diff --git a/flatcamTools/ToolInvertGerber.py b/flatcamTools/ToolInvertGerber.py index ffacf098..b1329882 100644 --- a/flatcamTools/ToolInvertGerber.py +++ b/flatcamTools/ToolInvertGerber.py @@ -156,7 +156,7 @@ class ToolInvertGerber(FlatCAMTool): FlatCAMTool.install(self, icon, separator, shortcut='', **kwargs) def run(self, toggle=True): - self.app.report_usage("ToolInvertGerber()") + self.app.defaults.report_usage("ToolInvertGerber()") log.debug("ToolInvertGerber() is running ...") if toggle: diff --git a/flatcamTools/ToolMove.py b/flatcamTools/ToolMove.py index fe398c53..18d6a6e0 100644 --- a/flatcamTools/ToolMove.py +++ b/flatcamTools/ToolMove.py @@ -63,7 +63,7 @@ class ToolMove(FlatCAMTool): FlatCAMTool.install(self, icon, separator, shortcut='M', **kwargs) def run(self, toggle): - self.app.report_usage("ToolMove()") + self.app.defaults.report_usage("ToolMove()") if self.app.tool_tab_locked is True: return diff --git a/flatcamTools/ToolNCC.py b/flatcamTools/ToolNCC.py index d1d4aa04..8afd3cc8 100644 --- a/flatcamTools/ToolNCC.py +++ b/flatcamTools/ToolNCC.py @@ -939,7 +939,7 @@ class NonCopperClear(FlatCAMTool, Gerber): FlatCAMTool.install(self, icon, separator, shortcut='Alt+N', **kwargs) def run(self, toggle=True): - self.app.report_usage("ToolNonCopperClear()") + self.app.defaults.report_usage("ToolNonCopperClear()") log.debug("ToolNCC().run() was launched ...") if toggle: @@ -1582,7 +1582,7 @@ class NonCopperClear(FlatCAMTool, Gerber): # init values for the next usage self.reset_usage() - self.app.report_usage("on_paint_button_click") + self.app.defaults.report_usage("on_paint_button_click") self.grb_circle_steps = int(self.app.defaults["gerber_circle_steps"]) self.obj_name = self.object_combo.currentText() diff --git a/flatcamTools/ToolOptimal.py b/flatcamTools/ToolOptimal.py index 5743d2ad..de46045e 100644 --- a/flatcamTools/ToolOptimal.py +++ b/flatcamTools/ToolOptimal.py @@ -280,7 +280,7 @@ class ToolOptimal(FlatCAMTool): FlatCAMTool.install(self, icon, separator, shortcut='Alt+O', **kwargs) def run(self, toggle=True): - self.app.report_usage("ToolOptimal()") + self.app.defaults.report_usage("ToolOptimal()") if toggle: # if the splitter is hidden, display it, else hide it but only if the current widget is the same diff --git a/flatcamTools/ToolPDF.py b/flatcamTools/ToolPDF.py index c5b3626b..a21e0f7a 100644 --- a/flatcamTools/ToolPDF.py +++ b/flatcamTools/ToolPDF.py @@ -129,7 +129,7 @@ class ToolPDF(FlatCAMTool): self.point_to_unit_factor = 0.01388888888 def run(self, toggle=True): - self.app.report_usage("ToolPDF()") + self.app.defaults.report_usage("ToolPDF()") self.set_tool_ui() self.on_open_pdf_click() @@ -147,7 +147,7 @@ class ToolPDF(FlatCAMTool): :return: None """ - self.app.report_usage("ToolPDF.on_open_pdf_click()") + self.app.defaults.report_usage("ToolPDF.on_open_pdf_click()") self.app.log.debug("ToolPDF.on_open_pdf_click()") _filter_ = "Adobe PDF Files (*.pdf);;" \ diff --git a/flatcamTools/ToolPaint.py b/flatcamTools/ToolPaint.py index 8d157e9f..642ae376 100644 --- a/flatcamTools/ToolPaint.py +++ b/flatcamTools/ToolPaint.py @@ -710,7 +710,7 @@ class ToolPaint(FlatCAMTool, Gerber): FlatCAMTool.install(self, icon, separator, shortcut='Alt+P', **kwargs) def run(self, toggle=True): - self.app.report_usage("ToolPaint()") + self.app.defaults.report_usage("ToolPaint()") log.debug("ToolPaint().run() was launched ...") if toggle: @@ -1374,7 +1374,7 @@ class ToolPaint(FlatCAMTool, Gerber): # init values for the next usage self.reset_usage() - self.app.report_usage("on_paint_button_click") + self.app.defaults.report_usage("on_paint_button_click") # self.app.call_source = 'paint' self.select_method = self.selectmethod_combo.get_value() diff --git a/flatcamTools/ToolPanelize.py b/flatcamTools/ToolPanelize.py index 1d5f538a..376b6afa 100644 --- a/flatcamTools/ToolPanelize.py +++ b/flatcamTools/ToolPanelize.py @@ -293,7 +293,7 @@ class Panelize(FlatCAMTool): self.constrain_flag = False def run(self, toggle=True): - self.app.report_usage("ToolPanelize()") + self.app.defaults.report_usage("ToolPanelize()") if toggle: # if the splitter is hidden, display it, else hide it but only if the current widget is the same diff --git a/flatcamTools/ToolPcbWizard.py b/flatcamTools/ToolPcbWizard.py index fe72dccc..832cf191 100644 --- a/flatcamTools/ToolPcbWizard.py +++ b/flatcamTools/ToolPcbWizard.py @@ -170,7 +170,7 @@ class PcbWizard(FlatCAMTool): self.tools_from_inf = {} def run(self, toggle=False): - self.app.report_usage("PcbWizard Tool()") + self.app.defaults.report_usage("PcbWizard Tool()") if toggle: # if the splitter is hidden, display it, else hide it but only if the current widget is the same diff --git a/flatcamTools/ToolProperties.py b/flatcamTools/ToolProperties.py index 3cd2656b..e1cc1c25 100644 --- a/flatcamTools/ToolProperties.py +++ b/flatcamTools/ToolProperties.py @@ -73,7 +73,7 @@ class Properties(FlatCAMTool): self.calculations_finished.connect(self.show_area_chull) def run(self, toggle=True): - self.app.report_usage("ToolProperties()") + self.app.defaults.report_usage("ToolProperties()") if self.app.tool_tab_locked is True: return diff --git a/flatcamTools/ToolPunchGerber.py b/flatcamTools/ToolPunchGerber.py index 64250cee..f0c6a9e3 100644 --- a/flatcamTools/ToolPunchGerber.py +++ b/flatcamTools/ToolPunchGerber.py @@ -397,7 +397,7 @@ class ToolPunchGerber(FlatCAMTool): ) def run(self, toggle=True): - self.app.report_usage("ToolPunchGerber()") + self.app.defaults.report_usage("ToolPunchGerber()") if toggle: # if the splitter is hidden, display it, else hide it but only if the current widget is the same diff --git a/flatcamTools/ToolQRCode.py b/flatcamTools/ToolQRCode.py index fdf01a08..8d54fedd 100644 --- a/flatcamTools/ToolQRCode.py +++ b/flatcamTools/ToolQRCode.py @@ -354,7 +354,7 @@ class QRCode(FlatCAMTool): self.reset_button.clicked.connect(self.set_tool_ui) def run(self, toggle=True): - self.app.report_usage("QRCode()") + self.app.defaults.report_usage("QRCode()") if toggle: # if the splitter is hidden, display it, else hide it but only if the current widget is the same diff --git a/flatcamTools/ToolRulesCheck.py b/flatcamTools/ToolRulesCheck.py index 53f634c2..fe07b683 100644 --- a/flatcamTools/ToolRulesCheck.py +++ b/flatcamTools/ToolRulesCheck.py @@ -589,7 +589,7 @@ class RulesCheck(FlatCAMTool): cb.setChecked(False) def run(self, toggle=True): - self.app.report_usage("ToolRulesCheck()") + self.app.defaults.report_usage("ToolRulesCheck()") if toggle: # if the splitter is hidden, display it, else hide it but only if the current widget is the same diff --git a/flatcamTools/ToolShell.py b/flatcamTools/ToolShell.py index c4ff2848..413d38dc 100644 --- a/flatcamTools/ToolShell.py +++ b/flatcamTools/ToolShell.py @@ -370,7 +370,7 @@ class FCShell(TermWidget): :return: output if there was any """ - self.app.report_usage('exec_command') + self.app.defaults.report_usage('exec_command') return self.exec_command_test(text, False, no_echo=no_echo) diff --git a/flatcamTools/ToolSolderPaste.py b/flatcamTools/ToolSolderPaste.py index 590f57b1..f77c2a98 100644 --- a/flatcamTools/ToolSolderPaste.py +++ b/flatcamTools/ToolSolderPaste.py @@ -525,7 +525,7 @@ class SolderPaste(FlatCAMTool): self.reset_button.clicked.connect(self.set_tool_ui) def run(self, toggle=True): - self.app.report_usage("ToolSolderPaste()") + self.app.defaults.report_usage("ToolSolderPaste()") if toggle: # if the splitter is hidden, display it, else hide it but only if the current widget is the same diff --git a/flatcamTools/ToolSub.py b/flatcamTools/ToolSub.py index adf44dd7..ef826a0f 100644 --- a/flatcamTools/ToolSub.py +++ b/flatcamTools/ToolSub.py @@ -236,7 +236,7 @@ class ToolSub(FlatCAMTool): FlatCAMTool.install(self, icon, separator, shortcut='Alt+W', **kwargs) def run(self, toggle=True): - self.app.report_usage("ToolSub()") + self.app.defaults.report_usage("ToolSub()") if toggle: # if the splitter is hidden, display it, else hide it but only if the current widget is the same diff --git a/flatcamTools/ToolTransform.py b/flatcamTools/ToolTransform.py index d9c988e7..1db4fb93 100644 --- a/flatcamTools/ToolTransform.py +++ b/flatcamTools/ToolTransform.py @@ -433,7 +433,7 @@ class ToolTransform(FlatCAMTool): # self.buffer_entry.returnPressed.connect(self.on_buffer_by_distance) def run(self, toggle=True): - self.app.report_usage("ToolTransform()") + self.app.defaults.report_usage("ToolTransform()") if toggle: # if the splitter is hidden, display it, else hide it but only if the current widget is the same