- working on the tool reordering in the Geometry UI

This commit is contained in:
Marius Stanciu 2020-06-10 10:25:48 +03:00 committed by Marius
parent a3fd6e9f87
commit 7f082760bb
4 changed files with 66 additions and 9 deletions

View File

@ -10,6 +10,7 @@ CHANGELOG for FlatCAM beta
10.06.2020
- fixed bug in the Isolation Tool that in certain cases an empty geometry was present in the solid_geometry which mae the CNCJob object generation to fail. It happen for Gerber objects created in the Gerber Editor
- working on the tool reordering in the Geometry UI
9.06.2020

View File

@ -2396,7 +2396,7 @@ class OptionalHideInputSection:
class FCTable(QtWidgets.QTableWidget):
drag_drop_sig = QtCore.pyqtSignal()
drag_drop_sig = QtCore.pyqtSignal(int, int)
lost_focus = QtCore.pyqtSignal()
def __init__(self, drag_drop=False, protected_rows=None, parent=None):
@ -2431,6 +2431,7 @@ class FCTable(QtWidgets.QTableWidget):
self.rows_not_for_drag_and_drop = [protected_rows]
self.rows_to_move = []
self.row_dragged = None
def sizeHint(self):
default_hint_size = super(FCTable, self).sizeHint()
@ -2455,10 +2456,12 @@ class FCTable(QtWidgets.QTableWidget):
# if user is clicking an blank area inside the QTableWidget it will deselect currently selected rows
def mousePressEvent(self, event):
if not self.itemAt(event.pos()):
clicked_item = self.itemAt(event.pos())
if not clicked_item:
self.clearSelection()
self.clearFocus()
else:
self.row_dragged = clicked_item.row()
QtWidgets.QTableWidget.mousePressEvent(self, event)
def focusOutEvent(self, event):
@ -2545,6 +2548,13 @@ class FCTable(QtWidgets.QTableWidget):
# return rect.contains(pos, True) and not (
# int(self.model().flags(index)) & Qt.ItemIsDropEnabled) and pos.y() >= rect.center().y()
def dragEnterEvent(self, e: QtGui.QDragEnterEvent) -> None:
if e.source() == self:
self.blockSignals(True)
e.accept()
else:
e.ignore()
def dropEvent(self, event):
"""
From here: https://stackoverflow.com/questions/26227885/drag-and-drop-rows-within-qtablewidget
@ -2552,6 +2562,7 @@ class FCTable(QtWidgets.QTableWidget):
:return:
"""
if event.source() == self:
event.acceptProposedAction()
rows = set([mi.row() for mi in self.selectedIndexes()])
# if one of the selected rows for drag and drop is within the protected list, return
@ -2592,10 +2603,12 @@ class FCTable(QtWidgets.QTableWidget):
for row in reversed(sorted(rowMapping.keys())):
self.removeRow(row)
event.accept()
self.drag_drop_sig.emit()
return
self.target_row = targetRow
self.blockSignals(False)
self.drag_drop_sig.emit(int(self.row_dragged), int(targetRow))
else:
event.ignore()
class SpinBoxDelegate(QtWidgets.QItemDelegate):

View File

@ -1385,7 +1385,7 @@ class GeometryObjectUI(ObjectUI):
self.plot_cb.setLayoutDirection(QtCore.Qt.RightToLeft)
grid0.addWidget(self.plot_cb, 0, 1)
self.geo_tools_table = FCTable()
self.geo_tools_table = FCTable(drag_drop=True)
grid0.addWidget(self.geo_tools_table, 1, 0, 1, 2)
self.geo_tools_table.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)

View File

@ -376,7 +376,9 @@ class GeometryObject(FlatCAMObj, Geometry):
sel_rows = []
sel_items = self.ui.geo_tools_table.selectedItems()
for it in sel_items:
sel_rows.append(it.row())
new_row = it.row()
if new_row not in sel_rows:
sel_rows.append(new_row)
if len(sel_rows) > 1:
self.ui.tool_data_label.setText(
"<b>%s: <font color='#0000FF'>%s</font></b>" % (_('Parameters for'), _("Multiple Tools"))
@ -618,6 +620,37 @@ class GeometryObject(FlatCAMObj, Geometry):
self.ui.delete_sel_area_button.clicked.connect(self.on_delete_sel_areas)
self.ui.strategy_radio.activated_custom.connect(self.on_strategy)
self.ui.geo_tools_table.drag_drop_sig.connect(self.rebuild_ui)
def rebuild_ui(self, old_row, new_row):
for td in self.tools:
print(td, type(td), self.tools[td])
item = self.ui.geo_tools_table.item(new_row, 5)
old_tooluid = int(item.text())
old_dict = self.tools.pop(old_tooluid)
item = self.ui.geo_tools_table.item(old_row, 5)
new_tooluid = int(item.text())
print(old_tooluid, new_tooluid)
new_tools = {}
new_tid = 1
for k, v in list(self.tools.items()):
if k != new_tooluid:
new_tools[new_tid] = deepcopy(v)
else:
new_tools[new_tid] = deepcopy(old_dict)
new_tools[new_tid + 1] = deepcopy(v)
new_tid += 1
self.tools = new_tools
for td in self.tools:
print(td, self.tools[td])
self.build_ui()
def on_cut_z_changed(self):
self.old_cutz = self.ui.cutz_entry.get_value()
@ -798,12 +831,22 @@ class GeometryObject(FlatCAMObj, Geometry):
sel_rows = []
sel_items = self.ui.geo_tools_table.selectedItems()
for it in sel_items:
sel_rows.append(it.row())
new_row = it.row()
if new_row not in sel_rows:
sel_rows.append(new_row)
else:
sel_rows = row if type(row) == list else [row]
if not sel_rows:
sel_rows = [0]
# sel_rows = [0]
self.ui.generate_cnc_button.setDisabled(True)
self.ui.tool_data_label.setText(
"<b>%s: <font color='#0000FF'>%s</font></b>" % (_('Parameters for'), _("No Tool Selected"))
)
self.ui_connect()
return
else:
self.ui.generate_cnc_button.setDisabled(False)
for current_row in sel_rows:
self.set_tool_offset_visibility(current_row)