Added the Adafruit Feather nRF52840 to the list of known NRF52 boards and changed the list of known CircuitPython boards to be more explicit with respect to Adafruit boards (i.e. VID 0x239A).
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 |