From 036e886af49c5aec22eb2217da81c94263ae13c1 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Thu, 11 Apr 2019 20:32:40 +0300 Subject: [PATCH] - in all Editors, manually deactivating a button in the editor toolbar will automatically select the 'Select' button - fixed Excellon Editor selection: when a tool is selected in Tools Table, all the drills belonging to that tool are selected. When a drill is selected on canvas, the associated tool will be selected without automatically selecting all other drills with same tool --- FlatCAMApp.py | 2 +- README.md | 2 + flatcamEditors/FlatCAMExcEditor.py | 132 +++++++++++++++++------------ flatcamEditors/FlatCAMGeoEditor.py | 4 +- flatcamEditors/FlatCAMGrbEditor.py | 8 +- 5 files changed, 88 insertions(+), 60 deletions(-) diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 81f283e1..5309db8c 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -2182,7 +2182,7 @@ class App(QtCore.QObject): if cleanup is None: self.grb_editor.update_fcgerber(edited_obj) self.grb_editor.update_options(new_obj) - self.grb_editor.deactivate() + self.grb_editor.deactivate_grb_editor() # delete the old object (the source object) if it was an empty one if edited_obj.solid_geometry.is_empty: diff --git a/README.md b/README.md index 9813648a..0f6466a1 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,8 @@ CAD program, and create G-Code for Isolation routing. - changed the color of the marked apertures to the global_selection_color - Gerber Editor: added Transformation Tool and Rotation key shortcut +- in all Editors, manually deactivating a button in the editor toolbar will automatically select the 'Select' button +- fixed Excellon Editor selection: when a tool is selected in Tools Table, all the drills belonging to that tool are selected. When a drill is selected on canvas, the associated tool will be selected without automatically selecting all other drills with same tool 10.04.2019 diff --git a/flatcamEditors/FlatCAMExcEditor.py b/flatcamEditors/FlatCAMExcEditor.py index 73ee3fbb..b188ba89 100644 --- a/flatcamEditors/FlatCAMExcEditor.py +++ b/flatcamEditors/FlatCAMExcEditor.py @@ -558,28 +558,16 @@ class FCDrillSelect(DrawTool): else: self.exc_editor_app.selected = [] - def click_release(self, point): - self.select_shapes(point) - return "" - - def select_shapes(self, pos): + def click_release(self, pos): self.exc_editor_app.tools_table_exc.clearSelection() try: - # for storage in self.exc_editor_app.storage_dict: - # _, partial_closest_shape = self.exc_editor_app.storage_dict[storage].nearest(pos) - # if partial_closest_shape is not None: - # self.sel_storage.insert(partial_closest_shape) - # - # _, closest_shape = self.sel_storage.nearest(pos) - for storage in self.exc_editor_app.storage_dict: for shape in self.exc_editor_app.storage_dict[storage].get_objects(): self.sel_storage.insert(shape) _, closest_shape = self.sel_storage.nearest(pos) - # constrain selection to happen only within a certain bounding box x_coord, y_coord = closest_shape.geo[0].xy delta = (x_coord[1] - x_coord[0]) @@ -594,41 +582,43 @@ class FCDrillSelect(DrawTool): if pos[0] < xmin or pos[0] > xmax or pos[1] < ymin or pos[1] > ymax: self.exc_editor_app.selected = [] else: - key_modifier = QtWidgets.QApplication.keyboardModifiers() - if self.exc_editor_app.app.defaults["global_mselect_key"] == 'Control': - # if CONTROL key is pressed then we add to the selected list the current shape but if it's already - # in the selected list, we removed it. Therefore first click selects, second deselects. - if key_modifier == Qt.ControlModifier: - if closest_shape in self.exc_editor_app.selected: - self.exc_editor_app.selected.remove(closest_shape) - else: - self.exc_editor_app.selected.append(closest_shape) + modifiers = QtWidgets.QApplication.keyboardModifiers() + mod_key = 'Control' + if modifiers == QtCore.Qt.ShiftModifier: + mod_key = 'Shift' + elif modifiers == QtCore.Qt.ControlModifier: + mod_key = 'Control' + + if mod_key == self.draw_app.app.defaults["global_mselect_key"]: + if closest_shape in self.exc_editor_app.selected: + self.exc_editor_app.selected.remove(closest_shape) else: - self.exc_editor_app.selected = [] self.exc_editor_app.selected.append(closest_shape) else: - if key_modifier == Qt.ShiftModifier: - if closest_shape in self.exc_editor_app.selected: - self.exc_editor_app.selected.remove(closest_shape) - else: - self.exc_editor_app.selected.append(closest_shape) - else: - self.exc_editor_app.selected = [] - self.exc_editor_app.selected.append(closest_shape) + self.draw_app.selected = [] + self.draw_app.selected.append(closest_shape) # select the diameter of the selected shape in the tool table - for storage in self.exc_editor_app.storage_dict: - for shape_s in self.exc_editor_app.selected: + try: + self.draw_app.tools_table_exc.cellPressed.disconnect() + except: + pass + + sel_tools = set() + self.exc_editor_app.tools_table_exc.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection) + for shape_s in self.exc_editor_app.selected: + for storage in self.exc_editor_app.storage_dict: if shape_s in self.exc_editor_app.storage_dict[storage].get_objects(): - for key in self.exc_editor_app.tool2tooldia: - if self.exc_editor_app.tool2tooldia[key] == storage: - item = self.exc_editor_app.tools_table_exc.item((key - 1), 1) - self.exc_editor_app.tools_table_exc.setCurrentItem(item) - # item.setSelected(True) - # self.exc_editor_app.tools_table_exc.selectItem(key - 1) - # midx = self.exc_editor_app.tools_table_exc.model().index((key - 1), 0) - # self.exc_editor_app.tools_table_exc.setCurrentIndex(midx) - self.draw_app.last_tool_selected = key + sel_tools.add(storage) + + for storage in sel_tools: + self.exc_editor_app.tools_table_exc.selectRow(int(storage)) + self.draw_app.last_tool_selected = int(storage) + + self.exc_editor_app.tools_table_exc.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) + + self.draw_app.tools_table_exc.cellPressed.connect(self.draw_app.on_row_selected) + # delete whatever is in selection storage, there is no longer need for those shapes self.sel_storage = FlatCAMExcEditor.make_storage() @@ -1033,7 +1023,9 @@ class FlatCAMExcEditor(QtCore.QObject): self.addtool_btn.clicked.connect(self.on_tool_add) # self.addtool_entry.editingFinished.connect(self.on_tool_add) self.deltool_btn.clicked.connect(self.on_tool_delete) - self.tools_table_exc.selectionModel().currentChanged.connect(self.on_row_selected) + # self.tools_table_exc.selectionModel().currentChanged.connect(self.on_row_selected) + self.tools_table_exc.cellPressed.connect(self.on_row_selected) + self.array_type_combo.currentIndexChanged.connect(self.on_array_type_combo) self.drill_axis_radio.activated_custom.connect(self.on_linear_angle_radio) @@ -1193,6 +1185,11 @@ class FlatCAMExcEditor(QtCore.QObject): except: pass + try: + self.tools_table_exc.cellPressed.disconnect() + except: + pass + # updated units self.units = self.app.ui.general_defaults_form.general_app_group.units_radio.get_value().upper() @@ -1386,6 +1383,7 @@ class FlatCAMExcEditor(QtCore.QObject): # we reactivate the signals after the after the tool adding as we don't need to see the tool been populated self.tools_table_exc.itemChanged.connect(self.on_tool_edit) + self.tools_table_exc.cellPressed.connect(self.on_row_selected) def on_tool_add(self, tooldia=None): self.is_modified = True @@ -1496,6 +1494,8 @@ class FlatCAMExcEditor(QtCore.QObject): # if connected, disconnect the signal from the slot on item_changed as it creates issues self.tools_table_exc.itemChanged.disconnect() + self.tools_table_exc.cellPressed.disconnect() + # self.tools_table_exc.selectionModel().currentChanged.disconnect() self.is_modified = True @@ -1560,6 +1560,8 @@ class FlatCAMExcEditor(QtCore.QObject): # we reactivate the signals after the after the tool editing self.tools_table_exc.itemChanged.connect(self.on_tool_edit) + self.tools_table_exc.cellPressed.connect(self.on_row_selected) + # self.tools_table_exc.selectionModel().currentChanged.connect(self.on_row_selected) def on_name_activate(self): @@ -1963,20 +1965,32 @@ class FlatCAMExcEditor(QtCore.QObject): self.app.log.debug("%s is NOT checked." % current_tool) for t in self.tools_exc: self.tools_exc[t]["button"].setChecked(False) - self.active_tool = None - def on_row_selected(self): - self.selected = [] + self.select_tool('select') + self.active_tool = FCDrillSelect(self) - try: - selected_dia = self.tool2tooldia[self.tools_table_exc.currentRow() + 1] - self.last_tool_selected = self.tools_table_exc.currentRow() + 1 - for obj in self.storage_dict[selected_dia].get_objects(): - self.selected.append(obj) - except Exception as e: - self.app.log.debug(str(e)) + def on_row_selected(self, row, col): + if col == 0: + key_modifier = QtWidgets.QApplication.keyboardModifiers() + if self.app.defaults["global_mselect_key"] == 'Control': + modifier_to_use = Qt.ControlModifier + else: + modifier_to_use = Qt.ShiftModifier - self.replot() + if key_modifier == modifier_to_use: + pass + else: + self.selected = [] + + try: + selected_dia = self.tool2tooldia[self.tools_table_exc.currentRow() + 1] + self.last_tool_selected = self.tools_table_exc.currentRow() + 1 + for obj in self.storage_dict[selected_dia].get_objects(): + self.selected.append(obj) + except Exception as e: + self.app.log.debug(str(e)) + + self.replot() def toolbar_tool_toggle(self, key): self.options[key] = self.sender().isChecked() @@ -2179,7 +2193,12 @@ class FlatCAMExcEditor(QtCore.QObject): else: self.selected.append(obj) + try: + self.tools_table_exc.cellPressed.disconnect() + except: + pass # select the diameter of the selected shape in the tool table + self.tools_table_exc.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection) for storage in self.storage_dict: for shape_s in self.selected: if shape_s in self.storage_dict[storage].get_objects(): @@ -2188,9 +2207,10 @@ class FlatCAMExcEditor(QtCore.QObject): item = self.tools_table_exc.item((key - 1), 1) self.tools_table_exc.setCurrentItem(item) self.last_tool_selected = key - # item.setSelected(True) - # self.exc_editor_app.tools_table_exc.selectItem(key - 1) + self.tools_table_exc.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) + + self.tools_table_exc.cellPressed.connect(self.on_row_selected) self.replot() def on_canvas_move(self, event): diff --git a/flatcamEditors/FlatCAMGeoEditor.py b/flatcamEditors/FlatCAMGeoEditor.py index 56a42993..0627e620 100644 --- a/flatcamEditors/FlatCAMGeoEditor.py +++ b/flatcamEditors/FlatCAMGeoEditor.py @@ -3110,7 +3110,9 @@ class FlatCAMGeoEditor(QtCore.QObject): self.app.log.debug("%s is NOT checked." % tool) for t in self.tools: self.tools[t]["button"].setChecked(False) - self.active_tool = None + + self.select_tool('select') + self.active_tool = FCSelect(self) def draw_tool_path(self): self.select_tool('path') diff --git a/flatcamEditors/FlatCAMGrbEditor.py b/flatcamEditors/FlatCAMGrbEditor.py index 3d9e6075..59b49078 100644 --- a/flatcamEditors/FlatCAMGrbEditor.py +++ b/flatcamEditors/FlatCAMGrbEditor.py @@ -460,6 +460,7 @@ class FCApertureSelect(DrawTool): def click_release(self, point): self.grb_editor_app.apertures_table.clearSelection() sel_aperture = set() + for storage in self.grb_editor_app.storage_dict: for shape in self.grb_editor_app.storage_dict[storage]['solid_geometry']: if Point(point).within(shape.geo): @@ -474,6 +475,7 @@ class FCApertureSelect(DrawTool): self.draw_app.selected.append(shape) sel_aperture.add(storage) + # select the aperture in the Apertures Table that is associated with the selected shape try: self.draw_app.apertures_table.cellPressed.disconnect() except: @@ -1639,7 +1641,9 @@ class FlatCAMGrbEditor(QtCore.QObject): self.app.log.debug("%s is NOT checked." % current_tool) for t in self.tools_gerber: self.tools_gerber[t]["button"].setChecked(False) - self.active_tool = None + + self.select_tool('select') + self.active_tool = FCApertureSelect(self) def on_row_selected(self, row, col): if col == 0: @@ -1867,7 +1871,7 @@ class FlatCAMGrbEditor(QtCore.QObject): self.apertures_table.cellPressed.disconnect() except: pass - + # select the aperture code of the selected geometry, in the tool table self.apertures_table.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection) for aper in sel_aperture: for row in range(self.apertures_table.rowCount()):