[PATCH 1/2] Sort available layouts alphabetically
Vratislav Podzimek
vpodzime at redhat.com
Tue Jul 10 12:40:35 UTC 2012
It's easier to search through the available layouts manually if
they are sorted.
---
pyanaconda/ui/gui/spokes/keyboard.py | 30 ++++++++++++++++++++++++++----
pyanaconda/ui/gui/spokes/keyboard.ui | 17 +++++++++++------
2 files changed, 37 insertions(+), 10 deletions(-)
diff --git a/pyanaconda/ui/gui/spokes/keyboard.py b/pyanaconda/ui/gui/spokes/keyboard.py
index 154a88c..4f390d5 100644
--- a/pyanaconda/ui/gui/spokes/keyboard.py
+++ b/pyanaconda/ui/gui/spokes/keyboard.py
@@ -24,7 +24,7 @@ import gettext
_ = lambda x: gettext.ldgettext("anaconda", x)
N_ = lambda x: x
-from gi.repository import GLib, Gkbd
+from gi.repository import GLib, Gkbd, Gtk
from pyanaconda.ui.gui import UIObject
from pyanaconda.ui.gui.spokes import NormalSpoke
@@ -39,7 +39,8 @@ def _show_layout(column, renderer, model, itr, wrapper):
renderer.set_property("text", value)
class AddLayoutDialog(UIObject):
- builderObjects = ["addLayoutDialog", "newLayoutStore", "newLayoutStoreFilter"]
+ builderObjects = ["addLayoutDialog", "newLayoutStore",
+ "newLayoutStoreFilter", "newLayoutStoreSort"]
mainWidgetName = "addLayoutDialog"
uiFile = "spokes/keyboard.ui"
@@ -66,9 +67,26 @@ class AddLayoutDialog(UIObject):
except ValueError as valerr:
return False
+ def compare_layouts(self, model, itr1, itr2, user_data=None):
+ """
+ We want to sort layouts by their show strings not their names.
+ This function is an instance of GtkTreeIterCompareFunc().
+
+ """
+
+ value1 = model[itr1][0]
+ value2 = model[itr2][0]
+ show_str1 = self._xkl_wrapper.name_to_show_str[value1]
+ show_str2 = self._xkl_wrapper.name_to_show_str[value2]
+
+ if show_str1 < show_str2:
+ return -1
+ elif show_str1 == show_str2:
+ return 0
+ else:
+ return 1
+
def refresh(self):
- self._treeModelFilter = self.builder.get_object("newLayoutStoreFilter")
- self._treeModelFilter.set_visible_func(self.matches_entry, None)
self._entry = self.builder.get_object("addLayoutEntry")
self._entry.grab_focus()
@@ -79,6 +97,10 @@ class AddLayoutDialog(UIObject):
layoutRenderer = self.builder.get_object("newLayoutRenderer")
layoutColumn.set_cell_data_func(layoutRenderer, _show_layout,
self._xkl_wrapper)
+ self._treeModelFilter = self.builder.get_object("newLayoutStoreFilter")
+ self._treeModelFilter.set_visible_func(self.matches_entry, None)
+ self._treeModelSort = self.builder.get_object("newLayoutStoreSort")
+ self._treeModelSort.set_default_sort_func(self.compare_layouts, None)
self._store = self.builder.get_object("newLayoutStore")
for layout in self._xkl_wrapper.get_available_layouts():
diff --git a/pyanaconda/ui/gui/spokes/keyboard.ui b/pyanaconda/ui/gui/spokes/keyboard.ui
index 9b50a0d..1243e22 100644
--- a/pyanaconda/ui/gui/spokes/keyboard.ui
+++ b/pyanaconda/ui/gui/spokes/keyboard.ui
@@ -9,10 +9,10 @@
</object>
<object class="GtkDialog" id="addLayoutDialog">
<property name="can_focus">False</property>
- <property name="decorated">False</property>
<property name="border_width">5</property>
<property name="default_height">450</property>
<property name="type_hint">dialog</property>
+ <property name="decorated">False</property>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1">
<property name="can_focus">False</property>
@@ -107,7 +107,7 @@
<object class="GtkTreeView" id="newLayoutView">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="model">newLayoutStoreFilter</property>
+ <property name="model">newLayoutStoreSort</property>
<property name="headers_visible">False</property>
<property name="headers_clickable">False</property>
<child internal-child="selection">
@@ -192,6 +192,8 @@
<child internal-child="nav_area">
<object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
<property name="can_focus">False</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
</object>
<packing>
<property name="expand">False</property>
@@ -472,16 +474,19 @@ any layout to the top of the list to select it as the default.</property>
<object class="GtkTreeModelFilter" id="newLayoutStoreFilter">
<property name="child_model">newLayoutStore</property>
</object>
- <object class="GtkImage" id="removeImage">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="icon_name">list-remove-symbolic</property>
+ <object class="GtkTreeModelSort" id="newLayoutStoreSort">
+ <property name="model">newLayoutStoreFilter</property>
</object>
<object class="GtkImage" id="previewImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">input-keyboard-symbolic</property>
</object>
+ <object class="GtkImage" id="removeImage">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="icon_name">list-remove-symbolic</property>
+ </object>
<object class="GtkImage" id="upImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
--
1.7.4.4
More information about the anaconda-patches
mailing list