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_()