Updated copyright for 2024.
10009
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1
|
# -*- coding: utf-8 -*- |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2
|
|
10439
|
3
|
# Copyright (c) 2023 - 2024 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
|
) |