summaryrefslogtreecommitdiff
path: root/caribou
diff options
context:
space:
mode:
authorJoaquim Rocha <jrocha@igalia.com>2010-05-24 17:21:17 +0200
committerEitan Isaacson <eitan@monotonous.org>2010-06-10 08:47:39 -0700
commit2d2866413a21e995955df972e0c9bb50578e24e0 (patch)
treed0a8c43bb4d0cd47c67cdbb19a444cfd66ed5d28 /caribou
parent1274e68389f37c2c70b42966d399b3c73b014212 (diff)
downloadcaribou-2d2866413a21e995955df972e0c9bb50578e24e0.tar.gz
Add CaribouKeyboard class
Diffstat (limited to 'caribou')
-rw-r--r--caribou/keyboard.py74
1 files changed, 64 insertions, 10 deletions
diff --git a/caribou/keyboard.py b/caribou/keyboard.py
index 1b412b1..6666efe 100644
--- a/caribou/keyboard.py
+++ b/caribou/keyboard.py
@@ -284,14 +284,68 @@ class KbLayoutDeserializer(object):
return value
return [value]
+class CaribouKeyboard(gtk.Notebook):
+ __gtype_name__ = "CaribouKeyboard"
-if __name__ == "__main__":
- # create test window with keyboard
- # run with: python caribou/keyboard.py
- kbdloc = "keyboards.qwerty"
- __import__(kbdloc)
- ckbd = KeyboardLayout(sys.modules[kbdloc])
- window = gtk.Window(gtk.WINDOW_POPUP)
- window.add(ckbd)
- window.show_all()
- gtk.main()
+ def __init__(self):
+ gtk.Notebook.__init__(self)
+ self.set_show_tabs(False)
+ self.vk = virtkey.virtkey()
+ self.key_size = 30
+ self.current_mask = 0
+
+ def load_kb(self, kb_location):
+ kb_deserializer = KbLayoutDeserializer()
+ layouts = kb_deserializer.deserialize(kb_location)
+ self._set_layouts(layouts)
+
+ def _set_layouts(self, layout_list):
+ self._clear()
+ for layout in layout_list:
+ self.append_page(layout)
+ for row in layout.rows:
+ for key in row:
+ if key.key_type == LAYOUT_SWITCHER_KEY_TYPE:
+ key.connect('clicked',
+ self._pressed_layout_switcher_key)
+ elif key.key_type == MASK_KEY_TYPE:
+ key.connect('clicked',
+ self._pressed_mask_key)
+ elif key.key_type == PREFERENCES_KEY_TYPE:
+ key.connect('clicked',
+ self._pressed_preferences_key)
+ else:
+ key.connect('clicked',
+ self._pressed_normal_key)
+ key.set_relative_size(self.key_size)
+
+ def _clear(self):
+ n_pages = self.get_n_pages()
+ for i in range(n_pages):
+ self.remove_page(i)
+
+ def _pressed_normal_key(self, key):
+ self.vk.press_keysym(key.value)
+ self.vk.release_keysym(key.value)
+ self.current_mask = 0
+
+ def _pressed_layout_switcher_key(self, key):
+ self._switch_to_layout(key.value)
+
+ def _pressed_mask_key(self, key):
+ if self.current_mask & key.value != 0:
+ self.vk.unlatch_mod(key.value)
+ self.current_mask &= ~key.value
+ else:
+ self.current_mask |= key.value
+ self.vk.latch_mod(self.current_mask)
+
+ def _pressed_preferences_key(self, key):
+ KeyboardPreferences()
+
+ def _switch_to_layout(self, name):
+ n_pages = self.get_n_pages()
+ for i in range(n_pages):
+ if self.get_nth_page(i).layout_name == name:
+ self.set_current_page(i)
+ break