+ def set_fullscreen(self, isFullscreen):
+ if isFullscreen:
+ self._window.showFullScreen()
+ else:
+ self._window.showNormal()
+
+ def select_category(self, categoryName):
+ self._select_category(categoryName)
+
+ i = unit_data.UNIT_CATEGORIES.index(categoryName)
+ rootIndex = self._categoryView.rootIndex()
+ currentIndex = self._categoryView.model().index(i, 0, rootIndex)
+ self._categoryView.scrollTo(currentIndex)
+ self._categoryView.setItemSelected(self._categoryView.topLevelItem(i), True)
+
+ return self
+
+ def select_unit(self, name):
+ self.select_input(name)
+ return self
+
+ def select_input(self, name):
+ self._select_input(name)
+
+ i = self._unitNames.index(name)
+ rootIndex = self._inputView.rootIndex()
+ currentIndex = self._inputView.model().index(i, 0, rootIndex)
+ self._inputView.scrollTo(currentIndex)
+ self._inputView.setItemSelected(self._inputView.topLevelItem(i), True)
+
+ def select_output(self, name):
+ self._select_output(name)
+
+ i = self._unitNames.index(name)
+ rootIndex = self._outputView.rootIndex()
+ currentIndex = self._outputView.model().index(i, 0, rootIndex)
+ self._outputView.scrollTo(currentIndex)
+ self._outputView.setItemSelected(self._outputView.topLevelItem(i), True)
+
+ def _select_category(self, categoryName):
+ self._inputUnitName = ""
+ self._outputUnitName = ""
+ self._inputUnitValue.setText("")
+ self._inputUnitSymbol.setText("")
+ self._inputView.clear()
+ self._outputUnitValue.setText("")
+ self._outputUnitSymbol.setText("")
+ self._outputView.clear()
+ self._categoryName = categoryName
+ self._chooseUnitFavoritesAction.setEnabled(True)
+
+ unitData = unit_data.UNIT_DESCRIPTIONS[categoryName]
+ self._unitNames = list(unit_data.get_units(categoryName))
+ self._unitNames.sort()
+ for key in self._unitNames:
+ conversion, unit, description = unitData[key]
+ unit = key
+
+ twi = QtGui.QTreeWidgetItem(self._inputView)
+ twi.setText(0, unit)
+ twi.setText(1, key)
+
+ twi = QtGui.QTreeWidgetItem(self._outputView)
+ twi.setText(0, unit)
+ twi.setText(1, key)
+
+ defaultInputUnitName = self._app.get_recent_unit(categoryName)
+ if defaultInputUnitName:
+ self.select_input(defaultInputUnitName)
+ defaultOutputUnitName = self._app.get_recent_unit(categoryName, 1)
+ assert defaultOutputUnitName
+ self.select_output(defaultOutputUnitName)
+
+ def _select_input(self, name):
+ self._app.add_recent(self._categoryName, name)
+ self._inputUnitName = name
+
+ unitData = unit_data.UNIT_DESCRIPTIONS[self._categoryName]
+ conversion, unit, description = unitData[name]
+
+ self._inputUnitSymbol.setText(unit if unit else name)
+
+ if "" not in [self._categoryName, self._inputUnitName, self._outputUnitName]:
+ self._update_output()
+
+ def _select_output(self, name):
+ # Add the output to recent but don't make things weird by making it the most recent
+ self._app.add_recent(self._categoryName, name)
+ self._app.add_recent(self._categoryName, self._inputUnitName)
+ self._outputUnitName = name
+
+ unitData = unit_data.UNIT_DESCRIPTIONS[self._categoryName]
+ conversion, unit, description = unitData[name]
+
+ self._outputUnitSymbol.setText(unit if unit else name)
+
+ if "" not in [self._categoryName, self._inputUnitName, self._outputUnitName]:
+ self._update_output()
+
+ def _sanitize_value(self, userEntry):
+ if self._categoryName == "Computer Numbers":
+ if userEntry == '':
+ value = '0'
+ else:
+ value = userEntry
+ else:
+ if userEntry == '':
+ value = 0.0
+ else:
+ value = float(userEntry)
+ return value
+
+ def _update_output(self):
+ assert self._categoryName
+ assert self._inputUnitName
+ assert self._outputUnitName
+
+ userInput = str(self._inputUnitValue.text())
+ value = self._sanitize_value(userInput)
+
+ unitData = unit_data.UNIT_DESCRIPTIONS[self._categoryName]
+ inputConversion, _, _ = unitData[self._inputUnitName]
+ outputConversion, _, _ = unitData[self._outputUnitName]
+
+ func, arg = inputConversion
+ base = func.to_base(value, arg)
+
+ func, arg = outputConversion
+ newValue = func.from_base(base, arg)
+ self._outputUnitValue.setText(str(newValue))
+
+ def _update_input(self):
+ assert self._categoryName
+ assert self._inputUnitName
+ assert self._outputUnitName
+
+ userOutput = str(self._outputUnitValue.text())
+ value = self._sanitize_value(userOutput)
+
+ unitData = unit_data.UNIT_DESCRIPTIONS[self._categoryName]
+ inputConversion, _, _ = unitData[self._inputUnitName]
+ outputConversion, _, _ = unitData[self._outputUnitName]
+
+ func, arg = outputConversion
+ base = func.to_base(value, arg)
+
+ func, arg = inputConversion
+ newValue = func.from_base(base, arg)
+ self._inputUnitValue.setText(str(newValue))
+
+ def _update_favorites(self):
+ if self._app.showFavoritesAction.isChecked():
+ assert self._categoryView.topLevelItemCount() == len(unit_data.UNIT_CATEGORIES)
+ for i, catName in enumerate(unit_data.UNIT_CATEGORIES):
+ if catName in self._app.hiddenCategories:
+ self._categoryView.setRowHidden(i, self._categoryView.rootIndex(), True)
+ else:
+ self._categoryView.setRowHidden(i, self._categoryView.rootIndex(), False)
+
+ for i, unitName in enumerate(self._unitNames):
+ if unitName in self._app.get_hidden_units(self._categoryName):
+ self._inputView.setRowHidden(i, self._inputView.rootIndex(), True)
+ self._outputView.setRowHidden(i, self._outputView.rootIndex(), True)
+ else:
+ self._inputView.setRowHidden(i, self._inputView.rootIndex(), False)
+ self._outputView.setRowHidden(i, self._outputView.rootIndex(), False)
+ else:
+ for i in xrange(self._categoryView.topLevelItemCount()):
+ self._categoryView.setRowHidden(i, self._categoryView.rootIndex(), False)
+
+ for i in xrange(len(self._unitNames)):
+ self._inputView.setRowHidden(i, self._inputView.rootIndex(), False)
+ self._outputView.setRowHidden(i, self._outputView.rootIndex(), False)