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).
10009
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> |
10009
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 edit the list of configured WebREPL URLs. |
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, QTreeWidgetItem |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13
|
from eric7.EricWidgets import EricMessageBox |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15
|
from .MicroPythonWebreplUrlAddEditDialog import MicroPythonWebreplUrlAddEditDialog |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16
|
from .Ui_MicroPythonWebreplUrlsConfigDialog import Ui_MicroPythonWebreplUrlsConfigDialog |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19
|
class MicroPythonWebreplUrlsConfigDialog( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20
|
QDialog, Ui_MicroPythonWebreplUrlsConfigDialog |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21
|
): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23
|
Class implementing a dialog to edit the list of configured WebREPL URLs. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26
|
def __init__(self, webreplDict, parent=None): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28
|
Constructor |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30
|
@param webreplDict dictionary containing the configured WebREPL URLs |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31
|
@type dict |
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
|
|
10010
|
38
|
for name, data in webreplDict.items(): |
10009
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39
|
itm = QTreeWidgetItem( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40
|
self.webreplUrlsList, |
10010
|
41
|
[name, data["description"], data["url"]], |
10009
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42
|
) |
10010
|
43
|
itm.setData(0, Qt.ItemDataRole.UserRole, data["device_type"]) |
10009
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45
|
self.__sortItems() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46
|
self.__resizeColumns() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47
|
self.__updateActionButtons() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49
|
self.webreplUrlsList.itemSelectionChanged.connect(self.__updateActionButtons) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52
|
def __sortItems(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54
|
Private slot to sort the list by name column (i.e. column 0). |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56
|
self.webreplUrlsList.sortItems(0, Qt.SortOrder.AscendingOrder) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59
|
def __resizeColumns(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61
|
Private slot to resize the columns to their contents. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63
|
for column in range(self.webreplUrlsList.columnCount()): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64
|
self.webreplUrlsList.resizeColumnToContents(column) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67
|
def __updateActionButtons(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69
|
Private slot to change the enabled state of the action buttons. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71
|
selectedItemsCount = len(self.webreplUrlsList.selectedItems()) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72
|
self.editButton.setEnabled(selectedItemsCount == 1) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73
|
self.removeButton.setEnabled(selectedItemsCount > 0) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75
|
self.removeAllButton.setEnabled(self.webreplUrlsList.topLevelItemCount() > 0) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77
|
def __definedNames(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79
|
Private method to get a list of defined connection names. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81
|
@return list of defined connection names |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82
|
@rtype list of str |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84
|
return [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85
|
self.webreplUrlsList.topLevelItem(row).text(0) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86
|
for row in range(self.webreplUrlsList.topLevelItemCount()) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87
|
] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90
|
def on_addButton_clicked(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92
|
Private slot to add a new WebREPL connection. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94
|
dlg = MicroPythonWebreplUrlAddEditDialog(self.__definedNames(), parent=self) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95
|
if dlg.exec() == QDialog.DialogCode.Accepted: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96
|
name, description, url, deviceType = dlg.getWebreplUrl() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97
|
itm = QTreeWidgetItem(self.webreplUrlsList, [name, description, url]) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98
|
itm.setData(0, Qt.ItemDataRole.UserRole, deviceType) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100
|
self.__sortItems() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101
|
self.__resizeColumns() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102
|
self.__updateActionButtons() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105
|
def on_editButton_clicked(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107
|
Private slot to edit the selected WebREPL connection. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109
|
itm = self.webreplUrlsList.selectedItems()[0] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110
|
dlg = MicroPythonWebreplUrlAddEditDialog( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111
|
self.__definedNames(), |
10019
e56089d00750
Fixed a few issue in the MicroPython support related to behavior of devices and change caused by MicroPython release 1.20.0 on ESP32 devices.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
112
|
connectionParams=( |
e56089d00750
Fixed a few issue in the MicroPython support related to behavior of devices and change caused by MicroPython release 1.20.0 on ESP32 devices.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
113
|
itm.text(0), |
e56089d00750
Fixed a few issue in the MicroPython support related to behavior of devices and change caused by MicroPython release 1.20.0 on ESP32 devices.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
114
|
itm.text(1), |
e56089d00750
Fixed a few issue in the MicroPython support related to behavior of devices and change caused by MicroPython release 1.20.0 on ESP32 devices.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
115
|
itm.text(2), |
e56089d00750
Fixed a few issue in the MicroPython support related to behavior of devices and change caused by MicroPython release 1.20.0 on ESP32 devices.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
116
|
itm.data(0, Qt.ItemDataRole.UserRole), |
e56089d00750
Fixed a few issue in the MicroPython support related to behavior of devices and change caused by MicroPython release 1.20.0 on ESP32 devices.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
117
|
), |
10009
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118
|
parent=self, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120
|
if dlg.exec() == QDialog.DialogCode.Accepted: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
121
|
name, description, url, deviceType = dlg.getWebreplUrl() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122
|
itm.setText(0, name) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123
|
itm.setText(1, description) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124
|
itm.setText(2, url) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
125
|
itm.setData(0, Qt.ItemDataRole.UserRole, deviceType) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
127
|
self.__sortItems() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
128
|
self.__resizeColumns() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129
|
self.__updateActionButtons() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
130
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132
|
def on_removeButton_clicked(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
134
|
Private slot to remove the selected entries. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
135
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
136
|
ok = EricMessageBox.yesNo( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
137
|
self, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
138
|
self.tr("Remove Selected WebREPL URLs"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
139
|
self.tr("""Shall the selected WebREPL URLs really be removed?"""), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
140
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
141
|
if ok: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
142
|
for itm in self.webreplUrlsList.selectedItems(): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
143
|
self.webreplUrlsList.takeTopLevelItem( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
144
|
self.webreplUrlsList.indexOfTopLevelItem(itm) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
145
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
146
|
del itm |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
147
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
148
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
149
|
def on_removeAllButton_clicked(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
150
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
151
|
Private slot to remove all entries. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
152
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
153
|
ok = EricMessageBox.yesNo( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
154
|
self, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
155
|
self.tr("Remove All WebREPL URLs"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
156
|
self.tr("""Shall all WebREPL URLs really be removed?"""), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
157
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
158
|
if ok: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
159
|
self.webreplUrlsList.clear() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
160
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
161
|
def getWebreplDict(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
162
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
163
|
Public method to retrieve a dictionary containing the configured WebREPL URLs. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
164
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
165
|
@return dictionary containing the configured WebREPL URLs |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
166
|
@rtype dict |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
167
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
168
|
webreplDict = {} |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
169
|
for row in range(self.webreplUrlsList.topLevelItemCount()): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
170
|
itm = self.webreplUrlsList.topLevelItem(row) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
171
|
webreplDict[itm.text(0)] = { |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
172
|
"description": itm.text(1), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
173
|
"url": itm.text(2), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
174
|
"device_type": itm.data(0, Qt.ItemDataRole.UserRole), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
175
|
} |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
176
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
177
|
return webreplDict |