src/eric7/MicroPython/EthernetDialogs/EthernetStatusDialog.py

Tue, 06 May 2025 11:08:30 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 06 May 2025 11:08:30 +0200
branch
eric7
changeset 11268
3dba24293ccc
parent 11263
28f0ead11a82
permissions
-rw-r--r--

Changed the 'show()' logic of the Ethernet Status dialog.

9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
a82014a9e57b 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>
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a dialog to show Ethernet related status information.
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
11263
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
10 from PyQt6.QtCore import Qt, pyqtSlot
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QTreeWidgetItem
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
11263
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
13 from eric7.EricGui import EricPixmapCache
11268
3dba24293ccc Changed the 'show()' logic of the Ethernet Status dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11263
diff changeset
14 from eric7.EricGui.EricOverrideCursor import EricOverrideCursor
11263
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
15 from eric7.SystemUtilities.NetworkUtilities import ipv6AddressScope
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
16
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 from .Ui_EthernetStatusDialog import Ui_EthernetStatusDialog
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 class EthernetStatusDialog(QDialog, Ui_EthernetStatusDialog):
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 Class implementing a dialog to show Ethernet related status information.
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24
11263
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
25 def __init__(self, microPython, parent=None):
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 Constructor
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28
11263
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
29 @param microPython reference to the MicroPython widget
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
30 @type MicroPythonWidget
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 @param parent reference to the parent widget (defaults to None)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 @type QWidget (optional)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 super().__init__(parent)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 self.setupUi(self)
11263
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
36 self.setWindowFlags(Qt.WindowType.Window)
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 self.statusTree.setColumnCount(2)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39
11263
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
40 self.refreshButton.setIcon(EricPixmapCache.getIcon("reload"))
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
41 self.refreshButton.clicked.connect(self.__showStatus)
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
42
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
43 self.__mpy = microPython
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
44
11268
3dba24293ccc Changed the 'show()' logic of the Ethernet Status dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11263
diff changeset
45 @pyqtSlot()
3dba24293ccc Changed the 'show()' logic of the Ethernet Status dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11263
diff changeset
46 def show(self):
3dba24293ccc Changed the 'show()' logic of the Ethernet Status dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11263
diff changeset
47 """
3dba24293ccc Changed the 'show()' logic of the Ethernet Status dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11263
diff changeset
48 Public slot to show the dialog and populate the status.
3dba24293ccc Changed the 'show()' logic of the Ethernet Status dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11263
diff changeset
49 """
3dba24293ccc Changed the 'show()' logic of the Ethernet Status dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11263
diff changeset
50 super().show()
3dba24293ccc Changed the 'show()' logic of the Ethernet Status dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11263
diff changeset
51
11263
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
52 self.__showStatus()
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
53
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
54 @pyqtSlot()
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
55 def __showStatus(self):
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
56 """
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
57 Private slot to show the current WiFi status.
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
58 """
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
59 # clear old data
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
60 self.statusTree.clear()
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
61
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
62 # get the status
11268
3dba24293ccc Changed the 'show()' logic of the Ethernet Status dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11263
diff changeset
63 with EricOverrideCursor():
3dba24293ccc Changed the 'show()' logic of the Ethernet Status dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11263
diff changeset
64 try:
3dba24293ccc Changed the 'show()' logic of the Ethernet Status dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11263
diff changeset
65 status, addressInfo = self.__mpy.getDevice().getEthernetStatus()
3dba24293ccc Changed the 'show()' logic of the Ethernet Status dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11263
diff changeset
66 except Exception as exc:
3dba24293ccc Changed the 'show()' logic of the Ethernet Status dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11263
diff changeset
67 self.__mpy.showError("getEthernetStatus()", str(exc))
3dba24293ccc Changed the 'show()' logic of the Ethernet Status dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11263
diff changeset
68 return
11263
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
69
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 for topic, value in status:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 QTreeWidgetItem(self.statusTree, [topic, str(value)])
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72
11263
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
73 if addressInfo["ipv4"]:
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
74 header = self.__createHeader(self.statusTree, self.tr("IPv4"))
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
75 QTreeWidgetItem(header, [self.tr("Address"), addressInfo["ipv4"][0]])
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
76 QTreeWidgetItem(header, [self.tr("Netmask"), addressInfo["ipv4"][1]])
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
77 QTreeWidgetItem(header, [self.tr("Gateway"), addressInfo["ipv4"][2]])
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
78 QTreeWidgetItem(header, [self.tr("DNS"), addressInfo["ipv4"][3]])
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
79
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
80 if addressInfo["ipv6"]:
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
81 header = self.__createHeader(self.statusTree, self.tr("IPv6"))
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
82 addrHeader = self.__createHeader(
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
83 header, self.tr("Addresses"), underlined=False
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
84 )
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
85 for addr in sorted(addressInfo["ipv6"]):
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
86 QTreeWidgetItem(addrHeader, [addr.lower(), ipv6AddressScope(addr)])
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
87
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 for col in range(self.statusTree.columnCount()):
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 self.statusTree.resizeColumnToContents(col)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setDefault(True)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 self.buttonBox.setFocus(Qt.FocusReason.OtherFocusReason)
11263
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
93
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
94 def __createHeader(self, parent, text, underlined=True):
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
95 """
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
96 Private method to create a subheader item.
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
97
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
98 @param parent reference to the parent item
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
99 @type QTreeWidgetItem
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
100 @param text text for the header item
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
101 @type str
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
102 @param underlined flag indicating an underlined header (defaults to True)
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
103 @type bool (optional)
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
104 @return reference to the created header item
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
105 @rtype QTreeWidgetItem
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
106 """
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
107 headerItem = QTreeWidgetItem(parent, [text])
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
108 headerItem.setExpanded(True)
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
109 headerItem.setFirstColumnSpanned(True)
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
110
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
111 if underlined:
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
112 font = headerItem.font(0)
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
113 font.setUnderline(True)
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
114 headerItem.setFont(0, font)
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
115
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
116 return headerItem

eric ide

mercurial