src/eric7/Plugins/WizardPlugins/DotDesktopWizard/DotDesktopListSelectionDialog.py

Sat, 01 Oct 2022 19:42:50 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 01 Oct 2022 19:42:50 +0200
branch
eric7
changeset 9375
e21b51a3d990
parent 9221
bf71ee032bb4
child 9473
3f23dbf37dbe
permissions
-rw-r--r--

Third Party packages
- upgraded pycodestyle to version 2.9.1

# -*- coding: utf-8 -*-

# Copyright (c) 2013 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
#

"""
Module implementing a dialog to select multiple entries from a list.
"""

from PyQt6.QtWidgets import QDialog, QListWidgetItem, QAbstractItemView

from .Ui_DotDesktopListSelectionDialog import Ui_DotDesktopListSelectionDialog


class DotDesktopListSelectionDialog(QDialog, Ui_DotDesktopListSelectionDialog):
    """
    Class implementing a dialog to select multiple entries from a list.
    """

    def __init__(
        self,
        entries,
        selectedEntries,
        separator,
        subEntries=None,
        allowMultiMain=True,
        allowMultiSub=True,
        parent=None,
    ):
        """
        Constructor

        @param entries list of entries to be shown (list of string)
        @param selectedEntries list of entries to be selected (list of string
            or string of entries separated by separator)
        @param separator separator string (string)
        @param subEntries secondary list of entries (list of string)
        @param allowMultiMain flag indicating to allow multiple selections for
            the main entry (bool)
        @param allowMultiSub flag indicating to allow multiple selections for
            the sub entry (bool)
        @param parent reference to the parent widget (QWidget)
        """
        super().__init__(parent)
        self.setupUi(self)

        if isinstance(selectedEntries, str):
            selectedEntries = selectedEntries.split(separator)

        if not allowMultiMain:
            self.entriesList.setSelectionMode(
                QAbstractItemView.SelectionMode.SingleSelection
            )
        if not allowMultiSub:
            self.subList.setSelectionMode(
                QAbstractItemView.SelectionMode.SingleSelection
            )

        for entry in entries:
            itm = QListWidgetItem(entry, self.entriesList)
            if entry in selectedEntries:
                itm.setSelected(True)

        if subEntries:
            for entry in subEntries:
                itm = QListWidgetItem(entry, self.subList)
                if entry in selectedEntries:
                    itm.setSelected(True)
        else:
            self.subList.setVisible(False)

    def getData(self, separator=None, separatorAtEnd=False):
        """
        Public method to extract the selected entries as a list
        or a string.

        @param separator separator string (string)
        @param separatorAtEnd flag indicating to append the separator (boolean)
        @return list of selected entries (list of string) if the separator is
            None or a string with entries delimited by separator (string)
        """
        entries = []
        for itm in self.entriesList.selectedItems():
            entries.append(itm.text())
        for itm in self.subList.selectedItems():
            entries.append(itm.text())

        if separator is None:
            return entries
        else:
            entriesStr = separator.join(entries)
            if separatorAtEnd:
                entriesStr += separator
            return entriesStr

eric ide

mercurial