diff --git a/plugins/extensions/pykrita/plugin/plugins/filtermanager/components/filtermanagertreemodel.py b/plugins/extensions/pykrita/plugin/plugins/filtermanager/components/filtermanagertreemodel.py index 60d5ad17bc..f84d56ce03 100644 --- a/plugins/extensions/pykrita/plugin/plugins/filtermanager/components/filtermanagertreemodel.py +++ b/plugins/extensions/pykrita/plugin/plugins/filtermanager/components/filtermanagertreemodel.py @@ -1,115 +1,119 @@ from PyQt5.QtCore import QAbstractItemModel, QFile, QIODevice, QModelIndex, Qt from PyQt5.QtWidgets import QApplication, QTreeView from filtermanager.components import filtermanagertreeitem from PyQt5.QtGui import QPixmap class FilterManagerTreeModel(QAbstractItemModel): - DATA_COLUMN = 3 + NODE_COLUMN = 3 + DOCUMENT_COLUMN = 4 def __init__(self, uiFilterManager, parent=None): super(FilterManagerTreeModel, self).__init__(parent) self.rootItem = filtermanagertreeitem.FilterManagerTreeItem(("Name", "Type", "Thumbnail")) self.uiFilterManager = uiFilterManager self._loadTreeModel(self.rootItem) def index(self, row, column, parent): if not self.hasIndex(row, column, parent): return QModelIndex() if parent.isValid(): parentItem = parent.internalPointer() else: parentItem = self.rootItem #It's a FilterManagerTreeItem childItem = parentItem.child(row) if childItem: return self.createIndex(row, column, childItem) else: return QModelIndex() def parent(self, index): if not index.isValid(): return QModelIndex() childItem = index.internalPointer() parentItem = childItem.parent() if parentItem == self.rootItem: return QModelIndex() return self.createIndex(parentItem.row(), 0, parentItem) def rowCount(self, parent): if parent.column() > 0: return 0 if not parent.isValid(): parentItem = self.rootItem else: parentItem = parent.internalPointer() return parentItem.childCount() def columnCount(self, parent): if parent.isValid(): return parent.internalPointer().columnCount() else: return self.rootItem.columnCount() def data(self, index, role): if not index.isValid(): return None item = index.internalPointer() if role == Qt.UserRole + 1: - return item.data(self.DATA_COLUMN) + return item.data(self.NODE_COLUMN) + + if role == Qt.UserRole + 2: + return item.data(self.DOCUMENT_COLUMN) if role != Qt.DisplayRole and role != Qt.DecorationRole: return None return item.data(index.column()) def flags(self, index): if not index.isValid(): return Qt.NoItemFlags return Qt.ItemIsEnabled | Qt.ItemIsSelectable def headerData(self, section, orientation, role): if orientation == Qt.Horizontal and role == Qt.DisplayRole: return self.rootItem.data(section) return None def _loadTreeModel(self, parent): - for document in self.uiFilterManager.documents: + for index, document in enumerate(self.uiFilterManager.documents): rootNode = document.rootNode() columnData = (document.fileName(), "Document", QPixmap.fromImage(document.thumbnail(30, 30)), - rootNode) + rootNode, index) item = filtermanagertreeitem.FilterManagerTreeItem(columnData, parent) parent.appendChild(item) childNodes = rootNode.childNodes() if len(childNodes): - self._addSubNodes(childNodes[::-1], item) + self._addSubNodes(childNodes[::-1], item, index) - def _addSubNodes(self, nodes, parent): + def _addSubNodes(self, nodes, parent, documentIndex): for node in nodes: nodeName = node.name() nodeType = node.type() columnData = ("Unnamed" if nodeName == '' else nodeName, "Untyped" if nodeType == '' else nodeType, QPixmap.fromImage(node.thumbnail(30, 30)), - node) + node, documentIndex) item = filtermanagertreeitem.FilterManagerTreeItem(columnData, parent) parent.appendChild(item) childNodes = node.childNodes() if len(childNodes): - self._addSubNodes(childNodes[::-1], item) + self._addSubNodes(childNodes[::-1], item, documentIndex) diff --git a/plugins/extensions/pykrita/plugin/plugins/filtermanager/uifiltermanager.py b/plugins/extensions/pykrita/plugin/plugins/filtermanager/uifiltermanager.py index 18d4410269..e35089d61e 100644 --- a/plugins/extensions/pykrita/plugin/plugins/filtermanager/uifiltermanager.py +++ b/plugins/extensions/pykrita/plugin/plugins/filtermanager/uifiltermanager.py @@ -1,74 +1,73 @@ from filtermanager import filtermanagerdialog from filtermanager.components import (filtercombobox, filtermanagertreemodel) from PyQt5.QtCore import Qt from PyQt5.QtWidgets import (QFormLayout, QAbstractItemView, QDialogButtonBox, QVBoxLayout, QFrame, QAbstractScrollArea, QWidget, QTreeView) import krita class UIFilterManager(object): def __init__(self): self.mainDialog = filtermanagerdialog.FilterManagerDialog() self.mainLayout = QVBoxLayout(self.mainDialog) self.formLayout = QFormLayout() self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) self.kritaInstance = krita.Krita.instance() self._filters = sorted(self.kritaInstance.filters()) self._documents = self.kritaInstance.documents() self.treeModel = filtermanagertreemodel.FilterManagerTreeModel(self) self.documentsTreeView = QTreeView() self.filterComboBox = filtercombobox.FilterComboBox(self) self.buttonBox.accepted.connect(self.confirmButton) self.buttonBox.rejected.connect(self.mainDialog.close) self.documentsTreeView.setSelectionMode(QAbstractItemView.MultiSelection) self.mainDialog.setWindowModality(Qt.NonModal) def initialize(self): self.documentsTreeView.setModel(self.treeModel) self.documentsTreeView.setWindowTitle("Document Tree Model") self.documentsTreeView.resizeColumnToContents(0) self.documentsTreeView.resizeColumnToContents(1) self.documentsTreeView.resizeColumnToContents(2) self.formLayout.addRow("Filters", self.filterComboBox) self.line = QFrame() self.line.setFrameShape(QFrame.HLine) self.line.setFrameShadow(QFrame.Sunken) self.mainLayout.addWidget(self.documentsTreeView) self.mainLayout.addLayout(self.formLayout) self.mainLayout.addWidget(self.line) self.mainLayout.addWidget(self.buttonBox) self.mainDialog.resize(500, 300) self.mainDialog.setWindowTitle("Filter Manager") self.mainDialog.setSizeGripEnabled(True) self.mainDialog.show() self.mainDialog.activateWindow() def confirmButton(self): selectionModel = self.documentsTreeView.selectionModel() for index in selectionModel.selectedRows(): - self.applyFilterOverNode(self.treeModel.data(index, Qt.UserRole + 1)) + node = self.treeModel.data(index, Qt.UserRole + 1) + documentIndex = self.treeModel.data(index, Qt.UserRole + 2) + self.applyFilterOverNode(node, self.documents[documentIndex]) - def applyFilterOverNode(self, node): + def applyFilterOverNode(self, node, document): _filter = self.kritaInstance.filter(self.filterComboBox.currentText()) - #_filter.apply(node, 0, 0, document.width(), document.height()) - - def verifySelectedNodes(self, nodes): - pass + _filter.apply(node, 0, 0, document.width(), document.height()) @property def filters(self): return self._filters @property def documents(self): return self._documents