Fixing a condensed view bug where you select units when no category is set
[gonvert] / src / gonvert_qt.py
index 946ef6a..dd4845c 100755 (executable)
@@ -151,22 +151,19 @@ class Gonvert(object):
                                self._catWindow.window.show()
                        self._mainWindow = self._catWindow
 
-               if self._recent:
-                       self._mainWindow.select_category(self._recent[-1][0])
-
                return self._mainWindow
 
        def search_units(self):
                jumpWindow = QuickJump(None, self)
                jumpWindow.window.destroyed.connect(lambda obj = None: self._on_child_close("_jumpWindow", obj))
-               self._close_windows()
+               self._fake_close_windows()
                self._jumpWindow = jumpWindow
                return self._jumpWindow
 
        def show_recent(self):
                recentWindow = Recent(None, self)
                recentWindow.window.destroyed.connect(lambda obj = None: self._on_child_close("_recentWindow", obj))
-               self._close_windows()
+               self._fake_close_windows()
                self._recentWindow = recentWindow
                return self._recentWindow
 
@@ -288,9 +285,21 @@ class Gonvert(object):
                if self._recentWindow is not None:
                        yield self._recentWindow
 
+       def _fake_close_windows(self):
+               if self._catWindow is not None:
+                       self._catWindow.hide()
+               if self._quickWindow is not None:
+                       self._quickWindow.hide()
+               if self._jumpWindow is not None:
+                       self._jumpWindow.close()
+                       self._jumpWindow = None
+               if self._recentWindow is not None:
+                       self._recentWindow.close()
+                       self._recentWindow = None
+
        def _close_windows(self):
-               for window in self._walk_children():
-                       window.close()
+               for child in self._walk_children():
+                       child.close()
                self._catWindow = None
                self._quickWindow = None
                self._jumpWindow = None
@@ -315,6 +324,8 @@ class Gonvert(object):
        @misc_utils.log_exception(_moduleLogger)
        def _on_condensed_start(self, checked = False):
                self.request_category()
+               if self._recent:
+                       self._mainWindow.select_category(self._recent[-1][0])
 
        @misc_utils.log_exception(_moduleLogger)
        def _on_jump_start(self, checked = False):
@@ -561,7 +572,7 @@ class QuickConvert(object):
 
                self._categoryView = QtGui.QTreeWidget()
                self._categoryView.setHeaderLabels(["Categories"])
-               self._categoryView.setHeaderHidden(True)
+               self._categoryView.setHeaderHidden(False)
                if not IS_MAEMO:
                        self._categoryView.setAlternatingRowColors(True)
                self._categoryView.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
@@ -573,8 +584,8 @@ class QuickConvert(object):
                self._categorySelection.selectionChanged.connect(self._on_category_selection_changed)
 
                self._inputView = QtGui.QTreeWidget()
-               self._inputView.setHeaderLabels(["Input", "Name"])
-               self._inputView.setHeaderHidden(True)
+               self._inputView.setHeaderLabels(["From", "Name"])
+               self._inputView.setHeaderHidden(False)
                self._inputView.header().hideSection(1)
                if not IS_MAEMO:
                        self._inputView.setAlternatingRowColors(True)
@@ -584,8 +595,8 @@ class QuickConvert(object):
                self._inputSelection.selectionChanged.connect(self._on_input_selection_changed)
 
                self._outputView = QtGui.QTreeWidget()
-               self._outputView.setHeaderLabels(["Output", "Name"])
-               self._outputView.setHeaderHidden(True)
+               self._outputView.setHeaderLabels(["To", "Name"])
+               self._outputView.setHeaderHidden(False)
                self._outputView.header().hideSection(1)
                if not IS_MAEMO:
                        self._outputView.setAlternatingRowColors(True)
@@ -624,6 +635,7 @@ class QuickConvert(object):
                self._chooseUnitFavoritesAction = QtGui.QAction(None)
                self._chooseUnitFavoritesAction.setText("Select Units")
                self._chooseUnitFavoritesAction.triggered.connect(self._on_choose_unit_favorites)
+               self._chooseUnitFavoritesAction.setEnabled(False)
 
                self._app.showFavoritesAction.toggled.connect(self._on_show_favorites)
 
@@ -690,9 +702,13 @@ class QuickConvert(object):
 
        def select_category(self, categoryName):
                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))
@@ -1131,11 +1147,13 @@ class CategoryWindow(object):
 
        def close(self):
                for child in self.walk_children():
+                       child.window.destroyed.disconnect(self._on_child_close)
                        child.close()
                self._window.close()
 
        def select_category(self, categoryName):
                for child in self.walk_children():
+                       child.window.destroyed.disconnect(self._on_child_close)
                        child.close()
                self._unitWindow = UnitWindow(self._window, categoryName, self._app)
                self._unitWindow.window.destroyed.connect(self._on_child_close)
@@ -1382,8 +1400,8 @@ class UnitModel(QtCore.QAbstractItemModel):
                        self._sortSettings is not None and
                        self._sortSettings[0]  in [UnitData.VALUE_COLUMN_0, UnitData.VALUE_COLUMN_1]
                ):
+                       # Sort takes care of marking everything as changed
                        self.sort(*self._sortSettings)
-                       self._all_changed()
                else:
                        self._values_changed()
 
@@ -1457,10 +1475,10 @@ class UnitWindow(object):
                viewHeader.setStretchLastSection(False)
 
                # Trying to make things faster by locking in the initial size of the immutable columns
-               nameSize = viewHeader.sectionSize(UnitData.NAME_COLUMN)
+               nameSize = min(viewHeader.sectionSize(UnitData.NAME_COLUMN), 125)
                viewHeader.setResizeMode(UnitData.NAME_COLUMN, QtGui.QHeaderView.Fixed)
                viewHeader.resizeSection(UnitData.NAME_COLUMN, nameSize)
-               unitSize = viewHeader.sectionSize(UnitData.UNIT_COLUMN)
+               unitSize = min(viewHeader.sectionSize(UnitData.UNIT_COLUMN), 125)
                viewHeader.setResizeMode(UnitData.UNIT_COLUMN, QtGui.QHeaderView.Fixed)
                viewHeader.resizeSection(UnitData.UNIT_COLUMN, unitSize)
 
@@ -1486,7 +1504,6 @@ class UnitWindow(object):
                        self.select_unit(defaultUnitName)
                else:
                        self._select_unit(0)
-               self._unitsModel.sort(UnitData.NAME_COLUMN)
 
                self._sortActionGroup = QtGui.QActionGroup(None)
                self._sortByNameAction = QtGui.QAction(self._sortActionGroup)
@@ -1505,7 +1522,10 @@ class UnitWindow(object):
                self._sortByUnitAction.setToolTip("Sort the units by unit")
                self._sortByUnitAction.setCheckable(True)
 
-               self._sortByValueAction.setChecked(True)
+               if UnitData.NAME_COLUMN != 0:
+                       # By default it sorts by he first column (name)
+                       self._unitsModel.sort(UnitData.NAME_COLUMN)
+               self._sortByNameAction.setChecked(True)
 
                self._chooseFavoritesAction = QtGui.QAction(None)
                self._chooseFavoritesAction.setText("Select Favorites")
@@ -1595,6 +1615,7 @@ class UnitWindow(object):
 
        def close(self):
                for child in self.walk_children():
+                       child.window.destroyed.disconnect(self._on_child_close)
                        child.close()
                self._window.close()