[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