Sat, 23 Dec 2023 15:48:12 +0100
Updated copyright for 2024.
5244
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
10439
21c28b0f9e41
Updated copyright for 2024.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10215
diff
changeset
|
3 | # Copyright (c) 2016 - 2024 Detlev Offenbach <detlev@die-offenbachs.de> |
5244
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing a dialog to select from a list of strings. |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
9473
3f23dbf37dbe
Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
10 | from PyQt6.QtCore import Qt, pyqtSlot |
8318
962bce857696
Replaced all imports of PyQt5 to PyQt6 and started to replace code using obsoleted methods and adapt to the PyQt6 enum usage.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
11 | from PyQt6.QtWidgets import ( |
9473
3f23dbf37dbe
Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
12 | QAbstractItemView, |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
13 | QDialog, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
14 | QDialogButtonBox, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
15 | QListWidgetItem, |
7252
c5e3705073eb
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
16 | ) |
5244
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | |
8356
68ec9c3d4de5
Renamed the modules and classes of the E5Gui package to have the prefix 'Eric' instead of 'E5'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8318
diff
changeset
|
18 | from .Ui_EricListSelectionDialog import Ui_EricListSelectionDialog |
5244
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | |
8356
68ec9c3d4de5
Renamed the modules and classes of the E5Gui package to have the prefix 'Eric' instead of 'E5'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8318
diff
changeset
|
21 | class EricListSelectionDialog(QDialog, Ui_EricListSelectionDialog): |
5244
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | """ |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | Class implementing a dialog to select from a list of strings. |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | """ |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
25 | |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
26 | def __init__( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
27 | self, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
28 | entries, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
29 | selectionMode=QAbstractItemView.SelectionMode.ExtendedSelection, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
30 | title="", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
31 | message="", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
32 | checkBoxSelection=False, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
33 | doubleClickOk=False, |
10215
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
34 | emptySelectionOk=False, |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
35 | showSelectAll=False, |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
36 | parent=None, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
37 | ): |
5244
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | """ |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | Constructor |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
40 | |
5244
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | @param entries list of entries to select from |
10215
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
42 | @type list of str or list of tuple of (str, Any) |
5244
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | @param selectionMode selection mode for the list |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | @type QAbstractItemView.SelectionMode |
8038
73ec029d4107
MicroPython: improved the support for "BBC micro:bit" and "Calliope mini".
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
45 | @param title title of the dialog |
5244
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | @type str |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | @param message message to be show in the dialog |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | @type str |
6437
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
49 | @param checkBoxSelection flag indicating to select items via their |
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
50 | checkbox |
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
51 | @type bool |
8670
12e7fbf2445a
Added a double click instant selection to the Eric List Selection Dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8358
diff
changeset
|
52 | @param doubleClickOk flag indicating to accept the dialog upon a |
12e7fbf2445a
Added a double click instant selection to the Eric List Selection Dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8358
diff
changeset
|
53 | double click of an item (single selection only) |
12e7fbf2445a
Added a double click instant selection to the Eric List Selection Dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8358
diff
changeset
|
54 | @type bool |
10215
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
55 | @param emptySelectionOk flag indicating that an empty selection is allowed |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
56 | @type bool |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
57 | @param showSelectAll flag indicating to show a 'Select All' button |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
58 | @type bool |
5244
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | @param parent reference to the parent widget |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | @type QWidget |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | """ |
8218
7c09585bd960
Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8143
diff
changeset
|
62 | super().__init__(parent) |
5244
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | self.setupUi(self) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
64 | |
5244
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | if title: |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | self.setWindowTitle(title) |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | if message: |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | self.messageLabel.setText(message) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
69 | |
6437
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
70 | self.__checkCount = 0 |
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
71 | self.__isCheckBoxSelection = checkBoxSelection |
10215
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
72 | self.__doubleClickOk = doubleClickOk |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
73 | self.__emptySelectionOk = emptySelectionOk |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
74 | |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
75 | self.selectionList.setSelectionMode( |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
76 | QAbstractItemView.SelectionMode.NoSelection |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
77 | if self.__isCheckBoxSelection |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
78 | else selectionMode |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
79 | ) |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
80 | |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
81 | for entry in entries: |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
82 | if isinstance(entry, tuple): |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
83 | itm = QListWidgetItem(entry[0]) |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
84 | itm.setData(Qt.ItemDataRole.UserRole, entry[1]) |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
85 | else: |
6437
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
86 | itm = QListWidgetItem(entry) |
10215
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
87 | if self.__isCheckBoxSelection: |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
88 | itm.setFlags( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
89 | Qt.ItemFlag.ItemIsUserCheckable | Qt.ItemFlag.ItemIsEnabled |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
90 | ) |
8143
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8038
diff
changeset
|
91 | itm.setCheckState(Qt.CheckState.Unchecked) |
10215
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
92 | self.selectionList.addItem(itm) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
93 | |
10215
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
94 | if showSelectAll: |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
95 | self.buttonBox.addButton( |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
96 | self.tr("Deselect All"), QDialogButtonBox.ButtonRole.ActionRole |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
97 | ).clicked.connect(lambda: self.__selectAll(False)) |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
98 | self.buttonBox.addButton( |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
99 | self.tr("Select All"), QDialogButtonBox.ButtonRole.ActionRole |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
100 | ).clicked.connect(lambda: self.__selectAll(True)) |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
101 | |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
102 | self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled( |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
103 | emptySelectionOk |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
104 | ) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
105 | |
5244
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106 | @pyqtSlot() |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107 | def on_selectionList_itemSelectionChanged(self): |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108 | """ |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109 | Private slot handling a change of the selection. |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110 | """ |
6437
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
111 | if not self.__isCheckBoxSelection: |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
112 | self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled( |
10215
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
113 | len(self.selectionList.selectedItems()) > 0 or self.__emptySelectionOk |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
114 | ) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
115 | |
10215
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
116 | @pyqtSlot(QListWidgetItem) |
6437
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
117 | def on_selectionList_itemChanged(self, itm): |
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
118 | """ |
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
119 | Private slot handling a change of an item. |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
120 | |
6437
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
121 | @param itm reference to the changed item |
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
122 | @type QListWidgetItem |
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
123 | """ |
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
124 | if self.__isCheckBoxSelection: |
8143
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8038
diff
changeset
|
125 | if itm.checkState() == Qt.CheckState.Checked: |
6437
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
126 | self.__checkCount += 1 |
9768
e2b622afb5ff
Fixed an issue causing the selection count of checkable selection lists going negative.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
127 | elif self.__checkCount > 0: |
6437
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
128 | self.__checkCount -= 1 |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
129 | self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled( |
10215
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
130 | self.__checkCount > 0 or self.__emptySelectionOk |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
131 | ) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
132 | |
8670
12e7fbf2445a
Added a double click instant selection to the Eric List Selection Dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8358
diff
changeset
|
133 | @pyqtSlot(QListWidgetItem) |
12e7fbf2445a
Added a double click instant selection to the Eric List Selection Dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8358
diff
changeset
|
134 | def on_selectionList_itemDoubleClicked(self, item): |
12e7fbf2445a
Added a double click instant selection to the Eric List Selection Dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8358
diff
changeset
|
135 | """ |
12e7fbf2445a
Added a double click instant selection to the Eric List Selection Dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8358
diff
changeset
|
136 | Private slot handling double clicking an item. |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
137 | |
8670
12e7fbf2445a
Added a double click instant selection to the Eric List Selection Dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8358
diff
changeset
|
138 | @param item double clicked item |
12e7fbf2445a
Added a double click instant selection to the Eric List Selection Dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8358
diff
changeset
|
139 | @type QListWidgetItem |
12e7fbf2445a
Added a double click instant selection to the Eric List Selection Dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8358
diff
changeset
|
140 | """ |
12e7fbf2445a
Added a double click instant selection to the Eric List Selection Dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8358
diff
changeset
|
141 | if ( |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
142 | not self.__isCheckBoxSelection |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
143 | and self.selectionList.selectionMode() |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
144 | == QAbstractItemView.SelectionMode.SingleSelection |
10215
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
145 | and self.__doubleClickOk |
8670
12e7fbf2445a
Added a double click instant selection to the Eric List Selection Dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8358
diff
changeset
|
146 | ): |
12e7fbf2445a
Added a double click instant selection to the Eric List Selection Dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8358
diff
changeset
|
147 | self.accept() |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
148 | |
10215
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
149 | def __selectAll(self, state): |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
150 | """ |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
151 | Private method to select or deselect all entries. |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
152 | |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
153 | @param state flag indicating the desired selection state |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
154 | @type bool |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
155 | """ |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
156 | for row in range(self.selectionList.count()): |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
157 | item = self.selectionList.item(row) |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
158 | if self.__isCheckBoxSelection: |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
159 | if state: |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
160 | item.setCheckState(Qt.CheckState.Checked) |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
161 | else: |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
162 | item.setCheckState(Qt.CheckState.Unchecked) |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
163 | else: |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
164 | item.setSelected(state) |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
165 | |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
166 | def setSelection(self, selection): |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
167 | """ |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
168 | Public method to preselect a list of entries. |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
169 | |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
170 | @param selection list of selected entries |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
171 | @type list of str |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
172 | """ |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
173 | for name in selection: |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
174 | itemList = self.selectionList.findItems( |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
175 | name, Qt.MatchFlag.MatchCaseSensitive | Qt.MatchFlag.MatchStartsWith |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
176 | ) |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
177 | if itemList: |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
178 | if self.__isCheckBoxSelection: |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
179 | itemList[0].setCheckState(Qt.CheckState.Checked) |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
180 | else: |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
181 | itemList[0].setSelected(True) |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
182 | |
5244
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
183 | def getSelection(self): |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
184 | """ |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
185 | Public method to retrieve the selected items. |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
186 | |
5244
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
187 | @return selected entries |
10215
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
188 | @rtype list of str or list of tuple of (str, Any) |
5244
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
189 | """ |
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
190 | entries = [] |
6437
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
191 | if self.__isCheckBoxSelection: |
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
192 | for row in range(self.selectionList.count()): |
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
193 | item = self.selectionList.item(row) |
8143
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8038
diff
changeset
|
194 | if item.checkState() == Qt.CheckState.Checked: |
10215
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
195 | data = item.data(Qt.ItemDataRole.UserRole) |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
196 | if data is None: |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
197 | entries.append(item.text()) |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
198 | else: |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
199 | entries.append((item.text(), data)) |
6437
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
200 | else: |
3dd851d1edf8
E5ListSelectionDialog: added a selection mode for items to be selected via a checkbox.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6048
diff
changeset
|
201 | for item in self.selectionList.selectedItems(): |
10215
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
202 | data = item.data(Qt.ItemDataRole.UserRole) |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
203 | if data is None: |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
204 | entries.append(item.text()) |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
205 | else: |
d476667171a1
Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9768
diff
changeset
|
206 | entries.append((item.text(), data)) |
5244
54a0f215a6f0
Added a dialog to select from a list and extended the plug-in archive build process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
207 | return entries |