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