From f9a673f46dde039153387f00df597eab987ffa01 Mon Sep 17 00:00:00 2001 From: Pootle daemon Date: Sat, 26 Nov 2011 05:30:27 +0000 Subject: Merge branch 'master' of git.sugarlabs.org:typing-turtle/mainline --- diff --git a/activity/activity.info b/activity/activity.info index 196a3d9..71729d2 100644 --- a/activity/activity.info +++ b/activity/activity.info @@ -1,6 +1,6 @@ [Activity] name = Typing Turtle -activity_version = 28 +activity_version = 29 host_version = 1 bundle_id = org.laptop.community.TypingTurtle icon = Activity-typingturtle diff --git a/balloongame.py b/balloongame.py index 5c36a15..56a6a34 100644 --- a/balloongame.py +++ b/balloongame.py @@ -253,7 +253,7 @@ class BalloonGame(gtk.VBox): 'lesson': self.lesson['name'], 'type': got_medal, 'date': datetime.date.today().strftime('%B %d, %Y'), - 'nick': self.activity.owner.props.nick, + 'nick': self.activity.nick, 'score': self.score } self.medal = medal diff --git a/images/OLPCM_Rhand_ENTER.svg b/images/OLPCM_Rhand_ENTER.svg new file mode 100644 index 0000000..1da92f8 --- /dev/null +++ b/images/OLPCM_Rhand_ENTER.svg @@ -0,0 +1,37 @@ + + + +image/svg+xml + + \ No newline at end of file diff --git a/images/OLPC_Rhand_H.svg b/images/OLPC_Rhand_H.svg index 35789af..0026119 100644 --- a/images/OLPC_Rhand_H.svg +++ b/images/OLPC_Rhand_H.svg @@ -1,33 +1,29 @@ - - - - - - - - - - + + + + + + + - + \ No newline at end of file diff --git a/keyboard.py b/keyboard.py index 45389f7..35daeed 100644 --- a/keyboard.py +++ b/keyboard.py @@ -23,6 +23,9 @@ import rsvg import os, glob, re import pango from port import json +import subprocess +from layouts.olpc import OLPC_LAYOUT +from layouts.olpcm import OLPCM_LAYOUT # Tweaking variables. HAND_YOFFSET = -15 @@ -89,135 +92,27 @@ KEY_PROPS = [ { 'name': 'key-pressed', 'default': False }, ] -# This is the OLPC XO-1 keyboard layout. -# -# The keyboard layout is described by the following data structure. The structure -# has three levels: Layout, Groups, and Keys. A Layout contains a list of Groups, -# each of which contains a list of Keys. Groups are intended to be a way to collect -# related keys (e.g. nearby each other on the keyboard with similar properties) -# together. -# -# Entirely new keyboard layouts can be created just by copying this structure and -# modifying the following values, without changing the code. -OLPC_LAYOUT = { - 'layout-name': "olpc", +def _is_olpcm_model(): + """Check via setxkbmap if the keyboard model is olpcm. - 'layout-width': 775, - 'layout-height': 265, + Keyboard model code is 'olpcm' for non-membrane, mechanical + keyboard, and 'olpc' for membrane keyboard. - 'group-layout': 'horizontal', + """ + code = None + p = subprocess.Popen(["setxkbmap", "-query"], stdout=subprocess.PIPE) + out, err = p.communicate() + for line in out.splitlines(): + if line.startswith('model:'): + code = line.split()[1] + return code == 'olpcm' - 'key-width': 45, - 'key-height': 45, - 'key-gap': 5, +def get_layout(): + if _is_olpcm_model(): + return OLPCM_LAYOUT + else: + return OLPC_LAYOUT - 'groups': [ - { - 'group-name': "numbers", - 'group-x': 10, - 'group-y': 10, - - 'keys': [ - {'key-scan':0x31,'key-finger':'LP','key-hand-image':'OLPC_Lhand_tilde.svg','key-width':35}, - {'key-scan':0x0a,'key-finger':'LP','key-hand-image':'OLPC_Lhand_1.svg'}, - {'key-scan':0x0b,'key-finger':'LR','key-hand-image':'OLPC_Lhand_2.svg'}, - {'key-scan':0x0c,'key-finger':'LM','key-hand-image':'OLPC_Lhand_3.svg'}, - {'key-scan':0x0d,'key-finger':'LI','key-hand-image':'OLPC_Lhand_4.svg'}, - {'key-scan':0x0e,'key-finger':'LI','key-hand-image':'OLPC_Lhand_5.svg'}, - {'key-scan':0x0f,'key-finger':'RI','key-hand-image':'OLPC_Rhand_6.svg'}, - {'key-scan':0x10,'key-finger':'RI','key-hand-image':'OLPC_Rhand_7.svg'}, - {'key-scan':0x11,'key-finger':'RM','key-hand-image':'OLPC_Rhand_8.svg'}, - {'key-scan':0x12,'key-finger':'RR','key-hand-image':'OLPC_Rhand_9.svg'}, - {'key-scan':0x13,'key-finger':'RP','key-hand-image':'OLPC_Rhand_0.svg'}, - {'key-scan':0x14,'key-finger':'RP','key-hand-image':'OLPC_Rhand_minus.svg'}, - {'key-scan':0x15,'key-finger':'RP','key-hand-image':'OLPC_Rhand_plus.svg','key-width':65}, - {'key-scan':0x16,'key-finger':'RP','key-label':"erase",'key-width':95} - ] - }, - { - 'group-name': "top", - 'group-x': 10, - 'group-y': 60, - - 'keys': [ - {'key-scan':0x17,'key-finger':'LP','key-label':"tab"}, - {'key-scan':0x18,'key-finger':'LP','key-hand-image':'OLPC_Lhand_Q.svg'}, - {'key-scan':0x19,'key-finger':'LR','key-hand-image':'OLPC_Lhand_W.svg'}, - {'key-scan':0x1a,'key-finger':'LM','key-hand-image':'OLPC_Lhand_E.svg'}, - {'key-scan':0x1b,'key-finger':'LI','key-hand-image':'OLPC_Lhand_R.svg'}, - {'key-scan':0x1c,'key-finger':'LI','key-hand-image':'OLPC_Lhand_T.svg'}, - {'key-scan':0x1d,'key-finger':'RI','key-hand-image':'OLPC_Rhand_Y.svg'}, - {'key-scan':0x1e,'key-finger':'RI','key-hand-image':'OLPC_Rhand_U.svg'}, - {'key-scan':0x1f,'key-finger':'RM','key-hand-image':'OLPC_Rhand_I.svg'}, - {'key-scan':0x20,'key-finger':'RR','key-hand-image':'OLPC_Rhand_O.svg'}, - {'key-scan':0x21,'key-finger':'RP','key-hand-image':'OLPC_Rhand_P.svg'}, - {'key-scan':0x22,'key-finger':'RP','key-hand-image':'OLPC_Rhand_bracketL.svg'}, - {'key-scan':0x23,'key-finger':'RP','key-hand-image':'OLPC_Rhand_bracketR.svg','key-width':55}, - {'key-scan':0x24,'key-finger':'RP','key-hand-image':'OLPC_Rhand_ENTER.svg','key-label':"enter",'key-width':95,'key-height':95} - ] - }, - { - 'group-name': "home", - 'group-x': 10, - 'group-y': 110, - - 'keys': [ - {'key-scan':0x25,'key-finger':'LP','key-label':"ctrl",'key-width':55}, - {'key-scan':0x26,'key-finger':'LP','key-hand-image':'OLPC_Lhand_A.svg'}, - {'key-scan':0x27,'key-finger':'LR','key-hand-image':'OLPC_Lhand_S.svg'}, - {'key-scan':0x28,'key-finger':'LM','key-hand-image':'OLPC_Lhand_D.svg'}, - {'key-scan':0x29,'key-finger':'LI','key-hand-image':'OLPC_Lhand_F.svg'}, - {'key-scan':0x2a,'key-finger':'LI','key-hand-image':'OLPC_Lhand_G.svg'}, - {'key-scan':0x2b,'key-finger':'RI','key-hand-image':'OLPC_Rhand_H.svg'}, - {'key-scan':0x2c,'key-finger':'RI','key-hand-image':'OLPC_Rhand_J.svg'}, - {'key-scan':0x2d,'key-finger':'RM','key-hand-image':'OLPC_Rhand_K.svg'}, - {'key-scan':0x2e,'key-finger':'RR','key-hand-image':'OLPC_Rhand_L.svg'}, - {'key-scan':0x2f,'key-finger':'RP','key-hand-image':'OLPC_Rhand_SEMICOLON.svg'}, - {'key-scan':0x30,'key-finger':'RP','key-hand-image':'OLPC_Rhand_APOSTROPHE.svg'}, - {'key-scan':0x33,'key-finger':'RP'} - ] - }, - { - 'group-name': "bottom", - 'group-x': 10, - 'group-y': 160, - - 'keys': [ - {'key-scan':0x32,'key-finger':'LP','key-hand-image':'OLPC_Lhand_SHIFT.svg','key-label':"shift",'key-width':75}, - {'key-scan':0x34,'key-finger':'LP','key-hand-image':'OLPC_Lhand_Z.svg'}, - {'key-scan':0x35,'key-finger':'LR','key-hand-image':'OLPC_Lhand_X.svg'}, - {'key-scan':0x36,'key-finger':'LM','key-hand-image':'OLPC_Lhand_C.svg'}, - {'key-scan':0x37,'key-finger':'LI','key-hand-image':'OLPC_Lhand_V.svg'}, - {'key-scan':0x38,'key-finger':'LI','key-hand-image':'OLPC_Lhand_B.svg'}, - {'key-scan':0x39,'key-finger':'RI','key-hand-image':'OLPC_Rhand_N.svg'}, - {'key-scan':0x3a,'key-finger':'RI','key-hand-image':'OLPC_Rhand_M.svg'}, - {'key-scan':0x3b,'key-finger':'RM','key-hand-image':'OLPC_Rhand_COMMA.svg'}, - {'key-scan':0x3c,'key-finger':'RR','key-hand-image':'OLPC_Rhand_PERIOD.svg'}, - {'key-scan':0x3d,'key-finger':'RP','key-hand-image':'OLPC_Rhand_QUESTIONMARK.svg'}, - {'key-scan':0x3e,'key-finger':'RP','key-hand-image':'OLPC_Rhand_SHIFT.svg','key-label':"shift",'key-width':75}, - {'key-scan':0x6f,'key-finger':'RP','key-label':""}, # Up - {'key-label':""}, # Language key - ] - }, - { - 'group-name': "space", - 'group-x': 10, - 'group-y': 210, - - 'keys': [ - {'key-label':"fn",'key-width':35}, - {'key-label':"",'key-width':55}, # LHand - {'key-scan':0x40,'key-label':"alt",'key-width':55}, # LAlt - {'key-scan':0x41,'key-finger':'RT','key-hand-image':'OLPC_Rhand_SPACE.svg','key-width':325}, # Spacebar - {'key-scan':0x6c,'key-label':"altgr",'key-width':55}, # AltGr - {'key-label':"",'key-width':55}, # RHand - {'key-scan':0x71,'key-label':""}, # Left - {'key-scan':0x74,'key-label':""}, # Down - {'key-scan':0x72,'key-label':""}, # Right - ] - } - ] -} class KeyboardImages: def __init__(self, width, height): @@ -227,8 +122,16 @@ class KeyboardImages: self.images = {} def load_images(self): - for filename in glob.iglob('images/OLPC_*.svg'): - image = gtk.gdk.pixbuf_new_from_file_at_scale(filename, self.width, self.height, False) + + # This is for not changing all the numbers of olpcm layout, + # that was made based on the original olpc layout. + scale_width = self.width + if _is_olpcm_model(): + scale_width = int(scale_width * 1.1625) + + for filename in glob.iglob('images/OLPC*.svg'): + image = gtk.gdk.pixbuf_new_from_file_at_scale(filename, scale_width, + self.height, False) name = os.path.basename(filename) self.images[name] = image diff --git a/keybuilder.py b/keybuilder.py index 38ec6d1..bceab0d 100755 --- a/keybuilder.py +++ b/keybuilder.py @@ -35,7 +35,7 @@ try: k.load_letter_map(sys.argv[1]) except: pass -k.set_layout(keyboard.OLPC_LAYOUT) +k.set_layout(keyboard.get_layout()) savebtn = gtk.Button() savebtn.add(gtk.Label('Save Keys')) diff --git a/layouts/__init__.py b/layouts/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/layouts/__init__.py @@ -0,0 +1 @@ + diff --git a/layouts/olpc.py b/layouts/olpc.py new file mode 100644 index 0000000..38fc4ed --- /dev/null +++ b/layouts/olpc.py @@ -0,0 +1,148 @@ +# Copyright 2008 by Kate Scheppke and Wade Brainerd. +# This file is part of Typing Turtle. +# +# Typing Turtle is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Typing Turtle is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Typing Turtle. If not, see . +#!/usr/bin/env python +# vi:sw=4 et + + +# This is the OLPC XO membrane keyboard layout. +# +# The keyboard layout is described by the following data structure. The structure +# has three levels: Layout, Groups, and Keys. A Layout contains a list of Groups, +# each of which contains a list of Keys. Groups are intended to be a way to collect +# related keys (e.g. nearby each other on the keyboard with similar properties) +# together. +# +# Entirely new keyboard layouts can be created just by copying this structure and +# modifying the following values, without changing the code. +OLPC_LAYOUT = { + 'layout-name': "olpc", + + 'layout-width': 775, + 'layout-height': 265, + + 'group-layout': 'horizontal', + + 'key-width': 45, + 'key-height': 45, + 'key-gap': 5, + + 'groups': [ + { + 'group-name': "numbers", + 'group-x': 10, + 'group-y': 10, + + 'keys': [ + {'key-scan':0x31,'key-finger':'LP','key-hand-image':'OLPC_Lhand_tilde.svg','key-width':35}, + {'key-scan':0x0a,'key-finger':'LP','key-hand-image':'OLPC_Lhand_1.svg'}, + {'key-scan':0x0b,'key-finger':'LR','key-hand-image':'OLPC_Lhand_2.svg'}, + {'key-scan':0x0c,'key-finger':'LM','key-hand-image':'OLPC_Lhand_3.svg'}, + {'key-scan':0x0d,'key-finger':'LI','key-hand-image':'OLPC_Lhand_4.svg'}, + {'key-scan':0x0e,'key-finger':'LI','key-hand-image':'OLPC_Lhand_5.svg'}, + {'key-scan':0x0f,'key-finger':'RI','key-hand-image':'OLPC_Rhand_6.svg'}, + {'key-scan':0x10,'key-finger':'RI','key-hand-image':'OLPC_Rhand_7.svg'}, + {'key-scan':0x11,'key-finger':'RM','key-hand-image':'OLPC_Rhand_8.svg'}, + {'key-scan':0x12,'key-finger':'RR','key-hand-image':'OLPC_Rhand_9.svg'}, + {'key-scan':0x13,'key-finger':'RP','key-hand-image':'OLPC_Rhand_0.svg'}, + {'key-scan':0x14,'key-finger':'RP','key-hand-image':'OLPC_Rhand_minus.svg'}, + {'key-scan':0x15,'key-finger':'RP','key-hand-image':'OLPC_Rhand_plus.svg','key-width':65}, + {'key-scan':0x16,'key-finger':'RP','key-label':"erase",'key-width':95} + ] + }, + { + 'group-name': "top", + 'group-x': 10, + 'group-y': 60, + + 'keys': [ + {'key-scan':0x17,'key-finger':'LP','key-label':"tab"}, + {'key-scan':0x18,'key-finger':'LP','key-hand-image':'OLPC_Lhand_Q.svg'}, + {'key-scan':0x19,'key-finger':'LR','key-hand-image':'OLPC_Lhand_W.svg'}, + {'key-scan':0x1a,'key-finger':'LM','key-hand-image':'OLPC_Lhand_E.svg'}, + {'key-scan':0x1b,'key-finger':'LI','key-hand-image':'OLPC_Lhand_R.svg'}, + {'key-scan':0x1c,'key-finger':'LI','key-hand-image':'OLPC_Lhand_T.svg'}, + {'key-scan':0x1d,'key-finger':'RI','key-hand-image':'OLPC_Rhand_Y.svg'}, + {'key-scan':0x1e,'key-finger':'RI','key-hand-image':'OLPC_Rhand_U.svg'}, + {'key-scan':0x1f,'key-finger':'RM','key-hand-image':'OLPC_Rhand_I.svg'}, + {'key-scan':0x20,'key-finger':'RR','key-hand-image':'OLPC_Rhand_O.svg'}, + {'key-scan':0x21,'key-finger':'RP','key-hand-image':'OLPC_Rhand_P.svg'}, + {'key-scan':0x22,'key-finger':'RP','key-hand-image':'OLPC_Rhand_bracketL.svg'}, + {'key-scan':0x23,'key-finger':'RP','key-hand-image':'OLPC_Rhand_bracketR.svg','key-width':55}, + {'key-scan':0x24,'key-finger':'RP','key-hand-image':'OLPC_Rhand_ENTER.svg','key-label':"enter",'key-width':95,'key-height':95} + ] + }, + { + 'group-name': "home", + 'group-x': 10, + 'group-y': 110, + + 'keys': [ + {'key-scan':0x25,'key-finger':'LP','key-label':"ctrl",'key-width':55}, + {'key-scan':0x26,'key-finger':'LP','key-hand-image':'OLPC_Lhand_A.svg'}, + {'key-scan':0x27,'key-finger':'LR','key-hand-image':'OLPC_Lhand_S.svg'}, + {'key-scan':0x28,'key-finger':'LM','key-hand-image':'OLPC_Lhand_D.svg'}, + {'key-scan':0x29,'key-finger':'LI','key-hand-image':'OLPC_Lhand_F.svg'}, + {'key-scan':0x2a,'key-finger':'LI','key-hand-image':'OLPC_Lhand_G.svg'}, + {'key-scan':0x2b,'key-finger':'RI','key-hand-image':'OLPC_Rhand_H.svg'}, + {'key-scan':0x2c,'key-finger':'RI','key-hand-image':'OLPC_Rhand_J.svg'}, + {'key-scan':0x2d,'key-finger':'RM','key-hand-image':'OLPC_Rhand_K.svg'}, + {'key-scan':0x2e,'key-finger':'RR','key-hand-image':'OLPC_Rhand_L.svg'}, + {'key-scan':0x2f,'key-finger':'RP','key-hand-image':'OLPC_Rhand_SEMICOLON.svg'}, + {'key-scan':0x30,'key-finger':'RP','key-hand-image':'OLPC_Rhand_APOSTROPHE.svg'}, + {'key-scan':0x33,'key-finger':'RP'} + ] + }, + { + 'group-name': "bottom", + 'group-x': 10, + 'group-y': 160, + + 'keys': [ + {'key-scan':0x32,'key-finger':'LP','key-hand-image':'OLPC_Lhand_SHIFT.svg','key-label':"shift",'key-width':75}, + {'key-scan':0x34,'key-finger':'LP','key-hand-image':'OLPC_Lhand_Z.svg'}, + {'key-scan':0x35,'key-finger':'LR','key-hand-image':'OLPC_Lhand_X.svg'}, + {'key-scan':0x36,'key-finger':'LM','key-hand-image':'OLPC_Lhand_C.svg'}, + {'key-scan':0x37,'key-finger':'LI','key-hand-image':'OLPC_Lhand_V.svg'}, + {'key-scan':0x38,'key-finger':'LI','key-hand-image':'OLPC_Lhand_B.svg'}, + {'key-scan':0x39,'key-finger':'RI','key-hand-image':'OLPC_Rhand_N.svg'}, + {'key-scan':0x3a,'key-finger':'RI','key-hand-image':'OLPC_Rhand_M.svg'}, + {'key-scan':0x3b,'key-finger':'RM','key-hand-image':'OLPC_Rhand_COMMA.svg'}, + {'key-scan':0x3c,'key-finger':'RR','key-hand-image':'OLPC_Rhand_PERIOD.svg'}, + {'key-scan':0x3d,'key-finger':'RP','key-hand-image':'OLPC_Rhand_QUESTIONMARK.svg'}, + {'key-scan':0x3e,'key-finger':'RP','key-hand-image':'OLPC_Rhand_SHIFT.svg','key-label':"shift",'key-width':75}, + {'key-scan':0x6f,'key-finger':'RP','key-label':""}, # Up + {'key-label':""}, # Language key + ] + }, + { + 'group-name': "space", + 'group-x': 10, + 'group-y': 210, + + 'keys': [ + {'key-label':"fn",'key-width':35}, + {'key-label':"",'key-width':55}, # LHand + {'key-scan':0x40,'key-label':"alt",'key-width':55}, # LAlt + {'key-scan':0x41,'key-finger':'RT','key-hand-image':'OLPC_Rhand_SPACE.svg','key-width':325}, # Spacebar + {'key-scan':0x6c,'key-label':"altgr",'key-width':55}, # AltGr + {'key-label':"",'key-width':55}, # RHand + {'key-scan':0x71,'key-label':""}, # Left + {'key-scan':0x74,'key-label':""}, # Down + {'key-scan':0x72,'key-label':""}, # Right + ] + } + ] +} diff --git a/layouts/olpcm.py b/layouts/olpcm.py new file mode 100644 index 0000000..7e7999a --- /dev/null +++ b/layouts/olpcm.py @@ -0,0 +1,139 @@ +# Copyright 2008 by Kate Scheppke and Wade Brainerd. +# This file is part of Typing Turtle. +# +# Typing Turtle is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Typing Turtle is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Typing Turtle. If not, see . +#!/usr/bin/env python +# vi:sw=4 et + + +# This is the OLPC XO non-membrane, mechanical keyboard layout. +# +# Check olpc.py in the same directory for instructions. +OLPCM_LAYOUT = { + 'layout-name': "olpcm", + + 'layout-width': 645, + 'layout-height': 265, + + 'group-layout': 'horizontal', + + 'key-width': 45, + 'key-height': 45, + 'key-gap': 5, + + 'groups': [ + { + 'group-name': "numbers", + 'group-x': 10, + 'group-y': 10, + + 'keys': [ + {'key-scan':0x31,'key-finger':'LP','key-hand-image':'OLPC_Lhand_tilde.svg','key-width':35}, + {'key-scan':0x0a,'key-finger':'LP','key-hand-image':'OLPC_Lhand_1.svg'}, + {'key-scan':0x0b,'key-finger':'LR','key-hand-image':'OLPC_Lhand_2.svg'}, + {'key-scan':0x0c,'key-finger':'LM','key-hand-image':'OLPC_Lhand_3.svg'}, + {'key-scan':0x0d,'key-finger':'LI','key-hand-image':'OLPC_Lhand_4.svg'}, + {'key-scan':0x0e,'key-finger':'LI','key-hand-image':'OLPC_Lhand_5.svg'}, + {'key-scan':0x0f,'key-finger':'RI','key-hand-image':'OLPC_Rhand_6.svg'}, + {'key-scan':0x10,'key-finger':'RI','key-hand-image':'OLPC_Rhand_7.svg'}, + {'key-scan':0x11,'key-finger':'RM','key-hand-image':'OLPC_Rhand_8.svg'}, + {'key-scan':0x12,'key-finger':'RR','key-hand-image':'OLPC_Rhand_9.svg'}, + {'key-scan':0x13,'key-finger':'RP','key-hand-image':'OLPC_Rhand_0.svg'}, + {'key-scan':0x14,'key-finger':'RP','key-hand-image':'OLPC_Rhand_minus.svg','key-width':35}, + {'key-scan':0x16,'key-finger':'RP','key-label':"erase",'key-width':45} + ] + }, + { + 'group-name': "top", + 'group-x': 10, + 'group-y': 60, + + 'keys': [ + {'key-scan':0x17,'key-finger':'LP','key-label':"tab"}, + {'key-scan':0x18,'key-finger':'LP','key-hand-image':'OLPC_Lhand_Q.svg'}, + {'key-scan':0x19,'key-finger':'LR','key-hand-image':'OLPC_Lhand_W.svg'}, + {'key-scan':0x1a,'key-finger':'LM','key-hand-image':'OLPC_Lhand_E.svg'}, + {'key-scan':0x1b,'key-finger':'LI','key-hand-image':'OLPC_Lhand_R.svg'}, + {'key-scan':0x1c,'key-finger':'LI','key-hand-image':'OLPC_Lhand_T.svg'}, + {'key-scan':0x1d,'key-finger':'RI','key-hand-image':'OLPC_Rhand_Y.svg'}, + {'key-scan':0x1e,'key-finger':'RI','key-hand-image':'OLPC_Rhand_U.svg'}, + {'key-scan':0x1f,'key-finger':'RM','key-hand-image':'OLPC_Rhand_I.svg'}, + {'key-scan':0x20,'key-finger':'RR','key-hand-image':'OLPC_Rhand_O.svg'}, + {'key-scan':0x21,'key-finger':'RP','key-hand-image':'OLPC_Rhand_P.svg'}, + {'key-scan':0x22,'key-finger':'RP','key-hand-image':'OLPC_Rhand_bracketL.svg', 'key-width':35}, + {'key-scan':0x23,'key-finger':'RP','key-hand-image':'OLPC_Rhand_bracketR.svg','key-width':35}, + ] + }, + { + 'group-name': "home", + 'group-x': 10, + 'group-y': 110, + + 'keys': [ + {'key-scan':0x25,'key-finger':'LP','key-label':"ctrl",'key-width':55}, + {'key-scan':0x26,'key-finger':'LP','key-hand-image':'OLPC_Lhand_A.svg'}, + {'key-scan':0x27,'key-finger':'LR','key-hand-image':'OLPC_Lhand_S.svg'}, + {'key-scan':0x28,'key-finger':'LM','key-hand-image':'OLPC_Lhand_D.svg'}, + {'key-scan':0x29,'key-finger':'LI','key-hand-image':'OLPC_Lhand_F.svg'}, + {'key-scan':0x2a,'key-finger':'LI','key-hand-image':'OLPC_Lhand_G.svg'}, + {'key-scan':0x2b,'key-finger':'RI','key-hand-image':'OLPC_Rhand_H.svg'}, + {'key-scan':0x2c,'key-finger':'RI','key-hand-image':'OLPC_Rhand_J.svg'}, + {'key-scan':0x2d,'key-finger':'RM','key-hand-image':'OLPC_Rhand_K.svg'}, + {'key-scan':0x2e,'key-finger':'RR','key-hand-image':'OLPC_Rhand_L.svg'}, + {'key-scan':0x2f,'key-finger':'RP','key-hand-image':'OLPC_Rhand_SEMICOLON.svg', 'key-width':35}, + {'key-scan':0x24,'key-finger':'RP','key-hand-image':'OLPCM_Rhand_ENTER.svg','key-label':"enter",'key-width':75}, + ] + }, + { + 'group-name': "bottom", + 'group-x': 10, + 'group-y': 160, + + 'keys': [ + {'key-scan':0x32,'key-finger':'LP','key-hand-image':'OLPC_Lhand_SHIFT.svg','key-label':"shift",'key-width':75}, + {'key-scan':0x34,'key-finger':'LP','key-hand-image':'OLPC_Lhand_Z.svg'}, + {'key-scan':0x35,'key-finger':'LR','key-hand-image':'OLPC_Lhand_X.svg'}, + {'key-scan':0x36,'key-finger':'LM','key-hand-image':'OLPC_Lhand_C.svg'}, + {'key-scan':0x37,'key-finger':'LI','key-hand-image':'OLPC_Lhand_V.svg'}, + {'key-scan':0x38,'key-finger':'LI','key-hand-image':'OLPC_Lhand_B.svg'}, + {'key-scan':0x39,'key-finger':'RI','key-hand-image':'OLPC_Rhand_N.svg'}, + {'key-scan':0x3a,'key-finger':'RI','key-hand-image':'OLPC_Rhand_M.svg'}, + {'key-scan':0x3b,'key-finger':'RM','key-hand-image':'OLPC_Rhand_COMMA.svg', 'key-width':35}, + {'key-scan':0x3c,'key-finger':'RR','key-hand-image':'OLPC_Rhand_PERIOD.svg', 'key-width':35}, + {'key-scan':0x3d,'key-finger':'RP','key-hand-image':'OLPC_Rhand_QUESTIONMARK.svg', 'key-width':35}, + {'key-scan':0x3e,'key-finger':'RP','key-hand-image':'OLPC_Rhand_SHIFT.svg','key-label':"shift",'key-width':75}, + ] + }, + { + 'group-name': "space", + 'group-x': 10, + 'group-y': 210, + + 'keys': [ + {'key-label':"fn",'key-width':45}, + {'key-label':"",'key-width':45}, # LHand + {'key-scan':0x33,'key-finger':'RP','key-width':35}, + {'key-scan':0x40,'key-label':"alt",'key-width':45}, # LAlt + {'key-scan':0x41,'key-finger':'RT','key-hand-image':'OLPC_Rhand_SPACE.svg','key-width':155}, # Spacebar + {'key-scan':0x6c,'key-label':"altgr",'key-width':35}, # AltGr + {'key-scan':0x15,'key-finger':'RP','key-hand-image':'OLPC_Rhand_plus.svg','key-width':35}, + {'key-scan':0x30,'key-finger':'RP','key-hand-image':'OLPC_Rhand_APOSTROPHE.svg','key-width':35}, + {'key-scan':0x71,'key-label':"",'key-width':35}, # Left + {'key-scan':0x74,'key-label':"",'key-width':35}, # Down + {'key-scan':0x6f,'key-label':"",'key-width':35}, # Up + {'key-scan':0x72,'key-label':"",'key-width':35}, # Right + ] + } + ] +} diff --git a/lessonbuilder.py b/lessonbuilder.py index 7f85c1c..b33a34e 100755 --- a/lessonbuilder.py +++ b/lessonbuilder.py @@ -311,7 +311,7 @@ def build_key_steps( except: kb.load_letter_map('lessons/en_US.key') - kb.set_layout(keyboard.OLPC_LAYOUT) + kb.set_layout(keyboard.get_layout()) keynames = new_keys[0] if len(new_keys) >= 2: diff --git a/lessonscreen.py b/lessonscreen.py index e7d66e7..cc75ef4 100644 --- a/lessonscreen.py +++ b/lessonscreen.py @@ -137,7 +137,7 @@ class LessonScreen(gtk.VBox): except: pass - self.keyboard.set_layout(keyboard.OLPC_LAYOUT) + self.keyboard.set_layout(keyboard.get_layout()) self.pack_start(hbox, False, False, 10) self.pack_start(frame, True, True) @@ -574,7 +574,7 @@ class LessonScreen(gtk.VBox): 'lesson': lesson_name, 'type': got_medal, 'date': datetime.date.today().strftime('%B %d, %Y'), - 'nick': self.activity.owner.props.nick, + 'nick': self.activity.nick, 'time': self.total_time, 'wpm': report['wpm'], 'accuracy': report['accuracy'] diff --git a/titlescene.py b/titlescene.py index ea3dd7d..7cc2d68 100644 --- a/titlescene.py +++ b/titlescene.py @@ -49,9 +49,6 @@ class TitleScene(gtk.DrawingArea): self.title_original = _('Typing Turtle') self.title_src = self.title_original self.title_text = '' - self.title_counter = 50 - - gobject.timeout_add(10, self.timer_cb) def expose_cb(self, area, event): bounds = self.get_allocation() @@ -63,30 +60,30 @@ class TitleScene(gtk.DrawingArea): self.window.draw_pixbuf( gc, self.backgroundpixbuf, 0, 0, x, 0, self.backgroundpixbuf.get_width(), self.backgroundpixbuf.get_height()) - - # Animated Typing Turtle title. pc = self.create_pango_context() - layout = self.create_pango_layout('') - layout.set_font_description(pango.FontDescription(TitleScene.TITLE_FONT)) - - layout.set_text(self.title_original) - original_size = layout.get_size() + self.layout = self.create_pango_layout('') + self.layout.set_font_description(pango.FontDescription(TitleScene.TITLE_FONT)) - x = (bounds.width-original_size[0]/pango.SCALE)-TitleScene.TITLE_OFFSET[0] - y = TitleScene.TITLE_OFFSET[1] + self.layout.set_text(self.title_original) + original_size = self.layout.get_size() + self.x_text = (bounds.width-original_size[0]/pango.SCALE)-TitleScene.TITLE_OFFSET[0] + self.y_text = TitleScene.TITLE_OFFSET[1] + gobject.timeout_add(50, self.timer_cb) - layout.set_text(self.title_text) - self.window.draw_layout(gc, x, y, layout) + def draw_text(self): + # Animated Typing Turtle title. + gc = self.get_style().fg_gc[gtk.STATE_NORMAL] + self.layout.set_text(self.title_text) + self.window.draw_layout(gc, self.x_text, self.y_text, self.layout) def timer_cb(self): - self.title_counter -= 1 - if self.title_counter == 0: - if len(self.title_src) > 0: - self.title_text += self.title_src[0] - self.title_src = self.title_src[1:] - self.queue_draw() - - self.title_counter = random.randint(1, 5) - + if len(self.title_src) > 0: + self.title_text += self.title_src[0] + self.title_src = self.title_src[1:] + self.draw_text() + else: + self.draw_text() + return False + return True diff --git a/typingturtle.py b/typingturtle.py index 38d7afc..ad6c6cb 100755 --- a/typingturtle.py +++ b/typingturtle.py @@ -35,8 +35,7 @@ import gobject, pygtk, gtk, pango import sugar.activity.activity from sugar.graphics import * from sugar.graphics import toolbutton - -from sugar.presence import presenceservice +from sugar import profile OLD_TOOLBAR = False try: @@ -73,7 +72,7 @@ class TypingTurtle(sugar.activity.activity.Activity): self.screens = [] self.screenbox = gtk.VBox() - self.owner = presenceservice.get_instance().get_owner() + self.nick = profile.get_nick_name() self.wordlist = [] -- cgit v0.9.1