from PySide6.QtWidgets import QStyledItemDelegate, QSpinBox from PySide6.QtCore import Qt, QEvent, QModelIndex from PySide6.QtGui import QMouseEvent class CommonTreeDelegate(QStyledItemDelegate): def createEditor(self, parent, option, index: QModelIndex): col = index.column() if col == 0: # Kolumna 0: QSpinBox z zakresem [0..10] editor = QSpinBox(parent) editor.setRange(0, 10) return editor elif col == 1: # Kolumna 1: toggle "tak/nie" – obsługiwane double-clickiem return None return super().createEditor(parent, option, index) def setEditorData(self, editor, index: QModelIndex): col = index.column() if col == 0: val_str = index.data(Qt.EditRole) if val_str is None: val_str = index.data(Qt.DisplayRole) try: val = int(val_str) except ValueError: val = 0 editor.setValue(val) else: super().setEditorData(editor, index) def setModelData(self, editor, model, index: QModelIndex): col = index.column() if col == 0: val = editor.value() model.setData(index, str(val), Qt.EditRole) elif col == 1: # Podwójny klik przełącza "tak"/"nie" cur = index.data(Qt.DisplayRole) new_val = "nie" if cur == "tak" else "tak" model.setData(index, new_val, Qt.EditRole) else: super().setModelData(editor, model, index) def editorEvent(self, event, model, option, index): # Obsługa double-click w kolumnie 1 (toggle "tak"/"nie") if index.column() == 1 and event.type() == QEvent.MouseButtonDblClick: self.commitData.emit(None) return True return super().editorEvent(event, model, option, index)