File indexing completed on 2024-05-26 04:34:17
0001 # SPDX-License-Identifier: CC0-1.0 0002 0003 from . import documenttoolsdialog 0004 from PyQt5.QtCore import Qt 0005 from PyQt5.QtWidgets import (QFormLayout, QListWidget, QAbstractItemView, 0006 QDialogButtonBox, QVBoxLayout, QFrame, QTabWidget, 0007 QPushButton, QAbstractScrollArea, QMessageBox) 0008 import krita 0009 import importlib 0010 0011 0012 class UIDocumentTools(object): 0013 0014 def __init__(self): 0015 self.mainDialog = documenttoolsdialog.DocumentToolsDialog() 0016 self.mainLayout = QVBoxLayout(self.mainDialog) 0017 self.formLayout = QFormLayout() 0018 self.documentLayout = QVBoxLayout() 0019 self.refreshButton = QPushButton(i18n("Refresh")) 0020 self.widgetDocuments = QListWidget() 0021 self.tabTools = QTabWidget() 0022 self.buttonBox = QDialogButtonBox( 0023 QDialogButtonBox.Ok | QDialogButtonBox.Cancel) 0024 0025 self.kritaInstance = krita.Krita.instance() 0026 self.documentsList = [] 0027 0028 self.refreshButton.clicked.connect(self.refreshButtonClicked) 0029 self.buttonBox.accepted.connect(self.confirmButton) 0030 self.buttonBox.rejected.connect(self.mainDialog.close) 0031 0032 self.mainDialog.setWindowModality(Qt.NonModal) 0033 self.widgetDocuments.setSelectionMode(QAbstractItemView.MultiSelection) 0034 self.widgetDocuments.setSizeAdjustPolicy( 0035 QAbstractScrollArea.AdjustToContents) 0036 0037 def initialize(self): 0038 self.loadDocuments() 0039 self.loadTools() 0040 0041 self.documentLayout.addWidget(self.widgetDocuments) 0042 self.documentLayout.addWidget(self.refreshButton) 0043 0044 self.formLayout.addRow(i18n("Documents:"), self.documentLayout) 0045 self.formLayout.addRow(self.tabTools) 0046 0047 self.line = QFrame() 0048 self.line.setFrameShape(QFrame.HLine) 0049 self.line.setFrameShadow(QFrame.Sunken) 0050 0051 self.mainLayout.addLayout(self.formLayout) 0052 self.mainLayout.addWidget(self.line) 0053 self.mainLayout.addWidget(self.buttonBox) 0054 0055 self.mainDialog.resize(500, 300) 0056 self.mainDialog.setWindowTitle(i18n("Document Tools")) 0057 self.mainDialog.setSizeGripEnabled(True) 0058 self.mainDialog.show() 0059 self.mainDialog.activateWindow() 0060 0061 def loadTools(self): 0062 modulePath = 'documenttools.tools' 0063 toolsModule = importlib.import_module(modulePath) 0064 modules = [] 0065 0066 for classPath in toolsModule.ToolClasses: 0067 _module = classPath[:classPath.rfind(".")] 0068 _klass = classPath[classPath.rfind(".") + 1:] 0069 modules.append(dict(module='{0}.{1}'.format(modulePath, _module), 0070 klass=_klass)) 0071 0072 for module in modules: 0073 m = importlib.import_module(module['module']) 0074 toolClass = getattr(m, module['klass']) 0075 obj = toolClass(self.mainDialog) 0076 self.tabTools.addTab(obj, obj.objectName()) 0077 0078 def loadDocuments(self): 0079 self.widgetDocuments.clear() 0080 0081 self.documentsList = [ 0082 document for document in self.kritaInstance.documents() 0083 if document.fileName() 0084 ] 0085 0086 for document in self.documentsList: 0087 self.widgetDocuments.addItem(document.fileName()) 0088 0089 def refreshButtonClicked(self): 0090 self.loadDocuments() 0091 0092 def confirmButton(self): 0093 selectedPaths = [ 0094 item.text() for item in self.widgetDocuments.selectedItems()] 0095 selectedDocuments = [ 0096 document for document in self.documentsList 0097 for path in selectedPaths if path == document.fileName()] 0098 0099 self.msgBox = QMessageBox(self.mainDialog) 0100 if selectedDocuments: 0101 widget = self.tabTools.currentWidget() 0102 widget.adjust(selectedDocuments) 0103 self.msgBox.setText( 0104 i18n("The selected documents has been modified.")) 0105 else: 0106 self.msgBox.setText(i18n("Select at least one document.")) 0107 self.msgBox.exec_()