17 |
17 |
18 class BoardDataDialog(QDialog, Ui_BoardDataDialog): |
18 class BoardDataDialog(QDialog, Ui_BoardDataDialog): |
19 """ |
19 """ |
20 Class implementing a dialog to show information about a connected board. |
20 Class implementing a dialog to show information about a connected board. |
21 """ |
21 """ |
|
22 |
22 def __init__(self, data, parent=None): |
23 def __init__(self, data, parent=None): |
23 """ |
24 """ |
24 Constructor |
25 Constructor |
25 |
26 |
26 @param data dictionary containing the data to be shown |
27 @param data dictionary containing the data to be shown |
27 @type dict |
28 @type dict |
28 @param parent reference to the parent widget (defaults to None) |
29 @param parent reference to the parent widget (defaults to None) |
29 @type QWidget (optional) |
30 @type QWidget (optional) |
30 """ |
31 """ |
31 super().__init__(parent) |
32 super().__init__(parent) |
32 self.setupUi(self) |
33 self.setupUi(self) |
33 |
34 |
34 loc = QLocale() |
35 loc = QLocale() |
35 |
36 |
36 self.dataTree.setColumnCount(2) |
37 self.dataTree.setColumnCount(2) |
37 |
38 |
38 header = self.__createHeader(self.tr("General")) |
39 header = self.__createHeader(self.tr("General")) |
39 QTreeWidgetItem(header, [ |
40 QTreeWidgetItem(header, [self.tr("Board ID"), data["mc_id"]]) |
40 self.tr("Board ID"), |
41 QTreeWidgetItem( |
41 data["mc_id"] |
42 header, |
42 ]) |
43 [ |
43 QTreeWidgetItem(header, [ |
44 self.tr("Board Frequency"), |
44 self.tr("Board Frequency"), |
45 self.tr("{0} MHz").format( |
45 self.tr("{0} MHz").format( |
46 loc.toString(data["mc_frequency_mhz"], "f", 0) |
46 loc.toString(data["mc_frequency_mhz"], "f", 0)) |
47 ), |
47 ]) |
48 ], |
|
49 ) |
48 with contextlib.suppress(KeyError): |
50 with contextlib.suppress(KeyError): |
49 QTreeWidgetItem(header, [ |
51 QTreeWidgetItem( |
50 self.tr("Board Temperature"), |
52 header, |
51 self.tr("{0} °C").format( |
53 [ |
52 loc.toString(data["mc_temp_c"], "f", 1)) |
54 self.tr("Board Temperature"), |
53 ]) |
55 self.tr("{0} °C").format(loc.toString(data["mc_temp_c"], "f", 1)), |
54 |
56 ], |
|
57 ) |
|
58 |
55 header = self.__createHeader(self.tr("Python")) |
59 header = self.__createHeader(self.tr("Python")) |
56 QTreeWidgetItem(header, [ |
60 QTreeWidgetItem(header, [self.tr("Python Version"), data["py_version"]]) |
57 self.tr("Python Version"), |
61 QTreeWidgetItem(header, [self.tr("Platform"), data["py_platform"]]) |
58 data["py_version"] |
|
59 ]) |
|
60 QTreeWidgetItem(header, [ |
|
61 self.tr("Platform"), |
|
62 data["py_platform"] |
|
63 ]) |
|
64 if data["mpy_name"] == "micropython": |
62 if data["mpy_name"] == "micropython": |
65 mpyName = "MicroPython" |
63 mpyName = "MicroPython" |
66 elif data["mpy_name"] == "circuitpython": |
64 elif data["mpy_name"] == "circuitpython": |
67 mpyName = "CircuitPython" |
65 mpyName = "CircuitPython" |
68 elif data["mpy_name"] == "unknown": |
66 elif data["mpy_name"] == "unknown": |
69 mpyName = self.tr("unknown") |
67 mpyName = self.tr("unknown") |
70 else: |
68 else: |
71 mpyName = data["name"] |
69 mpyName = data["name"] |
72 QTreeWidgetItem(header, [ |
70 QTreeWidgetItem( |
73 self.tr("Implementation"), |
71 header, |
74 self.tr("{0} V. {1}").format( |
72 [ |
75 mpyName, |
73 self.tr("Implementation"), |
76 self.tr("unknown") |
74 self.tr("{0} V. {1}").format( |
77 if data["mpy_version"] == "unknown" else |
75 mpyName, |
78 data["mpy_version"] |
76 self.tr("unknown") |
79 ) |
77 if data["mpy_version"] == "unknown" |
80 ]) |
78 else data["mpy_version"], |
81 |
79 ), |
|
80 ], |
|
81 ) |
|
82 |
82 header = self.__createHeader(self.tr("System")) |
83 header = self.__createHeader(self.tr("System")) |
83 QTreeWidgetItem(header, [ |
84 QTreeWidgetItem(header, [self.tr("System Name"), data["sysname"]]) |
84 self.tr("System Name"), |
85 QTreeWidgetItem(header, [self.tr("Node Name"), data["nodename"]]) |
85 data["sysname"] |
86 QTreeWidgetItem(header, [self.tr("Release"), data["release"]]) |
86 ]) |
87 QTreeWidgetItem(header, [self.tr("Version"), data["version"]]) |
87 QTreeWidgetItem(header, [ |
88 QTreeWidgetItem(header, [self.tr("Machine"), data["machine"]]) |
88 self.tr("Node Name"), |
89 |
89 data["nodename"] |
|
90 ]) |
|
91 QTreeWidgetItem(header, [ |
|
92 self.tr("Release"), |
|
93 data["release"] |
|
94 ]) |
|
95 QTreeWidgetItem(header, [ |
|
96 self.tr("Version"), |
|
97 data["version"] |
|
98 ]) |
|
99 QTreeWidgetItem(header, [ |
|
100 self.tr("Machine"), |
|
101 data["machine"] |
|
102 ]) |
|
103 |
|
104 header = self.__createHeader(self.tr("Memory")) |
90 header = self.__createHeader(self.tr("Memory")) |
105 QTreeWidgetItem(header, [ |
91 QTreeWidgetItem( |
106 self.tr("total"), |
92 header, |
107 self.tr("{0} KBytes").format( |
93 [ |
108 loc.toString(data["mem_total_kb"], "f", 2)) |
94 self.tr("total"), |
109 ]) |
95 self.tr("{0} KBytes").format( |
110 QTreeWidgetItem(header, [ |
96 loc.toString(data["mem_total_kb"], "f", 2) |
111 self.tr("used"), |
97 ), |
112 self.tr("{0} KBytes ({1}%)").format( |
98 ], |
113 loc.toString(data["mem_used_kb"], "f", 2), |
99 ) |
114 loc.toString(data["mem_used_pc"], "f", 2)) |
100 QTreeWidgetItem( |
115 ]) |
101 header, |
116 QTreeWidgetItem(header, [ |
102 [ |
117 self.tr("free"), |
103 self.tr("used"), |
118 self.tr("{0} KBytes ({1}%)").format( |
104 self.tr("{0} KBytes ({1}%)").format( |
119 loc.toString(data["mem_free_kb"], "f", 2), |
105 loc.toString(data["mem_used_kb"], "f", 2), |
120 loc.toString(data["mem_free_pc"], "f", 2)) |
106 loc.toString(data["mem_used_pc"], "f", 2), |
121 ]) |
107 ), |
122 |
108 ], |
|
109 ) |
|
110 QTreeWidgetItem( |
|
111 header, |
|
112 [ |
|
113 self.tr("free"), |
|
114 self.tr("{0} KBytes ({1}%)").format( |
|
115 loc.toString(data["mem_free_kb"], "f", 2), |
|
116 loc.toString(data["mem_free_pc"], "f", 2), |
|
117 ), |
|
118 ], |
|
119 ) |
|
120 |
123 header = self.__createHeader(self.tr("Flash Memory")) |
121 header = self.__createHeader(self.tr("Flash Memory")) |
124 QTreeWidgetItem(header, [ |
122 QTreeWidgetItem( |
125 self.tr("total"), |
123 header, |
126 self.tr("{0} KBytes").format( |
124 [ |
127 loc.toString(data["flash_total_kb"], "f", 0)) |
125 self.tr("total"), |
128 ]) |
126 self.tr("{0} KBytes").format( |
129 QTreeWidgetItem(header, [ |
127 loc.toString(data["flash_total_kb"], "f", 0) |
130 self.tr("used"), |
128 ), |
131 self.tr("{0} KBytes ({1}%)").format( |
129 ], |
132 loc.toString(data["flash_used_kb"], "f", 0), |
130 ) |
133 loc.toString(data["flash_used_pc"], "f", 2)) |
131 QTreeWidgetItem( |
134 ]) |
132 header, |
135 QTreeWidgetItem(header, [ |
133 [ |
136 self.tr("free"), |
134 self.tr("used"), |
137 self.tr("{0} KBytes ({1}%)").format( |
135 self.tr("{0} KBytes ({1}%)").format( |
138 loc.toString(data["flash_free_kb"], "f", 0), |
136 loc.toString(data["flash_used_kb"], "f", 0), |
139 loc.toString(data["flash_free_pc"], "f", 2)) |
137 loc.toString(data["flash_used_pc"], "f", 2), |
140 ]) |
138 ), |
141 |
139 ], |
|
140 ) |
|
141 QTreeWidgetItem( |
|
142 header, |
|
143 [ |
|
144 self.tr("free"), |
|
145 self.tr("{0} KBytes ({1}%)").format( |
|
146 loc.toString(data["flash_free_kb"], "f", 0), |
|
147 loc.toString(data["flash_free_pc"], "f", 2), |
|
148 ), |
|
149 ], |
|
150 ) |
|
151 |
142 header = self.__createHeader(self.tr("µLab")) |
152 header = self.__createHeader(self.tr("µLab")) |
143 if data["ulab"] is not None: |
153 if data["ulab"] is not None: |
144 QTreeWidgetItem(header, [ |
154 QTreeWidgetItem(header, [self.tr("Version"), data["ulab"]]) |
145 self.tr("Version"), |
|
146 data["ulab"] |
|
147 ]) |
|
148 else: |
155 else: |
149 itm = QTreeWidgetItem(header, [ |
156 itm = QTreeWidgetItem(header, [self.tr("µLab is not available")]) |
150 self.tr("µLab is not available") |
|
151 ]) |
|
152 itm.setFirstColumnSpanned(True) |
157 itm.setFirstColumnSpanned(True) |
153 |
158 |
154 for col in range(self.dataTree.columnCount()): |
159 for col in range(self.dataTree.columnCount()): |
155 self.dataTree.resizeColumnToContents(col) |
160 self.dataTree.resizeColumnToContents(col) |
156 |
161 |
157 def __createHeader(self, headerText): |
162 def __createHeader(self, headerText): |
158 """ |
163 """ |
159 Private method to create a header item. |
164 Private method to create a header item. |
160 |
165 |
161 @param headerText text for the header item |
166 @param headerText text for the header item |
162 @type str |
167 @type str |
163 @return reference to the created header item |
168 @return reference to the created header item |
164 @rtype QTreeWidgetItem |
169 @rtype QTreeWidgetItem |
165 """ |
170 """ |
166 headerItem = QTreeWidgetItem(self.dataTree, [headerText]) |
171 headerItem = QTreeWidgetItem(self.dataTree, [headerText]) |
167 headerItem.setExpanded(True) |
172 headerItem.setExpanded(True) |
168 headerItem.setFirstColumnSpanned(True) |
173 headerItem.setFirstColumnSpanned(True) |
169 |
174 |
170 font = headerItem.font(0) |
175 font = headerItem.font(0) |
171 font.setBold(True) |
176 font.setBold(True) |
172 |
177 |
173 headerItem.setFont(0, font) |
178 headerItem.setFont(0, font) |
174 |
179 |
175 return headerItem |
180 return headerItem |