Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--block.py19
-rw-r--r--sprites.py10
-rw-r--r--talogo.py18
-rw-r--r--taproject.py4
-rw-r--r--tasetup.py13
-rw-r--r--taturtle.py4
-rw-r--r--tawindow.py34
7 files changed, 59 insertions, 43 deletions
diff --git a/block.py b/block.py
index 45412b8..5a7cb3d 100644
--- a/block.py
+++ b/block.py
@@ -62,11 +62,11 @@ class Blocks:
# A class for the individual blocks
#
class Block:
- def __init__(self, blocks, prototype_style, labels=[],
+ def __init__(self, blocks, proto_name, x, y, labels=[],
colors=["#00A000","#00FF00"], scale=1.0):
self.blocks = blocks
self.spr = None
- self._new_block_from_prototype(prototype_style, labels, colors, scale)
+ self._new_block_from_prototype(proto_name, labels, colors, scale, x, y)
self.blocks.append_to_list(self)
#
# TODO:
@@ -78,10 +78,11 @@ class Block:
# debug code
# etc.
- def _new_block_from_prototype(self, proto_name, labels, colors, scale):
+ def _new_block_from_prototype(self, name, labels, colors, scale, x, y):
+ print "%s %s (%d %d)" % (name, labels[0], x, y)
basic_style = ['forward', 'back', 'left', 'right']
box_style = ['number']
- if proto_name in basic_style:
+ if name in basic_style:
svg = block_factory.SVG()
svg.set_scale(scale)
svg.expand(20,0)
@@ -91,15 +92,19 @@ class Block:
svg.set_slot(True)
svg.set_gradiant(True)
svg.set_colors(colors)
- self.spr = sprites.Sprite(self.blocks.sprites, 0, 0,
+ print "creating new basic block"
+ self.spr = sprites.Sprite(self.blocks.sprites, x, y,
svg_str_to_pixbuf(svg.basic_block()))
- elif proto_name in number_style:
+ 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(20,0)
svg.set_gradiant(True)
svg.set_colors(colors)
- self.spr = sprites.Sprite(self.blocks.sprites, 0, 0,
+ self.spr = sprites.Sprite(self.blocks.sprites, x, y,
svg_str_to_pixbuf(svg.basic_box()))
for l in labels:
diff --git a/sprites.py b/sprites.py
index e737057..bf1433d 100644
--- a/sprites.py
+++ b/sprites.py
@@ -31,10 +31,14 @@ import pango
# A class for the list of sprites and everything they share in common
#
class Sprites:
- def __init__(self, canvas):
+ def __init__(self, canvas, area=None, gc=None):
self.canvas = canvas
- self.area = self.canvas.window
- self.gc = self.area.new_gc()
+ if area == None:
+ self.area = self.canvas.window
+ self.gc = self.area.new_gc()
+ else:
+ self.area = area
+ self.gc = gc
self.cm = self.gc.get_colormap()
self.list = []
diff --git a/talogo.py b/talogo.py
index 849e1e7..6487ec8 100644
--- a/talogo.py
+++ b/talogo.py
@@ -158,7 +158,7 @@ def readline(lc, line):
return res
def setup_cmd(lc, str):
- lc.tw.turtle.spr.setlayer(100)
+ lc.tw.turtle.spr.set_layer(100)
lc.procstop=False
list = readline(lc, str)
lc.step = start_eval(lc, list)
@@ -176,11 +176,11 @@ def evline(lc, list):
lc.arglist = None
while lc.iline:
if lc.tw.step_time > 0:
- lc.tw.turtle.spr.setlayer(630)
+ lc.tw.turtle.spr.set_layer(630)
endtime = millis()+an_int(lc,lc.tw.step_time)*100
while millis()<endtime:
yield True
- lc.tw.turtle.spr.setlayer(100)
+ lc.tw.turtle.spr.set_layer(100)
token = lc.iline[0]
if token==lc.symopar: token=lc.iline[1]
icall(lc, eval); yield True
@@ -274,7 +274,7 @@ def debug_trace(lc, token):
shp = 'info'
setshape(lc.tw.status_spr, lc.tw.status_shapes[shp])
setlabel(lc.tw.status_spr, _(my_string))
- lc.tw.status_spr.setlayer(710)
+ lc.tw.status_spr.set_layer(710)
return
def undefined_check(lc, token):
@@ -286,11 +286,11 @@ def no_args_check(lc):
raise logoerror("#noinput")
def prim_wait(lc,time):
- lc.tw.turtle.spr.setlayer(630)
+ lc.tw.turtle.spr.set_layer(630)
endtime = millis()+an_int(lc,time*1000)
while millis()<endtime:
yield True
- lc.tw.turtle.spr.setlayer(100)
+ lc.tw.turtle.spr.set_layer(100)
ireturn(lc); yield True
def prim_repeat(lc, num, list):
@@ -989,11 +989,11 @@ def doevalstep(lc):
try:
lc.step.next()
except StopIteration:
- lc.tw.turtle.spr.setlayer(630)
+ lc.tw.turtle.spr.set_layer(630)
return False
except logoerror, e:
showlabel(lc, str(e)[1:-1])
- lc.tw.turtle.spr.setlayer(630)
+ lc.tw.turtle.spr.set_layer(630)
return False
return True
@@ -1069,7 +1069,7 @@ def showlabel(lc,label):
shp = 'status'
setshape(lc.tw.status_spr, lc.tw.status_shapes[shp])
setlabel(lc.tw.status_spr, label)
- lc.tw.status_spr.setlayer(710)
+ lc.tw.status_spr.set_layer(710)
def stop_logo(tw):
tw.step_time = 0
diff --git a/taproject.py b/taproject.py
index 8fde7c7..fa22271 100644
--- a/taproject.py
+++ b/taproject.py
@@ -59,7 +59,7 @@ shape_dict = {'journal':'texton', \
def new_project(tw):
stop_logo(tw)
for b in blocks(tw): hide(b)
- tw.turtle.canvas.setlayer(600)
+ tw.turtle.canvas.set_layer(600)
clearscreen(tw.turtle)
tw.save_file_name = None
@@ -181,7 +181,7 @@ def load_spr(tw,b):
dsobject.destroy()
except:
print "couldn't open dsobject (" + str(spr.ds_id) + ")"
- spr.setlayer(650)
+ spr.set_layer(650)
return spr
def load_turtle(tw,b):
diff --git a/tasetup.py b/tasetup.py
index 767ac7a..3179e94 100644
--- a/tasetup.py
+++ b/tasetup.py
@@ -31,6 +31,9 @@ from gettext import gettext as _
from tasprites import *
+import block
+import sprites
+
def numcheck(new, old):
if new is '': return "0"
if new in ['-', '.', '-.']: return new
@@ -264,7 +267,7 @@ def setup_selectors(tw,s):
def setup_misc(tw):
tw.category_spr = Sprite(tw,0, 0, tw.selbuttons[0].group)
tw.category_spr.type = 'category'
- tw.category_spr.setlayer(660)
+ tw.category_spr.set_layer(660)
# masks get positioned on top of other blocks
tw.select_mask = Sprite(tw,100,100,\
load_image(tw, tw.path, '', 'masknumber'))
@@ -287,12 +290,12 @@ def setup_misc(tw):
tw.cartesian_coordinates_spr = Sprite(tw, tw.width/2-600, tw.height/2-450, \
load_image(tw, tw.path, '', "Cartesian"))
tw.cartesian_coordinates_spr.type = 'coordinates'
- tw.cartesian_coordinates_spr.setlayer(610)
+ tw.cartesian_coordinates_spr.set_layer(610)
tw.cartesian_coordinates_spr.hide()
tw.polar_coordinates_spr = Sprite(tw, tw.width/2-600, tw.height/2-450, \
load_image(tw, tw.path, '', "polar"))
tw.polar_coordinates_spr.type = 'coordinates'
- tw.polar_coordinates_spr.setlayer(610)
+ tw.polar_coordinates_spr.set_layer(610)
tw.polar_coordinates_spr.hide()
# status shapes get positioned at the bottom of the screen
tw.status_shapes = {}
@@ -310,7 +313,7 @@ def setup_misc(tw):
tw.status_spr = Sprite(tw,0,(tw.height-175), \
tw.status_shapes['status'],True)
tw.status_spr.type = 'status'
- tw.status_spr.setlayer(900)
+ tw.status_spr.set_layer(900)
tw.status_spr.hide()
# everything should be loaded at this point
# print tw.status_shapes
@@ -321,7 +324,7 @@ def setup_selector(tw,name,y,blockdescriptions):
offshape = load_image(tw, tw.path, 'palette', name+'off')
onshape = load_image(tw, tw.path, 'palette', name+'on')
spr = Sprite(tw,143,y,offshape)
- spr.setlayer(800)
+ spr.set_layer(800)
spr.offshape = offshape
spr.onshape = onshape
# print 'setting up selector ' + name
diff --git a/taturtle.py b/taturtle.py
index 524a35f..350b9b5 100644
--- a/taturtle.py
+++ b/taturtle.py
@@ -56,12 +56,12 @@ def tNew(tw,w,h):
t.tw, t.width, t.height = tw, w, h
t.canvas = Sprite(tw,0,0,gtk.gdk.Pixmap(tw.area,w,h,-1))
t.canvas.type = 'canvas'
- t.canvas.setlayer(600)
+ t.canvas.set_layer(600)
t.shapelist = \
[load_image(tw, tw.path, 'shapes','t'+str(i)) for i in range(36)]
t.spr = Sprite(tw,100,100,t.shapelist[0])
t.spr.type = 'turtle'
- t.spr.setlayer(630)
+ t.spr.set_layer(630)
t.gc = t.canvas.image.new_gc()
t.shade = 0
clearscreen(t)
diff --git a/tawindow.py b/tawindow.py
index 7d61fc0..6126f6e 100644
--- a/tawindow.py
+++ b/tawindow.py
@@ -152,7 +152,7 @@ class TurtleArtWindow():
"""
NEW SVG/BLOCK initializations
"""
- self.nsprites = sprites.Sprites(self.window)
+ self.nsprites = sprites.Sprites(self.window, self.area, self.gc)
self.blocks = block.Blocks(self.nsprites)
@@ -166,7 +166,7 @@ class TurtleArtWindow():
eraser_button: hide status block
"""
def eraser_button(self):
- self.status_spr.setlayer(400)
+ self.status_spr.set_layer(400)
clear(self.lc)
display_coordinates(self)
@@ -191,13 +191,13 @@ class TurtleArtWindow():
"""
def hideshow_button(self):
if self.hide is False:
- for b in self._blocks(): b.setlayer(100)
+ for b in self._blocks(): b.set_layer(100)
self._hide_palette()
self.select_mask.hide()
self.select_mask_string.hide()
self.hide = True
else:
- for b in self._blocks(): b.setlayer(650)
+ for b in self._blocks(): b.set_layer(650)
self.show_palette()
self.hide = False
inval(self.turtle.canvas)
@@ -234,7 +234,7 @@ class TurtleArtWindow():
if self.selected_block != None:
self._unselect()
else:
- self.status_spr.setlayer(400)
+ self.status_spr.set_layer(400)
spr = findsprite(self,(x,y))
self.x, self.y = x,y
self.dx = 0
@@ -274,7 +274,7 @@ class TurtleArtWindow():
show palette
"""
def show_palette(self):
- for i in self.selbuttons: i.setlayer(800)
+ for i in self.selbuttons: i.set_layer(800)
self._select_category(self.selbuttons[0])
self.palette = True
@@ -588,7 +588,8 @@ class TurtleArtWindow():
self.run_button(0)
elif self.spr is not None:
if self.spr.type == 'turtle': # jog turtle with arrow keys
- if keyname == 'KP_Up' or keyname == 'j' or keyname == 'Up':
+ if keyname == 'KP_Up' or keyname == 'j' \
+ or keyname == 'Up':
self._jog_turtle(0,10)
elif keyname == 'KP_Down' or keyname == 'k' or \
keyname == 'Down':
@@ -728,19 +729,19 @@ class TurtleArtWindow():
for b in self.draggroup:
b.move((b.x+200, b.y))
self._snap_to_dock()
- for b in self.draggroup: b.setlayer(650)
+ for b in self.draggroup: b.set_layer(650)
self.draggroup = None
if self.block_operation=='click':
if self.spr.proto.name=='number':
self.selected_block = spr
self.select_mask.move((spr.x-5,spr.y-5))
- self.select_mask.setlayer(660)
+ self.select_mask.set_layer(660)
self.firstkey = True
elif self.defdict.has_key(spr.proto.name):
self.selected_block = spr
if self.spr.proto.name=='string':
self.select_mask_string.move((spr.x-5,spr.y-5))
- self.select_mask_string.setlayer(660)
+ self.select_mask_string.set_layer(660)
self.firstkey = True
elif self.spr.proto.name in self.importblocks:
self._import_from_journal(spr)
@@ -758,13 +759,13 @@ class TurtleArtWindow():
if self.spr.proto.name=='number':
self.selected_block = self.spr
self.select_mask.move((self.spr.x-5,self.spr.y-5))
- self.select_mask.setlayer(660)
+ self.select_mask.set_layer(660)
self.firstkey = True
elif self.defdict.has_key(self.spr.proto.name):
self.selected_block = self.spr
if self.spr.proto.name=='string':
self.select_mask_string.move((self.spr.x-5,self.spr.y-5))
- self.select_mask_string.setlayer(660)
+ self.select_mask_string.set_layer(660)
self.firstkey = True
elif self.spr.proto.name in self.importblocks:
self._import_from_journal(self.spr)
@@ -895,7 +896,10 @@ class TurtleArtWindow():
newspr = Sprite(self,x-20,y-20,self.media_shapes['pythonloaded'])
else:
newspr = Sprite(self,x-20,y-20,proto.image)
- newspr.setlayer(2000)
+ newblk = block.Block(self.blocks,proto.name,x-20,y-20,[proto.name])
+ newspr = newblk.spr
+
+ newspr.set_layer(2000)
self.dragpos = 20,20
newspr.type = 'block'
newspr.proto = proto
@@ -911,7 +915,7 @@ class TurtleArtWindow():
argspr.type = 'block'
argspr.proto = argproto
argspr.label = str(proto.defaults[i])
- argspr.setlayer(2000)
+ argspr.set_layer(2000)
argspr.connections = [newspr,None]
newspr.connections[i+1] = argspr
self.draggroup = findgroup(newspr)
@@ -925,7 +929,7 @@ class TurtleArtWindow():
def _block_pressed(self, mask, x, y, spr):
if spr is not None:
self.draggroup = findgroup(spr)
- for b in self.draggroup: b.setlayer(2000)
+ for b in self.draggroup: b.set_layer(2000)
if spr.connections[0] != None and spr.proto.name == 'lock':
b = self._find_top_block(spr)
self.dragpos = x-b.x,y-b.y