Krita Source Code Documentation
Loading...
Searching...
No Matches
uidocumenttools.py
Go to the documentation of this file.
1# SPDX-License-Identifier: CC0-1.0
2
3from . import documenttoolsdialog
4try:
5 from PyQt6.QtCore import Qt
6 from PyQt6.QtWidgets import (QFormLayout, QListWidget, QAbstractItemView,
7 QDialogButtonBox, QVBoxLayout, QFrame, QTabWidget,
8 QPushButton, QAbstractScrollArea, QMessageBox)
9except:
10 from PyQt5.QtCore import Qt
11 from PyQt5.QtWidgets import (QFormLayout, QListWidget, QAbstractItemView,
12 QDialogButtonBox, QVBoxLayout, QFrame, QTabWidget,
13 QPushButton, QAbstractScrollArea, QMessageBox)
14from krita import Krita
15import importlib
16from builtins import i18n
17
18class UIDocumentTools(object):
19
20 def __init__(self):
22 self.mainLayout = QVBoxLayout(self.mainDialog)
23 self.formLayout = QFormLayout()
24 self.documentLayout = QVBoxLayout()
25 self.refreshButton = QPushButton(i18n("Refresh"))
26 self.widgetDocuments = QListWidget()
27 self.tabTools = QTabWidget()
28 self.buttonBox = QDialogButtonBox(
29 QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel)
30
32 self.documentsList = []
33
35 self.buttonBox.accepted.connect(self.confirmButtonconfirmButton)
36 self.buttonBox.rejected.connect(self.mainDialog.close)
37
38 self.mainDialog.setWindowModality(Qt.WindowModality.NonModal)
39 self.widgetDocuments.setSelectionMode(QAbstractItemView.SelectionMode.MultiSelection)
40 self.widgetDocuments.setSizeAdjustPolicy(
41 QAbstractScrollArea.SizeAdjustPolicy.AdjustToContents)
42
43 def initialize(self):
44 self.loadDocuments()
45 self.loadTools()
46
47 self.documentLayout.addWidget(self.widgetDocuments)
48 self.documentLayout.addWidget(self.refreshButton)
49
50 self.formLayout.addRow(i18n("Documents:"), self.documentLayout)
51 self.formLayout.addRow(self.tabTools)
52
53 self.line = QFrame()
54 self.line.setFrameShape(QFrame.Shape.HLine)
55 self.line.setFrameShadow(QFrame.Shadow.Sunken)
56
57 self.mainLayout.addLayout(self.formLayout)
58 self.mainLayout.addWidget(self.line)
59 self.mainLayout.addWidget(self.buttonBox)
60
61 self.mainDialog.resize(500, 300)
62 self.mainDialog.setWindowTitle(i18n("Document Tools"))
63 self.mainDialog.setSizeGripEnabled(True)
64 self.mainDialog.show()
65 self.mainDialog.activateWindow()
66
67 def loadTools(self):
68 modulePath = 'documenttools.tools'
69 toolsModule = importlib.import_module(modulePath)
70 modules = []
71
72 for classPath in toolsModule.ToolClasses:
73 _module = classPath[:classPath.rfind(".")]
74 _klass = classPath[classPath.rfind(".") + 1:]
75 modules.append(dict(module='{0}.{1}'.format(modulePath, _module),
76 klass=_klass))
77
78 for module in modules:
79 m = importlib.import_module(module['module'])
80 toolClass = getattr(m, module['klass'])
81 obj = toolClass(self.mainDialog)
82 self.tabTools.addTab(obj, obj.objectName())
83
84 def loadDocuments(self):
85 self.widgetDocuments.clear()
86
87 self.documentsList = [
88 document for document in self.kritaInstance.documents()
89 if document.fileName()
90 ]
91
92 for document in self.documentsList:
93 self.widgetDocuments.addItem(document.fileName())
94
96 self.loadDocuments()
97
98 def confirmButton(self):
99 selectedPaths = [
100 item.text() for item in self.widgetDocuments.selectedItems()]
101 selectedDocuments = [
102 document for document in self.documentsList
103 for path in selectedPaths if path == document.fileName()]
104
105 self.msgBox = QMessageBox(self.mainDialog)
106 if selectedDocuments:
107 widget = self.tabTools.currentWidget()
108 widget.adjust(selectedDocuments)
109 self.msgBox.setText(
110 i18n("The selected documents has been modified."))
111 else:
112 self.msgBox.setText(i18n("Select at least one document."))
113 self.msgBox.exec()
static Krita * instance()
instance retrieve the singleton instance of the Application object.
Definition Krita.cpp:390