From a9e9ea6d6e51832e8a71b981267366a6f42f5fe7 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Thu, 21 Jan 2010 01:32:57 +0000 Subject: minor tweaking to chase down refresh bug --- 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 -- cgit v0.9.1