src/eric7/MicroPython/CircuitPythonUpdater/ShowModulesDialog.py

Tue, 07 Feb 2023 10:53:40 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 07 Feb 2023 10:53:40 +0100
branch
eric7
changeset 9745
2c706ccc2b42
parent 9740
90072e10ae9b
permissions
-rw-r--r--

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

eric ide

mercurial