9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1
|
# -*- coding: utf-8 -*- |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2
|
|
11090
|
3
|
# Copyright (c) 2023 - 2025 Detlev Offenbach <detlev@die-offenbachs.de> |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4
|
# |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7
|
Module implementing a dialog to show the available modules of all bundles. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10
|
from PyQt6.QtCore import Qt, pyqtSlot |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11
|
from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QListWidgetItem |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13
|
from eric7.EricGui import EricPixmapCache |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15
|
from .Ui_ShowModulesDialog import Ui_ShowModulesDialog |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18
|
class ShowModulesDialog(QDialog, Ui_ShowModulesDialog): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20
|
Class implementing a dialog to show the available modules of all bundles. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22
|
|
9748
|
23
|
def __init__(self, modulesList, selectionMode=False, info="", parent=None): |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25
|
Constructor |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26
|
|
9748
|
27
|
@param modulesList list of module names to be shown |
|
28
|
@type list of str |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29
|
@param selectionMode flag indicating the activation of the selection mode |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30
|
(defaults to False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31
|
@type bool (optional) |
9748
|
32
|
@param info string containing some informational data (defaults to "") |
|
33
|
@type str (optional) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34
|
@param parent reference to the parent widget (defaults to None) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35
|
@type QWidget (optional) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37
|
super().__init__(parent) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38
|
self.setupUi(self) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40
|
self.filterButton.setIcon(EricPixmapCache.getIcon("check")) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41
|
self.filterButton.clicked.connect(self.__applyFilter) |
9949
9e2fcf4efa37
Changed the modules install dialog for CircuitPython slightly to enable searching by pressing 'Return' in the filter edit.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
42
|
self.filterEdit.returnPressed.connect(self.__applyFilter) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44
|
self.__checkCount = 0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45
|
self.__selectionMode = selectionMode |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46
|
if self.__selectionMode: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47
|
self.buttonBox.setStandardButtons( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48
|
QDialogButtonBox.StandardButton.Ok |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49
|
| QDialogButtonBox.StandardButton.Cancel |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52
|
self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Close) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54
|
if self.__selectionMode: |
9748
|
55
|
for moduleName in modulesList: |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56
|
itm = QListWidgetItem(moduleName) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57
|
itm.setFlags(itm.flags() | Qt.ItemFlag.ItemIsUserCheckable) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58
|
itm.setCheckState(Qt.CheckState.Unchecked) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59
|
self.modulesList.addItem(itm) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60
|
else: |
9748
|
61
|
self.modulesList.addItems(modulesList) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62
|
self.modulesList.sortItems(Qt.SortOrder.AscendingOrder) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63
|
|
9748
|
64
|
if info: |
|
65
|
self.infoLabel.setText(info) |
|
66
|
else: |
|
67
|
self.infoLabel.hide() |
|
68
|
|
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69
|
self.__applyFilter() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71
|
self.__checkCountUpdated() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74
|
def __applyFilter(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76
|
Private slot to apply the filter to the list of available modules. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78
|
filterStr = self.filterEdit.text() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79
|
counter = 0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80
|
for row in range(self.modulesList.count()): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81
|
itm = self.modulesList.item(row) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82
|
visible = filterStr in itm.text() if filterStr else True |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83
|
itm.setHidden(not visible) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84
|
if visible: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85
|
counter += 1 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87
|
self.statusLabel.setText( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88
|
self.tr("Showing {0} of {1} modules/packages").format( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89
|
counter, self.modulesList.count() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92
|
self.filterEdit.selectAll() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93
|
self.filterEdit.setFocus(Qt.FocusReason.OtherFocusReason) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95
|
@pyqtSlot(QListWidgetItem) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96
|
def on_modulesList_itemChanged(self, item): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98
|
Private slot to handle a change of the check state of an item. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100
|
@param item reference to the changed item |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101
|
@type QTreeWidgetItem |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103
|
if self.__selectionMode: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104
|
if item.checkState() == Qt.CheckState.Checked: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105
|
self.__checkCount += 1 |
9768
e2b622afb5ff
Fixed an issue causing the selection count of checkable selection lists going negative.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
106
|
elif self.__checkCount > 0: |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107
|
self.__checkCount -= 1 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109
|
self.__checkCountUpdated() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111
|
def __checkCountUpdated(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113
|
Private method to handle an update of the check count. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115
|
if self.__selectionMode: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116
|
self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117
|
self.__checkCount > 0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120
|
def getSelection(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
121
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122
|
Public method to get the list of selected modules. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124
|
@return list of selected modules |
11011
f1f1c8d0255d
Modified the CircuitPython library management for circup >= 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
125
|
@rtype circup.module.Module |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
127
|
results = [] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
128
|
if self.__selectionMode: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129
|
for row in range(self.modulesList.count()): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
130
|
itm = self.modulesList.item(row) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131
|
if itm.checkState() == Qt.CheckState.Checked: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132
|
results.append(itm.text()) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
134
|
return results |