[caribou] Have UI choose keyboard type.



commit 22ed36c74597159cf4866abee35bb898127dea5a
Author: Eitan Isaacson <eitan monotonous org>
Date:   Tue May 31 11:33:38 2011 -0700

    Have UI choose keyboard type.

 caribou/antler/antler_settings.py    |    9 +++++++++
 caribou/antler/keyboard_view.py      |    6 +++---
 caribou/settings/caribou_settings.py |   14 +-------------
 libcaribou/json-deserializer.vala    |   24 +++++++++++++-----------
 libcaribou/keyboard-model.vala       |   10 +++++++---
 5 files changed, 33 insertions(+), 30 deletions(-)
---
diff --git a/caribou/antler/antler_settings.py b/caribou/antler/antler_settings.py
index 703a7fd..da8ac2f 100644
--- a/caribou/antler/antler_settings.py
+++ b/caribou/antler/antler_settings.py
@@ -5,6 +5,15 @@ AntlerSettings = SettingsTopGroup(
     _("Antler Preferences"), "/org/gnome/antler/", "org.gnome.antler",
     [SettingsGroup("antler", _("Antler"), [
                 SettingsGroup("appearance", _("Appearance"), [
+                        StringSetting(
+                            "keyboard_type", _("Keyboard Type"), "touch",
+                            _("The keyboard geometery Caribou should use"),
+                            _("The keyboard geometery determines the shape "
+                              "and complexity of the keyboard, it could range from "
+                              "a 'natural' look and feel good for composing simple "
+                              "text, to a fullscale keyboard."),
+                            allowed=[(('touch'), _('Touch')),
+                                     (('scan'), _('Scan'))]),
                         BooleanSetting("use_system", _("Use System Theme"),
                                        True, _("Use System Theme")),
                         FloatSetting("min_alpha", _("Minimum Alpha"),
diff --git a/caribou/antler/keyboard_view.py b/caribou/antler/keyboard_view.py
index 9402f36..385a636 100644
--- a/caribou/antler/keyboard_view.py
+++ b/caribou/antler/keyboard_view.py
@@ -227,16 +227,16 @@ class AntlerLayout(Gtk.HBox):
 class AntlerKeyboardView(Gtk.Notebook):
     def __init__(self):
         gobject.GObject.__init__(self)
+        settings = AntlerSettings()
         self.set_show_tabs(False)
-        self.keyboard_model = Caribou.KeyboardModel()
+        self.keyboard_model = Caribou.KeyboardModel(
+            keyboard_type=settings.keyboard_type.value)
         self.scanner = Caribou.Scanner()
         self.scanner.set_keyboard(self.keyboard_model)
         self.keyboard_model.connect("notify::active-group", self._on_group_changed)
 
         self.layers = {}
 
-
-        settings = AntlerSettings()
         use_system = settings.use_system
         use_system.connect("value-changed", self._on_use_system_theme_changed)
 
diff --git a/caribou/settings/caribou_settings.py b/caribou/settings/caribou_settings.py
index 3d2c219..f3f9b00 100644
--- a/caribou/settings/caribou_settings.py
+++ b/caribou/settings/caribou_settings.py
@@ -3,19 +3,7 @@ from caribou.i18n import _
 
 CaribouSettings = SettingsTopGroup(
     _("Caribou Preferences"), "/org/gnome/caribou/", "org.gnome.caribou",
-    [SettingsGroup("keyboard", _("Keyboard"), [
-                SettingsGroup("general", _("General"), [
-                        StringSetting(
-                            "keyboard_type", _("Keyboard Type"), "touch",
-                            _("The keyboard geometery Caribou should use"),
-                            _("The keyboard geometery determines the shape "
-                              "and complexity of the keyboard, it could range from "
-                              "a 'natural' look and feel good for composing simple "
-                              "text, to a fullscale keyboard."),
-                            allowed=[(('touch'), _('Touch')),
-                                     (('scan'), _('Scan'))])]),
-                ]),
-        SettingsGroup("scanning", _("Scanning"), [
+    [SettingsGroup("scanning", _("Scanning"), [
                 BooleanSetting(
                     "scan_enabled", _("Enable scanning"), False,
                     _("Enable switch scanning"),
diff --git a/libcaribou/json-deserializer.vala b/libcaribou/json-deserializer.vala
index 818655c..ea448a4 100644
--- a/libcaribou/json-deserializer.vala
+++ b/libcaribou/json-deserializer.vala
@@ -18,23 +18,22 @@ namespace Caribou {
             return false;
         }
 
-        public static GLib.File get_layout_file (string group,
+        public static GLib.File get_layout_file (string keyboard_type, string group,
                                                  string variant) throws IOError {
-            Settings caribou_settings = new Settings ("org.gnome.caribou");
-            string kb_type = caribou_settings.get_string("keyboard-type");
 
             List<string> dirs = new List<string> ();
             string custom_dir = Environment.get_variable("CARIBOU_LAYOUTS_DIR");
 
             if (custom_dir != null)
-                dirs.append (Path.build_filename (custom_dir, "layouts", kb_type));
+                dirs.append (Path.build_filename (custom_dir, "layouts",
+                                                  keyboard_type));
 
             dirs.append (Path.build_filename (Environment.get_user_data_dir (),
-                                              "caribou", "layouts", kb_type));
+                                              "caribou", "layouts", keyboard_type));
 
             foreach (string data_dir in Environment.get_system_data_dirs ()) {
                 dirs.append (Path.build_filename (
-                                 data_dir, "caribou", "layouts", kb_type));
+                                 data_dir, "caribou", "layouts", keyboard_type));
             }
 
             foreach (string data_dir in dirs) {
@@ -46,19 +45,22 @@ namespace Caribou {
             throw new IOError.NOT_FOUND (
                 "Could not find layout file for %s %s", group, variant);                       }
 
-        public static bool load_group (GroupModel group) {
+        public static GroupModel? load_group (string keyboard_type,
+                                              string group, string variant) {
             Json.Parser parser = new Json.Parser ();
 
             try {
-                GLib.File f = get_layout_file (group.group, group.variant);
+                GLib.File f = get_layout_file (keyboard_type, group, variant);
                 parser.load_from_stream (f.read (), (Cancellable) null);
-                create_levels_from_json (group, parser.get_root ());
             } catch (GLib.Error e) {
                 stdout.printf ("Failed to load JSON: %s\n", e.message);
-                return false;
+                return null;
             }
 
-            return true;
+            GroupModel grp = new GroupModel (group, variant);
+            create_levels_from_json (grp, parser.get_root ());
+
+            return grp;
         }
 
         public static void create_levels_from_json (GroupModel group,
diff --git a/libcaribou/keyboard-model.vala b/libcaribou/keyboard-model.vala
index a1fa2fc..3b06c9f 100644
--- a/libcaribou/keyboard-model.vala
+++ b/libcaribou/keyboard-model.vala
@@ -3,6 +3,7 @@ using Bus;
 namespace Caribou {
     public class KeyboardModel : Object {
         public string active_group { get; private set; default = ""; }
+        public string keyboard_type { get; construct; }
 
         XAdapter xadapter;
         HashTable<string, GroupModel> groups;
@@ -13,13 +14,15 @@ namespace Caribou {
             string[] grps, variants;
             int i;
 
-            groups = new HashTable<string, GroupModel> (str_hash, str_equal);
+            assert (keyboard_type != null);
 
             xadapter = XAdapter.get_default ();
             xadapter.group_changed.connect (on_group_changed);
 
             xadapter.get_groups (out grps, out variants);
 
+            groups = new HashTable<string, GroupModel> (str_hash, str_equal);
+
             for (i=0;i<grps.length;i++)
                 populate_group (grps[i], variants[i]);
 
@@ -28,8 +31,9 @@ namespace Caribou {
         }
 
         private void populate_group (string group, string variant) {
-            GroupModel grp = new GroupModel (group, variant);
-            if (JsonDeserializer.load_group (grp))
+            GroupModel grp = JsonDeserializer.load_group (keyboard_type,
+                                                          group, variant);
+            if (grp != null)
                 groups.insert (GroupModel.create_group_name (group, variant), grp);
         }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]