- 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
This commit is contained in:
Marius Stanciu
2019-04-11 20:32:40 +03:00
parent b3aeb497ec
commit 036e886af4
5 changed files with 88 additions and 60 deletions

View File

@@ -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):

View File

@@ -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')

View File

@@ -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()):