src/eric7/QtHelpInterface/QtHelpDocumentationSettingsWidget.py

branch
eric7
changeset 9686
2eee7a645cba
parent 9653
e67609152c5e
child 10439
21c28b0f9e41
diff -r b43e04854aba -r 2eee7a645cba src/eric7/QtHelpInterface/QtHelpDocumentationSettingsWidget.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/QtHelpInterface/QtHelpDocumentationSettingsWidget.py	Mon Jan 09 11:22:56 2023 +0100
@@ -0,0 +1,220 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2021 - 2023 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a widget to manage the QtHelp documentation settings.
+"""
+
+from PyQt6.QtCore import pyqtSignal, pyqtSlot
+from PyQt6.QtWidgets import QDialog, QListWidgetItem, QWidget
+
+from eric7.EricWidgets import EricFileDialog, EricMessageBox
+from eric7.EricWidgets.EricApplication import ericApp
+
+from .QtHelpDocumentationSettings import QtHelpDocumentationSettings
+from .Ui_QtHelpDocumentationSettingsWidget import Ui_QtHelpDocumentationSettingsWidget
+
+
+class QtHelpDocumentationSettingsWidget(QWidget, Ui_QtHelpDocumentationSettingsWidget):
+    """
+    Class implementing a widget to manage the QtHelp documentation settings.
+
+    @signal documentationSettingsChanged(settings) emitted to signal a change
+        of the documentation configuration
+    """
+
+    documentationSettingsChanged = pyqtSignal(QtHelpDocumentationSettings)
+
+    def __init__(self, parent=None):
+        """
+        Constructor
+
+        @param parent reference to the parent widget (defaults to None)
+        @type QWidget (optional)
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+
+        self.__settings = None
+
+        try:
+            self.__pluginHelpDocuments = (
+                ericApp().getObject("PluginManager").getPluginQtHelpFiles()
+            )
+        except KeyError:
+            from eric7.PluginManager.PluginManager import (  # __IGNORE_WARNING_I101__
+                PluginManager,
+            )
+
+            pluginManager = PluginManager(self, doLoadPlugins=False)
+            pluginManager.loadDocumentationSetPlugins()
+            pluginManager.activatePlugins()
+            self.__pluginHelpDocuments = pluginManager.getPluginQtHelpFiles()
+        self.addPluginButton.setEnabled(bool(self.__pluginHelpDocuments))
+
+    @pyqtSlot()
+    def on_removeDocumentsButton_clicked(self):
+        """
+        Private slot to remove a document from the help database.
+        """
+        selectedItems = self.documentsList.selectedItems()[:]
+        if not selectedItems:
+            return
+
+        for itm in selectedItems:
+            namespace = itm.text()
+            self.documentsList.takeItem(self.documentsList.row(itm))
+            del itm
+
+            self.__settings.removeDocumentation(namespace)
+
+        self.documentationSettingsChanged.emit(self.__settings)
+
+    @pyqtSlot()
+    def on_addDocumentsButton_clicked(self):
+        """
+        Private slot to add QtHelp documents to the help database.
+        """
+        filenames = EricFileDialog.getOpenFileNames(
+            self,
+            self.tr("Add Documentation"),
+            "",
+            self.tr("Qt Compressed Help Files (*.qch)"),
+        )
+        if not filenames:
+            return
+
+        self.__registerDocumentation(filenames)
+
+    @pyqtSlot()
+    def on_addPluginButton_clicked(self):
+        """
+        Private slot to add QtHelp documents provided by plug-ins to
+        the help database.
+        """
+        from .QtHelpDocumentationSelectionDialog import (
+            QtHelpDocumentationSelectionDialog,
+        )
+
+        dlg = QtHelpDocumentationSelectionDialog(
+            self.__pluginHelpDocuments, QtHelpDocumentationSelectionDialog.AddMode, self
+        )
+        if dlg.exec() == QDialog.DialogCode.Accepted:
+            documents = dlg.getData()
+            if documents:
+                self.__registerDocumentation(documents)
+
+    def __registerDocumentation(self, filenames):
+        """
+        Private method to register a given list of documentations.
+
+        @param filenames list of documentation files to be registered
+        @type list of str
+        """
+        added = False
+
+        for filename in filenames:
+            if not self.__settings.addDocumentation(filename):
+                EricMessageBox.warning(
+                    self,
+                    self.tr("Add Documentation"),
+                    self.tr("""The file <b>{0}</b> could not be added.""").format(
+                        filename
+                    ),
+                )
+                continue
+
+            if not added:
+                added = True
+                self.documentsList.clearSelection()
+
+            namespace = self.__settings.namespace(filename)
+            itm = QListWidgetItem(namespace)
+            self.documentsList.addItem(itm)
+
+            itm.setSelected(True)
+        self.__applyDocumentsListFilter()
+
+        if added:
+            self.documentationSettingsChanged.emit(self.__settings)
+
+    @pyqtSlot()
+    def on_managePluginButton_clicked(self):
+        """
+        Private slot to manage the QtHelp documents provided by plug-ins.
+        """
+        from .QtHelpDocumentationSelectionDialog import (
+            QtHelpDocumentationSelectionDialog,
+        )
+
+        dlg = QtHelpDocumentationSelectionDialog(
+            self.__pluginHelpDocuments,
+            QtHelpDocumentationSelectionDialog.ManageMode,
+            self,
+        )
+        dlg.exec()
+
+    @pyqtSlot()
+    def on_documentsList_itemSelectionChanged(self):
+        """
+        Private slot handling a change of the documents selection.
+        """
+        self.removeDocumentsButton.setEnabled(
+            len(self.documentsList.selectedItems()) != 0
+        )
+
+    @pyqtSlot(str)
+    def on_filterEdit_textChanged(self, txt):
+        """
+        Private slot to react on changes of the document filter text.
+
+        @param txt current entry of the filter
+        @type str
+        """
+        self.__applyDocumentsListFilter()
+
+    @pyqtSlot()
+    def __applyDocumentsListFilter(self):
+        """
+        Private slot to apply the current documents filter.
+        """
+        filterStr = self.filterEdit.text()
+        for row in range(self.documentsList.count()):
+            itm = self.documentsList.item(row)
+            matches = filterStr == "" or filterStr in itm.text()
+
+            if not matches:
+                itm.setSelected(False)
+            itm.setHidden(not matches)
+
+    def setDocumentationSettings(self, settings):
+        """
+        Public method to set the reference to the QtHelp documentation
+        configuration object.
+
+        @param settings reference to the created QtHelpDocumentationSettings
+            object
+        @type QtHelpDocumentationSettings
+        """
+        self.__settings = settings
+
+        self.documentsList.clear()
+
+        for namespace in self.__settings.namespaces():
+            itm = QListWidgetItem(namespace)
+            self.documentsList.addItem(itm)
+        self.__applyDocumentsListFilter()
+
+        self.removeDocumentsButton.setEnabled(False)
+
+    def documentationSettings(self):
+        """
+        Public method to get the reference to the QtHelp documentation
+        configuration object.
+
+        @return reference to the created QtHelpDocumentationSettings object
+        @rtype QtHelpDocumentationSettings
+        """
+        return self.__settings

eric ide

mercurial