From 11f494a1d17fd10c3ffa9b49283b2194364454c8 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Fri, 30 Oct 2020 19:07:38 +0200 Subject: [PATCH] - fixed issue #454; trigger signals for Editor Toolbars lost after changing the layout --- CHANGELOG.md | 1 + appEditors/AppExcEditor.py | 50 +++++++++++++--------- appEditors/AppGeoEditor.py | 62 ++++++++++++++++----------- appEditors/AppGerberEditor.py | 79 ++++++++++++++++------------------- appGUI/MainGUI.py | 10 ++--- app_Main.py | 28 +++++-------- 6 files changed, 120 insertions(+), 110 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45a6d885..3afbcab5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ CHANGELOG for FlatCAM beta - 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 +- fixed issue #454; trigger signals for Editor Toolbars lost after changing the layout 29.10.2020 diff --git a/appEditors/AppExcEditor.py b/appEditors/AppExcEditor.py index 49874957..9dd62f6b 100644 --- a/appEditors/AppExcEditor.py +++ b/appEditors/AppExcEditor.py @@ -1530,7 +1530,13 @@ class AppExcEditor(QtCore.QObject): self.e_ui = AppExcEditorUI(app=self.app) - # SIGNALS + # ############################################################################################################# + # ######################### Excellon Editor Signals ########################################################### + # ############################################################################################################# + + # connect the toolbar signals + self.connect_exc_toolbar_signals() + self.e_ui.convert_slots_btn.clicked.connect(self.on_slots_conversion) self.app.ui.delete_drill_btn.triggered.connect(self.on_delete_btn) self.e_ui.name_entry.returnPressed.connect(self.on_name_activate) @@ -1564,16 +1570,7 @@ class AppExcEditor(QtCore.QObject): self.exc_obj = None # ## Toolbar events and properties - self.tools_exc = { - "drill_select": {"button": self.app.ui.select_drill_btn, "constructor": FCDrillSelect}, - "drill_add": {"button": self.app.ui.add_drill_btn, "constructor": FCDrillAdd}, - "drill_array": {"button": self.app.ui.add_drill_array_btn, "constructor": FCDrillArray}, - "slot_add": {"button": self.app.ui.add_slot_btn, "constructor": FCSlot}, - "slot_array": {"button": self.app.ui.add_slot_array_btn, "constructor": FCSlotArray}, - "drill_resize": {"button": self.app.ui.resize_drill_btn, "constructor": FCDrillResize}, - "drill_copy": {"button": self.app.ui.copy_drill_btn, "constructor": FCDrillCopy}, - "drill_move": {"button": self.app.ui.move_drill_btn, "constructor": FCDrillMove}, - } + self.tools_exc = {} # ## Data self.active_tool = None @@ -1650,15 +1647,6 @@ class AppExcEditor(QtCore.QObject): self.complete = False - def make_callback(thetool): - def f(): - self.on_tool_select(thetool) - return f - - for tool in self.tools_exc: - self.tools_exc[tool]["button"].triggered.connect(make_callback(tool)) # Events - self.tools_exc[tool]["button"].setCheckable(True) # Checkable - self.options = { "global_gridx": 0.1, "global_gridy": 0.1, @@ -1706,6 +1694,28 @@ class AppExcEditor(QtCore.QObject): self.editor_active = False log.debug("Initialization of the Excellon Editor is finished ...") + def make_callback(self, thetool): + def f(): + self.on_tool_select(thetool) + + return f + + def connect_exc_toolbar_signals(self): + self.tools_exc.update({ + "drill_select": {"button": self.app.ui.select_drill_btn, "constructor": FCDrillSelect}, + "drill_add": {"button": self.app.ui.add_drill_btn, "constructor": FCDrillAdd}, + "drill_array": {"button": self.app.ui.add_drill_array_btn, "constructor": FCDrillArray}, + "slot_add": {"button": self.app.ui.add_slot_btn, "constructor": FCSlot}, + "slot_array": {"button": self.app.ui.add_slot_array_btn, "constructor": FCSlotArray}, + "drill_resize": {"button": self.app.ui.resize_drill_btn, "constructor": FCDrillResize}, + "drill_copy": {"button": self.app.ui.copy_drill_btn, "constructor": FCDrillCopy}, + "drill_move": {"button": self.app.ui.move_drill_btn, "constructor": FCDrillMove}, + }) + + for tool in self.tools_exc: + self.tools_exc[tool]["button"].triggered.connect(self.make_callback(tool)) # Events + self.tools_exc[tool]["button"].setCheckable(True) # Checkable + def pool_recreated(self, pool): self.shapes.pool = pool self.tool_shape.pool = pool diff --git a/appEditors/AppGeoEditor.py b/appEditors/AppGeoEditor.py index 5b312831..8ca0c5d2 100644 --- a/appEditors/AppGeoEditor.py +++ b/appEditors/AppGeoEditor.py @@ -3317,22 +3317,7 @@ class AppGeoEditor(QtCore.QObject): self.exit_editor_button.clicked.connect(lambda: self.app.editor2object()) # ## Toolbar events and properties - self.tools = { - "select": {"button": self.app.ui.geo_select_btn, "constructor": FCSelect}, - "arc": {"button": self.app.ui.geo_add_arc_btn, "constructor": FCArc}, - "circle": {"button": self.app.ui.geo_add_circle_btn, "constructor": FCCircle}, - "path": {"button": self.app.ui.geo_add_path_btn, "constructor": FCPath}, - "rectangle": {"button": self.app.ui.geo_add_rectangle_btn, "constructor": FCRectangle}, - "polygon": {"button": self.app.ui.geo_add_polygon_btn, "constructor": FCPolygon}, - "text": {"button": self.app.ui.geo_add_text_btn, "constructor": FCText}, - "buffer": {"button": self.app.ui.geo_add_buffer_btn, "constructor": FCBuffer}, - "paint": {"button": self.app.ui.geo_add_paint_btn, "constructor": FCPaint}, - "eraser": {"button": self.app.ui.geo_eraser_btn, "constructor": FCEraser}, - "move": {"button": self.app.ui.geo_move_btn, "constructor": FCMove}, - "transform": {"button": self.app.ui.geo_transform_btn, "constructor": FCTransform}, - "copy": {"button": self.app.ui.geo_copy_btn, "constructor": FCCopy}, - "explode": {"button": self.app.ui.geo_explode_btn, "constructor": FCExplode} - } + self.tools = {} # # ## Data self.active_tool = None @@ -3388,15 +3373,6 @@ class AppGeoEditor(QtCore.QObject): # this will flag if the Editor "tools" are launched from key shortcuts (True) or from menu toolbar (False) self.launched_from_shortcuts = False - def make_callback(thetool): - def f(): - self.on_tool_select(thetool) - return f - - for tool in self.tools: - self.tools[tool]["button"].triggered.connect(make_callback(tool)) # Events - self.tools[tool]["button"].setCheckable(True) # Checkable - self.app.ui.grid_snap_btn.triggered.connect(self.on_grid_toggled) self.app.ui.corner_snap_btn.setCheckable(True) self.app.ui.corner_snap_btn.triggered.connect(lambda: self.toolbar_tool_toggle("corner_snap")) @@ -3438,6 +3414,14 @@ class AppGeoEditor(QtCore.QObject): self.paint_tool = PaintOptionsTool(self.app, self) self.transform_tool = TransformEditorTool(self.app, self) + # ############################################################################################################# + # ####################### GEOMETRY Editor Signals ############################################################# + # ############################################################################################################# + + # connect the toolbar signals + self.connect_geo_toolbar_signals() + + # connect Geometry Editor Menu signals self.app.ui.geo_add_circle_menuitem.triggered.connect(lambda: self.select_tool('circle')) self.app.ui.geo_add_arc_menuitem.triggered.connect(lambda: self.select_tool('arc')) self.app.ui.geo_add_rectangle_menuitem.triggered.connect(lambda: self.select_tool('rectangle')) @@ -3475,6 +3459,34 @@ class AppGeoEditor(QtCore.QObject): self.editor_active = False log.debug("Initialization of the Geometry Editor is finished ...") + def make_callback(self, thetool): + def f(): + self.on_tool_select(thetool) + + return f + + def connect_geo_toolbar_signals(self): + self.tools.update({ + "select": {"button": self.app.ui.geo_select_btn, "constructor": FCSelect}, + "arc": {"button": self.app.ui.geo_add_arc_btn, "constructor": FCArc}, + "circle": {"button": self.app.ui.geo_add_circle_btn, "constructor": FCCircle}, + "path": {"button": self.app.ui.geo_add_path_btn, "constructor": FCPath}, + "rectangle": {"button": self.app.ui.geo_add_rectangle_btn, "constructor": FCRectangle}, + "polygon": {"button": self.app.ui.geo_add_polygon_btn, "constructor": FCPolygon}, + "text": {"button": self.app.ui.geo_add_text_btn, "constructor": FCText}, + "buffer": {"button": self.app.ui.geo_add_buffer_btn, "constructor": FCBuffer}, + "paint": {"button": self.app.ui.geo_add_paint_btn, "constructor": FCPaint}, + "eraser": {"button": self.app.ui.geo_eraser_btn, "constructor": FCEraser}, + "move": {"button": self.app.ui.geo_move_btn, "constructor": FCMove}, + "transform": {"button": self.app.ui.geo_transform_btn, "constructor": FCTransform}, + "copy": {"button": self.app.ui.geo_copy_btn, "constructor": FCCopy}, + "explode": {"button": self.app.ui.geo_explode_btn, "constructor": FCExplode} + }) + + for tool in self.tools: + self.tools[tool]["button"].triggered.connect(self.make_callback(tool)) # Events + self.tools[tool]["button"].setCheckable(True) # Checkable + def pool_recreated(self, pool): self.shapes.pool = pool self.tool_shape.pool = pool diff --git a/appEditors/AppGerberEditor.py b/appEditors/AppGerberEditor.py index af91ad05..29cf6bb9 100644 --- a/appEditors/AppGerberEditor.py +++ b/appEditors/AppGerberEditor.py @@ -2912,38 +2912,7 @@ class AppGerberEditor(QtCore.QObject): self.exit_editor_button.clicked.connect(lambda: self.app.editor2object()) # Toolbar events and properties - self.tools_gerber = { - "select": {"button": self.app.ui.grb_select_btn, - "constructor": FCApertureSelect}, - "pad": {"button": self.app.ui.grb_add_pad_btn, - "constructor": FCPad}, - "array": {"button": self.app.ui.add_pad_ar_btn, - "constructor": FCPadArray}, - "track": {"button": self.app.ui.grb_add_track_btn, - "constructor": FCTrack}, - "region": {"button": self.app.ui.grb_add_region_btn, - "constructor": FCRegion}, - "poligonize": {"button": self.app.ui.grb_convert_poly_btn, - "constructor": FCPoligonize}, - "semidisc": {"button": self.app.ui.grb_add_semidisc_btn, - "constructor": FCSemiDisc}, - "disc": {"button": self.app.ui.grb_add_disc_btn, - "constructor": FCDisc}, - "buffer": {"button": self.app.ui.aperture_buffer_btn, - "constructor": FCBuffer}, - "scale": {"button": self.app.ui.aperture_scale_btn, - "constructor": FCScale}, - "markarea": {"button": self.app.ui.aperture_markarea_btn, - "constructor": FCMarkArea}, - "eraser": {"button": self.app.ui.aperture_eraser_btn, - "constructor": FCEraser}, - "copy": {"button": self.app.ui.aperture_copy_btn, - "constructor": FCApertureCopy}, - "transform": {"button": self.app.ui.grb_transform_btn, - "constructor": FCTransform}, - "move": {"button": self.app.ui.aperture_move_btn, - "constructor": FCApertureMove}, - } + self.tools_gerber = {} # # ## Data self.active_tool = None @@ -3034,15 +3003,6 @@ class AppGerberEditor(QtCore.QObject): def_tol_val = float(self.app.defaults["global_tolerance"]) self.tolerance = def_tol_val if self.units == 'MM'else def_tol_val / 20 - def make_callback(the_tool): - def f(): - self.on_tool_select(the_tool) - return f - - for tool in self.tools_gerber: - self.tools_gerber[tool]["button"].triggered.connect(make_callback(tool)) # Events - self.tools_gerber[tool]["button"].setCheckable(True) - self.options = { "global_gridx": 0.1, "global_gridy": 0.1, @@ -3082,7 +3042,13 @@ class AppGerberEditor(QtCore.QObject): self.transform_tool = TransformEditorTool(self.app, self) - # Signals + # ############################################################################################################# + # ######################### Gerber Editor Signals ############################################################# + # ############################################################################################################# + + # connect the toolbar signals + self.connect_grb_toolbar_signals() + self.buffer_button.clicked.connect(self.on_buffer) self.scale_button.clicked.connect(self.on_scale) @@ -3136,6 +3102,35 @@ class AppGerberEditor(QtCore.QObject): self.set_ui() log.debug("Initialization of the Gerber Editor is finished ...") + def make_callback(self, the_tool): + def f(): + self.on_tool_select(the_tool) + + return f + + def connect_grb_toolbar_signals(self): + self.tools_gerber.update({ + "select": {"button": self.app.ui.grb_select_btn, "constructor": FCApertureSelect}, + "pad": {"button": self.app.ui.grb_add_pad_btn, "constructor": FCPad}, + "array": {"button": self.app.ui.add_pad_ar_btn, "constructor": FCPadArray}, + "track": {"button": self.app.ui.grb_add_track_btn, "constructor": FCTrack}, + "region": {"button": self.app.ui.grb_add_region_btn, "constructor": FCRegion}, + "poligonize": {"button": self.app.ui.grb_convert_poly_btn, "constructor": FCPoligonize}, + "semidisc": {"button": self.app.ui.grb_add_semidisc_btn, "constructor": FCSemiDisc}, + "disc": {"button": self.app.ui.grb_add_disc_btn, "constructor": FCDisc}, + "buffer": {"button": self.app.ui.aperture_buffer_btn, "constructor": FCBuffer}, + "scale": {"button": self.app.ui.aperture_scale_btn, "constructor": FCScale}, + "markarea": {"button": self.app.ui.aperture_markarea_btn, "constructor": FCMarkArea}, + "eraser": {"button": self.app.ui.aperture_eraser_btn, "constructor": FCEraser}, + "copy": {"button": self.app.ui.aperture_copy_btn, "constructor": FCApertureCopy}, + "transform": {"button": self.app.ui.grb_transform_btn, "constructor": FCTransform}, + "move": {"button": self.app.ui.aperture_move_btn, "constructor": FCApertureMove}, + }) + + for tool in self.tools_gerber: + self.tools_gerber[tool]["button"].triggered.connect(self.make_callback(tool)) # Events + self.tools_gerber[tool]["button"].setCheckable(True) + def pool_recreated(self, pool): self.shapes.pool = pool self.tool_shape.pool = pool diff --git a/appGUI/MainGUI.py b/appGUI/MainGUI.py index a9a48bc4..4def1c6d 100644 --- a/appGUI/MainGUI.py +++ b/appGUI/MainGUI.py @@ -2131,7 +2131,7 @@ class MainGUI(QtWidgets.QMainWindow): self.app.log.debug(" -> Add actions to new Toolbars") # ######################################################################## - # ## File Toolbar # ## + # ##################### File Toolbar ##################################### # ######################################################################## self.file_open_gerber_btn = self.toolbarfile.addAction( QtGui.QIcon(self.app.resource_location + '/flatcam_icon32.png'), _("Open Gerber")) @@ -2144,7 +2144,7 @@ class MainGUI(QtWidgets.QMainWindow): QtGui.QIcon(self.app.resource_location + '/project_save32.png'), _("Save project")) # ######################################################################## - # ## Edit Toolbar # ## + # ######################### Edit Toolbar ################################# # ######################################################################## self.editgeo_btn = self.toolbaredit.addAction( QtGui.QIcon(self.app.resource_location + '/edit32.png'), _("Editor")) @@ -2258,7 +2258,7 @@ class MainGUI(QtWidgets.QMainWindow): QtGui.QIcon(self.app.resource_location + '/etch_32.png'), _("Etch Compensation Tool")) # ######################################################################## - # ## Excellon Editor Toolbar # ## + # ################### Excellon Editor Toolbar ############################ # ######################################################################## self.select_drill_btn = self.exc_edit_toolbar.addAction( QtGui.QIcon(self.app.resource_location + '/pointer32.png'), _("Select")) @@ -2284,7 +2284,7 @@ class MainGUI(QtWidgets.QMainWindow): QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move Drill")) # ######################################################################## - # ## Geometry Editor Toolbar # ## + # ################### Geometry Editor Toolbar ############################ # ######################################################################## self.geo_select_btn = self.geo_edit_toolbar.addAction( QtGui.QIcon(self.app.resource_location + '/pointer32.png'), _("Select 'Esc'")) @@ -2336,7 +2336,7 @@ class MainGUI(QtWidgets.QMainWindow): QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move Objects")) # ######################################################################## - # ## Gerber Editor Toolbar # ## + # ################### Gerber Editor Toolbar ############################## # ######################################################################## self.grb_select_btn = self.grb_edit_toolbar.addAction( QtGui.QIcon(self.app.resource_location + '/pointer32.png'), _("Select")) diff --git a/app_Main.py b/app_Main.py index b493d6ba..9531a37a 100644 --- a/app_Main.py +++ b/app_Main.py @@ -2136,23 +2136,17 @@ class App(QtCore.QObject): 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): + def connect_editors_toolbar_signals(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) + self.geo_editor.connect_geo_toolbar_signals() # 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) + self.grb_editor.connect_grb_toolbar_signals() # 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) + self.exc_editor.connect_exc_toolbar_signals() def connect_toolbar_signals(self): """ @@ -2204,12 +2198,6 @@ class App(QtCore.QObject): 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) @@ -2268,7 +2256,6 @@ class App(QtCore.QObject): 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) @@ -2279,7 +2266,6 @@ class App(QtCore.QObject): 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) @@ -2343,6 +2329,12 @@ class App(QtCore.QObject): self.log.debug( "App.on_layout() - connect toolbar signals -> %s" % str(e)) + # Editor Toolbars Signals + try: + self.connect_editors_toolbar_signals() + except Exception as err: + self.log.debug("App.on_layout() - connect editor signals -> %s" % str(err)) + self.ui.grid_snap_btn.setChecked(True) self.ui.corner_snap_btn.setVisible(False)