From fa7b965f6384903b955892d3de9efbbfaca371d5 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Fri, 30 Oct 2020 18:16:09 +0200 Subject: [PATCH] - fixed bug that did not allow joining of any object to a Geometry object - working on solving the lost triggered signals for the Editor Toolbars buttons after changing the layout --- CHANGELOG.md | 4 +- appCommon/Common.py | 1 + appGUI/MainGUI.py | 1 + .../general/GeneralGUIPrefGroupUI.py | 142 +------ app_Main.py | 346 +++++++++++++----- 5 files changed, 259 insertions(+), 235 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index df9cae1e..45a6d885 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ CHANGELOG for FlatCAM beta - in Tool Subtract added an option to delete the source objects after a successful operation. Fixed issue #455 - when entering into an Editor now the Project tab is disabled and the Properties tab where the Editor is installed change the text to 'Editor' and the color is set in Red. After exiting the Tab text is reverted to previous state. - fixed and issue where the Tab color that was changed in various states of the app was reverted back to a default color 'black'. Now it reverts to whatever color had before therefore being compatible with an usage of black theme +- fixed bug that did not allow joining of any object to a Geometry object +- working on solving the lost triggered signals for the Editor Toolbars buttons after changing the layout 29.10.2020 @@ -27,7 +29,7 @@ CHANGELOG for FlatCAM beta - fixed a small issue in GCode Editor where the signals for the buttons were attached again at each launch of the GCode Editor - fixed issues in the Tools Database due of recent changes in how the data structure is created - made sure that the right tools go only to the intended use, in Tools Database otherwise an error status message is created and Tools DB is closed on adding a wrong tool -- fixed the usage for Tools Database in Unix-like OS's +- fixed the usage for Tools Database in Unix-like OS's; fixed issue #453 - done some modest refactoring - fixed the Search and Add feature in Geometry Object UI - fixed issue with preamble not being inserted when used alone diff --git a/appCommon/Common.py b/appCommon/Common.py index cb605a7b..f45e1c44 100644 --- a/appCommon/Common.py +++ b/appCommon/Common.py @@ -230,6 +230,7 @@ class ExclusionAreas(QtCore.QObject): self.app = app + self.app.log.debug("+ Adding Exclusion Areas") # Storage for shapes, storage that can be used by FlatCAm tools for utility geometry # VisPy visuals if self.app.is_legacy is False: diff --git a/appGUI/MainGUI.py b/appGUI/MainGUI.py index ed789f2f..a9a48bc4 100644 --- a/appGUI/MainGUI.py +++ b/appGUI/MainGUI.py @@ -2128,6 +2128,7 @@ class MainGUI(QtWidgets.QMainWindow): :return: None """ + self.app.log.debug(" -> Add actions to new Toolbars") # ######################################################################## # ## File Toolbar # ## diff --git a/appGUI/preferences/general/GeneralGUIPrefGroupUI.py b/appGUI/preferences/general/GeneralGUIPrefGroupUI.py index 23524ac4..524ce314 100644 --- a/appGUI/preferences/general/GeneralGUIPrefGroupUI.py +++ b/appGUI/preferences/general/GeneralGUIPrefGroupUI.py @@ -326,7 +326,7 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): self.proj_color_entry.editingFinished.connect(self.on_proj_color_entry) self.proj_color_dis_entry.editingFinished.connect(self.on_proj_color_dis_entry) - self.layout_combo.activated.connect(self.on_layout) + self.layout_combo.activated.connect(self.app.on_layout) @staticmethod def handle_style(style): @@ -407,143 +407,3 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): def on_proj_color_dis_entry(self): self.app.defaults['global_proj_item_dis_color'] = self.proj_color_dis_entry.get_value() - - def on_layout(self, index=None, lay=None): - """ - Set the toolbars layout (location) - - :param index: - :param lay: Type of layout to be set on the toolbard - :return: None - """ - - self.app.defaults.report_usage("on_layout()") - if lay: - current_layout = lay - else: - current_layout = self.layout_combo.get_value() - - lay_settings = QSettings("Open Source", "FlatCAM") - lay_settings.setValue('layout', current_layout) - - # This will write the setting to the platform specific storage. - del lay_settings - - # first remove the toolbars: - try: - self.app.ui.removeToolBar(self.app.ui.toolbarfile) - self.app.ui.removeToolBar(self.app.ui.toolbaredit) - self.app.ui.removeToolBar(self.app.ui.toolbarview) - self.app.ui.removeToolBar(self.app.ui.toolbarshell) - self.app.ui.removeToolBar(self.app.ui.toolbartools) - self.app.ui.removeToolBar(self.app.ui.exc_edit_toolbar) - self.app.ui.removeToolBar(self.app.ui.geo_edit_toolbar) - self.app.ui.removeToolBar(self.app.ui.grb_edit_toolbar) - self.app.ui.removeToolBar(self.app.ui.toolbarshell) - except Exception: - pass - - if current_layout == 'compact': - # ## TOOLBAR INSTALLATION # ## - self.app.ui.toolbarfile = QtWidgets.QToolBar('File Toolbar') - self.app.ui.toolbarfile.setObjectName('File_TB') - self.app.ui.addToolBar(Qt.LeftToolBarArea, self.app.ui.toolbarfile) - - self.app.ui.toolbaredit = QtWidgets.QToolBar('Edit Toolbar') - self.app.ui.toolbaredit.setObjectName('Edit_TB') - self.app.ui.addToolBar(Qt.LeftToolBarArea, self.app.ui.toolbaredit) - - self.app.ui.toolbarshell = QtWidgets.QToolBar('Shell Toolbar') - self.app.ui.toolbarshell.setObjectName('Shell_TB') - self.app.ui.addToolBar(Qt.LeftToolBarArea, self.app.ui.toolbarshell) - - self.app.ui.toolbartools = QtWidgets.QToolBar('Tools Toolbar') - self.app.ui.toolbartools.setObjectName('Tools_TB') - self.app.ui.addToolBar(Qt.LeftToolBarArea, self.app.ui.toolbartools) - - self.app.ui.geo_edit_toolbar = QtWidgets.QToolBar('Geometry Editor Toolbar') - # self.app.ui.geo_edit_toolbar.setVisible(False) - self.app.ui.geo_edit_toolbar.setObjectName('GeoEditor_TB') - self.app.ui.addToolBar(Qt.RightToolBarArea, self.app.ui.geo_edit_toolbar) - - self.app.ui.toolbarview = QtWidgets.QToolBar('View Toolbar') - self.app.ui.toolbarview.setObjectName('View_TB') - self.app.ui.addToolBar(Qt.RightToolBarArea, self.app.ui.toolbarview) - - self.app.ui.addToolBarBreak(area=Qt.RightToolBarArea) - - self.app.ui.grb_edit_toolbar = QtWidgets.QToolBar('Gerber Editor Toolbar') - # self.app.ui.grb_edit_toolbar.setVisible(False) - self.app.ui.grb_edit_toolbar.setObjectName('GrbEditor_TB') - self.app.ui.addToolBar(Qt.RightToolBarArea, self.app.ui.grb_edit_toolbar) - - self.app.ui.exc_edit_toolbar = QtWidgets.QToolBar('Excellon Editor Toolbar') - self.app.ui.exc_edit_toolbar.setObjectName('ExcEditor_TB') - self.app.ui.addToolBar(Qt.RightToolBarArea, self.app.ui.exc_edit_toolbar) - - else: - # ## TOOLBAR INSTALLATION # ## - self.app.ui.toolbarfile = QtWidgets.QToolBar('File Toolbar') - self.app.ui.toolbarfile.setObjectName('File_TB') - self.app.ui.addToolBar(self.app.ui.toolbarfile) - - self.app.ui.toolbaredit = QtWidgets.QToolBar('Edit Toolbar') - self.app.ui.toolbaredit.setObjectName('Edit_TB') - self.app.ui.addToolBar(self.app.ui.toolbaredit) - - self.app.ui.toolbarview = QtWidgets.QToolBar('View Toolbar') - self.app.ui.toolbarview.setObjectName('View_TB') - self.app.ui.addToolBar(self.app.ui.toolbarview) - - self.app.ui.toolbarshell = QtWidgets.QToolBar('Shell Toolbar') - self.app.ui.toolbarshell.setObjectName('Shell_TB') - self.app.ui.addToolBar(self.app.ui.toolbarshell) - - self.app.ui.toolbartools = QtWidgets.QToolBar('Tools Toolbar') - self.app.ui.toolbartools.setObjectName('Tools_TB') - self.app.ui.addToolBar(self.app.ui.toolbartools) - - self.app.ui.exc_edit_toolbar = QtWidgets.QToolBar('Excellon Editor Toolbar') - # self.app.ui.exc_edit_toolbar.setVisible(False) - self.app.ui.exc_edit_toolbar.setObjectName('ExcEditor_TB') - self.app.ui.addToolBar(self.app.ui.exc_edit_toolbar) - - self.app.ui.addToolBarBreak() - - self.app.ui.geo_edit_toolbar = QtWidgets.QToolBar('Geometry Editor Toolbar') - # self.app.ui.geo_edit_toolbar.setVisible(False) - self.app.ui.geo_edit_toolbar.setObjectName('GeoEditor_TB') - self.app.ui.addToolBar(self.app.ui.geo_edit_toolbar) - - self.app.ui.grb_edit_toolbar = QtWidgets.QToolBar('Gerber Editor Toolbar') - # self.app.ui.grb_edit_toolbar.setVisible(False) - self.app.ui.grb_edit_toolbar.setObjectName('GrbEditor_TB') - self.app.ui.addToolBar(self.app.ui.grb_edit_toolbar) - - if current_layout == 'minimal': - self.app.ui.toolbarview.setVisible(False) - self.app.ui.toolbarshell.setVisible(False) - self.app.ui.geo_edit_toolbar.setVisible(False) - self.app.ui.grb_edit_toolbar.setVisible(False) - self.app.ui.exc_edit_toolbar.setVisible(False) - self.app.ui.lock_toolbar(lock=True) - - # add all the actions to the toolbars - self.app.ui.populate_toolbars() - - try: - # reconnect all the signals to the toolbar actions - self.app.connect_toolbar_signals(ui=self.app.ui) - except Exception as e: - self.app.log.debug( - "appGUI.preferences.general.GeneralGUIPrefGroupUI.on_layout() - connect toolbar signals -> %s" % str(e)) - - self.app.ui.grid_snap_btn.setChecked(True) - - self.app.ui.corner_snap_btn.setVisible(False) - self.app.ui.snap_magnet.setVisible(False) - - self.app.ui.grid_gap_x_entry.setText(str(self.app.defaults["global_gridx"])) - self.app.ui.grid_gap_y_entry.setText(str(self.app.defaults["global_gridy"])) - self.app.ui.snap_max_dist_entry.setText(str(self.app.defaults["global_snap_max"])) - self.app.ui.grid_gap_link_cb.setChecked(True) diff --git a/app_Main.py b/app_Main.py index c73c414e..b493d6ba 100644 --- a/app_Main.py +++ b/app_Main.py @@ -281,9 +281,6 @@ class App(QtCore.QObject): self.qapp = qapp - # declare it here so there is a reference - self.f_handlers = lambda: None - # ############################################################################################################ # ################# Setup the listening thread for another instance launching with args ###################### # ############################################################################################################ @@ -610,23 +607,6 @@ class App(QtCore.QObject): # When the self.defaults dictionary changes will update the Preferences GUI forms self.defaults.set_change_callback(self.on_defaults_dict_change) - # ########################################################################################################### - # ##################################### FIRST RUN SECTION ################################################### - # ################################ It's done only once after install ##################################### - # ########################################################################################################### - if self.defaults["first_run"] is True: - # ONLY AT FIRST STARTUP INIT THE GUI LAYOUT TO 'minimal' - initial_lay = 'minimal' - self.ui.general_defaults_form.general_gui_group.on_layout(lay=initial_lay) - - # Set the combobox in Preferences to the current layout - idx = self.ui.general_defaults_form.general_gui_group.layout_combo.findText(initial_lay) - self.ui.general_defaults_form.general_gui_group.layout_combo.setCurrentIndex(idx) - - # after the first run, this object should be False - self.defaults["first_run"] = False - self.preferencesUiManager.save_defaults(silent=True) - # ########################################################################################################### # ############################################ Data ######################################################### # ########################################################################################################### @@ -1284,7 +1264,10 @@ class App(QtCore.QObject): self.log.debug("Finished adding FlatCAM Editor's.") self.ui.set_ui_title(name=_("New Project - Not saved")) - + + # ########################################################################################################### + # ########################################## Install OPTIMIZATIONS for GCode generation ##################### + # ########################################################################################################### current_platform = platform.architecture()[0] if current_platform != '64bit': # set Excellon path optimizations algorithm to TSA if the app is run on a 32bit platform @@ -1311,6 +1294,25 @@ class App(QtCore.QObject): # this is calculated in the class above (somehow?) self.defaults["root_folder_path"] = self.app_home + # ########################################################################################################### + # ##################################### FIRST RUN SECTION ################################################### + # ################################ It's done only once after install ##################################### + # ########################################################################################################### + if self.defaults["first_run"] is True: + # ONLY AT FIRST STARTUP INIT THE GUI LAYOUT TO 'minimal' + self.log.debug("-> First Run: Setting up the first Layout" ) + initial_lay = 'minimal' + self.on_layout(lay=initial_lay) + + # Set the combobox in Preferences to the current layout + idx = self.ui.general_defaults_form.general_gui_group.layout_combo.findText(initial_lay) + self.ui.general_defaults_form.general_gui_group.layout_combo.setCurrentIndex(idx) + + # after the first run, this object should be False + self.defaults["first_run"] = False + self.log.debug("-> First Run: Updating the Defaults file with Factory Defaults") + self.preferencesUiManager.save_defaults(silent=True) + # ########################################################################################################### # ############################################### SYS TRAY ################################################## # ########################################################################################################### @@ -1497,7 +1499,7 @@ class App(QtCore.QObject): self.ui.menuprojectproperties.triggered.connect(self.obj_properties) # ToolBar signals - self.connect_toolbar_signals(ui=self.ui) + self.connect_toolbar_signals() # Context Menu self.ui.popmenu_disable.triggered.connect(lambda: self.toggle_plots(self.collection.get_selected())) @@ -2103,85 +2105,254 @@ class App(QtCore.QObject): # self.worker_task.emit({'fcn': self.f_parse.get_fonts_by_types, # 'params': []}) - def connect_tools_signals_to_toolbar(self, ui): - ui.dblsided_btn.triggered.connect(lambda: self.dblsidedtool.run(toggle=True)) - ui.cal_btn.triggered.connect(lambda: self.cal_exc_tool.run(toggle=True)) - ui.align_btn.triggered.connect(lambda: self.align_objects_tool.run(toggle=True)) - ui.extract_btn.triggered.connect(lambda: self.edrills_tool.run(toggle=True)) + def connect_tools_signals_to_toolbar(self): + self.log.debug(" -> Connecting Tools Toolbar Signals") - ui.cutout_btn.triggered.connect(lambda: self.cutout_tool.run(toggle=True)) - ui.ncc_btn.triggered.connect(lambda: self.ncclear_tool.run(toggle=True)) - ui.paint_btn.triggered.connect(lambda: self.paint_tool.run(toggle=True)) - ui.isolation_btn.triggered.connect(lambda: self.isolation_tool.run(toggle=True)) - ui.drill_btn.triggered.connect(lambda: self.drilling_tool.run(toggle=True)) + self.ui.dblsided_btn.triggered.connect(lambda: self.dblsidedtool.run(toggle=True)) + self.ui.cal_btn.triggered.connect(lambda: self.cal_exc_tool.run(toggle=True)) + self.ui.align_btn.triggered.connect(lambda: self.align_objects_tool.run(toggle=True)) + self.ui.extract_btn.triggered.connect(lambda: self.edrills_tool.run(toggle=True)) - ui.panelize_btn.triggered.connect(lambda: self.panelize_tool.run(toggle=True)) - ui.film_btn.triggered.connect(lambda: self.film_tool.run(toggle=True)) - ui.solder_btn.triggered.connect(lambda: self.paste_tool.run(toggle=True)) - ui.sub_btn.triggered.connect(lambda: self.sub_tool.run(toggle=True)) - ui.rules_btn.triggered.connect(lambda: self.rules_tool.run(toggle=True)) - ui.optimal_btn.triggered.connect(lambda: self.optimal_tool.run(toggle=True)) + self.ui.cutout_btn.triggered.connect(lambda: self.cutout_tool.run(toggle=True)) + self.ui.ncc_btn.triggered.connect(lambda: self.ncclear_tool.run(toggle=True)) + self.ui.paint_btn.triggered.connect(lambda: self.paint_tool.run(toggle=True)) + self.ui.isolation_btn.triggered.connect(lambda: self.isolation_tool.run(toggle=True)) + self.ui.drill_btn.triggered.connect(lambda: self.drilling_tool.run(toggle=True)) - ui.calculators_btn.triggered.connect(lambda: self.calculator_tool.run(toggle=True)) - ui.transform_btn.triggered.connect(lambda: self.transform_tool.run(toggle=True)) - ui.qrcode_btn.triggered.connect(lambda: self.qrcode_tool.run(toggle=True)) - ui.copperfill_btn.triggered.connect(lambda: self.copper_thieving_tool.run(toggle=True)) - ui.fiducials_btn.triggered.connect(lambda: self.fiducial_tool.run(toggle=True)) - ui.punch_btn.triggered.connect(lambda: self.punch_tool.run(toggle=True)) - ui.invert_btn.triggered.connect(lambda: self.invert_tool.run(toggle=True)) - ui.corners_tool_btn.triggered.connect(lambda: self.corners_tool.run(toggle=True)) - ui.etch_btn.triggered.connect(lambda: self.etch_tool.run(toggle=True)) + self.ui.panelize_btn.triggered.connect(lambda: self.panelize_tool.run(toggle=True)) + self.ui.film_btn.triggered.connect(lambda: self.film_tool.run(toggle=True)) + self.ui.solder_btn.triggered.connect(lambda: self.paste_tool.run(toggle=True)) + self.ui.sub_btn.triggered.connect(lambda: self.sub_tool.run(toggle=True)) + self.ui.rules_btn.triggered.connect(lambda: self.rules_tool.run(toggle=True)) + self.ui.optimal_btn.triggered.connect(lambda: self.optimal_tool.run(toggle=True)) - def connect_toolbar_signals(self, ui): + self.ui.calculators_btn.triggered.connect(lambda: self.calculator_tool.run(toggle=True)) + self.ui.transform_btn.triggered.connect(lambda: self.transform_tool.run(toggle=True)) + self.ui.qrcode_btn.triggered.connect(lambda: self.qrcode_tool.run(toggle=True)) + self.ui.copperfill_btn.triggered.connect(lambda: self.copper_thieving_tool.run(toggle=True)) + self.ui.fiducials_btn.triggered.connect(lambda: self.fiducial_tool.run(toggle=True)) + self.ui.punch_btn.triggered.connect(lambda: self.punch_tool.run(toggle=True)) + self.ui.invert_btn.triggered.connect(lambda: self.invert_tool.run(toggle=True)) + self.ui.corners_tool_btn.triggered.connect(lambda: self.corners_tool.run(toggle=True)) + self.ui.etch_btn.triggered.connect(lambda: self.etch_tool.run(toggle=True)) + + def connect_editors_signals_to_toolbar(self): + self.log.debug(" -> Connecting Editors Toolbar Signals") + + # Geometry Editor Toolbar Signals + for tool in self.geo_editor.tools: + self.geo_editor.tools[tool]["button"].triggered.connect(lambda: self.geo_editor.on_tool_select(tool)) + self.geo_editor.tools[tool]["button"].setCheckable(True) + + # Gerber Editor Toolbar Signals + for tool in self.grb_editor.tools_gerber: + self.grb_editor.tools_gerber[tool]["button"].triggered.connect(lambda: self.grb_editor.on_tool_select(tool)) + self.grb_editor.tools_gerber[tool]["button"].setCheckable(True) + + # Excellon Editor Toolbar Signals + for tool in self.exc_editor.tools_exc: + self.exc_editor.tools_exc[tool]["button"].triggered.connect(lambda: self.exc_editor.on_tool_select(tool)) + self.exc_editor.tools_exc[tool]["button"].setCheckable(True) + + def connect_toolbar_signals(self): """ Reconnect the signals to the actions in the toolbar. This has to be done each time after the FlatCAM tools are removed/installed. :return: None """ - + self.log.debug(" -> Connecting Toolbar Signals") # Toolbar # File Toolbar Signals # ui.file_new_btn.triggered.connect(self.on_file_new) - ui.file_open_btn.triggered.connect(self.f_handlers.on_file_openproject) - ui.file_save_btn.triggered.connect(self.f_handlers.on_file_saveproject) - ui.file_open_gerber_btn.triggered.connect(self.f_handlers.on_fileopengerber) - ui.file_open_excellon_btn.triggered.connect(self.f_handlers.on_fileopenexcellon) + self.ui.file_open_btn.triggered.connect(self.f_handlers.on_file_openproject) + self.ui.file_save_btn.triggered.connect(self.f_handlers.on_file_saveproject) + self.ui.file_open_gerber_btn.triggered.connect(self.f_handlers.on_fileopengerber) + self.ui.file_open_excellon_btn.triggered.connect(self.f_handlers.on_fileopenexcellon) # View Toolbar Signals - ui.clear_plot_btn.triggered.connect(self.clear_plots) - ui.replot_btn.triggered.connect(self.plot_all) - ui.zoom_fit_btn.triggered.connect(self.on_zoom_fit) - ui.zoom_in_btn.triggered.connect(lambda: self.plotcanvas.zoom(1 / 1.5)) - ui.zoom_out_btn.triggered.connect(lambda: self.plotcanvas.zoom(1.5)) + self.ui.clear_plot_btn.triggered.connect(self.clear_plots) + self.ui.replot_btn.triggered.connect(self.plot_all) + self.ui.zoom_fit_btn.triggered.connect(self.on_zoom_fit) + self.ui.zoom_in_btn.triggered.connect(lambda: self.plotcanvas.zoom(1 / 1.5)) + self.ui.zoom_out_btn.triggered.connect(lambda: self.plotcanvas.zoom(1.5)) # Edit Toolbar Signals - ui.editgeo_btn.triggered.connect(self.object2editor) - ui.update_obj_btn.triggered.connect(lambda: self.editor2object()) - ui.copy_btn.triggered.connect(self.on_copy_command) - ui.delete_btn.triggered.connect(self.on_delete) + self.ui.editgeo_btn.triggered.connect(self.object2editor) + self.ui.update_obj_btn.triggered.connect(lambda: self.editor2object()) + self.ui.copy_btn.triggered.connect(self.on_copy_command) + self.ui.delete_btn.triggered.connect(self.on_delete) - ui.distance_btn.triggered.connect(lambda: self.distance_tool.run(toggle=True)) - ui.distance_min_btn.triggered.connect(lambda: self.distance_min_tool.run(toggle=True)) - ui.origin_btn.triggered.connect(self.on_set_origin) - ui.move2origin_btn.triggered.connect(self.on_move2origin) + self.ui.distance_btn.triggered.connect(lambda: self.distance_tool.run(toggle=True)) + self.ui.distance_min_btn.triggered.connect(lambda: self.distance_min_tool.run(toggle=True)) + self.ui.origin_btn.triggered.connect(self.on_set_origin) + self.ui.move2origin_btn.triggered.connect(self.on_move2origin) - ui.jmp_btn.triggered.connect(self.on_jump_to) - ui.locate_btn.triggered.connect(lambda: self.on_locate(obj=self.collection.get_active())) + self.ui.jmp_btn.triggered.connect(self.on_jump_to) + self.ui.locate_btn.triggered.connect(lambda: self.on_locate(obj=self.collection.get_active())) # Scripting Toolbar Signals - ui.shell_btn.triggered.connect(ui.toggle_shell_ui) - ui.new_script_btn.triggered.connect(self.f_handlers.on_filenewscript) - ui.open_script_btn.triggered.connect(self.f_handlers.on_fileopenscript) - ui.run_script_btn.triggered.connect(self.f_handlers.on_filerunscript) + self.ui.shell_btn.triggered.connect(self.ui.toggle_shell_ui) + self.ui.new_script_btn.triggered.connect(self.f_handlers.on_filenewscript) + self.ui.open_script_btn.triggered.connect(self.f_handlers.on_fileopenscript) + self.ui.run_script_btn.triggered.connect(self.f_handlers.on_filerunscript) # Tools Toolbar Signals try: - self.connect_tools_signals_to_toolbar(ui=ui) + self.connect_tools_signals_to_toolbar() except Exception as err: self.log.debug("App.connect_toolbar_signals() tools signals -> %s" % str(err)) + # Editor Toolbars Signals + try: + self.connect_editors_signals_to_toolbar() + except Exception as err: + self.log.debug("App.connect_toolbar_signals() editor signals -> %s" % str(err)) + + def on_layout(self, index=None, lay=None): + """ + Set the toolbars layout (location) + + :param index: + :param lay: Type of layout to be set on the toolbard + :return: None + """ + + self.defaults.report_usage("on_layout()") + self.log.debug(" ---> New Layout") + + if lay: + current_layout = lay + else: + current_layout = self.ui.general_defaults_form.general_gui_group.layout_combo.get_value() + + lay_settings = QSettings("Open Source", "FlatCAM") + lay_settings.setValue('layout', current_layout) + + # This will write the setting to the platform specific storage. + del lay_settings + + # first remove the toolbars: + self.log.debug(" -> Remove Toolbars") + try: + self.ui.removeToolBar(self.ui.toolbarfile) + self.ui.removeToolBar(self.ui.toolbaredit) + self.ui.removeToolBar(self.ui.toolbarview) + self.ui.removeToolBar(self.ui.toolbarshell) + self.ui.removeToolBar(self.ui.toolbartools) + self.ui.removeToolBar(self.ui.exc_edit_toolbar) + self.ui.removeToolBar(self.ui.geo_edit_toolbar) + self.ui.removeToolBar(self.ui.grb_edit_toolbar) + self.ui.removeToolBar(self.ui.toolbarshell) + except Exception: + pass + + self.log.debug(" -> Add New Toolbars") + if current_layout == 'compact': + # ## TOOLBAR INSTALLATION # ## + self.ui.toolbarfile = QtWidgets.QToolBar('File Toolbar') + self.ui.toolbarfile.setObjectName('File_TB') + self.ui.addToolBar(Qt.LeftToolBarArea, self.ui.toolbarfile) + + self.ui.toolbaredit = QtWidgets.QToolBar('Edit Toolbar') + self.ui.toolbaredit.setObjectName('Edit_TB') + self.ui.addToolBar(Qt.LeftToolBarArea, self.ui.toolbaredit) + + self.ui.toolbarshell = QtWidgets.QToolBar('Shell Toolbar') + self.ui.toolbarshell.setObjectName('Shell_TB') + self.ui.addToolBar(Qt.LeftToolBarArea, self.ui.toolbarshell) + + self.ui.toolbartools = QtWidgets.QToolBar('Tools Toolbar') + self.ui.toolbartools.setObjectName('Tools_TB') + self.ui.addToolBar(Qt.LeftToolBarArea, self.ui.toolbartools) + + self.ui.geo_edit_toolbar = QtWidgets.QToolBar('Geometry Editor Toolbar') + # self.ui.geo_edit_toolbar.setVisible(False) + self.ui.geo_edit_toolbar.setObjectName('GeoEditor_TB') + self.ui.addToolBar(Qt.RightToolBarArea, self.ui.geo_edit_toolbar) + + self.ui.toolbarview = QtWidgets.QToolBar('View Toolbar') + self.ui.toolbarview.setObjectName('View_TB') + self.ui.addToolBar(Qt.RightToolBarArea, self.ui.toolbarview) + + self.ui.addToolBarBreak(area=Qt.RightToolBarArea) + + self.ui.grb_edit_toolbar = QtWidgets.QToolBar('Gerber Editor Toolbar') + # self.ui.grb_edit_toolbar.setVisible(False) + self.ui.grb_edit_toolbar.setObjectName('GrbEditor_TB') + self.ui.addToolBar(Qt.RightToolBarArea, self.ui.grb_edit_toolbar) + + self.ui.exc_edit_toolbar = QtWidgets.QToolBar('Excellon Editor Toolbar') + self.ui.exc_edit_toolbar.setObjectName('ExcEditor_TB') + self.ui.addToolBar(Qt.RightToolBarArea, self.ui.exc_edit_toolbar) + else: + # ## TOOLBAR INSTALLATION # ## + self.ui.toolbarfile = QtWidgets.QToolBar('File Toolbar') + self.ui.toolbarfile.setObjectName('File_TB') + self.ui.addToolBar(self.ui.toolbarfile) + + self.ui.toolbaredit = QtWidgets.QToolBar('Edit Toolbar') + self.ui.toolbaredit.setObjectName('Edit_TB') + self.ui.addToolBar(self.ui.toolbaredit) + + self.ui.toolbarview = QtWidgets.QToolBar('View Toolbar') + self.ui.toolbarview.setObjectName('View_TB') + self.ui.addToolBar(self.ui.toolbarview) + + self.ui.toolbarshell = QtWidgets.QToolBar('Shell Toolbar') + self.ui.toolbarshell.setObjectName('Shell_TB') + self.ui.addToolBar(self.ui.toolbarshell) + + self.ui.toolbartools = QtWidgets.QToolBar('Tools Toolbar') + self.ui.toolbartools.setObjectName('Tools_TB') + self.ui.addToolBar(self.ui.toolbartools) + + self.ui.exc_edit_toolbar = QtWidgets.QToolBar('Excellon Editor Toolbar') + # self.ui.exc_edit_toolbar.setVisible(False) + self.ui.exc_edit_toolbar.setObjectName('ExcEditor_TB') + self.ui.addToolBar(self.ui.exc_edit_toolbar) + + self.ui.addToolBarBreak() + + self.ui.geo_edit_toolbar = QtWidgets.QToolBar('Geometry Editor Toolbar') + # self.ui.geo_edit_toolbar.setVisible(False) + self.ui.geo_edit_toolbar.setObjectName('GeoEditor_TB') + self.ui.addToolBar(self.ui.geo_edit_toolbar) + + self.ui.grb_edit_toolbar = QtWidgets.QToolBar('Gerber Editor Toolbar') + # self.ui.grb_edit_toolbar.setVisible(False) + self.ui.grb_edit_toolbar.setObjectName('GrbEditor_TB') + self.ui.addToolBar(self.ui.grb_edit_toolbar) + + if current_layout == 'minimal': + self.ui.toolbarview.setVisible(False) + self.ui.toolbarshell.setVisible(False) + self.ui.geo_edit_toolbar.setVisible(False) + self.ui.grb_edit_toolbar.setVisible(False) + self.ui.exc_edit_toolbar.setVisible(False) + self.ui.lock_toolbar(lock=True) + + # add all the actions to the toolbars + self.ui.populate_toolbars() + + try: + # reconnect all the signals to the toolbar actions + self.connect_toolbar_signals() + except Exception as e: + self.log.debug( + "App.on_layout() - connect toolbar signals -> %s" % str(e)) + + self.ui.grid_snap_btn.setChecked(True) + + self.ui.corner_snap_btn.setVisible(False) + self.ui.snap_magnet.setVisible(False) + + self.ui.grid_gap_x_entry.setText(str(self.defaults["global_gridx"])) + self.ui.grid_gap_y_entry.setText(str(self.defaults["global_gridy"])) + self.ui.snap_max_dist_entry.setText(str(self.defaults["global_snap_max"])) + self.ui.grid_gap_link_cb.setChecked(True) + def object2editor(self): """ Send the current Geometry, Gerber, Excellon object or CNCJob (if any) into the it's editor. @@ -3653,12 +3824,12 @@ class App(QtCore.QObject): # register all keys in the Preferences window for ext in exc_list: new_k = new_reg_path + '.%s' % ext - set_reg('', root_path=root_path, new_reg_path=new_k, value='FlatCAM') + set_reg('', root_pth=root_path, new_reg_path_par=new_k, value='FlatCAM') # and unregister those that are no longer in the Preferences windows but are in the file for ext in self.defaults["fa_excellon"].replace(' ', '').split(','): if ext not in exc_list: - delete_reg(root_path=root_path, reg_path=new_reg_path, key_to_del='.%s' % ext) + delete_reg(root_pth=root_path, reg_path=new_reg_path, key_to_del='.%s' % ext) # now write the updated extensions to the self.defaults # new_ext = '' @@ -3674,18 +3845,13 @@ class App(QtCore.QObject): # register all keys in the Preferences window for ext in gco_list: new_k = new_reg_path + '.%s' % ext - set_reg('', root_path=root_path, new_reg_path=new_k, value='FlatCAM') + set_reg('', root_pth=root_path, new_reg_path_par=new_k, value='FlatCAM') # and unregister those that are no longer in the Preferences windows but are in the file for ext in self.defaults["fa_gcode"].replace(' ', '').split(','): if ext not in gco_list: - delete_reg(root_path=root_path, reg_path=new_reg_path, key_to_del='.%s' % ext) + delete_reg(root_pth=root_path, reg_path=new_reg_path, key_to_del='.%s' % ext) - # now write the updated extensions to the self.defaults - # new_ext = '' - # for ext in gco_list: - # new_ext = new_ext + ext + ', ' - # self.defaults["fa_gcode"] = new_ext self.inform.emit('[success] %s' % _("Selected GCode file extensions registered with FlatCAM.")) @@ -3696,20 +3862,14 @@ class App(QtCore.QObject): # register all keys in the Preferences window for ext in grb_list: new_k = new_reg_path + '.%s' % ext - set_reg('', root_path=root_path, new_reg_path=new_k, value='FlatCAM') + set_reg('', root_pth=root_path, new_reg_path_par=new_k, value='FlatCAM') # and unregister those that are no longer in the Preferences windows but are in the file for ext in self.defaults["fa_gerber"].replace(' ', '').split(','): if ext not in grb_list: - delete_reg(root_path=root_path, reg_path=new_reg_path, key_to_del='.%s' % ext) + delete_reg(root_pth=root_path, reg_path=new_reg_path, key_to_del='.%s' % ext) - # now write the updated extensions to the self.defaults - # new_ext = '' - # for ext in grb_list: - # new_ext = new_ext + ext + ', ' - # self.defaults["fa_gerber"] = new_ext - self.inform.emit('[success] %s' % - _("Selected Gerber file extensions registered with FlatCAM.")) + self.inform.emit('[success] %s' % _("Selected Gerber file extensions registered with FlatCAM.")) def add_extension(self, ext_type): """ @@ -3919,7 +4079,7 @@ class App(QtCore.QObject): # if at least one True object is in the list then due of the previous check, all list elements are True objects if True in geo_type_set: def initialize(geo_obj, app): - GeometryObject.merge(geo_list=objs, geo_final=geo_obj, multigeo=True, fuse_tools=fuse_tools) + GeometryObject.merge(geo_list=objs, geo_final=geo_obj, multi_geo=True, fuse_tools=fuse_tools) app.inform.emit('[success] %s.' % _("Geometry merging finished")) # rename all the ['name] key in obj.tools[tooluid]['data'] to the obj_name_multi @@ -3929,7 +4089,7 @@ class App(QtCore.QObject): self.app_obj.new_object("geometry", obj_name_multi, initialize) else: def initialize(geo_obj, app): - GeometryObject.merge(geo_list=objs, geo_final=geo_obj, multigeo=False, fuse_tools=fuse_tools) + GeometryObject.merge(geo_list=objs, geo_final=geo_obj, multi_geo=False, fuse_tools=fuse_tools) app.inform.emit('[success] %s.' % _("Geometry merging finished")) # rename all the ['name] key in obj.tools[tooluid]['data'] to the obj_name_multi