19 |
19 |
20 class BinaryModel(QAbstractTableModel): |
20 class BinaryModel(QAbstractTableModel): |
21 """ |
21 """ |
22 Class implementing a model for entering binary numbers. |
22 Class implementing a model for entering binary numbers. |
23 """ |
23 """ |
|
24 |
24 def __init__(self, parent=None): |
25 def __init__(self, parent=None): |
25 """ |
26 """ |
26 Constructor |
27 Constructor |
27 |
28 |
28 @param parent reference to the parent widget (QWidget) |
29 @param parent reference to the parent widget (QWidget) |
29 """ |
30 """ |
30 super().__init__(parent) |
31 super().__init__(parent) |
31 |
32 |
32 self.__bits = 0 |
33 self.__bits = 0 |
33 self.__value = 0 |
34 self.__value = 0 |
34 |
35 |
35 def rowCount(self, parent): |
36 def rowCount(self, parent): |
36 """ |
37 """ |
37 Public method to get the number of rows of the model. |
38 Public method to get the number of rows of the model. |
38 |
39 |
39 @param parent parent index (QModelIndex) |
40 @param parent parent index (QModelIndex) |
40 @return number of columns (integer) |
41 @return number of columns (integer) |
41 """ |
42 """ |
42 return 1 |
43 return 1 |
43 |
44 |
44 def columnCount(self, parent): |
45 def columnCount(self, parent): |
45 """ |
46 """ |
46 Public method to get the number of columns of the model. |
47 Public method to get the number of columns of the model. |
47 |
48 |
48 @param parent parent index (QModelIndex) |
49 @param parent parent index (QModelIndex) |
49 @return number of columns (integer) |
50 @return number of columns (integer) |
50 """ |
51 """ |
51 return self.__bits |
52 return self.__bits |
52 |
53 |
53 def data(self, index, role=Qt.ItemDataRole.DisplayRole): |
54 def data(self, index, role=Qt.ItemDataRole.DisplayRole): |
54 """ |
55 """ |
55 Public method to get data from the model. |
56 Public method to get data from the model. |
56 |
57 |
57 @param index index to get data for (QModelIndex) |
58 @param index index to get data for (QModelIndex) |
58 @param role role of the data to retrieve (integer) |
59 @param role role of the data to retrieve (integer) |
59 @return requested data |
60 @return requested data |
60 """ |
61 """ |
61 if role == Qt.ItemDataRole.CheckStateRole: |
62 if role == Qt.ItemDataRole.CheckStateRole: |
62 if (self.__value >> (self.__bits - index.column() - 1)) & 1: |
63 if (self.__value >> (self.__bits - index.column() - 1)) & 1: |
63 return Qt.CheckState.Checked |
64 return Qt.CheckState.Checked |
64 else: |
65 else: |
65 return Qt.CheckState.Unchecked |
66 return Qt.CheckState.Unchecked |
66 |
67 |
67 elif role == Qt.ItemDataRole.DisplayRole: |
68 elif role == Qt.ItemDataRole.DisplayRole: |
68 return "" |
69 return "" |
69 |
70 |
70 return None |
71 return None |
71 |
72 |
72 def flags(self, index): |
73 def flags(self, index): |
73 """ |
74 """ |
74 Public method to get flags from the model. |
75 Public method to get flags from the model. |
75 |
76 |
76 @param index index to get flags for (QModelIndex) |
77 @param index index to get flags for (QModelIndex) |
77 @return flags (Qt.ItemFlags) |
78 @return flags (Qt.ItemFlags) |
78 """ |
79 """ |
79 return ( |
80 return ( |
80 Qt.ItemFlag.ItemIsUserCheckable | |
81 Qt.ItemFlag.ItemIsUserCheckable |
81 Qt.ItemFlag.ItemIsEnabled | |
82 | Qt.ItemFlag.ItemIsEnabled |
82 Qt.ItemFlag.ItemIsSelectable |
83 | Qt.ItemFlag.ItemIsSelectable |
83 ) |
84 ) |
84 |
85 |
85 def headerData(self, section, orientation, |
86 def headerData(self, section, orientation, role=Qt.ItemDataRole.DisplayRole): |
86 role=Qt.ItemDataRole.DisplayRole): |
|
87 """ |
87 """ |
88 Public method to get header data from the model. |
88 Public method to get header data from the model. |
89 |
89 |
90 @param section section number (integer) |
90 @param section section number (integer) |
91 @param orientation orientation (Qt.Orientation) |
91 @param orientation orientation (Qt.Orientation) |
92 @param role role of the data to retrieve (Qt.ItemDataRole) |
92 @param role role of the data to retrieve (Qt.ItemDataRole) |
93 @return requested data |
93 @return requested data |
94 """ |
94 """ |
95 if ( |
95 if ( |
96 orientation == Qt.Orientation.Horizontal and |
96 orientation == Qt.Orientation.Horizontal |
97 role == Qt.ItemDataRole.DisplayRole |
97 and role == Qt.ItemDataRole.DisplayRole |
98 ): |
98 ): |
99 return str(self.__bits - section - 1) |
99 return str(self.__bits - section - 1) |
100 |
100 |
101 return QAbstractTableModel.headerData(self, section, orientation, role) |
101 return QAbstractTableModel.headerData(self, section, orientation, role) |
102 |
102 |
103 def setBits(self, bits): |
103 def setBits(self, bits): |
104 """ |
104 """ |
105 Public slot to set the number of bits. |
105 Public slot to set the number of bits. |
106 |
106 |
107 @param bits number of bits to show (integer) |
107 @param bits number of bits to show (integer) |
108 """ |
108 """ |
109 self.beginResetModel() |
109 self.beginResetModel() |
110 self.__bits = bits |
110 self.__bits = bits |
111 self.endResetModel() |
111 self.endResetModel() |
112 |
112 |
113 def setValue(self, value): |
113 def setValue(self, value): |
114 """ |
114 """ |
115 Public slot to set the value to show. |
115 Public slot to set the value to show. |
116 |
116 |
117 @param value value to show (integer) |
117 @param value value to show (integer) |
118 """ |
118 """ |
119 self.beginResetModel() |
119 self.beginResetModel() |
120 self.__value = value |
120 self.__value = value |
121 self.endResetModel() |
121 self.endResetModel() |
122 |
122 |
123 def setBitsAndValue(self, bits, value): |
123 def setBitsAndValue(self, bits, value): |
124 """ |
124 """ |
125 Public slot to set the number of bits and the value to show. |
125 Public slot to set the number of bits and the value to show. |
126 |
126 |
127 @param bits number of bits to show (integer) |
127 @param bits number of bits to show (integer) |
128 @param value value to show (integer) |
128 @param value value to show (integer) |
129 """ |
129 """ |
130 self.__bits = bits |
130 self.__bits = bits |
131 self.__value = value |
131 self.__value = value |
132 self.beginResetModel() |
132 self.beginResetModel() |
133 self.endResetModel() |
133 self.endResetModel() |
134 |
134 |
135 def getValue(self): |
135 def getValue(self): |
136 """ |
136 """ |
137 Public slot to get the current value. |
137 Public slot to get the current value. |
138 |
138 |
139 @return current value of the model (integer) |
139 @return current value of the model (integer) |
140 """ |
140 """ |
141 return self.__value |
141 return self.__value |
142 |
142 |
143 def setData(self, index, value, role=Qt.ItemDataRole.EditRole): |
143 def setData(self, index, value, role=Qt.ItemDataRole.EditRole): |
144 """ |
144 """ |
145 Public method to set the data of a node cell. |
145 Public method to set the data of a node cell. |
146 |
146 |
147 @param index index of the node cell (QModelIndex) |
147 @param index index of the node cell (QModelIndex) |
148 @param value value to be set |
148 @param value value to be set |
149 @param role role of the data (integer) |
149 @param role role of the data (integer) |
150 @return flag indicating success (boolean) |
150 @return flag indicating success (boolean) |
151 """ |
151 """ |
152 if role == Qt.ItemDataRole.CheckStateRole: |
152 if role == Qt.ItemDataRole.CheckStateRole: |
153 if Qt.CheckState(value) == Qt.CheckState.Checked: |
153 if Qt.CheckState(value) == Qt.CheckState.Checked: |
154 self.__value |= (1 << self.__bits - index.column() - 1) |
154 self.__value |= 1 << self.__bits - index.column() - 1 |
155 else: |
155 else: |
156 self.__value &= ~(1 << self.__bits - index.column() - 1) |
156 self.__value &= ~(1 << self.__bits - index.column() - 1) |
157 self.dataChanged.emit(index, index) |
157 self.dataChanged.emit(index, index) |
158 return True |
158 return True |
159 |
159 |
160 return False |
160 return False |
161 |
161 |
162 |
162 |
163 class NumbersWidget(QWidget, Ui_NumbersWidget): |
163 class NumbersWidget(QWidget, Ui_NumbersWidget): |
164 """ |
164 """ |
165 Class implementing a widget to show numbers in different formats. |
165 Class implementing a widget to show numbers in different formats. |
166 |
166 |
167 @signal insertNumber(str) emitted after the user has entered a number |
167 @signal insertNumber(str) emitted after the user has entered a number |
168 and selected the number format |
168 and selected the number format |
169 """ |
169 """ |
|
170 |
170 insertNumber = pyqtSignal(str) |
171 insertNumber = pyqtSignal(str) |
171 |
172 |
172 def __init__(self, parent=None): |
173 def __init__(self, parent=None): |
173 """ |
174 """ |
174 Constructor |
175 Constructor |
175 |
176 |
176 @param parent reference to the parent widget (QWidget) |
177 @param parent reference to the parent widget (QWidget) |
177 """ |
178 """ |
178 super().__init__(parent) |
179 super().__init__(parent) |
179 self.setupUi(self) |
180 self.setupUi(self) |
180 |
181 |
181 self.setWindowIcon(UI.PixmapCache.getIcon("eric")) |
182 self.setWindowIcon(UI.PixmapCache.getIcon("eric")) |
182 |
183 |
183 self.__badNumberSheet = ( |
184 self.__badNumberSheet = ( |
184 "background-color: #b31b1b;" |
185 "background-color: #b31b1b;" |
185 if ericApp().usesDarkPalette() else |
186 if ericApp().usesDarkPalette() |
186 "background-color: #ffa0a0;" |
187 else "background-color: #ffa0a0;" |
187 ) |
188 ) |
188 |
189 |
189 self.binInButton.setIcon(UI.PixmapCache.getIcon("2downarrow")) |
190 self.binInButton.setIcon(UI.PixmapCache.getIcon("2downarrow")) |
190 self.binOutButton.setIcon(UI.PixmapCache.getIcon("2uparrow")) |
191 self.binOutButton.setIcon(UI.PixmapCache.getIcon("2uparrow")) |
191 self.octInButton.setIcon(UI.PixmapCache.getIcon("2downarrow")) |
192 self.octInButton.setIcon(UI.PixmapCache.getIcon("2downarrow")) |
192 self.octOutButton.setIcon(UI.PixmapCache.getIcon("2uparrow")) |
193 self.octOutButton.setIcon(UI.PixmapCache.getIcon("2uparrow")) |
193 self.decInButton.setIcon(UI.PixmapCache.getIcon("2downarrow")) |
194 self.decInButton.setIcon(UI.PixmapCache.getIcon("2downarrow")) |
194 self.decOutButton.setIcon(UI.PixmapCache.getIcon("2uparrow")) |
195 self.decOutButton.setIcon(UI.PixmapCache.getIcon("2uparrow")) |
195 self.hexInButton.setIcon(UI.PixmapCache.getIcon("2downarrow")) |
196 self.hexInButton.setIcon(UI.PixmapCache.getIcon("2downarrow")) |
196 self.hexOutButton.setIcon(UI.PixmapCache.getIcon("2uparrow")) |
197 self.hexOutButton.setIcon(UI.PixmapCache.getIcon("2uparrow")) |
197 |
198 |
198 self.formatBox.addItem(self.tr("Auto"), 0) |
199 self.formatBox.addItem(self.tr("Auto"), 0) |
199 self.formatBox.addItem(self.tr("Dec"), 10) |
200 self.formatBox.addItem(self.tr("Dec"), 10) |
200 self.formatBox.addItem(self.tr("Hex"), 16) |
201 self.formatBox.addItem(self.tr("Hex"), 16) |
201 self.formatBox.addItem(self.tr("Oct"), 8) |
202 self.formatBox.addItem(self.tr("Oct"), 8) |
202 self.formatBox.addItem(self.tr("Bin"), 2) |
203 self.formatBox.addItem(self.tr("Bin"), 2) |
203 |
204 |
204 self.sizeBox.addItem("8", 8) |
205 self.sizeBox.addItem("8", 8) |
205 self.sizeBox.addItem("16", 16) |
206 self.sizeBox.addItem("16", 16) |
206 self.sizeBox.addItem("32", 32) |
207 self.sizeBox.addItem("32", 32) |
207 self.sizeBox.addItem("64", 64) |
208 self.sizeBox.addItem("64", 64) |
208 |
209 |
209 self.__input = 0 |
210 self.__input = 0 |
210 self.__inputValid = True |
211 self.__inputValid = True |
211 self.__bytes = 1 |
212 self.__bytes = 1 |
212 |
213 |
213 self.__model = BinaryModel(self) |
214 self.__model = BinaryModel(self) |
214 self.binTable.setModel(self.__model) |
215 self.binTable.setModel(self.__model) |
215 self.binTable.horizontalHeader().setSectionResizeMode( |
216 self.binTable.horizontalHeader().setSectionResizeMode( |
216 QHeaderView.ResizeMode.ResizeToContents) |
217 QHeaderView.ResizeMode.ResizeToContents |
|
218 ) |
217 self.__model.setBitsAndValue(self.__bytes * 8, self.__input) |
219 self.__model.setBitsAndValue(self.__bytes * 8, self.__input) |
218 self.__model.dataChanged.connect(self.__binModelDataChanged) |
220 self.__model.dataChanged.connect(self.__binModelDataChanged) |
219 |
221 |
220 def __formatNumbers(self, numberFormat): |
222 def __formatNumbers(self, numberFormat): |
221 """ |
223 """ |
222 Private method to format the various number inputs. |
224 Private method to format the various number inputs. |
223 |
225 |
224 @param numberFormat number format indicator (integer) |
226 @param numberFormat number format indicator (integer) |
225 """ |
227 """ |
226 self.__block(True) |
228 self.__block(True) |
227 |
229 |
228 self.binEdit.setStyleSheet("") |
230 self.binEdit.setStyleSheet("") |
229 self.octEdit.setStyleSheet("") |
231 self.octEdit.setStyleSheet("") |
230 self.decEdit.setStyleSheet("") |
232 self.decEdit.setStyleSheet("") |
231 self.hexEdit.setStyleSheet("") |
233 self.hexEdit.setStyleSheet("") |
232 |
234 |
233 # determine byte count |
235 # determine byte count |
234 byteCount = 8 |
236 byteCount = 8 |
235 tmp = self.__input |
237 tmp = self.__input |
236 for _ in range(8): |
238 for _ in range(8): |
237 c = (tmp & 0xff00000000000000) >> 7 * 8 |
239 c = (tmp & 0xFF00000000000000) >> 7 * 8 |
238 if c != 0 and self.__input >= 0: |
240 if c != 0 and self.__input >= 0: |
239 break |
241 break |
240 if c != 0xff and self.__input < 0: |
242 if c != 0xFF and self.__input < 0: |
241 break |
243 break |
242 tmp <<= 8 |
244 tmp <<= 8 |
243 byteCount -= 1 |
245 byteCount -= 1 |
244 if byteCount == 0: |
246 if byteCount == 0: |
245 byteCount = 1 |
247 byteCount = 1 |
246 self.__bytes = byteCount |
248 self.__bytes = byteCount |
247 |
249 |
248 bytesIn = self.sizeBox.itemData(self.sizeBox.currentIndex()) // 8 |
250 bytesIn = self.sizeBox.itemData(self.sizeBox.currentIndex()) // 8 |
249 if bytesIn and byteCount > bytesIn: |
251 if bytesIn and byteCount > bytesIn: |
250 self.sizeBox.setStyleSheet(self.__badNumberSheet) |
252 self.sizeBox.setStyleSheet(self.__badNumberSheet) |
251 else: |
253 else: |
252 self.sizeBox.setStyleSheet("") |
254 self.sizeBox.setStyleSheet("") |
253 |
255 |
254 # octal |
256 # octal |
255 if numberFormat != 8: |
257 if numberFormat != 8: |
256 self.octEdit.setText("{0:0{1}o}".format(self.__input, bytesIn * 3)) |
258 self.octEdit.setText("{0:0{1}o}".format(self.__input, bytesIn * 3)) |
257 |
259 |
258 # decimal |
260 # decimal |
259 if numberFormat != 10: |
261 if numberFormat != 10: |
260 self.decEdit.setText("{0:d}".format(self.__input)) |
262 self.decEdit.setText("{0:d}".format(self.__input)) |
261 |
263 |
262 # hexadecimal |
264 # hexadecimal |
263 if numberFormat != 16: |
265 if numberFormat != 16: |
264 self.hexEdit.setText("{0:0{1}x}".format(self.__input, bytesIn * 2)) |
266 self.hexEdit.setText("{0:0{1}x}".format(self.__input, bytesIn * 2)) |
265 |
267 |
266 # octal |
268 # octal |
267 if numberFormat != 8: |
269 if numberFormat != 8: |
268 self.octEdit.setText("{0:0{1}o}".format(self.__input, bytesIn * 3)) |
270 self.octEdit.setText("{0:0{1}o}".format(self.__input, bytesIn * 3)) |
269 |
271 |
270 # binary |
272 # binary |
271 if numberFormat != 2: |
273 if numberFormat != 2: |
272 num = "{0:0{1}b}".format(self.__input, bytesIn * 8) |
274 num = "{0:0{1}b}".format(self.__input, bytesIn * 8) |
273 self.binEdit.setText(num) |
275 self.binEdit.setText(num) |
274 |
276 |
275 self.__model.setBitsAndValue(len(self.binEdit.text()), self.__input) |
277 self.__model.setBitsAndValue(len(self.binEdit.text()), self.__input) |
276 |
278 |
277 self.__block(False) |
279 self.__block(False) |
278 |
280 |
279 def __block(self, b): |
281 def __block(self, b): |
280 """ |
282 """ |
281 Private slot to block some signals. |
283 Private slot to block some signals. |
282 |
284 |
283 @param b flah indicating the blocking state (boolean) |
285 @param b flah indicating the blocking state (boolean) |
284 """ |
286 """ |
285 self.hexEdit.blockSignals(b) |
287 self.hexEdit.blockSignals(b) |
286 self.decEdit.blockSignals(b) |
288 self.decEdit.blockSignals(b) |
287 self.octEdit.blockSignals(b) |
289 self.octEdit.blockSignals(b) |
288 self.binEdit.blockSignals(b) |
290 self.binEdit.blockSignals(b) |
289 self.binTable.blockSignals(b) |
291 self.binTable.blockSignals(b) |
290 |
292 |
291 @pyqtSlot(int) |
293 @pyqtSlot(int) |
292 def on_sizeBox_valueChanged(self, value): |
294 def on_sizeBox_valueChanged(self, value): |
293 """ |
295 """ |
294 Private slot handling a change of the bit size. |
296 Private slot handling a change of the bit size. |
295 |
297 |
296 @param value selected bit size (integer) |
298 @param value selected bit size (integer) |
297 """ |
299 """ |
298 self.__formatNumbers(10) |
300 self.__formatNumbers(10) |
299 |
301 |
300 @pyqtSlot() |
302 @pyqtSlot() |
301 def on_byteOrderButton_clicked(self): |
303 def on_byteOrderButton_clicked(self): |
302 """ |
304 """ |
303 Private slot to swap the byte order. |
305 Private slot to swap the byte order. |
304 """ |
306 """ |
305 bytesIn = self.sizeBox.itemData(self.sizeBox.currentIndex()) // 8 |
307 bytesIn = self.sizeBox.itemData(self.sizeBox.currentIndex()) // 8 |
306 if bytesIn == 0: |
308 if bytesIn == 0: |
307 bytesIn = self.__bytes |
309 bytesIn = self.__bytes |
308 |
310 |
309 tmp1 = self.__input |
311 tmp1 = self.__input |
310 tmp2 = 0 |
312 tmp2 = 0 |
311 for _ in range(bytesIn): |
313 for _ in range(bytesIn): |
312 tmp2 <<= 8 |
314 tmp2 <<= 8 |
313 tmp2 |= tmp1 & 0xff |
315 tmp2 |= tmp1 & 0xFF |
314 tmp1 >>= 8 |
316 tmp1 >>= 8 |
315 |
317 |
316 self.__input = tmp2 |
318 self.__input = tmp2 |
317 self.__formatNumbers(0) |
319 self.__formatNumbers(0) |
318 |
320 |
319 @pyqtSlot() |
321 @pyqtSlot() |
320 def on_binInButton_clicked(self): |
322 def on_binInButton_clicked(self): |
321 """ |
323 """ |
322 Private slot to retrieve a binary number from the current editor. |
324 Private slot to retrieve a binary number from the current editor. |
323 """ |
325 """ |
324 number = ericApp().getObject("ViewManager").getNumber() |
326 number = ericApp().getObject("ViewManager").getNumber() |
325 if number == "": |
327 if number == "": |
326 return |
328 return |
327 |
329 |
328 self.binEdit.setText(number) |
330 self.binEdit.setText(number) |
329 self.binEdit.setFocus() |
331 self.binEdit.setFocus() |
330 |
332 |
331 @pyqtSlot(str) |
333 @pyqtSlot(str) |
332 def on_binEdit_textChanged(self, txt): |
334 def on_binEdit_textChanged(self, txt): |
333 """ |
335 """ |
334 Private slot to handle input of a binary number. |
336 Private slot to handle input of a binary number. |
335 |
337 |
336 @param txt text entered (string) |
338 @param txt text entered (string) |
337 """ |
339 """ |
338 try: |
340 try: |
339 self.__input = int(txt, 2) |
341 self.__input = int(txt, 2) |
340 self.__inputValid = True |
342 self.__inputValid = True |
341 except ValueError: |
343 except ValueError: |
342 self.__inputValid = False |
344 self.__inputValid = False |
343 |
345 |
344 if self.__inputValid: |
346 if self.__inputValid: |
345 self.__formatNumbers(2) |
347 self.__formatNumbers(2) |
346 else: |
348 else: |
347 self.binEdit.setStyleSheet(self.__badNumberSheet) |
349 self.binEdit.setStyleSheet(self.__badNumberSheet) |
348 |
350 |
349 @pyqtSlot() |
351 @pyqtSlot() |
350 def on_binOutButton_clicked(self): |
352 def on_binOutButton_clicked(self): |
351 """ |
353 """ |
352 Private slot to send a binary number. |
354 Private slot to send a binary number. |
353 """ |
355 """ |
354 self.insertNumber.emit(self.binEdit.text()) |
356 self.insertNumber.emit(self.binEdit.text()) |
355 |
357 |
356 def __binModelDataChanged(self, start, end): |
358 def __binModelDataChanged(self, start, end): |
357 """ |
359 """ |
358 Private slot to handle a change of the binary model value by the user. |
360 Private slot to handle a change of the binary model value by the user. |
359 |
361 |
360 @param start start index (QModelIndex) |
362 @param start start index (QModelIndex) |
361 @param end end index (QModelIndex) |
363 @param end end index (QModelIndex) |
362 """ |
364 """ |
363 val = self.__model.getValue() |
365 val = self.__model.getValue() |
364 bytesIn = self.sizeBox.itemData(self.sizeBox.currentIndex()) // 8 |
366 bytesIn = self.sizeBox.itemData(self.sizeBox.currentIndex()) // 8 |
365 num = "{0:0{1}b}".format(val, bytesIn * 8) |
367 num = "{0:0{1}b}".format(val, bytesIn * 8) |
366 self.binEdit.setText(num) |
368 self.binEdit.setText(num) |
367 |
369 |
368 @pyqtSlot() |
370 @pyqtSlot() |
369 def on_octInButton_clicked(self): |
371 def on_octInButton_clicked(self): |
370 """ |
372 """ |
371 Private slot to retrieve an octal number from the current editor. |
373 Private slot to retrieve an octal number from the current editor. |
372 """ |
374 """ |
373 number = ericApp().getObject("ViewManager").getNumber() |
375 number = ericApp().getObject("ViewManager").getNumber() |
374 if number == "": |
376 if number == "": |
375 return |
377 return |
376 |
378 |
377 self.octEdit.setText(number) |
379 self.octEdit.setText(number) |
378 self.octEdit.setFocus() |
380 self.octEdit.setFocus() |
379 |
381 |
380 @pyqtSlot(str) |
382 @pyqtSlot(str) |
381 def on_octEdit_textChanged(self, txt): |
383 def on_octEdit_textChanged(self, txt): |
382 """ |
384 """ |
383 Private slot to handle input of an octal number. |
385 Private slot to handle input of an octal number. |
384 |
386 |
385 @param txt text entered (string) |
387 @param txt text entered (string) |
386 """ |
388 """ |
387 try: |
389 try: |
388 self.__input = int(txt, 8) |
390 self.__input = int(txt, 8) |
389 self.__inputValid = True |
391 self.__inputValid = True |
390 except ValueError: |
392 except ValueError: |
391 self.__inputValid = False |
393 self.__inputValid = False |
392 |
394 |
393 if self.__inputValid: |
395 if self.__inputValid: |
394 self.__formatNumbers(8) |
396 self.__formatNumbers(8) |
395 else: |
397 else: |
396 self.octEdit.setStyleSheet(self.__badNumberSheet) |
398 self.octEdit.setStyleSheet(self.__badNumberSheet) |
397 |
399 |
398 @pyqtSlot() |
400 @pyqtSlot() |
399 def on_octOutButton_clicked(self): |
401 def on_octOutButton_clicked(self): |
400 """ |
402 """ |
401 Private slot to send an octal number. |
403 Private slot to send an octal number. |
402 """ |
404 """ |
403 self.insertNumber.emit(self.octEdit.text()) |
405 self.insertNumber.emit(self.octEdit.text()) |
404 |
406 |
405 @pyqtSlot() |
407 @pyqtSlot() |
406 def on_decInButton_clicked(self): |
408 def on_decInButton_clicked(self): |
407 """ |
409 """ |
408 Private slot to retrieve a decimal number from the current editor. |
410 Private slot to retrieve a decimal number from the current editor. |
409 """ |
411 """ |
410 number = ericApp().getObject("ViewManager").getNumber() |
412 number = ericApp().getObject("ViewManager").getNumber() |
411 if number == "": |
413 if number == "": |
412 return |
414 return |
413 |
415 |
414 self.decEdit.setText(number) |
416 self.decEdit.setText(number) |
415 self.decEdit.setFocus() |
417 self.decEdit.setFocus() |
416 |
418 |
417 @pyqtSlot(str) |
419 @pyqtSlot(str) |
418 def on_decEdit_textChanged(self, txt): |
420 def on_decEdit_textChanged(self, txt): |
419 """ |
421 """ |
420 Private slot to handle input of a decimal number. |
422 Private slot to handle input of a decimal number. |
421 |
423 |
422 @param txt text entered (string) |
424 @param txt text entered (string) |
423 """ |
425 """ |
424 try: |
426 try: |
425 self.__input = int(txt, 10) |
427 self.__input = int(txt, 10) |
426 self.__inputValid = True |
428 self.__inputValid = True |
427 except ValueError: |
429 except ValueError: |
428 self.__inputValid = False |
430 self.__inputValid = False |
429 |
431 |
430 if self.__inputValid: |
432 if self.__inputValid: |
431 self.__formatNumbers(10) |
433 self.__formatNumbers(10) |
432 else: |
434 else: |
433 self.decEdit.setStyleSheet(self.__badNumberSheet) |
435 self.decEdit.setStyleSheet(self.__badNumberSheet) |
434 |
436 |
435 @pyqtSlot() |
437 @pyqtSlot() |
436 def on_decOutButton_clicked(self): |
438 def on_decOutButton_clicked(self): |
437 """ |
439 """ |
438 Private slot to send a decimal number. |
440 Private slot to send a decimal number. |
439 """ |
441 """ |
440 self.insertNumber.emit(self.decEdit.text()) |
442 self.insertNumber.emit(self.decEdit.text()) |
441 |
443 |
442 @pyqtSlot() |
444 @pyqtSlot() |
443 def on_hexInButton_clicked(self): |
445 def on_hexInButton_clicked(self): |
444 """ |
446 """ |
445 Private slot to retrieve a hexadecimal number from the current editor. |
447 Private slot to retrieve a hexadecimal number from the current editor. |
446 """ |
448 """ |
447 number = ericApp().getObject("ViewManager").getNumber() |
449 number = ericApp().getObject("ViewManager").getNumber() |
448 if number == "": |
450 if number == "": |
449 return |
451 return |
450 |
452 |
451 self.hexEdit.setText(number) |
453 self.hexEdit.setText(number) |
452 self.hexEdit.setFocus() |
454 self.hexEdit.setFocus() |
453 |
455 |
454 @pyqtSlot(str) |
456 @pyqtSlot(str) |
455 def on_hexEdit_textChanged(self, txt): |
457 def on_hexEdit_textChanged(self, txt): |
456 """ |
458 """ |
457 Private slot to handle input of a hexadecimal number. |
459 Private slot to handle input of a hexadecimal number. |
458 |
460 |
459 @param txt text entered (string) |
461 @param txt text entered (string) |
460 """ |
462 """ |
461 try: |
463 try: |
462 self.__input = int(txt, 16) |
464 self.__input = int(txt, 16) |
463 self.__inputValid = True |
465 self.__inputValid = True |
464 except ValueError: |
466 except ValueError: |
465 self.__inputValid = False |
467 self.__inputValid = False |
466 |
468 |
467 if self.__inputValid: |
469 if self.__inputValid: |
468 self.__formatNumbers(16) |
470 self.__formatNumbers(16) |
469 else: |
471 else: |
470 self.hexEdit.setStyleSheet(self.__badNumberSheet) |
472 self.hexEdit.setStyleSheet(self.__badNumberSheet) |
471 |
473 |
472 @pyqtSlot() |
474 @pyqtSlot() |
473 def on_hexOutButton_clicked(self): |
475 def on_hexOutButton_clicked(self): |
474 """ |
476 """ |
475 Private slot to send a hexadecimal number. |
477 Private slot to send a hexadecimal number. |
476 """ |
478 """ |