def setData(self, index: QModelIndex, value: str, role=Qt.EditRole) -> bool: col = index.column() row = index.row() if index.isValid() and role == Qt.EditRole: # type(value) == str data = self.col_data[col] key = data.key if value and not value.isspace(): try: value = data.cls(value) except ValueError: return False else: value = data.default if key.startswith(self.TRIGGER): key = behead(key, self.TRIGGER) trigger = self.triggers(row) if value == data.default: # Delete key if (key: value) present trigger.pop(key, None) else: trigger[key] = value else: setattr(self.channels[row], key, value) self.dataChanged.emit(index, index, [role]) return True return False
def data(self, index: QModelIndex, role=Qt.DisplayRole) -> Any: col = index.column() row = index.row() if ( role in [Qt.DisplayRole, Qt.EditRole] and index.isValid() and row < self.rowCount() ): data = self.col_data[col] key = data.key if key.startswith(self.TRIGGER): key = behead(key, self.TRIGGER) value = self.triggers(row).get(key, "") else: value = getattr(self.channels[row], key) if value == data.default: return "" if key == "wav_path" and role == Qt.DisplayRole: if Path(value).parent != Path(): return "..." + Path(value).name return str(value) return nope