11 |
11 |
12 from PyQt6.QtCore import Qt, pyqtSlot |
12 from PyQt6.QtCore import Qt, pyqtSlot |
13 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QTreeWidgetItem |
13 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QTreeWidgetItem |
14 |
14 |
15 from eric7.EricGui import EricPixmapCache |
15 from eric7.EricGui import EricPixmapCache |
|
16 from eric7.SystemUtilities.NetworkUtilities import ipv6AddressScope |
16 |
17 |
17 from .Ui_WifiStatusDialog import Ui_WifiStatusDialog |
18 from .Ui_WifiStatusDialog import Ui_WifiStatusDialog |
18 |
19 |
19 |
20 |
20 class WifiStatusDialog(QDialog, Ui_WifiStatusDialog): |
21 class WifiStatusDialog(QDialog, Ui_WifiStatusDialog): |
73 ) |
74 ) |
74 with contextlib.suppress(KeyError): |
75 with contextlib.suppress(KeyError): |
75 QTreeWidgetItem( |
76 QTreeWidgetItem( |
76 self.statusTree, [self.tr("Country"), overallStatus["country"]] |
77 self.statusTree, [self.tr("Country"), overallStatus["country"]] |
77 ) |
78 ) |
|
79 with contextlib.suppress(KeyError): |
|
80 QTreeWidgetItem( |
|
81 self.statusTree, |
|
82 [self.tr("Preferred IP Version"), str(overallStatus["prefer"])], |
|
83 ) |
78 |
84 |
79 # populate status of client interface |
85 # populate status of client interface |
80 if clientStatus: |
86 if clientStatus: |
81 header = self.__createHeader(self.tr("Client")) |
87 header = self.__createHeader(self.tr("Client")) |
82 QTreeWidgetItem( |
88 QTreeWidgetItem( |
94 self.tr("Yes") if clientStatus["connected"] else self.tr("No"), |
100 self.tr("Yes") if clientStatus["connected"] else self.tr("No"), |
95 ], |
101 ], |
96 ) |
102 ) |
97 with contextlib.suppress(KeyError): |
103 with contextlib.suppress(KeyError): |
98 QTreeWidgetItem(header, [self.tr("Status"), clientStatus["status"]]) |
104 QTreeWidgetItem(header, [self.tr("Status"), clientStatus["status"]]) |
99 QTreeWidgetItem( |
105 with contextlib.suppress(KeyError): |
100 header, [self.tr("IPv4 Address"), clientStatus["ifconfig"][0]] |
106 QTreeWidgetItem(header, [self.tr("SSID"), clientStatus["essid"]]) |
101 ) |
|
102 QTreeWidgetItem( |
|
103 header, [self.tr("Netmask"), clientStatus["ifconfig"][1]] |
|
104 ) |
|
105 QTreeWidgetItem( |
|
106 header, [self.tr("Gateway"), clientStatus["ifconfig"][2]] |
|
107 ) |
|
108 QTreeWidgetItem(header, [self.tr("DNS"), clientStatus["ifconfig"][3]]) |
|
109 QTreeWidgetItem(header, [self.tr("MAC-Address"), clientStatus["mac"]]) |
|
110 with contextlib.suppress(KeyError): |
107 with contextlib.suppress(KeyError): |
111 QTreeWidgetItem( |
108 QTreeWidgetItem( |
112 header, [self.tr("Channel"), str(clientStatus["channel"])] |
109 header, [self.tr("Channel"), str(clientStatus["channel"])] |
113 ) |
110 ) |
114 with contextlib.suppress(KeyError): |
111 with contextlib.suppress(KeyError): |
121 [ |
118 [ |
122 self.tr("Tx-Power"), |
119 self.tr("Tx-Power"), |
123 self.tr("{0} dBm").format(clientStatus["txpower"]), |
120 self.tr("{0} dBm").format(clientStatus["txpower"]), |
124 ], |
121 ], |
125 ) |
122 ) |
126 |
123 QTreeWidgetItem(header, [self.tr("MAC-Address"), clientStatus["mac"]]) |
|
124 |
|
125 # IPv4 specific data |
|
126 ip4Header = self.__createSubheader(header, self.tr("IPv4")) |
|
127 QTreeWidgetItem( |
|
128 ip4Header, [self.tr("Address"), clientStatus["ifconfig"][0]] |
|
129 ) |
|
130 QTreeWidgetItem( |
|
131 ip4Header, [self.tr("Netmask"), clientStatus["ifconfig"][1]] |
|
132 ) |
|
133 QTreeWidgetItem( |
|
134 ip4Header, [self.tr("Gateway"), clientStatus["ifconfig"][2]] |
|
135 ) |
|
136 QTreeWidgetItem( |
|
137 ip4Header, [self.tr("DNS"), clientStatus["ifconfig"][3]] |
|
138 ) |
|
139 |
|
140 # IPv6 specific data |
|
141 if clientStatus["ipv6_addr"]: |
|
142 ip6Header = self.__createSubheader(header, self.tr("IPv6")) |
|
143 ip6AddrHeader = self.__createSubheader( |
|
144 ip6Header, self.tr("Addresses"), underlined=False |
|
145 ) |
|
146 for addr in sorted(clientStatus["ipv6_addr"]): |
|
147 QTreeWidgetItem( |
|
148 ip6AddrHeader, [addr.lower(), ipv6AddressScope(addr)] |
|
149 ) |
|
150 |
|
151 # data about the connected access point |
127 if "ap_ssid" in clientStatus: |
152 if "ap_ssid" in clientStatus: |
128 apHeader = self.__createSubheader( |
153 apHeader = self.__createSubheader( |
129 header, self.tr("Connected Access Point") |
154 header, self.tr("Connected Access Point") |
130 ) |
155 ) |
131 QTreeWidgetItem( |
156 QTreeWidgetItem( |
169 ], |
194 ], |
170 ) |
195 ) |
171 with contextlib.suppress(KeyError): |
196 with contextlib.suppress(KeyError): |
172 QTreeWidgetItem(header, [self.tr("Status"), apStatus["status"]]) |
197 QTreeWidgetItem(header, [self.tr("Status"), apStatus["status"]]) |
173 with contextlib.suppress(KeyError): |
198 with contextlib.suppress(KeyError): |
174 QTreeWidgetItem( |
|
175 header, [self.tr("IPv4 Address"), apStatus["ifconfig"][0]] |
|
176 ) |
|
177 QTreeWidgetItem( |
|
178 header, [self.tr("Netmask"), apStatus["ifconfig"][1]] |
|
179 ) |
|
180 QTreeWidgetItem( |
|
181 header, [self.tr("Gateway"), apStatus["ifconfig"][2]] |
|
182 ) |
|
183 QTreeWidgetItem(header, [self.tr("DNS"), apStatus["ifconfig"][3]]) |
|
184 with contextlib.suppress(KeyError): |
|
185 QTreeWidgetItem(header, [self.tr("SSID"), apStatus["essid"]]) |
199 QTreeWidgetItem(header, [self.tr("SSID"), apStatus["essid"]]) |
186 with contextlib.suppress(KeyError): |
200 with contextlib.suppress(KeyError): |
187 QTreeWidgetItem( |
201 QTreeWidgetItem( |
188 header, [self.tr("Security"), apStatus["ap_security"]] |
202 header, [self.tr("Security"), apStatus["ap_security"]] |
189 ) |
203 ) |
190 QTreeWidgetItem(header, [self.tr("MAC-Address"), apStatus["mac"]]) |
|
191 with contextlib.suppress(KeyError): |
204 with contextlib.suppress(KeyError): |
192 QTreeWidgetItem( |
205 QTreeWidgetItem( |
193 header, [self.tr("Channel"), str(apStatus["channel"])] |
206 header, [self.tr("Channel"), str(apStatus["channel"])] |
194 ) |
207 ) |
195 with contextlib.suppress(KeyError): |
208 with contextlib.suppress(KeyError): |
200 [ |
213 [ |
201 self.tr("Tx-Power"), |
214 self.tr("Tx-Power"), |
202 self.tr("{0} dBm").format(apStatus["txpower"]), |
215 self.tr("{0} dBm").format(apStatus["txpower"]), |
203 ], |
216 ], |
204 ) |
217 ) |
|
218 QTreeWidgetItem(header, [self.tr("MAC-Address"), apStatus["mac"]]) |
|
219 |
|
220 # IPv4 specific data |
|
221 ip4Header = self.__createSubheader(header, self.tr("IPv4")) |
|
222 with contextlib.suppress(KeyError): |
|
223 QTreeWidgetItem( |
|
224 ip4Header, [self.tr("Address"), apStatus["ifconfig"][0]] |
|
225 ) |
|
226 QTreeWidgetItem( |
|
227 ip4Header, [self.tr("Netmask"), apStatus["ifconfig"][1]] |
|
228 ) |
|
229 QTreeWidgetItem( |
|
230 ip4Header, [self.tr("Gateway"), apStatus["ifconfig"][2]] |
|
231 ) |
|
232 QTreeWidgetItem( |
|
233 ip4Header, [self.tr("DNS"), apStatus["ifconfig"][3]] |
|
234 ) |
|
235 |
|
236 # IPv6 specific data |
|
237 if clientStatus["ipv6_addr"]: |
|
238 ip6Header = self.__createSubheader(header, self.tr("IPv6")) |
|
239 ip6AddrHeader = self.__createSubheader( |
|
240 ip6Header, self.tr("Addresses"), underlined=False |
|
241 ) |
|
242 for addr in sorted(apStatus["ipv6_addr"]): |
|
243 QTreeWidgetItem( |
|
244 ip6AddrHeader, [addr.lower(), ipv6AddressScope(addr)] |
|
245 ) |
205 |
246 |
206 for col in range(self.statusTree.columnCount()): |
247 for col in range(self.statusTree.columnCount()): |
207 self.statusTree.resizeColumnToContents(col) |
248 self.statusTree.resizeColumnToContents(col) |
208 |
249 |
209 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setDefault(True) |
250 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setDefault(True) |
222 headerItem.setExpanded(True) |
263 headerItem.setExpanded(True) |
223 headerItem.setFirstColumnSpanned(True) |
264 headerItem.setFirstColumnSpanned(True) |
224 |
265 |
225 font = headerItem.font(0) |
266 font = headerItem.font(0) |
226 font.setBold(True) |
267 font.setBold(True) |
227 |
|
228 headerItem.setFont(0, font) |
268 headerItem.setFont(0, font) |
229 |
269 |
230 return headerItem |
270 return headerItem |
231 |
271 |
232 def __createSubheader(self, parent, text): |
272 def __createSubheader(self, parent, text, underlined=True): |
233 """ |
273 """ |
234 Private method to create a subheader item. |
274 Private method to create a subheader item. |
235 |
275 |
236 @param parent reference to the parent item |
276 @param parent reference to the parent item |
237 @type QTreeWidgetItem |
277 @type QTreeWidgetItem |
238 @param text text for the header item |
278 @param text text for the header item |
239 @type str |
279 @type str |
|
280 @param underlined flag indicating an underlined header (defaults to True) |
|
281 @type bool (optional) |
240 @return reference to the created header item |
282 @return reference to the created header item |
241 @rtype QTreeWidgetItem |
283 @rtype QTreeWidgetItem |
242 """ |
284 """ |
243 headerItem = QTreeWidgetItem(parent, [text]) |
285 headerItem = QTreeWidgetItem(parent, [text]) |
244 headerItem.setExpanded(True) |
286 headerItem.setExpanded(True) |
245 headerItem.setFirstColumnSpanned(True) |
287 headerItem.setFirstColumnSpanned(True) |
246 |
288 |
247 font = headerItem.font(0) |
289 if underlined: |
248 font.setUnderline(True) |
290 font = headerItem.font(0) |
249 headerItem.setFont(0, font) |
291 font.setUnderline(True) |
|
292 headerItem.setFont(0, font) |
250 |
293 |
251 return headerItem |
294 return headerItem |