Added code to the CircuitPython interface to show the installed firmware version even if the drive is not mounted but the device is connected via the serial console.
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1
|
# -*- coding: utf-8 -*- |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
3
|
# Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de> |
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
|
import circup |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12
|
from PyQt6.QtCore import Qt, pyqtSlot |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13
|
from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QListWidgetItem |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15
|
from eric7.EricGui import EricPixmapCache |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17
|
from .Ui_ShowModulesDialog import Ui_ShowModulesDialog |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20
|
class ShowModulesDialog(QDialog, Ui_ShowModulesDialog): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22
|
Class implementing a dialog to show the available modules of all bundles. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25
|
def __init__(self, selectionMode=False, parent=None): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27
|
Constructor |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28
|
|
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) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32
|
@param parent reference to the parent widget (defaults to None) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33
|
@type QWidget (optional) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35
|
super().__init__(parent) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36
|
self.setupUi(self) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38
|
self.filterButton.setIcon(EricPixmapCache.getIcon("check")) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39
|
self.filterButton.clicked.connect(self.__applyFilter) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41
|
self.__checkCount = 0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42
|
self.__selectionMode = selectionMode |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43
|
if self.__selectionMode: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44
|
self.buttonBox.setStandardButtons( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45
|
QDialogButtonBox.StandardButton.Ok |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46
|
| QDialogButtonBox.StandardButton.Cancel |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49
|
self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Close) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51
|
availableModules = circup.get_bundle_versions(circup.get_bundles_list()) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52
|
moduleNames = [m.replace(".py", "") for m in availableModules] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53
|
if self.__selectionMode: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54
|
for moduleName in moduleNames: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55
|
itm = QListWidgetItem(moduleName) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56
|
itm.setFlags(itm.flags() | Qt.ItemFlag.ItemIsUserCheckable) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57
|
itm.setCheckState(Qt.CheckState.Unchecked) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58
|
self.modulesList.addItem(itm) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60
|
self.modulesList.addItems(moduleNames) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61
|
self.modulesList.sortItems(Qt.SortOrder.AscendingOrder) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63
|
self.__applyFilter() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65
|
self.__checkCountUpdated() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68
|
def __applyFilter(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70
|
Private slot to apply the filter to the list of available modules. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72
|
filterStr = self.filterEdit.text() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73
|
counter = 0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74
|
for row in range(self.modulesList.count()): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75
|
itm = self.modulesList.item(row) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76
|
visible = filterStr in itm.text() if filterStr else True |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77
|
itm.setHidden(not visible) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78
|
if visible: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79
|
counter += 1 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81
|
self.statusLabel.setText( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82
|
self.tr("Showing {0} of {1} modules/packages").format( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83
|
counter, self.modulesList.count() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86
|
self.filterEdit.selectAll() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87
|
self.filterEdit.setFocus(Qt.FocusReason.OtherFocusReason) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89
|
@pyqtSlot(QListWidgetItem) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90
|
def on_modulesList_itemChanged(self, item): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92
|
Private slot to handle a change of the check state of an item. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94
|
@param item reference to the changed item |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95
|
@type QTreeWidgetItem |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97
|
if self.__selectionMode: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98
|
if item.checkState() == Qt.CheckState.Checked: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99
|
self.__checkCount += 1 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101
|
self.__checkCount -= 1 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103
|
self.__checkCountUpdated() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105
|
def __checkCountUpdated(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107
|
Private method to handle an update of the check count. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109
|
if self.__selectionMode: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110
|
self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111
|
self.__checkCount > 0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114
|
def getSelection(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116
|
Public method to get the list of selected modules. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118
|
@return list of selected modules |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119
|
@rtype circup.Module |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
121
|
results = [] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122
|
if self.__selectionMode: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123
|
for row in range(self.modulesList.count()): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124
|
itm = self.modulesList.item(row) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
125
|
if itm.checkState() == Qt.CheckState.Checked: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126
|
results.append(itm.text()) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
127
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
128
|
return results |