Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPootle daemon <pootle@pootle.sugarlabs.org>2011-11-26 05:30:27 (GMT)
committer Pootle daemon <pootle@pootle.sugarlabs.org>2011-11-26 05:30:27 (GMT)
commitf9a673f46dde039153387f00df597eab987ffa01 (patch)
tree106adad560e6667c39c854aad2b004198f6c0d81
parentabe25d52c482ecb0aba97d3f1423f1330f37c5b7 (diff)
parent7156a736a839bf89a9e04412a7cdaf2c51458fe6 (diff)
Merge branch 'master' of git.sugarlabs.org:typing-turtle/mainline
-rw-r--r--activity/activity.info2
-rw-r--r--balloongame.py2
-rw-r--r--images/OLPCM_Rhand_ENTER.svg37
-rw-r--r--images/OLPC_Rhand_H.svg58
-rw-r--r--keyboard.py157
-rwxr-xr-xkeybuilder.py2
-rw-r--r--layouts/__init__.py1
-rw-r--r--layouts/olpc.py148
-rw-r--r--layouts/olpcm.py139
-rwxr-xr-xlessonbuilder.py2
-rw-r--r--lessonscreen.py4
-rw-r--r--titlescene.py43
-rwxr-xr-xtypingturtle.py5
13 files changed, 410 insertions, 190 deletions
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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.0"
+ width="3146"
+ height="1214"
+ viewBox="-140.708 -446.507 3146 1214"
+ id="svg4539"
+ xml:space="preserve"
+ style="display:inline"><metadata
+ id="metadata4556"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata>
+ <defs
+ id="defs4541" />
+<g
+ id="layer3"
+ style="display:inline"><g
+ transform="matrix(0.9769353,-0.21353555,0.21353555,0.9769353,25.457565,338.81883)"
+ id="XMLID_76_"
+ style="display:inline"><g
+ id="g8462" /><g
+ id="g8464"><path
+ d="m 2536.617,785.13959 c -12.8163,26.04975 -24.2198,51.87168 -35.5898,71.62684 -24.7813,42.8412 -43.838,96.85436 -58.3345,137.05167 -10.2821,28.2928 -11.6954,26.1767 -18.0132,58.8338 -6.7993,34.6164 9.7098,90.4556 18.8985,124.3226 18.1175,67.7898 15.6181,62.8026 24.2733,133.2103 2.2349,19.0287 -2.6883,39.8983 -0.2076,59.424 4.6136,38.7158 26.0188,78.1587 42.5812,119.3481 102.2198,254.483 211.0823,550.6756 305.1532,807.4905 -107.1062,65.8825 -247.0465,124.9235 -402.5153,150.6571 -91.5459,-228.9145 -181.7022,-480.3993 -270.8303,-725.9243 -13.2872,-36.2692 -23.6439,-77.99 -40.9115,-96.6205 -17.5293,-18.5732 -45.4678,-13.703 -77.5227,-22.6413 -31.5762,-8.6304 -69.823,-33.9453 -113.4287,-51.0801 -42.8354,-16.7535 -92.4357,-22.9551 -120.1209,-36.422 -33.8211,-16.3859 -67.9369,-61.1607 -105.2561,-89.1534 -42.8982,-32.1338 -97.1516,-45.1531 -124.1471,-85.0242 -14.115,-20.5561 -16.7011,-47.4809 -28.4216,-69.6607 -25.1781,-47.277 -68.0657,-95.0836 -63.4315,-154.3747 65.6704,-41.0201 135.8098,10.7262 170.6851,71.554 10.0604,17.7317 11.0569,41.1542 22.52,57.7543 28.7216,42.1061 107.037,54.5397 159.1747,64.1737 21.3714,-55.6655 3.4236,-138.5937 -19.7098,-187.8305 -47.986,-101.9466 -113.5227,-162.00141 -164.6858,-263.38977 -23.6953,-46.77813 -91.9399,-174.12264 -23.7767,-199.33134 46.2893,-17.12746 64.1962,22.66867 83.3211,64.25806 63.2732,98.04392 129.3004,172.20347 202.7675,235.34844 4.081,-30.59574 0.4072,-28.35931 -8.6846,-56.74868 -30.8927,-96.05989 -81.6763,-164.27004 -109.5562,-259.75197 11.1048,-47.92359 78.2113,-49.67154 107.734,-20.24906 46.7916,64.40787 75.454,149.32169 113.7973,234.82003 11.1423,25.19176 31.4574,46.13302 56.4573,61.14798 12.7043,-51.29697 -13.1424,-90.84102 -12.7307,-152.57195 0.2872,-62.93351 -17.9479,-122.20993 -2.5238,-170.49899 20.513,-23.7043 66.7897,-26.56619 87.5465,0.72937 16.8812,22.42899 51.0785,154.59646 57.4636,214.14573 22.8961,55.36226 39.5742,71.74456 67.3275,113.03894 l 0,0 0,0 c 60.8732,-29.15188 134.5701,-103.92662 168.5026,-154.70241 3.2055,-4.79908 6.2724,-10.49999 9.2888,-16.79143"
+ transform="matrix(0.97693529,0.21353555,-0.21353555,0.97693529,5.3619769,-802.69477)"
+ id="path10018"
+ style="fill:none;stroke:#9c6b54;stroke-width:16;stroke-linecap:round" /><path
+ d="m 2433.7108,751.30775 c 23.3512,-48.70355 43.6852,-132.7951 102.011,-107.84931 53.6887,23.02294 26.9621,88.77883 3.0222,137.3833 -0.7134,1.43266 -1.4224,2.8656 -2.127,4.29785"
+ transform="matrix(0.97693529,0.21353555,-0.21353555,0.97693529,5.3619769,-802.69477)"
+ id="path8466"
+ style="color:#000000;fill:none;stroke:#fcb054;stroke-width:16;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /></g></g></g></svg> \ 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 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg enable-background="new -1333.657 -607.685 3146 1214" x="0px" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px" viewBox="-1333.657 -607.685 3146 1214" version="1.0" height="1214px" xml:space="preserve" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" width="3146px" xmlns="http://www.w3.org/2000/svg">
- <defs></defs>
- <g id="XMLID_7_">
- <g></g>
- <g>
- <path stroke-linecap="round" d="M161.923,127.886
- c-6.311-8.729-12.085-17.188-17.591-25.514c-25.11-38.27-59.889-73.049-93.997-42.029c-32.228,29.273-25.782,69.289-9.131,105.813
- " stroke-width="16" stroke="#FCB054" fill="none" />
- <path stroke-linecap="round" d="M161.923,127.886
- c-2.686-3.223-5.103-6.445-7.52-9.534L41.205,166.157" stroke-width="16" stroke="#FCB054" fill="none" />
- <path stroke-linecap="round" d="M41.205,166.157
- c6.177,13.428,13.563,26.318,21.083,38.136c65.529,102.859,224.518,222.771,249.628,332.613
- c12.086,53.041,32.765,117.765,0,167.583c-48.878-20.545-122.732-49.415-141.8-96.683c-7.654-18.665-3.626-41.761-9.668-61.231
- C139.364,479.703,81.892,414.173,8.978,440.224C-8.21,497.159,23.479,553.02,37.982,604.583
- c6.714,24.171,3.491,51.027,12.891,74.123c17.859,44.716,68.081,69.021,103.128,109.573
- c30.481,35.316,54.25,86.343,83.791,109.573c24.171,19.068,71.304,35.719,109.573,61.232c38.941,26.051,70.9,58.949,99.905,74.123
- c29.407,15.577,57.741,16.785,70.9,38.673c12.891,21.888,14.1,64.858,19.336,103.128
- c34.645,258.894,69.021,523.83,109.573,767.013c157.378,8.058,306.698-19.739,425.402-61.231
- c-37.062-270.979-80.165-583.586-125.687-854.027c-7.386-43.775-19.874-86.88-16.114-125.688
- c1.746-19.604,11.012-38.941,12.892-58.009c6.579-70.632-3.223-145.829-6.446-215.924c-1.745-35.048,0.807-71.304-3.223-106.351
- c-3.894-33.033-17.322-66.604-16.113-96.683c1.611-42.701-14.368-115.615-3.76-163.957c5.103-23.499,8.191-53.443,12.891-83.791
- c8.057-53.578,13.563-124.345-44.581-129.984c-71.303-6.848-54.25,104.068-68.215,152.544
- c-16.919,58.681,5.908,153.751-25.245,199.407c-34.376-29.811-55.458-116.288-55.727-195.379
- c-0.269-59.89,1.611-146.77-12.891-170.806c-17.859-29.273-64.187-31.153-87.014-9.668
- c-20.276,46.461-8.191,107.29-14.905,169.865c-6.715,61.366,19.336,132.535-4.028,179.937
- c-21.217-20.008-33.168-55.995-38.674-82.985c-19.202-91.714-47.267-170.94-51.026-242.243
- c-22.56-35.048-88.491-47.67-109.573-3.223c-12.757,94.533,15.576,174.028,25.245,274.47c2.819,29.677,22.29,68.618,0,89.969
- c-33.974-3.626-186.785-163.957-277.291-278.901c-0.537-0.537-0.94-1.074-1.074-1.478" stroke-width="16" stroke="#9C6B54" fill="none" />
+<svg
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.0"
+ width="3146"
+ height="1214"
+ viewBox="-1333.657 -607.685 3146 1214"
+ id="svg2"
+ xml:space="preserve">
+ <g
+ id="XMLID_7_">
+ <g
+ id="g7" />
+ <g
+ id="g9">
+ <path
+ d="M 161.923,127.886 C 155.612,119.157 149.838,110.698 144.332,102.372 119.222,64.102 84.443,29.323 50.335,60.343 18.107,89.616 24.553,129.632 41.204,166.156"
+ id="path11"
+ style="fill:none;stroke:#fcb054;stroke-width:16;stroke-linecap:round" />
+ <path
+ d="m 161.923,127.886 c -2.686,-3.223 -5.103,-6.445 -7.52,-9.534"
+ id="path13"
+ style="fill:none;stroke:#fcb054;stroke-width:16;stroke-linecap:round" />
+ <path
+ d="m 41.205,166.157 c 6.177,13.428 13.563,26.318 21.083,38.136 65.529,102.859 224.518,222.771 249.628,332.613 12.086,53.041 32.765,117.765 0,167.583 -48.878,-20.545 -122.732,-49.415 -141.8,-96.683 -7.654,-18.665 -3.626,-41.761 -9.668,-61.231 C 139.364,479.703 81.892,414.173 8.978,440.224 -8.21,497.159 23.479,553.02 37.982,604.583 c 6.714,24.171 3.491,51.027 12.891,74.123 17.859,44.716 68.081,69.021 103.128,109.573 30.481,35.316 54.25,86.343 83.791,109.573 24.171,19.068 71.304,35.719 109.573,61.232 38.941,26.051 70.9,58.949 99.905,74.123 29.407,15.577 57.741,16.785 70.9,38.673 12.891,21.888 14.1,64.858 19.336,103.128 34.645,258.894 69.021,523.83 109.573,767.013 157.378,8.058 306.698,-19.739 425.402,-61.231 -37.062,-270.979 -80.165,-583.586 -125.687,-854.027 -7.386,-43.775 -19.874,-86.88 -16.114,-125.688 1.746,-19.604 11.012,-38.941 12.892,-58.009 6.579,-70.632 -3.223,-145.829 -6.446,-215.924 -1.745,-35.048 0.807,-71.304 -3.223,-106.351 -3.894,-33.033 -17.322,-66.604 -16.113,-96.683 1.611,-42.701 -14.368,-115.615 -3.76,-163.957 5.103,-23.499 8.191,-53.443 12.891,-83.791 C 934.978,122.782 940.484,52.015 882.34,46.376 811.037,39.528 828.09,150.444 814.125,198.92 797.206,257.601 820.033,352.671 788.88,398.327 754.504,368.516 733.422,282.039 733.153,202.948 732.884,143.058 734.764,56.178 720.262,32.142 702.403,2.869 656.075,0.989 633.248,22.474 c -20.276,46.461 -8.191,107.29 -14.905,169.865 -6.715,61.366 19.336,132.535 -4.028,179.937 C 593.098,352.268 581.147,316.281 575.641,289.291 556.439,197.577 528.374,118.351 524.615,47.048 502.055,12 436.124,-0.622 415.042,43.825 c -12.757,94.533 15.576,174.028 25.245,274.47 2.819,29.677 22.29,68.618 0,89.969 -33.974,-3.626 -186.785,-163.957 -277.291,-278.901 -0.537,-0.537 -0.94,-1.074 -1.074,-1.478"
+ id="path15"
+ style="fill:none;stroke:#9c6b54;stroke-width:16;stroke-linecap:round" />
</g>
</g>
-</svg>
+</svg> \ 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 <http://www.gnu.org/licenses/>.
+#!/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 <http://www.gnu.org/licenses/>.
+#!/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 = []