File indexing completed on 2024-05-26 04:34:19
0001 # SPDX-License-Identifier: CC0-1.0 0002 0003 from PyQt5.QtCore import Qt 0004 from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QPushButton, 0005 QLineEdit, QScrollArea, QGridLayout, QFileDialog, 0006 QLabel, QDialogButtonBox) 0007 from PyQt5.QtGui import QKeySequence 0008 from . import tenscriptsdialog 0009 import krita 0010 0011 0012 class UITenScripts(object): 0013 0014 def __init__(self): 0015 self.kritaInstance = krita.Krita.instance() 0016 self.mainDialog = tenscriptsdialog.TenScriptsDialog( 0017 self, self.kritaInstance.activeWindow().qwindow()) 0018 0019 self.buttonBox = QDialogButtonBox(self.mainDialog) 0020 self.layout = QVBoxLayout(self.mainDialog) 0021 self.baseWidget = QWidget() 0022 self.baseArea = QWidget() 0023 self.scrollArea = QScrollArea() 0024 self.scriptsLayout = QGridLayout() 0025 0026 self.buttonBox.accepted.connect(self.mainDialog.accept) 0027 self.buttonBox.rejected.connect(self.mainDialog.reject) 0028 0029 self.buttonBox.setOrientation(Qt.Horizontal) 0030 self.buttonBox.setStandardButtons( 0031 QDialogButtonBox.Ok | QDialogButtonBox.Cancel) 0032 self.scrollArea.setWidgetResizable(True) 0033 0034 def initialize(self, tenscripts): 0035 self.tenscripts = tenscripts 0036 0037 self._loadGridLayout() 0038 self._fillScripts() 0039 0040 self.baseArea.setLayout(self.scriptsLayout) 0041 self.scrollArea.setWidget(self.baseArea) 0042 0043 self.layout.addWidget(self.scrollArea) 0044 0045 self.layout.addWidget( 0046 QLabel(i18n("Shortcuts are configurable through the <i>Keyboard Shortcuts</i> " 0047 "interface in Krita's settings."))) 0048 0049 self.layout.addWidget(self.buttonBox) 0050 0051 self.mainDialog.show() 0052 self.mainDialog.activateWindow() 0053 self.mainDialog.exec_() 0054 0055 def addNewRow(self, index): 0056 rowPosition = self.scriptsLayout.rowCount() 0057 label = QLabel() 0058 directoryTextField = QLineEdit() 0059 directoryDialogButton = QPushButton(i18n("...")) 0060 0061 action = Application.action(self.tenscripts.indexToAction[index]) 0062 0063 directoryTextField.setReadOnly(True) 0064 label.setText(action.shortcut().toString(QKeySequence.NativeText)) 0065 directoryTextField.setToolTip(i18n("Selected path")) 0066 directoryDialogButton.setToolTip(i18n("Select the script")) 0067 directoryDialogButton.clicked.connect(self._selectScript) 0068 0069 self.scriptsLayout.addWidget( 0070 label, rowPosition, 0, Qt.AlignLeft | Qt.AlignTop) 0071 self.scriptsLayout.addWidget( 0072 directoryTextField, rowPosition, 1, Qt.AlignLeft | Qt.AlignTop) 0073 self.scriptsLayout.addWidget( 0074 directoryDialogButton, rowPosition, 2, Qt.AlignLeft | Qt.AlignTop) 0075 0076 def saved_scripts(self): 0077 _saved_scripts = [] 0078 index = 0 0079 0080 for row in range(self.scriptsLayout.rowCount()-1): 0081 textField = self.scriptsLayout.itemAt(index + 1).widget() 0082 _saved_scripts.append(textField.text()) 0083 index += 3 0084 0085 return _saved_scripts 0086 0087 def _selectScript(self): 0088 dialog = QFileDialog(self.mainDialog) 0089 dialog.setNameFilter(i18n("Python files (*.py)")) 0090 0091 if dialog.exec_(): 0092 selectedFile = dialog.selectedFiles()[0] 0093 obj = self.mainDialog.sender() 0094 textField = self.scriptsLayout.itemAt( 0095 self.scriptsLayout.indexOf(obj)-1).widget() 0096 textField.setText(selectedFile) 0097 0098 def _loadGridLayout(self): 0099 for index in range(0, 10): 0100 self.addNewRow(index) 0101 0102 def _fillScripts(self): 0103 scripts = self.tenscripts.scripts 0104 index = 0 0105 0106 for row in range(self.scriptsLayout.rowCount()-1): 0107 if row >= len(scripts): 0108 return 0109 0110 textField = self.scriptsLayout.itemAt(index + 1).widget() 0111 textField.setText(scripts[row]) 0112 index += 3