- working on the tool reordering in the Geometry UI
This commit is contained in:
parent
a3fd6e9f87
commit
7f082760bb
|
@ -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
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue