Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--block.py54
-rwxr-xr-xblock_factory.py2
-rw-r--r--constants.py59
-rw-r--r--sprites.py2
-rw-r--r--talogo.py8
-rw-r--r--taproject.py9
-rw-r--r--tasetup.py42
-rw-r--r--tasprites.py5
-rw-r--r--taturtle.py1
-rw-r--r--tawindow.py26
-rwxr-xr-xturtleart.py4
11 files changed, 128 insertions, 84 deletions
diff --git a/block.py b/block.py
index 7564b6d..6913b0c 100644
--- a/block.py
+++ b/block.py
@@ -92,92 +92,70 @@ class Block:
print "%s (%d %d)" % (name, x, y)
else:
print "%s %s (%d %d)" % (name, labels[0], x, y)
+
+ svg = block_factory.SVG()
+ if name in TURTLE_PALETTE:
+ svg.set_colors(TURTLE_COLORS)
+ elif name in PEN_PALETTE:
+ svg.set_colors(PEN_COLORS)
+ elif name in NUMBER_PALETTE:
+ svg.set_colors(NUMBER_COLORS)
+ elif name in BLOCKS_PALETTE:
+ svg.set_colors(BLOCKS_COLORS)
+ svg.set_scale(scale)
+ svg.set_gradiant(True)
if name in BASIC_STYLE:
- svg = block_factory.SVG()
- svg.set_scale(scale)
- svg.expand(20,0)
+ svg.expand(40,0)
svg.set_innie([False])
svg.set_outie(False)
svg.set_tab(True)
svg.set_slot(True)
- svg.set_gradiant(True)
- svg.set_colors(colors)
self.spr = sprites.Sprite(self.blocks.sprites, x, y,
svg_str_to_pixbuf(svg.basic_block()))
print "created new basic block: %s" % (str(self.spr))
- self.spr.set_layer(2000)
- self.spr.draw()
self.spr.set_label(labels[0])
elif name in BASIC_STYLE_HEAD:
- svg = block_factory.SVG()
- svg.set_scale(scale)
- svg.expand(20,0)
+ svg.expand(40,0)
svg.set_innie([False])
svg.set_outie(False)
svg.set_tab(False)
svg.set_slot(True)
- svg.set_gradiant(True)
- svg.set_colors(colors)
self.spr = sprites.Sprite(self.blocks.sprites, x, y,
svg_str_to_pixbuf(svg.basic_block()))
print "created new basic block: %s" % (str(self.spr))
- self.spr.set_layer(2000)
- self.spr.draw()
self.spr.set_label(labels[0])
elif name in BASIC_STYLE_TAIL:
- svg = block_factory.SVG()
- svg.set_scale(scale)
- svg.expand(20,0)
+ svg.expand(40,0)
svg.set_innie([False])
svg.set_outie(False)
svg.set_tab(True)
svg.set_slot(False)
- svg.set_gradiant(True)
- svg.set_colors(colors)
self.spr = sprites.Sprite(self.blocks.sprites, x, y,
svg_str_to_pixbuf(svg.basic_block()))
print "created new basic block: %s" % (str(self.spr))
- self.spr.set_layer(2000)
- self.spr.draw()
self.spr.set_label(labels[0])
elif name in BASIC_STYLE_1ARG:
- svg = block_factory.SVG()
- svg.set_scale(scale)
svg.expand(20,0)
svg.set_innie([True])
svg.set_outie(False)
svg.set_tab(True)
svg.set_slot(True)
- svg.set_gradiant(True)
- svg.set_colors(colors)
self.spr = sprites.Sprite(self.blocks.sprites, x, y,
svg_str_to_pixbuf(svg.basic_block()))
print "created new basic block: %s" % (str(self.spr))
- self.spr.set_layer(2000)
- self.spr.draw()
self.spr.set_label(labels[0])
elif name in BASIC_STYLE_2ARG:
- svg = block_factory.SVG()
- svg.set_scale(scale)
svg.expand(20,0)
svg.set_innie([True,True])
svg.set_outie(False)
svg.set_tab(True)
svg.set_slot(True)
- svg.set_gradiant(True)
- svg.set_colors(colors)
self.spr = sprites.Sprite(self.blocks.sprites, x, y,
svg_str_to_pixbuf(svg.basic_block()))
print "created new basic block: %s" % (str(self.spr))
- self.spr.set_layer(2000)
- self.spr.draw()
self.spr.set_label(labels[0])
elif name in BOX_STYLE:
- svg = block_factory.SVG()
- svg.set_scale(scale)
- svg.expand(60,0)
- svg.set_gradiant(True)
- svg.set_colors(colors)
+ svg.expand(50,0)
self.spr = sprites.Sprite(self.blocks.sprites, x, y,
svg_str_to_pixbuf(svg.basic_box()))
print "created new box block: %s" % (str(self.spr))
diff --git a/block_factory.py b/block_factory.py
index 66b2516..061d624 100755
--- a/block_factory.py
+++ b/block_factory.py
@@ -47,7 +47,7 @@ class SVG:
self._tab = True
self._bool = False
self._slot_x = 12
- self._slot_y = 4
+ self._slot_y = 2
self._porch = False
self._porch_x = self._innie_x1+self._innie_x2+4*self._stroke_width
self._porch_y = self._innie_y1+self._innie_y2+4*self._stroke_width
diff --git a/constants.py b/constants.py
new file mode 100644
index 0000000..bc17705
--- /dev/null
+++ b/constants.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+#Copyright (c) 2009, Walter Bender
+
+# This program 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.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+from gettext import gettext as _
+
+# block to proto tables
+BASIC_STYLE_HEAD = ['start', 'action 1', 'action 2']
+BASIC_STYLE_TAIL = ['stop action']
+BASIC_STYLE = ['clean', 'pen up', 'pen down', 'action 1', 'action 2', 'nop' ]
+BASIC_STYLE_1ARG = ['forward', 'back', 'left', 'right', 'seth', 'show',\
+ 'set scale', 'set pen size', 'set color', 'set shade'\
+ 'set text size', 'set text color', 'print', 'wait', 'store in box 1',\
+ 'store in box 2']
+BASIC_STYLE_2ARG = ['arc', 'setxy', 'fill screen']
+BOX_STYLE = ['number', 'xcor', 'ycor', 'heading', 'pen size', 'color', 'shade'\
+ 'text color', 'text size', 'box 1', 'box 2', 'string']
+
+
+TURTLE_PALETTE = ['clean', 'forward', 'back', 'left', 'right', 'seth', 'show',\
+ 'set_scale', 'xcor', 'ycor', 'heading']
+PEN_PALETTE = ['pen up','pen down']
+NUMBER_PALETTE = ['number']
+BLOCKS_PALETTE = ['string']
+
+TURTLE_COLORS = ["#00FF00","#00A000"]
+PEN_COLORS = ["#00FFFF","#00A0A0"]
+NUMBER_COLORS = ["#FF00FF","#A000A0"]
+BLOCKS_COLORS = ["#FFFF00","#A0A000"]
+
+# 'dead key' Unicode dictionaries
+DEAD_KEYS = ['grave','acute','circumflex','tilde','diaeresis','abovering']
+DEAD_DICTS = [{'A':192,'E':200,'I':204,'O':210,'U':217,'a':224,'e':232,'i':236,\
+ 'o':242,'u':249},
+ {'A':193,'E':201,'I':205,'O':211,'U':218,'a':225,'e':233,'i':237,\
+ 'o':243,'u':250},
+ {'A':194,'E':202,'I':206,'O':212,'U':219,'a':226,'e':234,\
+ 'i':238,'o':244,'u':251},
+ {'A':195,'O':211,'N':209,'U':360,'a':227,'o':245,'n':241,'u':361},
+ {'A':196,'E':203,'I':207,'O':211,'U':218,'a':228,'e':235,\
+ 'i':239,'o':245,'u':252},
+ {'A':197,'a':229}]
+NOISE_KEYS = ['Shift_L', 'Shift_R', 'Control_L', 'Caps_Lock', 'Pause',\
+ 'Alt_L', 'Alt_R', 'KP_Enter', 'ISO_Level3_Shift', 'KP_Divide',\
+ 'Escape', 'Return', 'KP_Page_Up', 'Up', 'Down', 'Menu',\
+ 'Left', 'Right', 'KP_Home', 'KP_End', 'KP_Up', 'Super_L',\
+ 'KP_Down', 'KP_Left', 'KP_Right', 'KP_Page_Down', 'Scroll_Lock',\
+ 'Page_Down', 'Page_Up']
+WHITE_SPACE = ['space','Tab']
+
diff --git a/sprites.py b/sprites.py
index 9f8c969..af0ac25 100644
--- a/sprites.py
+++ b/sprites.py
@@ -110,6 +110,7 @@ class Sprite:
self.inval()
self.x,self.y = pos
self.inval()
+ self.sprites.redraw_sprites()
def set_shape(self, image):
self.inval()
@@ -165,6 +166,7 @@ class Sprite:
def hide(self):
self.inval()
self.sprites.remove_from_list(self)
+ self.sprites.redraw_sprites()
def inval(self):
self.sprites.area.invalidate_rect(
diff --git a/talogo.py b/talogo.py
index 9ca6210..1a54be5 100644
--- a/talogo.py
+++ b/talogo.py
@@ -272,8 +272,8 @@ def debug_trace(lc, token):
tmp = k +":" + str(v) + "\n"
my_string += tmp
shp = 'info'
- setshape(lc.tw.status_spr, lc.tw.status_shapes[shp])
- setlabel(lc.tw.status_spr, _(my_string))
+ lc.tw.status_spr.set_shape(lc.tw.status_shapes[shp])
+ lc.tw.status_spr.set_label(_(my_string))
lc.tw.status_spr.set_layer(710)
return
@@ -1067,8 +1067,8 @@ def showlabel(lc,label):
label=''
else:
shp = 'status'
- setshape(lc.tw.status_spr, lc.tw.status_shapes[shp])
- setlabel(lc.tw.status_spr, label)
+ lc.tw.status_spr.set_shape(lc.tw.status_shapes[shp])
+ lc.tw.status_spr.set_label(label)
lc.tw.status_spr.set_layer(710)
def stop_logo(tw):
diff --git a/taproject.py b/taproject.py
index fa22271..52dc961 100644
--- a/taproject.py
+++ b/taproject.py
@@ -42,7 +42,7 @@ except (ImportError, AttributeError):
from StringIO import StringIO
import os.path
-from tasprites import *
+# from tasprites import *
from taturtle import *
from talogo import stop_logo
from talogo import get_pixbuf_from_journal
@@ -50,6 +50,7 @@ try:
from sugar.datastore import datastore
except:
pass
+import sprites
nolabel = ['audiooff', 'descriptionoff', 'journal']
shape_dict = {'journal':'texton', \
@@ -58,7 +59,7 @@ shape_dict = {'journal':'texton', \
def new_project(tw):
stop_logo(tw)
- for b in blocks(tw): hide(b)
+ for b in blocks(tw): b.hide()
tw.turtle.canvas.set_layer(600)
clearscreen(tw.turtle)
tw.save_file_name = None
@@ -283,7 +284,7 @@ def serialize_stack(tw):
def assemble_stack_to_clone(tw):
if tw.spr is None or tw.spr.type is not "block":
(x,y) = tw.window.get_pointer()
- spr = findsprite(tw,(x,y))
+ spr = tw.sprites.find_sprite((x,y))
if spr is not None:
print "found block of type " + spr.type
else:
@@ -334,7 +335,7 @@ def do_dialog(tw,dialog):
dialog.destroy()
return result
-def blocks(tw): return [spr for spr in tw.sprites if spr.type == 'block']
+def blocks(tw): return [spr for spr in tw.sprites.list if spr.type == 'block']
def findgroup(b):
group=[b]
diff --git a/tasetup.py b/tasetup.py
index 6e1f727..8661f31 100644
--- a/tasetup.py
+++ b/tasetup.py
@@ -57,7 +57,7 @@ selectors = (
('setxy','setxy','twoargs',0,0),
('seth','seth','onearg',0),
('show','show','onesarg',_('text')),
- ('setscale','setscale','onearg',33),
+ ('set scale','setscale','onearg',33),
('show','show','onecarg','None'),
('xcor','xcor','num'),
('ycor','ycor','num'),
@@ -68,15 +68,15 @@ selectors = (
('image','insertimage','image','None'),
('write','write','1sarg',_('text'),32))),
('pen', 55,
- (('penup','penup','noarg'),
- ('pendown','pendown','noarg'),
- ('setpensize','setpensize','1arg',5),
- ('settextsize','settextsize','1arg',32),
- ('setcolor','setcolor','1arg',0),
- ('setshade','setshade','1arg',50),
- ('fillscreen','fillscreen','twoargs',60,80),
- ('pensize','pensize','num'),
- ('textsize','textsize','num'),
+ (('pen up','penup','noarg'),
+ ('pen down','pendown','noarg'),
+ ('set pen size','setpensize','1arg',5),
+ ('set text size','settextsize','1arg',32),
+ ('set color','setcolor','1arg',0),
+ ('set shade','setshade','1arg',50),
+ ('fill screen','fillscreen','twoargs',60,80),
+ ('pen size','pensize','num'),
+ ('text_size','textsize','num'),
('color','color','num'),
('shade','shade','num'),
('red','red','num'),
@@ -87,8 +87,8 @@ selectors = (
('blue','blue','num'),
('purple','purple','num'),
# not selectable, but here for backward compatability
- ('settextcolor','settextcolor','1arg',0),
- ('textcolor','textcolor','num'))),
+ ('set_text_color','settextcolor','1arg',0),
+ ('text_color','textcolor','num'))),
('numbers', 55,
(('number','','num',100,float,numcheck),
('plus2','plus','newari'),
@@ -118,8 +118,8 @@ selectors = (
('forever','forever','forever'),
('repeat','repeat','repeat',4),
('if','if','if'),
- ('stopstack','stopstack','stop'),
- ('ifelse','ifelse','ifelse'),
+ ('stop_stack','stopstack','stop'),
+ ('if else','ifelse','ifelse'),
('hspace','nop','hspace'),
('vspace','nop','vspace'),
# not selectable, but here for backward compatability
@@ -133,14 +133,14 @@ selectors = (
('hat','nop3','starts',_('action')),
('stack','stack','sarg',_('action')),
('storeinbox1','storeinbox1','1arg'),
- ('box1','box1','num'),
+ ('box 1','box1','num'),
('storeinbox2','storeinbox2','1arg'),
- ('box2','box2','num'),
- ('storein','storeinbox','1varg',_('box'),100),
+ ('box 2','box2','num'),
+ ('store in','storeinbox','1varg',_('box'),100),
('box','box','nfuncs',_('box')),
('string','','string',_('name'),str,strcheck),
# not selectable, but here for backward compatability
- ('storeinbox','storeinbox','1sarg',_('box'),100))),
+ ('store in box','storeinbox','1sarg',_('box'),100))),
('sensors', 55,
(('kbinput','kbinput','noarg2'),
('keyboard','keyboard','num'),
@@ -318,7 +318,8 @@ def setup_misc(tw):
# tw.status_spr = Sprite(tw,0,(tw.height-175), \
tw.status_spr = sprites.Sprite(tw.sprites, 0, (tw.height-175), \
tw.status_shapes['status'])
- tw.status_spr.set_label_attributes(1.0, True, "left")
+ tw.status_spr.set_label("test")
+ # tw.status_spr.set_label_attributes(1.0, True, "left")
tw.status_spr.type = 'status'
tw.status_spr.set_layer(900)
tw.status_spr.hide()
@@ -344,7 +345,8 @@ def setup_selector(tw,name,y,blockdescriptions):
protos = []
for b in blockdescriptions:
bname,primname,docktype = b[0:3]
- image = load_image(tw, tw.path_lang, name, bname)
+ # image = load_image(tw, tw.path_lang, name, bname)
+ image = None
proto = taProto()
proto.name = bname
proto.image = image
diff --git a/tasprites.py b/tasprites.py
index 6a7a44f..327e503 100644
--- a/tasprites.py
+++ b/tasprites.py
@@ -45,7 +45,8 @@ def redrawsprites(tw):
class Sprite():
def __init__(self, tw, x, y, image, altlabel=False):
- self.tw, self.x, self.y = tw,x,y
+ print "graphics context %s" % (str(tw.gc))
+ self.tw, self.x, self.y = tw, x, y
self.setimage(image)
self.label = None
self.ds_id = None
@@ -88,7 +89,7 @@ class Sprite():
def setshapex(self):
self.inval()
- def setlayer(self, layer):
+ def set_layer(self, layer):
sprites = self.tw.sprites
if self in sprites: sprites.remove(self)
self.layer = layer
diff --git a/taturtle.py b/taturtle.py
index 3423533..f11b579 100644
--- a/taturtle.py
+++ b/taturtle.py
@@ -26,6 +26,7 @@ class taTurtle: pass
# from tasprites import *
from tasetup import load_image
import sprites
+import pango
colors = {}
DEGTOR = 2*pi/360
diff --git a/tawindow.py b/tawindow.py
index 8e7a9ed..ce007ba 100644
--- a/tawindow.py
+++ b/tawindow.py
@@ -188,7 +188,7 @@ class TurtleArtWindow():
for b in self._blocks(): b.set_layer(650)
self.show_palette()
self.hide = False
- inval(self.turtle.canvas)
+ self.turtle.canvas.inval()
"""
@@ -273,19 +273,19 @@ class TurtleArtWindow():
unselect
"""
def _unselect(self):
- if self.selected_block.label in ['-', '.', '-.']:
- setlabel(self.selected_block,'0')
+ if self.selected_block.labels[0] in ['-', '.', '-.']:
+ self.selected_block.set_label('0')
# put an upper and lower bound on numbers to prevent OverflowError
if self.selected_block.proto.name == 'number' and \
- self.selected_block.label is not None:
+ self.selected_block.labels[0] is not None:
try:
- i = float(self.selected_block.label)
+ i = float(self.selected_block.labels[0])
if i > 1000000:
- setlabel(self.selected_block,'1')
+ self.selected_block.set_label('1')
showlabel(self.lc,"#overflowerror")
elif i < -1000000:
- setlabel(self.selected_block,'-1')
+ self.selected_block.set_label('-1')
showlabel(self.lc,"#overflowerror")
except ValueError:
pass
@@ -551,14 +551,14 @@ class TurtleArtWindow():
self.selected_block.proto.name == 'number':
if keyname in ['minus', 'period']:
keyname = {'minus': '-', 'period': '.'}[keyname]
- oldnum = self.selected_block.label
+ oldnum = self.selected_block.labels[0]
selblock=self.selected_block.proto
if keyname == 'BackSpace':
if len(oldnum) > 1:
newnum = oldnum[:len(oldnum)-1]
else:
newnum = ''
- setlabel(self.selected_block, selblock.check(newnum,oldnum))
+ self.selected_block.set_label(selblock.check(newnum,oldnum))
if len(newnum) > 0:
self.firstkey = False
else:
@@ -634,14 +634,14 @@ class TurtleArtWindow():
keyunicode = 0
if keyname in WHITE_SPACE:
keyunicode = 32
- oldnum = self.selected_block.label
+ oldnum = self.selected_block.labels[0]
selblock=self.selected_block.proto
if keyname == 'BackSpace':
if len(oldnum) > 1:
newnum = oldnum[:len(oldnum)-1]
else:
newnum = ''
- setlabel(self.selected_block, selblock.check(newnum,oldnum))
+ self.selected_block.set_label(selblock.check(newnum,oldnum))
if len(newnum) > 0:
self.firstkey = False
else:
@@ -661,7 +661,7 @@ class TurtleArtWindow():
newnum = oldnum
else:
newnum = ""
- setlabel(self.selected_block, selblock.check(newnum,oldnum))
+ self.selected_block.set_label(selblock.check(newnum,oldnum))
self.firstkey = False
return True
@@ -884,7 +884,7 @@ class TurtleArtWindow():
newspr.type = 'block'
newspr.proto = proto
if self.defdict.has_key(newspr.proto.name):
- newspr.label=self.defdict[newspr.proto.name]
+ newspr.labels[0]=self.defdict[newspr.proto.name]
newspr.connections = [None]*len(proto.docks)
for i in range(len(proto.defaults)):
dock = proto.docks[i+1]
diff --git a/turtleart.py b/turtleart.py
index 9304e79..fa45843 100755
--- a/turtleart.py
+++ b/turtleart.py
@@ -159,12 +159,12 @@ class TurtleMain():
def _do_run_cb(self, widget):
self.tw.lc.trace = 0
- self.tw.runbutton(0)
+ self.tw.run_button(0)
return
def _do_step_cb(self, widget):
self.tw.lc.trace = 0
- self.tw.runbutton(3)
+ self.tw.run_button(3)
return
def _do_stop_cb(self, widget):