Krita Source Code Documentation
Loading...
Searching...
No Matches
uitenscripts.py
Go to the documentation of this file.
1# SPDX-License-Identifier: CC0-1.0
2
3try:
4 from PyQt6.QtCore import Qt
5 from PyQt6.QtWidgets import (QWidget, QVBoxLayout, QPushButton,
6 QLineEdit, QScrollArea, QGridLayout,
7 QLabel, QDialogButtonBox)
8 from PyQt6.QtGui import QKeySequence
9except:
10 from PyQt5.QtCore import Qt
11 from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QPushButton,
12 QLineEdit, QScrollArea, QGridLayout,
13 QLabel, QDialogButtonBox)
14 from PyQt5.QtGui import QKeySequence
15from . import tenscriptsdialog
16from krita import Krita, FileDialog
17from builtins import i18n, Application
18
19class UITenScripts(object):
20
21 def __init__(self):
24 self, self.kritaInstance.activeWindow().qwindow())
25
26 self.buttonBox = QDialogButtonBox(self.mainDialog)
27 self.layout = QVBoxLayout(self.mainDialog)
28 self.baseWidget = QWidget()
29 self.baseArea = QWidget()
30 self.scrollArea = QScrollArea()
31 self.scriptsLayout = QGridLayout()
32
33 self.buttonBox.accepted.connect(self.mainDialog.accept)
34 self.buttonBox.rejected.connect(self.mainDialog.reject)
35
36 self.buttonBox.setOrientation(Qt.Orientation.Horizontal)
37 self.buttonBox.setStandardButtons(
38 QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel)
39 self.scrollArea.setWidgetResizable(True)
40
41 def initialize(self, tenscripts):
42 self.tenscripts = tenscripts
43
44 self._loadGridLayout()
45 self._fillScripts()
46
47 self.baseArea.setLayout(self.scriptsLayout)
48 self.scrollArea.setWidget(self.baseArea)
49
50 self.layout.addWidget(self.scrollArea)
51
52 self.layout.addWidget(
53 QLabel(i18n("Shortcuts are configurable through the <i>Keyboard Shortcuts</i> "
54 "interface in Krita's settings.")))
55
56 self.layout.addWidget(self.buttonBox)
57
58 self.mainDialog.show()
59 self.mainDialog.activateWindow()
60 self.mainDialog.exec()
61
62 def addNewRow(self, index):
63 rowPosition = self.scriptsLayout.rowCount()
64 label = QLabel()
65 directoryTextField = QLineEdit()
66 directoryDialogButton = QPushButton(i18n("..."))
67 directoryClearButton = QPushButton(self.kritaInstance.icon('close-tab'), "")
68
69 action = Application.action(self.tenscripts.indexToAction[index])
70
71 directoryTextField.setReadOnly(True)
72 label.setText(action.shortcut().toString(QKeySequence.SequenceFormat.NativeText))
73 directoryTextField.setToolTip(i18n("Selected path"))
74 directoryDialogButton.setToolTip(i18n("Select the script"))
75 directoryDialogButton.clicked.connect(self._selectScript_selectScript)
76 directoryClearButton.clicked.connect(self._clearScript_clearScript)
77
78 self.scriptsLayout.addWidget(
79 label, rowPosition, 0, Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignTop)
80 self.scriptsLayout.addWidget(
81 directoryTextField, rowPosition, 1, Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignTop)
82 self.scriptsLayout.addWidget(
83 directoryClearButton, rowPosition, 2, Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignTop)
84 self.scriptsLayout.addWidget(
85 directoryDialogButton, rowPosition, 3, Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignTop)
86
87 def saved_scripts(self):
88 _saved_scripts = []
89 index = 0
90
91 for _ in range(self.scriptsLayout.rowCount()-1):
92 textField = self.scriptsLayout.itemAt(index + 1).widget()
93 _saved_scripts.append(textField.text())
94 index += 4
95
96 return _saved_scripts
97
98 def _clearScript(self):
99 obj = self.mainDialog.sender()
100 textField = self.scriptsLayout.itemAt(
101 self.scriptsLayout.indexOf(obj)-1).widget()
102 textField.setText("")
103
104 def _selectScript(self):
105 dialog = FileDialog(self.mainDialog)
106 dialog.setNameFilter(i18n("Python files (*.py)"))
107 selectedFile = dialog.filename()
108
109 if selectedFile:
110 obj = self.mainDialog.sender()
111 textField = self.scriptsLayout.itemAt(
112 self.scriptsLayout.indexOf(obj) - 2).widget()
113 textField.setText(selectedFile)
114
116 for index in range(0, 10):
117 self.addNewRow(index)
118
119 def _fillScripts(self):
120 scripts = self.tenscripts.scripts
121 num_rows = self.scriptsLayout.rowCount() - 1
122 index = 0
123
124 for row in range(min(len(scripts), num_rows)):
125 textField = self.scriptsLayout.itemAt(index + 1).widget()
126 textField.setText(scripts[row])
127 index += 4
static Krita * instance()
instance retrieve the singleton instance of the Application object.
Definition Krita.cpp:390