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 parameters for a WebREPL connection. |
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 pyqtSlot |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11
|
from PyQt6.QtWidgets import QDialog, QDialogButtonBox |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13
|
from .Devices import getSupportedDevices |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14
|
from .Ui_MicroPythonWebreplUrlAddEditDialog import Ui_MicroPythonWebreplUrlAddEditDialog |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17
|
class MicroPythonWebreplUrlAddEditDialog( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18
|
QDialog, Ui_MicroPythonWebreplUrlAddEditDialog |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19
|
): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21
|
Class implementing a dialog to edit the parameters for a WebREPL connection. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24
|
def __init__(self, definedNames, connectionParams=None, parent=None): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26
|
Constructor |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28
|
@param definedNames list of already define WebREPL connection names |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29
|
@type list of str |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30
|
@param connectionParams parameters for the WebREPL connection to be edited |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31
|
(default to None) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32
|
@type tuple of (str, str, str) (optional) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33
|
@param parent reference to the parent widget (defaults to None) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34
|
@type QWidget (optional) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36
|
super().__init__(parent) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37
|
self.setupUi(self) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39
|
self.__definedNames = definedNames[:] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41
|
self.deviceTypeComboBox.addItem("", "") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42
|
for board, description in sorted(getSupportedDevices(), key=lambda x: x[1]): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43
|
self.deviceTypeComboBox.addItem(description, board) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45
|
self.nameEdit.textChanged.connect(self.__updateOkButton) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46
|
self.descriptionEdit.textChanged.connect(self.__updateOkButton) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47
|
self.hostEdit.textChanged.connect(self.__updateOkButton) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48
|
self.portEdit.textChanged.connect(self.__updateOkButton) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49
|
self.deviceTypeComboBox.currentIndexChanged.connect(self.__updateOkButton) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51
|
if connectionParams: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52
|
self.__editName = connectionParams[0] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53
|
self.__populateFields(connectionParams) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55
|
self.__editName = "" |
10010
|
56
|
self.__updateOkButton() |
10009
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58
|
msh = self.minimumSizeHint() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59
|
self.resize(max(self.width(), msh.width()), msh.height()) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61
|
def __populateFields(self, params): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63
|
Private method to populate the various dialog fields with the given parameters. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65
|
@param params arameters for the WebREPL connection to be edited |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66
|
@type tuple of (str, str, str) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68
|
self.nameEdit.setText(params[0]) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69
|
self.descriptionEdit.setText(params[1]) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71
|
url = params[2].replace("ws://", "") |
10010
|
72
|
password, hostPort = url.split("@", 1) if "@" in url else ("", url) |
|
73
|
host, port = hostPort.split(":", 1) if ":" in hostPort else (hostPort, "") |
10009
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74
|
self.hostEdit.setText(host) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75
|
self.portEdit.setText(port) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76
|
self.passwordEdit.setText(password) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77
|
|
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
|
78
|
typeIndex = self.deviceTypeComboBox.findData(params[3]) |
10009
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79
|
self.deviceTypeComboBox.setCurrentIndex(typeIndex) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82
|
def __updateOkButton(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84
|
Private slot to update the enabled state of the OK button. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86
|
port = self.portEdit.text() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87
|
if port == "": |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88
|
portOk = True |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90
|
try: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91
|
portNo = int(port) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92
|
portOk = 1024 < portNo <= 65535 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93
|
except ValueError: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94
|
portOk = False |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96
|
name = self.nameEdit.text() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97
|
nameOk = bool(name) and ( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98
|
name == self.__editName or name not in self.__definedNames |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101
|
self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102
|
nameOk |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103
|
and bool(self.descriptionEdit.text()) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104
|
and bool(self.hostEdit.text()) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105
|
and portOk |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106
|
and bool(self.deviceTypeComboBox.currentData()) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109
|
def getWebreplUrl(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111
|
Public method to retrieve the entered WebREPL connection data. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112
|
|
10010
|
113
|
@return tuple containing the name, description, URL and device type for |
|
114
|
the WebREPL connection |
|
115
|
@rtype tuple of (str, str, str, str) |
10009
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117
|
password = self.passwordEdit.text() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118
|
host = self.hostEdit.text() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119
|
port = self.portEdit.text() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
121
|
if password and port: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122
|
url = f"ws://{password}@{host}:{port}" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123
|
elif password: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124
|
url = f"ws://{password}@{host}" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
125
|
elif port: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126
|
url = f"ws://{host}:{port}" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
127
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
128
|
url = f"ws://{host}" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
130
|
return ( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131
|
self.nameEdit.text(), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132
|
self.descriptionEdit.text(), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133
|
url, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
134
|
self.deviceTypeComboBox.currentData(), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
135
|
) |