src/eric7/MicroPython/MicroPythonWebreplConnectionDialog.py

Sun, 16 Mar 2025 12:53:12 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 16 Mar 2025 12:53:12 +0100
branch
eric7
changeset 11170
6d6199d668fb
parent 11090
f5f5f5803935
permissions
-rw-r--r--

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).

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
11090
f5f5f5803935 Updated copyright for 2025.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3 # Copyright (c) 2023 - 2025 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