[caribou/introspection: 3/10] Converted keyboard.py
- From: Eitan Isaacson <eitani src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [caribou/introspection: 3/10] Converted keyboard.py
- Date: Thu, 6 Jan 2011 01:04:48 +0000 (UTC)
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]