Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--block.py16
-rw-r--r--constants.py3
-rw-r--r--sprites.py21
-rw-r--r--taproject.py48
-rw-r--r--tawindow.py11
5 files changed, 54 insertions, 45 deletions
diff --git a/block.py b/block.py
index 6913b0c..434b0ff 100644
--- a/block.py
+++ b/block.py
@@ -118,21 +118,21 @@ class Block:
svg.expand(40,0)
svg.set_innie([False])
svg.set_outie(False)
- svg.set_tab(False)
- svg.set_slot(True)
+ svg.set_tab(True)
+ svg.set_slot(False)
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))
+ print "created new basic block head: %s" % (str(self.spr))
self.spr.set_label(labels[0])
elif name in BASIC_STYLE_TAIL:
svg.expand(40,0)
svg.set_innie([False])
svg.set_outie(False)
- svg.set_tab(True)
- svg.set_slot(False)
+ svg.set_tab(False)
+ svg.set_slot(True)
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))
+ print "created new basic block tail: %s" % (str(self.spr))
self.spr.set_label(labels[0])
elif name in BASIC_STYLE_1ARG:
svg.expand(20,0)
@@ -142,7 +142,7 @@ class Block:
svg.set_slot(True)
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))
+ print "created new basic block 1 arg: %s" % (str(self.spr))
self.spr.set_label(labels[0])
elif name in BASIC_STYLE_2ARG:
svg.expand(20,0)
@@ -152,7 +152,7 @@ class Block:
svg.set_slot(True)
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))
+ print "created new basic block 2 args: %s" % (str(self.spr))
self.spr.set_label(labels[0])
elif name in BOX_STYLE:
svg.expand(50,0)
diff --git a/constants.py b/constants.py
index bc17705..47d6b86 100644
--- a/constants.py
+++ b/constants.py
@@ -25,12 +25,11 @@ 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']
+BLOCKS_PALETTE = ['start', 'string']
TURTLE_COLORS = ["#00FF00","#00A000"]
PEN_COLORS = ["#00FFFF","#00A0A0"]
diff --git a/sprites.py b/sprites.py
index af0ac25..2b5e9ad 100644
--- a/sprites.py
+++ b/sprites.py
@@ -51,10 +51,10 @@ class Sprites:
def length_of_list(self):
return(len(self.list))
- def append_to_list(self,spr):
+ def append_to_list(self, spr):
self.list.append(spr)
- def insert_in_list(self,spr,i):
+ def insert_in_list(self, spr, i):
if i < 0:
self.list.insert(0, spr)
elif i > len(self.list)-1:
@@ -62,7 +62,7 @@ class Sprites:
else:
self.list.insert(i, spr)
- def remove_from_list(self,spr):
+ def remove_from_list(self, spr):
if spr in self.list:
self.list.remove(spr)
@@ -99,8 +99,12 @@ class Sprite:
self.sprites.append_to_list(self)
def set_image(self, image):
+ if image is None:
+ self.width, self.height = 0,0
+ self.image = None
+ return
self.image = image
- if isinstance(self.image,gtk.gdk.Pixbuf):
+ if isinstance(self.image, gtk.gdk.Pixbuf):
self.width = self.image.get_width()
self.height = self.image.get_height()
else:
@@ -110,7 +114,6 @@ class Sprite:
self.inval()
self.x,self.y = pos
self.inval()
- self.sprites.redraw_sprites()
def set_shape(self, image):
self.inval()
@@ -166,21 +169,21 @@ 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(
gtk.gdk.Rectangle(self.x,self.y,self.width,self.height), False)
def draw(self):
- if isinstance(self.image,gtk.gdk.Pixbuf):
+ if isinstance(self.image, gtk.gdk.Pixbuf):
self.sprites.area.draw_pixbuf(
self.sprites.gc, self.image, 0, 0, self.x, self.y)
- else:
+ elif self.image is not None:
self.sprites.area.draw_drawable(
self.sprites.gc, self.image, 0, 0, self.x, self.y, -1, -1)
if len(self.labels) > 0:
self.draw_label()
+ # self.inval()
def hit(self, pos):
x, y = pos
@@ -196,7 +199,7 @@ class Sprite:
def draw_label(self):
for i in range(len(self.labels)):
- pl = self.sprites.canvas.create_pango_layout(self.labels[i])
+ pl = self.sprites.canvas.create_pango_layout(str(self.labels[i]))
self.fd.set_size(int(self.scale[i]*pango.SCALE))
pl.set_font_description(self.fd)
w = pl.get_size()[0]/pango.SCALE
diff --git a/taproject.py b/taproject.py
index 52dc961..b2b790e 100644
--- a/taproject.py
+++ b/taproject.py
@@ -144,7 +144,7 @@ def read_data(tw,data):
for b in data:
if b[1]=='turtle':
load_turtle(tw,b)
- else: spr = load_spr(tw,b); blocks.append(spr)
+ else: spr = load_spr(tw, b); blocks.append(spr)
for i in range(len(blocks)):
cons=[]
for c in data[i][4]:
@@ -162,26 +162,30 @@ def load_spr(tw,b):
if btype == 'journal' or btype == 'audiooff' or btype == 'descriptionoff':
media = label
label = None
- proto = tw.protodict[btype]
- spr = Sprite(tw,b[2]+tw.turtle.canvas.x,b[3]+tw.turtle.canvas.y, \
- proto.image)
+ try:
+ proto = tw.protodict[btype]
+ except KeyError:
+ print "swapping in a forward block for %s" % (btype)
+ proto = tw.protodict['forward']
+ spr = sprites.Sprite(tw.sprites,b[2]+tw.turtle.canvas.x,
+ b[3]+tw.turtle.canvas.y, proto.image)
spr.type = 'block'
spr.proto = proto
- if label is not None: spr.label=label
- if media is not None and \
- media not in nolabel:
+ if label is not None: spr.set_label(label)
+ if media is not None and media not in nolabel:
try:
dsobject = datastore.get(media)
spr.ds_id = dsobject.object_id
setimage(spr, tw.media_shapes[shape_dict[spr.proto.name]])
if spr.proto.name == 'journal':
- pixbuf = get_pixbuf_from_journal \
- (dsobject,spr.width,spr.height)
+ pixbuf = get_pixbuf_from_journal(dsobject,
+ spr.width,spr.height)
if pixbuf is not None:
setimage(spr, pixbuf)
dsobject.destroy()
except:
- print "couldn't open dsobject (" + str(spr.ds_id) + ")"
+ if hasattr(spr,"ds_id"):
+ print "couldn't open dsobject (" + str(spr.ds_id) + ")"
spr.set_layer(650)
return spr
@@ -207,11 +211,11 @@ def save_file(tw):
tw.save_file_name = os.path.basename(fname)
def get_save_name(tw):
- dialog = gtk.FileChooserDialog("Save...", None, \
- gtk.FILE_CHOOSER_ACTION_SAVE, \
- (gtk.STOCK_CANCEL, \
- gtk.RESPONSE_CANCEL, \
- gtk.STOCK_SAVE, \
+ dialog = gtk.FileChooserDialog("Save...", None,
+ gtk.FILE_CHOOSER_ACTION_SAVE,
+ (gtk.STOCK_CANCEL,
+ gtk.RESPONSE_CANCEL,
+ gtk.STOCK_SAVE,
gtk.RESPONSE_OK))
dialog.set_default_response(gtk.RESPONSE_OK)
if tw.save_file_name is not None:
@@ -251,16 +255,16 @@ def assemble_data_to_save(tw,save_turtle=True):
for b in bs:
name = b.proto.name
if tw.defdict.has_key(name) or name in nolabel:
- if b.ds_id != None:
- name=(name,str(b.ds_id))
+ if hasattr(b,"ds_id") and b.ds_id != None:
+ name=(name, str(b.ds_id))
else:
- name=(name,b.label)
+ name=(name, b.labels[0])
if hasattr(b,'connections'):
connections = [get_id(x) for x in b.connections]
else:
connections = None
- data.append((b.id,name,b.x-tw.turtle.canvas.x, \
- b.y-tw.turtle.canvas.y,connections))
+ data.append((b.id, name, b.x-tw.turtle.canvas.x,
+ b.y-tw.turtle.canvas.y, connections))
if save_turtle is True:
data.append((-1,'turtle',
tw.turtle.xcor,tw.turtle.ycor,tw.turtle.heading,
@@ -297,10 +301,10 @@ def assemble_stack_to_clone(tw):
for b in bs:
name = b.proto.name
if tw.defdict.has_key(name) or name in nolabel:
- if b.ds_id is not None:
+ if hasattr(b, "ds_id") and b.ds_id is not None:
name=(name,str(b.ds_id))
else:
- name=(name,b.label)
+ name=(name,b.labels[0])
if hasattr(b,'connections'):
connections = [get_id(x) for x in b.connections]
else:
diff --git a/tawindow.py b/tawindow.py
index ce007ba..fb84dd9 100644
--- a/tawindow.py
+++ b/tawindow.py
@@ -962,10 +962,13 @@ class TurtleArtWindow():
d1type,d1dir,d1x,d1y=dock1[0:4]
d2type,d2dir,d2x,d2y=dock2[0:4]
if (d2type!='num') or (dock2n!=0):
- if block1.connections[dock1n] != None:
- return (100,100)
- if block2.connections[dock2n] != None:
- return (100,100)
+ try:
+ if block1.connections[dock1n] != None:
+ return (100,100)
+ if block2.connections[dock2n] != None:
+ return (100,100)
+ except IndexError:
+ print "Indec Error %s %s" % (str(dock1n),str(dock2n))
if block1==block2: return (100,100)
if d1type!=d2type:
# some blocks can take strings or nums