st-ten-1/src/ui/crud/CopyPastableCrudQTableWidget.py
2023-07-09 22:57:18 +02:00

77 lines
3.7 KiB
Python

import sys
import weakref
from PyQt5.QtCore import QEvent, Qt
from PyQt5.QtWidgets import QApplication, QTableWidget
class CopyPastableCrudQTableWidget(QTableWidget):
crud = None
def eventFilter(self, target, event):
if event.type() == QEvent.KeyPress:
pass
# if event.key() == Qt.Key_C and (event.modifiers() & Qt.ControlModifier):
# if event.key() == Qt.Key_C and (event.modifiers() & Qt.ControlModifier):
# copied_cells = sorted(self.selectedIndexes())
# min_row, max_row, min_col, max_col = sys.maxsize, 0, sys.maxsize, 0
# for cell in copied_cells:
# row = cell.row()
# min_row, max_row = min(row, min_row), max(row, max_row)
# col = cell.column()
# min_col, max_col = min(col, min_col), max(col, max_col)
# if min_row == 0: # if filters row
# return False
# copy_sparse = {}
# for cell in copied_cells:
# row = cell.row()
# col = cell.column()
# if row not in copy_sparse:
# copy_sparse[row] = {}
# cell = self.cellWidget(row, col)
# if cell is not None:
# copy_sparse[row][col] = cell.parse(row_number=row, crud=weakref.ref(self.crud))
# copy_dense = [["" for col in range(max_col - min_col + 1)] for row in range(max_row - min_row + 1)]
# for row, row_cells in copy_sparse.items():
# for col, cell_text in row_cells.items():
# if cell_text is not None:
# copy_dense[row - min_row][col - min_col] = str(cell_text)
# copy_text = "\n".join(["\t".join(row) for row in copy_dense])
# QApplication.clipboard().setText(copy_text)
# super().keyPressEvent(event)
# QApplication.sendEvent(self, event)
# return True
# elif event.key() == Qt.Key_V and (event.modifiers() & Qt.ControlModifier):
# min_row = self.currentRow()
# min_col = self.currentColumn()
# if min_row == 0: # if filters row
# return False
# copy_text = QApplication.clipboard().text()
# copy_dense = [row.split("\t") for row in copy_text.split("\n")]
# if len(copy_dense) > 1 and len(copy_dense[-1]) == 1 and not len(copy_dense[-1][-1]):
# copy_dense.pop(-1)
# for row, row_cells in enumerate(copy_dense):
# for col, cell_text in enumerate(row_cells):
# r = min_row + row
# c = min_col + col
# cell = self.cellWidget(r, c)
# if cell is not None:
# cell.render(cell_text, field_name=self.crud.select[c] if self.crud is not None else None, row_number=r, crud=weakref.ref(self.crud))
# super().keyPressEvent(event)
# QApplication.sendEvent(self, event)
# return True
return super().eventFilter(target, event)
def setCellWidget(self, row, column, widget):
widget.installEventFilter(self)
super().setCellWidget(row, column, widget)
if __name__ == "__main__":
app = QApplication(sys.argv)
table = CopyPastableCrudQTableWidget()
table.setRowCount(10)
table.setColumnCount(10)
table.show()
sys.exit(app.exec())