Krita Source Code Documentation
Loading...
Searching...
No Matches
filtermanagertreemodel.py
Go to the documentation of this file.
1# SPDX-License-Identifier: CC0-1.0
2
3try:
4 from PyQt6.QtCore import QAbstractItemModel, QModelIndex, Qt
5 from PyQt6.QtGui import QPixmap
6except:
7 from PyQt5.QtCore import QAbstractItemModel, QModelIndex, Qt
8 from PyQt5.QtGui import QPixmap
9from builtins import i18n
10from . import filtermanagertreeitem
11
12
13class FilterManagerTreeModel(QAbstractItemModel):
14
15 TYPE_COLUMN = 1
16 NODE_COLUMN = 3
17 DOCUMENT_COLUMN = 4
18
19 def __init__(self, uiFilterManager, parent=None):
20 super(FilterManagerTreeModel, self).__init__(parent)
21
23 (i18n("Name"), i18n("Type"), i18n("Thumbnail")))
24 self.uiFilterManager = uiFilterManager
25 self._loadTreeModel(self.rootItem)
26
27 def index(self, row, column, parent):
28 if not self.hasIndex(row, column, parent):
29 return QModelIndex()
30
31 if parent.isValid():
32 parentItem = parent.internalPointer()
33 else:
34 parentItem = self.rootItem
35
36 # It's a FilterManagerTreeItem
37 childItem = parentItem.child(row)
38 if childItem:
39 return self.createIndex(row, column, childItem)
40 else:
41 return QModelIndex()
42
43 def parent(self, index):
44 if not index.isValid():
45 return QModelIndex()
46
47 childItem = index.internalPointer()
48 parentItem = childItem.parent()
49
50 if parentItem == self.rootItem:
51 return QModelIndex()
52
53 return self.createIndex(parentItem.row(), 0, parentItem)
54
55 def rowCount(self, parent):
56 if parent.column() > 0:
57 return 0
58
59 if not parent.isValid():
60 parentItem = self.rootItem
61 else:
62 parentItem = parent.internalPointer()
63 return parentItem.childCount()
64
65 def columnCount(self, parent):
66 if parent.isValid():
67 return parent.internalPointer().columnCount()
68 else:
69 return self.rootItem.columnCount()
70
71 def data(self, index, role):
72 if not index.isValid():
73 return None
74
75 item = index.internalPointer()
76
77 if role == Qt.ItemDataRole.UserRole + 1:
78 return item.data(self.NODE_COLUMNNODE_COLUMN)
79
80 if role == Qt.ItemDataRole.UserRole + 2:
81 return item.data(self.DOCUMENT_COLUMNDOCUMENT_COLUMN)
82
83 if role == Qt.ItemDataRole.UserRole + 3:
84 return item.data(self.TYPE_COLUMNTYPE_COLUMN)
85
86 if role != Qt.ItemDataRole.DisplayRole and role != Qt.ItemDataRole.DecorationRole:
87 return None
88
89 return item.data(index.column())
90
91 def flags(self, index):
92 if not index.isValid():
93 return Qt.ItemFlag.NoItemFlags
94
95 return Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsSelectable
96
97 def headerData(self, section, orientation, role):
98 if orientation == Qt.Orientation.Horizontal and role == Qt.ItemDataRole.DisplayRole:
99 return self.rootItem.data(section)
100
101 return None
102
103 def _loadTreeModel(self, parent):
104 for index, document in enumerate(self.uiFilterManager.documents):
105 rootNode = document.rootNode()
106 columnData = (document.fileName(),
107 "Document",
108 QPixmap.fromImage(document.thumbnail(30, 30)),
109 rootNode, index)
111 columnData, parent)
112 parent.appendChild(item)
113
114 childNodes = rootNode.childNodes()
115 if len(childNodes):
116 self._addSubNodes(childNodes[::-1], item, index)
117
118 def _addSubNodes(self, nodes, parent, documentIndex):
119 for node in nodes:
120 nodeName = node.name()
121 nodeType = node.type()
122 columnData = ("Unnamed" if nodeName == '' else nodeName,
123 "Untyped" if nodeType == '' else nodeType,
124 QPixmap.fromImage(node.thumbnail(30, 30)),
125 node, documentIndex)
127 columnData, parent)
128 parent.appendChild(item)
129
130 childNodes = node.childNodes()
131 if len(childNodes):
132 self._addSubNodes(childNodes[::-1], item, documentIndex)