Browse Source

- fixed issue #454; trigger signals for Editor Toolbars lost after changing the layout

Marius Stanciu 5 years ago
parent
commit
11f494a1d1
6 changed files with 120 additions and 110 deletions
  1. 1 0
      CHANGELOG.md
  2. 30 20
      appEditors/AppExcEditor.py
  3. 37 25
      appEditors/AppGeoEditor.py
  4. 37 42
      appEditors/AppGerberEditor.py
  5. 5 5
      appGUI/MainGUI.py
  6. 10 18
      app_Main.py

+ 1 - 0
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
 

+ 30 - 20
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

+ 37 - 25
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

+ 37 - 42
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

+ 5 - 5
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"))

+ 10 - 18
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)