Krita Source Code Documentation
Loading...
Searching...
No Matches
uifiltermanager.py
Go to the documentation of this file.
1# SPDX-License-Identifier: CC0-1.0
2
3from . import filtermanagerdialog
4from .components import (filtercombobox, filtermanagertreemodel)
5try:
6 from PyQt6.QtCore import Qt
7 from PyQt6.QtWidgets import (QFormLayout, QAbstractItemView, QDialogButtonBox,
8 QVBoxLayout, QFrame, QTreeView)
9except:
10 from PyQt5.QtCore import Qt
11 from PyQt5.QtWidgets import (QFormLayout, QAbstractItemView, QDialogButtonBox,
12 QVBoxLayout, QFrame, QTreeView)
13from krita import Krita
14from builtins import i18n, i18nc
15
16
17class UIFilterManager(object):
18
19 def __init__(self):
21 self.mainLayout = QVBoxLayout(self.mainDialog)
22 self.formLayout = QFormLayout()
23 self.buttonBox = QDialogButtonBox(
24 QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel)
25
27 self._filters = sorted(self.kritaInstance.filters())
29 self.treeModel = filtermanagertreemodel.FilterManagerTreeModel(self)
30
31 self.documentsTreeView = QTreeView()
32 self.filterComboBox = filtercombobox.FilterComboBox(self)
33
34 self.buttonBox.accepted.connect(self.confirmButtonconfirmButton)
35 self.buttonBox.rejected.connect(self.mainDialog.close)
36
37 self.documentsTreeView.setSelectionMode(
38 QAbstractItemView.SelectionMode.SingleSelection)
39 self.mainDialog.setWindowModality(Qt.WindowModality.NonModal)
40
41 def initialize(self):
42 self.documentsTreeView.setModel(self.treeModel)
43 self.documentsTreeView.setWindowTitle(i18n("Document Tree Model"))
44 self.documentsTreeView.resizeColumnToContents(0)
45 self.documentsTreeView.resizeColumnToContents(1)
46 self.documentsTreeView.resizeColumnToContents(2)
47
48 self.formLayout.addRow(i18nc("Python filters", "Filters:"), self.filterComboBox)
49
50 self.line = QFrame()
51 self.line.setFrameShape(QFrame.Shape.HLine)
52 self.line.setFrameShadow(QFrame.Shadow.Sunken)
53
54 self.mainLayout.addWidget(self.documentsTreeView)
55 self.mainLayout.addLayout(self.formLayout)
56 self.mainLayout.addWidget(self.line)
57 self.mainLayout.addWidget(self.buttonBox)
58
59 self.mainDialog.resize(500, 300)
60 self.mainDialog.setWindowTitle(i18n("Filter Manager"))
61 self.mainDialog.setSizeGripEnabled(True)
62 self.mainDialog.show()
63 self.mainDialog.activateWindow()
64
65 def confirmButton(self):
66 documentsIndexes = []
67
68 selectionModel = self.documentsTreeView.selectionModel()
69 for index in selectionModel.selectedRows():
70 node = self.treeModel.data(index, Qt.ItemDataRole.UserRole + 1)
71 documentIndex = self.treeModel.data(index, Qt.ItemDataRole.UserRole + 2)
72 _type = self.treeModel.data(index, Qt.ItemDataRole.UserRole + 3)
73
74 if _type == 'Document':
75 self.applyFilterOverDocument(self.documents[documentIndex])
76 else:
77 self.applyFilterOverNode(node, self.documents[documentIndex])
78
79 documentsIndexes.append(documentIndex)
80
81 self.refreshDocumentsProjections(set(documentsIndexes))
82
83 def refreshDocumentsProjections(self, indexes):
84 for index in indexes:
85 document = self.documents[index]
86 document.refreshProjection()
87
88 def applyFilterOverNode(self, node, document):
89 _filter = self.kritaInstance.filter(self.filterComboBox.currentText())
90 _filter.apply(node, 0, 0, document.width(), document.height())
91
92 def applyFilterOverDocument(self, document):
93 """This method applies the selected filter just to topLevelNodes,
94 then if topLevelNodes are GroupLayers, that filter will not be
95 applied."""
96
97 for node in document.topLevelNodes():
98 self.applyFilterOverNode(node, document)
99
100 @property
101 def filters(self):
102 return self._filters
103
104 @property
105 def documents(self):
106 return self._documents
static Krita * instance()
instance retrieve the singleton instance of the Application object.
Definition Krita.cpp:390