Moving the webpage to the wiki
[gonvert] / src / gonvert_qt.py
index 38e064c..02b64c9 100755 (executable)
@@ -160,7 +160,6 @@ class Gonvert(object):
                        self._mainWindow.select_category(self._recent[-1][0])
 
        def request_category(self):
-
                if self._condensedAction.isChecked():
                        if self._catWindow is not None:
                                self._catWindow.hide()
@@ -1575,6 +1574,10 @@ class UnitWindow(object):
                self._selectedUnitValue.textEdited.connect(self._on_value_edited)
                maeqt.mark_numbers_preferred(self._selectedUnitValue)
                self._selectedUnitSymbol = QtGui.QLabel()
+               self._updateDelayTimer = QtCore.QTimer()
+               self._updateDelayTimer.setInterval(100)
+               self._updateDelayTimer.setSingleShot(True)
+               self._updateDelayTimer.timeout.connect(self._on_value_edited_delayed)
 
                self._selectedUnitLayout = QtGui.QHBoxLayout()
                self._selectedUnitLayout.addWidget(self._selectedUnitName)
@@ -1605,7 +1608,7 @@ class UnitWindow(object):
                viewHeader.setStretchLastSection(False)
 
                # Trying to make things faster by locking in the initial size of the immutable columns
-               nameSize = min(viewHeader.sectionSize(UnitData.NAME_COLUMN), 150)
+               nameSize = min(viewHeader.sectionSize(UnitData.NAME_COLUMN), 300)
                viewHeader.setResizeMode(UnitData.NAME_COLUMN, QtGui.QHeaderView.Fixed)
                viewHeader.resizeSection(UnitData.NAME_COLUMN, nameSize)
                unitSize = min(viewHeader.sectionSize(UnitData.UNIT_COLUMN), 150)
@@ -1754,11 +1757,21 @@ class UnitWindow(object):
                if self._favoritesWindow is not None:
                        yield self._favoritesWindow
 
+       def _select_unit(self, index):
+               unit = self._unitsModel.get_unit(index)
+               self._selectedUnitName.setText(unit.name)
+               self._selectedUnitValue.setText(str(unit.value))
+               self._selectedUnitSymbol.setText(unit.unit)
+
+               self._selectedIndex = index
+               self._app.add_recent(self._categoryName, self._unitsModel.get_unit(index).name)
+
        def _update_favorites(self, force = False):
                if self._app.showFavoritesAction.isChecked():
                        unitNames = list(self._unitsModel.get_unit_names())
+                       hiddenUnits = self._app.get_hidden_units(self._categoryName)
                        for i, unitName in enumerate(unitNames):
-                               if unitName in self._app.get_hidden_units(self._categoryName):
+                               if unitName in hiddenUnits:
                                        self._unitsView.setRowHidden(i, self._unitsView.rootIndex(), True)
                                else:
                                        self._unitsView.setRowHidden(i, self._unitsView.rootIndex(), False)
@@ -1771,8 +1784,9 @@ class UnitWindow(object):
        def _on_show_favorites(self, checked = True):
                if checked:
                        unitNames = list(self._unitsModel.get_unit_names())
+                       hiddenUnits = self._app.get_hidden_units(self._categoryName)
                        for i, unitName in enumerate(unitNames):
-                               if unitName in self._app.get_hidden_units(self._categoryName):
+                               if unitName in hiddenUnits:
                                        self._unitsView.setRowHidden(i, self._unitsView.rootIndex(), True)
                else:
                        for i in xrange(len(self._unitsModel)):
@@ -1797,11 +1811,33 @@ class UnitWindow(object):
 
        @misc_utils.log_exception(_moduleLogger)
        def _on_previous_unit(self, checked = True):
-               self._select_unit(self._selectedIndex - 1)
+               index = self._selectedIndex - 1
+               unitData = self._unitsModel.get_unit(index)
+               unitName = unitData.name
+
+               if self._app.showFavoritesAction.isChecked():
+                       hiddenUnits = self._app.get_hidden_units(self._categoryName)
+                       while unitName in hiddenUnits:
+                               index -= 1
+                               unitData = self._unitsModel.get_unit(index)
+                               unitName = unitData.name
+
+               self.select_unit(unitName)
 
        @misc_utils.log_exception(_moduleLogger)
        def _on_next_unit(self, checked = True):
-               self._select_unit(self._selectedIndex + 1)
+               index = self._selectedIndex + 1
+               unitData = self._unitsModel.get_unit(index)
+               unitName = unitData.name
+
+               if self._app.showFavoritesAction.isChecked():
+                       hiddenUnits = self._app.get_hidden_units(self._categoryName)
+                       while unitName in hiddenUnits:
+                               index += 1
+                               unitData = self._unitsModel.get_unit(index)
+                               unitName = unitData.name
+
+               self.select_unit(unitName)
 
        @misc_utils.log_exception(_moduleLogger)
        def _on_close_window(self, checked = True):
@@ -1825,20 +1861,16 @@ class UnitWindow(object):
 
        @misc_utils.log_exception(_moduleLogger)
        def _on_value_edited(self, *args):
+               if not self._updateDelayTimer.isActive():
+                       self._updateDelayTimer.start()
+
+       @misc_utils.log_exception(_moduleLogger)
+       def _on_value_edited_delayed(self, *args):
                userInput = str(self._selectedUnitValue.text())
                orderChanged = self._unitsModel.update_values(self._selectedIndex, userInput)
                if orderChanged:
                        self._update_favorites()
 
-       def _select_unit(self, index):
-               unit = self._unitsModel.get_unit(index)
-               self._selectedUnitName.setText(unit.name)
-               self._selectedUnitValue.setText(str(unit.value))
-               self._selectedUnitSymbol.setText(unit.unit)
-
-               self._selectedIndex = index
-               self._app.add_recent(self._categoryName, self._unitsModel.get_unit(index).name)
-
 
 def run_gonvert():
        app = QtGui.QApplication([])