Fixing a bug where the wrong unit would show up when doing some conversion
[gonvert] / src / gonvert_qt.py
index 904fb17..ed8b8bf 100755 (executable)
@@ -460,8 +460,6 @@ class Recent(object):
 
 class FavoriteCategoriesWindow(object):
 
-       # @todo Add All, None, and Invert actions
-
        def __init__(self, parent, app, source, hidden):
                self._app = app
                self._source = list(source)
@@ -473,16 +471,31 @@ class FavoriteCategoriesWindow(object):
                self._categories.setAlternatingRowColors(True)
                self._categories.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
                self._categories.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
+               self._childWidgets = []
                for catName in self._source:
                        twi = QtGui.QTreeWidgetItem(self._categories)
                        twi.setText(0, catName)
+                       self._childWidgets.append(twi)
                        if catName not in self._hidden:
                                self._categories.setItemSelected(twi, True)
                self._selection = self._categories.selectionModel()
                self._selection.selectionChanged.connect(self._on_selection_changed)
 
+               self._allButton = QtGui.QPushButton("All")
+               self._allButton.clicked.connect(self._on_select_all)
+               self._invertButton = QtGui.QPushButton("Invert")
+               self._invertButton.clicked.connect(self._on_invert_selection)
+               self._noneButton = QtGui.QPushButton("None")
+               self._noneButton.clicked.connect(self._on_select_none)
+
+               self._buttonLayout = QtGui.QHBoxLayout()
+               self._buttonLayout.addWidget(self._allButton)
+               self._buttonLayout.addWidget(self._invertButton)
+               self._buttonLayout.addWidget(self._noneButton)
+
                self._layout = QtGui.QVBoxLayout()
                self._layout.addWidget(self._categories)
+               self._layout.addLayout(self._buttonLayout)
 
                centralWidget = QtGui.QWidget()
                centralWidget.setLayout(self._layout)
@@ -526,6 +539,22 @@ class FavoriteCategoriesWindow(object):
                        self._window.showNormal()
 
        @misc_utils.log_exception(_moduleLogger)
+       def _on_select_all(self, checked = False):
+               for child in self._childWidgets:
+                       self._categories.setItemSelected(child, True)
+
+       @misc_utils.log_exception(_moduleLogger)
+       def _on_invert_selection(self, checked = False):
+               for child in self._childWidgets:
+                       isSelected = self._categories.isItemSelected(child)
+                       self._categories.setItemSelected(child, not isSelected)
+
+       @misc_utils.log_exception(_moduleLogger)
+       def _on_select_none(self, checked = False):
+               for child in self._childWidgets:
+                       self._categories.setItemSelected(child, False)
+
+       @misc_utils.log_exception(_moduleLogger)
        def _on_selection_changed(self, selected, deselected):
                self._hidden.clear()
                selectedNames = set(
@@ -622,7 +651,11 @@ class CategoryWindow(object):
                        child.close()
                self._unitWindow = UnitWindow(self._window, categoryName, self._app)
                self._unitWindow.window.destroyed.connect(self._on_child_close)
-               # @todo Add scroll to category
+
+               i = unit_data.UNIT_CATEGORIES.index(categoryName)
+               rootIndex = self._categories.rootIndex()
+               currentIndex = self._categories.model().index(i, 0, rootIndex)
+               self._categories.scrollTo(currentIndex)
                return self._unitWindow
 
        def set_fullscreen(self, isFullscreen):
@@ -1011,6 +1044,8 @@ class UnitWindow(object):
                return self._window
 
        def close(self):
+               for child in self.walk_children():
+                       child.close()
                self._window.close()
 
        def set_fullscreen(self, isFullscreen):
@@ -1099,6 +1134,7 @@ class UnitWindow(object):
        def _on_value_edited(self, *args):
                userInput = self._selectedUnitValue.text()
                self._unitsModel.update_values(self._selectedIndex, str(userInput))
+               self._update_favorites()
 
        def _select_unit(self, index):
                unit = self._unitsModel.get_unit(index)