src/eric7/MicroPython/MicroPythonWebreplConnectionDialog.py

Thu, 11 Jul 2024 14:21:34 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 11 Jul 2024 14:21:34 +0200
branch
eric7
changeset 10840
c8045d0dbaa7
parent 10439
21c28b0f9e41
child 11090
f5f5f5803935
permissions
-rw-r--r--

MicroPython
- Updated the list of known CircuitPython boards for CPy 9.1.0.
- Updated the list of known UF2 capable boards.

10010
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
10439
21c28b0f9e41 Updated copyright for 2024.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10010
diff changeset
3 # Copyright (c) 2023 - 2024 Detlev Offenbach <detlev@die-offenbachs.de>
10010
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a dialog to enter the WebREPL connection parameters.
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 from PyQt6.QtCore import pyqtSlot
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QLineEdit
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from eric7.EricGui import EricPixmapCache
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 from .Devices import getSupportedDevices
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 from .Ui_MicroPythonWebreplConnectionDialog import Ui_MicroPythonWebreplConnectionDialog
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 class MicroPythonWebreplConnectionDialog(
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 QDialog, Ui_MicroPythonWebreplConnectionDialog
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 ):
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 """
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 Class implementing a dialog to enter the WebREPL connection parameters.
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 def __init__(self, currentWebreplUrl, currentType, parent=None):
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 """
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 Constructor
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 @param currentWebreplUrl WebREPL URL most recently configured
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 @type str
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 @param currentType device type most recently selected
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 @type str
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 @param parent reference to the parent widget (defaults to None)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 @type QWidget (optional)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 """
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 super().__init__(parent)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 self.setupUi(self)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 self.deviceTypeComboBox.addItem("", "")
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 for board, description in sorted(getSupportedDevices(), key=lambda x: x[1]):
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 self.deviceTypeComboBox.addItem(description, board)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 self.showPasswordButton.setIcon(EricPixmapCache.getIcon("showPassword"))
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 self.hostEdit.textChanged.connect(self.__updateOkButton)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 self.portEdit.textChanged.connect(self.__updateOkButton)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 self.deviceTypeComboBox.currentIndexChanged.connect(self.__updateOkButton)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 if currentWebreplUrl:
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 url = currentWebreplUrl.replace("ws://", "")
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 password, hostPort = url.split("@", 1) if "@" in url else ("", url)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 host, port = hostPort.split(":", 1) if ":" in hostPort else (hostPort, "")
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 self.hostEdit.setText(host)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 self.portEdit.setText(port)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 self.passwordEdit.setText(password)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 typeIndex = self.deviceTypeComboBox.findData(currentType)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 self.deviceTypeComboBox.setCurrentIndex(typeIndex)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 else:
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 self.__updateOkButton()
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 msh = self.minimumSizeHint()
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 self.resize(max(self.width(), msh.width()), msh.height())
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 @pyqtSlot()
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 def __updateOkButton(self):
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 """
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 Private slot to update the enabled state of the OK button.
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 """
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 port = self.portEdit.text()
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 if port == "":
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 portOk = True
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 else:
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 try:
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 portNo = int(port)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 portOk = 1024 < portNo <= 65535
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 except ValueError:
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 portOk = False
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 bool(self.hostEdit.text())
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 and portOk
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 and bool(self.deviceTypeComboBox.currentData())
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 )
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 @pyqtSlot(bool)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 def on_showPasswordButton_clicked(self, checked):
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 """
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 Private slot to show or hide the password.
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 @param checked state of the button
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 @type bool
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 """
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 if checked:
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 self.passwordEdit.setEchoMode(QLineEdit.EchoMode.Normal)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 self.showPasswordButton.setIcon(EricPixmapCache.getIcon("hidePassword"))
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 self.showPasswordButton.setToolTip(self.tr("Press to hide the password."))
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 else:
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 self.passwordEdit.setEchoMode(QLineEdit.EchoMode.Password)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 self.showPasswordButton.setIcon(EricPixmapCache.getIcon("showPassword"))
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 self.showPasswordButton.setToolTip(self.tr("Press to show the password."))
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 def getWebreplConnectionParameters(self):
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 """
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 Public method to retrieve the entered WebREPL connection data.
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 @return tuple containing the URL and device type for the WebREPL connection
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 @rtype tuple of (str, str)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 """
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 password = self.passwordEdit.text()
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 host = self.hostEdit.text()
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 port = self.portEdit.text()
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 if password and port:
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 url = f"ws://{password}@{host}:{port}"
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 elif password:
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 url = f"ws://{password}@{host}"
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 elif port:
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 url = f"ws://{host}:{port}"
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 else:
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 url = f"ws://{host}"
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 return (url, self.deviceTypeComboBox.currentData())

eric ide

mercurial