[caribou/introspection: 3/10] Converted keyboard.py



commit a57983e8cfd74f7b1f80f102878d8d9c69cf9b2c
Author: Eitan Isaacson <eitan monotonous org>
Date:   Wed Dec 29 15:58:11 2010 -0800

    Converted keyboard.py

 caribou/ui/keyboard.py |  193 ++++++++++++++++++++++-------------------------
 1 files changed, 90 insertions(+), 103 deletions(-)
---
diff --git a/caribou/ui/keyboard.py b/caribou/ui/keyboard.py
index b3098d3..0f5c2e7 100644
--- a/caribou/ui/keyboard.py
+++ b/caribou/ui/keyboard.py
@@ -26,10 +26,11 @@ import caribou.common.const as const
 from caribou.common.settings_manager import SettingsManager
 import scan
 from preferences_window import PreferencesWindow
-import gconf
+from gi.repository import GConf
 import gobject
-import gtk
-import pango
+from gi.repository import Gdk
+from gi.repository import Gtk
+from gi.repository import Pango
 import sys
 import virtkey
 import os
@@ -48,23 +49,23 @@ from xml.dom import minidom
 import gettext
 import i18n
 
-KEY_MASKS = {'shift': gtk.gdk.SHIFT_MASK,
-             'lock': gtk.gdk.LOCK_MASK,
-             'control': gtk.gdk.CONTROL_MASK,
-             'mod1': gtk.gdk.MOD1_MASK,
-             'mod2': gtk.gdk.MOD2_MASK,
-             'mod3': gtk.gdk.MOD3_MASK,
-             'mod4': gtk.gdk.MOD4_MASK,
-             'mod5': gtk.gdk.MOD5_MASK,
-             'button1': gtk.gdk.BUTTON1_MASK,
-             'button2': gtk.gdk.BUTTON2_MASK,
-             'button3': gtk.gdk.BUTTON3_MASK,
-             'button4': gtk.gdk.BUTTON4_MASK,
-             'button5': gtk.gdk.BUTTON5_MASK}
+KEY_MASKS = {'shift': Gdk.ModifierType.SHIFT_MASK,
+             'lock': Gdk.ModifierType.LOCK_MASK,
+             'control': Gdk.ModifierType.CONTROL_MASK,
+             'mod1': Gdk.ModifierType.MOD1_MASK,
+             'mod2': Gdk.ModifierType.MOD2_MASK,
+             'mod3': Gdk.ModifierType.MOD3_MASK,
+             'mod4': Gdk.ModifierType.MOD4_MASK,
+             'mod5': Gdk.ModifierType.MOD5_MASK,
+             'button1': Gdk.ModifierType.BUTTON1_MASK,
+             'button2': Gdk.ModifierType.BUTTON2_MASK,
+             'button3': Gdk.ModifierType.BUTTON3_MASK,
+             'button4': Gdk.ModifierType.BUTTON4_MASK,
+             'button5': Gdk.ModifierType.BUTTON5_MASK}
 
 class BaseKey(object):
     '''An abstract class the represents a key on the keyboard.
-    Inheriting classes also need to inherit from gtk.Button or any
+    Inheriting classes also need to inherit from Gtk.Button or any
     of it's subclasses.'''
 
     def __init__(self, label = '', value = '', key_type = 'normal',
@@ -75,58 +76,32 @@ class BaseKey(object):
         self.fill = False
         self.label = label or value
         if self.key_type == const.DUMMY_KEY_TYPE:
-            self.set_relief(gtk.RELIEF_NONE)
+            self.set_relief(Gtk.ReliefStyle.NONE)
             self.set_sensitive(False)
         elif self.key_type == const.PREFERENCES_KEY_TYPE:
-            image = gtk.Image()
-            image.set_from_stock(gtk.STOCK_PREFERENCES,
-                                 gtk.ICON_SIZE_BUTTON)
+            image = Gtk.Image()
+            image.set_from_stock(Gtk.STOCK_PREFERENCES,
+                                 Gtk.IconSize.BUTTON)
             self.set_image(image)
         else:
             if label:
-                label_markup = gtk.Label()
+                label_markup = Gtk.Label()
                 label_markup.set_markup(self.label)
                 self.add(label_markup)
             else:
                 self.set_label(self.label)
 
-        self.connect('size-allocate', self._on_size_allocate)
-
-    def _on_size_allocate(self, widget, allocation):
-        widget.set_property('width-request', allocation.height * self.width)
-
     def set_font(self, font):
-        label = self.get_child()
-        if not isinstance(label, gtk.Label):
-            return
-        rcstyle = label.get_modifier_style()
-        rcstyle.font_desc = pango.FontDescription(font)
-
-        label.modify_style(rcstyle)
-        label.queue_resize()
+        raise NotImplemented
 
     def reset_font(self):
-        label = self.get_child()
-        if not isinstance(label, gtk.Label):
-            return
-        rcstyle = label.get_modifier_style()
-        rcstyle.font_desc = None
-        label.modify_style(rcstyle)
-        label.queue_resize()
+        raise NotImplemented
 
     def set_color(self, normal_color, mouse_over_color):
-        rcstyle = self.get_modifier_style()
-
-        rcstyle.bg[gtk.STATE_NORMAL] = gtk.gdk.Color(normal_color)
-        rcstyle.bg[gtk.STATE_PRELIGHT] = gtk.gdk.Color(mouse_over_color)
-
-        self.modify_style(rcstyle)
+        raise NotImplemented
 
     def reset_color(self):
-        rcstyle = self.get_modifier_style()
-        rcstyle.bg[gtk.STATE_NORMAL] = None
-        rcstyle.bg[gtk.STATE_PRELIGHT] = None
-        self.modify_style(rcstyle)
+        raise NotImplemented
 
     def _get_value(self):
         return self._value
@@ -134,11 +109,11 @@ class BaseKey(object):
     def _set_value(self, value):
         if self.key_type == const.NORMAL_KEY_TYPE:
             if type(value) == str or type(value) == unicode:
-                value = value.decode('utf-8')
+                value = value.encode('utf-8')
                 if len(value) == 1:
-                    self._value = gtk.gdk.unicode_to_keyval(ord(value))
+                    self._value = Gdk.unicode_to_keyval(ord(value))
                 else:
-                    key_value = gtk.gdk.keyval_from_name(value)
+                    key_value = Gdk.keyval_from_name(value)
                     if key_value:
                         self._value = key_value
         elif self.key_type == const.MASK_KEY_TYPE:
@@ -151,38 +126,59 @@ class BaseKey(object):
 
     value = property(_get_value, _set_value)
 
-class Key(gtk.Button, BaseKey):
+class Key(Gtk.Button, BaseKey):
     def __init__(self, label = '', value = '', key_type = 'normal',
                  width = 1, fill = False):
-        gtk.Button.__init__(self)
+        gobject.GObject.__init__(self)
         BaseKey.__init__(self, label, value, key_type, width, fill)
 
-class ModifierKey(gtk.ToggleButton, BaseKey):
-    def __init__(self, label = '', value = '', key_type = 'normal',
-                 width = 1, fill = False):
-        gtk.ToggleButton.__init__(self)
-        BaseKey.__init__(self, label, value, key_type, width, fill)
+    def set_font(self, font):
+        label = self.get_child()
+        if not isinstance(label, Gtk.Label):
+            return
+        label.modify_font(Pango.Font.description_from_string(font))
+        label.queue_resize()
+
+    def reset_font(self):
+        label = self.get_child()
+        if not isinstance(label, Gtk.Label):
+            return
+        label.modify_font(None)
+        label.queue_resize()
 
-class KeyboardLayout(gtk.Alignment):
+    def set_color(self, normal_color, mouse_over_color):
+        self.modify_bg(Gtk.StateType.NORMAL, Gdk.Color(normal_color))
+        self.modify_bg(Gtk.StateType.PRELIGHT, Gdk.Color(normal_color))
+
+    def reset_color(self):
+        self.modify_bg(Gtk.StateType.NORMAL, None)
+        self.modify_bg(Gtk.StateType.PRELIGHT, None)
+
+class ModifierKey(Gtk.ToggleButton, Key):
+    pass
+
+class KeyboardLayout(Gtk.Table):
+    KEY_SPAN = 4
     def __init__(self, name):
-        super(KeyboardLayout, self).__init__(0, 0, 0, 0)
+        gobject.GObject.__init__(self)
         self.layout_name = name
         self.rows = []
-        self.vbox = gtk.VBox()
-        self.vbox.set_homogeneous(True)
-        self.add(self.vbox)
+        self.set_homogeneous(True)
 
     def add_row(self, row):
+        row_num = len(self.rows)
         self.rows.append(row)
-        alignment = gtk.Alignment(0.5, 0.5, 1, 1)
-        hbox = gtk.HBox()
-        for key in row:
-            hbox.pack_start(key, expand = True, fill = key.fill)
-        alignment.add(hbox)
-        self.vbox.pack_start(alignment)
+        last_col = 0
+        for i, key in enumerate(row):
+            next_col = (last_col + (key.width * self.KEY_SPAN))
+            self.attach(key, last_col, next_col,
+                        row_num * self.KEY_SPAN, (row_num + 1) * self.KEY_SPAN,
+                        Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, 
+                        Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL,
+                        0, 0)
+            last_col = next_col
 
 class KbLayoutDeserializer(object):
-
     def __init__(self):
         pass
 
@@ -282,11 +278,11 @@ class KbLayoutDeserializer(object):
             return value
         return [value]
 
-class CaribouKeyboard(gtk.Notebook):
+class CaribouKeyboard(Gtk.Notebook):
     __gtype_name__ = "CaribouKeyboard"
 
     def __init__(self):
-        gtk.Notebook.__init__(self)
+        gobject.GObject.__init__(self)
         self.set_show_tabs(False)
         self.vk = virtkey.virtkey()
         self.key_size = 30
@@ -309,32 +305,8 @@ class CaribouKeyboard(gtk.Notebook):
 
         self.scan_service = None
 
-        self.connect('size-allocate', self._on_size_allocate)
-
         self.row_height = -1
 
-    def reset_row_height(self):
-        for i in xrange(self.get_n_pages()):
-            layout = self.get_nth_page(i)
-            for row in layout.vbox.get_children():
-                row.set_property('height-request', -1)
-        self.row_height = -1
-
-    def _on_size_allocate(self, notebook, allocation):
-        if self.row_height > 0:
-            return
-
-        for i in xrange(self.get_n_pages()):
-            layout = self.get_nth_page(i)
-            rows = layout.vbox.get_children()
-            height = rows[0].allocation.height
-            self.row_height = max(self.row_height, height)
-        for i in xrange(self.get_n_pages()):
-            layout = self.get_nth_page(i)
-            for row in layout.vbox.get_children():
-                row.set_property('height-request', self.row_height)
-        
-
     def load_kb(self, kb_location):
         kb_deserializer = KbLayoutDeserializer()
         layouts = kb_deserializer.deserialize(kb_location)
@@ -345,7 +317,7 @@ class CaribouKeyboard(gtk.Notebook):
     def _set_layouts(self, layout_list):
         self._clear()
         for layout in layout_list:
-            self.append_page(layout)
+            self.append_page(layout, None)
             for row in layout.rows:
                 for key in row:
                     if key.key_type == const.LAYOUT_SWITCHER_KEY_TYPE:
@@ -416,7 +388,7 @@ class CaribouKeyboard(gtk.Notebook):
 
     def show_all(self):
         self.set_current_page(self.current_page)
-        gtk.Notebook.show_all(self)
+        Gtk.Notebook.show_all(self)
         #if self.scan_enabled.value:
         #    self.scan_service.start()
 
@@ -438,7 +410,7 @@ class CaribouKeyboard(gtk.Notebook):
             self.scan_service.destroy()
         for id in self._gconf_connections:
             self.client.notify_remove(id)
-        super(gtk.Notebook, self).destroy()
+        super(Gtk.Notebook, self).destroy()
 
     def _switch_to_layout(self, name):
         n_pages = self.get_n_pages()
@@ -450,3 +422,18 @@ class CaribouKeyboard(gtk.Notebook):
                     self.scan_service.change_keyboard(
                             self.get_nth_page(i).rows)
                 break
+
+if __name__ == "__main__":
+    import signal
+    signal.signal(signal.SIGINT, signal.SIG_DFL)
+
+    w = Gtk.Window()
+
+    kb = CaribouKeyboard()
+    kb.load_kb('data/keyboards/qwerty.xml')
+
+    w.add(kb)
+
+    w.show_all()
+
+    Gtk.main()



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