--- a/src/eric7/WebBrowser/QtHelp/QtHelpDocumentationSelectionDialog.py Sun Jan 08 16:11:22 2023 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,192 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2016 - 2023 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing a dialog to select QtHelp documentation sets to be -installed. -""" - -import os -import shutil - -from PyQt6.QtCore import Qt, pyqtSlot -from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QTreeWidgetItem - -from eric7.EricWidgets import EricMessageBox - -from .Ui_QtHelpDocumentationSelectionDialog import Ui_QtHelpDocumentationSelectionDialog - - -class QtHelpDocumentationSelectionDialog( - QDialog, Ui_QtHelpDocumentationSelectionDialog -): - """ - Class implementing a dialog to select QtHelp documentation sets to be - installed. - """ - - AddMode = "Add" - ManageMode = "Manage" - - def __init__(self, helpDocuments, mode, parent=None): - """ - Constructor - - @param helpDocuments dictionary containing the lists of help documents - to be shown - @type dict of lists of str - @param mode mode of the dialog - @type str - @param parent reference to the parent widget - @type QWidget - """ - super().__init__(parent) - self.setupUi(self) - - if mode == QtHelpDocumentationSelectionDialog.AddMode: - self.buttonBox.button(QDialogButtonBox.StandardButton.Close).hide() - else: - self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).hide() - self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel).hide() - - for category in helpDocuments: - parentItem = QTreeWidgetItem(self.documentationList, [category]) - for document in helpDocuments[category]: - item = QTreeWidgetItem(parentItem, [os.path.basename(document)]) - item.setData(0, Qt.ItemDataRole.UserRole, document) - parentItem.setData( - 0, Qt.ItemDataRole.UserRole, os.path.dirname(document) - ) - self.documentationList.sortItems(0, Qt.SortOrder.AscendingOrder) - - self.on_documentationList_itemSelectionChanged() - - @pyqtSlot() - def on_documentationList_itemSelectionChanged(self): - """ - Private slot handling the selection of items. - """ - selectedCategoriesCount = 0 - selectedDocumentSetCount = 0 - for itm in self.documentationList.selectedItems(): - if itm.parent() is None: - selectedCategoriesCount += 1 - else: - selectedDocumentSetCount += 1 - - self.deleteButton.setEnabled(selectedDocumentSetCount > 0) - self.deleteCategoryButton.setEnabled(selectedCategoriesCount > 0) - - @pyqtSlot() - def on_deleteButton_clicked(self): - """ - Private slot to delete the selected documentation sets. - """ - yes = EricMessageBox.yesNo( - self, - self.tr("Delete Documentation Sets"), - self.tr("""Shall the selected documentation sets really be deleted?"""), - ) - if yes: - for itm in self.documentationList.selectedItems(): - if itm.parent is None: - # it is a category item, skip it - continue - - category = itm.parent() - fileName = itm.data(0, Qt.ItemDataRole.UserRole) - try: - os.remove(fileName) - except OSError as err: - EricMessageBox.warning( - self, - self.tr("Delete Documentation Sets"), - self.tr( - """<p>The documentation set <b>{0}</b> could""" - """ not be deleted.</p><p>Reason: {1}</p>""" - ).format(fileName, str(err)), - ) - continue - - category.removeChild(itm) - del itm - - if category.childCount() == 0: - self.__deleteCategory(category) - - @pyqtSlot() - def on_deleteCategoryButton_clicked(self): - """ - Private slot to delete the selected documentation set categories. - """ - yes = EricMessageBox.yesNo( - self, - self.tr("Delete Documentation Sets"), - self.tr( - """Shall the selected documentation set categories""" - """ really be deleted?""" - ), - ) - if yes: - categories = [] - for itm in self.documentationList.selectedItems(): - if itm.parent() is None: - categories.append(itm) - for category in categories: - self.__deleteCategory(category) - - @pyqtSlot() - def on_deleteAllButton_clicked(self): - """ - Private slot to delete all documentation sets. - """ - yes = EricMessageBox.yesNo( - self, - self.tr("Delete Documentation Sets"), - self.tr("""Shall all documentation sets really be deleted?"""), - ) - if yes: - categories = [] - for index in range(self.documentationList.topLevelItemCount()): - categories.append(self.documentationList.topLevelItem(index)) - for category in categories: - self.__deleteCategory(category) - - def __deleteCategory(self, category): - """ - Private method to delete a category. - - @param category reference to the category item - @type QTreeWidgetItem - """ - categoryDir = category.data(0, Qt.ItemDataRole.UserRole) - shutil.rmtree(categoryDir, True) - - self.documentationList.takeTopLevelItem( - self.documentationList.indexOfTopLevelItem(category) - ) - del category - - def getData(self): - """ - Public method to retrieve the selected help documents. - - @return list of QtHelp documentation sets to be installed - @rtype set of str - """ - documents = set() - for item in self.documentationList.selectedItems(): - if item.parent() is None: - # it is a category item; add all files of that category - for childIndex in range(item.childCount()): - child = item.child(childIndex) - fileName = child.data(0, Qt.ItemDataRole.UserRole) - if fileName: - documents.add(fileName) - else: - fileName = item.data(0, Qt.ItemDataRole.UserRole) - if fileName: - documents.add(fileName) - return documents