| 21 | |
| 22 | |
| 23 | class TaggedFileSystemModel(QFileSystemModel): |
| 24 | def __init__(self, parent=None): |
| 25 | super().__init__(parent) |
| 26 | self.tagged_items = set() |
| 27 | |
| 28 | def flags(self, index): |
| 29 | return super().flags(index) | Qt.ItemFlag.ItemIsUserCheckable |
| 30 | |
| 31 | def data(self, index, role): |
| 32 | if role == Qt.ItemDataRole.CheckStateRole and self.filePath(index) in self.tagged_items: |
| 33 | return Qt.CheckState.Checked |
| 34 | return super().data(index, role) |
| 35 | |
| 36 | def set_tagged(self, index, tagged): |
| 37 | file_path = self.filePath(index) |
| 38 | if tagged: |
| 39 | self.tagged_items.add(file_path) |
| 40 | else: |
| 41 | self.tagged_items.discard(file_path) |
| 42 | self.dataChanged.emit(index, index, [Qt.ItemDataRole.CheckStateRole]) |
| 43 | |
| 44 | def create_folder(self, path, name): |
| 45 | self.untag_all() |
| 46 | return super().mkdir(path, name) |
| 47 | |
| 48 | |
| 49 | def untag_all(self): |
| 50 | if self.tagged_items: |
| 51 | self.tagged_items.clear() |
| 52 | self.dataChanged.emit(self.index(0, 0), self.index(self.rowCount() - 1, 0), [Qt.ItemDataRole.CheckStateRole]) |
| 53 | |
| 54 | |
| 55 | class DocumentsWindow(QWidget): |