From 267488a2b99878a400a69591332d32764df1087c Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Thu, 28 Jan 2010 20:59:15 +0000 Subject: values stored in block; palette code cleanup --- diff --git a/block.py b/block.py index 9a28cbe..df306ab 100644 --- a/block.py +++ b/block.py @@ -74,7 +74,7 @@ class Block: # debug code # etc. def __init__(self, block_list, sprite_list, name, x, y, type='block', - labels=[], scale=2.0, colors=["#00FF00","#00A000"]): + values=[], scale=2.0, colors=["#00FF00","#00A000"]): self.spr = None self.shapes = [] self.name = name @@ -82,7 +82,7 @@ class Block: self.scale = scale self.docks = None self.connections = None - self.defaults = [] + self.values = [] self.content = None self.primitive = None self.type = type @@ -96,13 +96,13 @@ class Block: for i in range(len(self._font_size)): self._font_size[i] *= self.scale*block_list.font_scale_factor - self._new_block_from_factory(sprite_list, labels, x, y) + self.values = values - if DEFAULTS.has_key(self.name): - self.defaults = DEFAULTS[self.name] + self._new_block_from_factory(sprite_list, x, y) + # TODO: add media block graphics here if name in CONTENT_BLOCKS: - self.content = self,name + self.content = self.name if PRIMITIVES.has_key(name): self.primitive = PRIMITIVES[self.name] @@ -129,9 +129,10 @@ class Block: self._make_block(e, self.svg) self.spr.set_shape(self.shapes[0]) - def _new_block_from_factory(self, sprite_list, labels, x, y): + def _new_block_from_factory(self, sprite_list, x, y): - # print "new block: %s (%d %d)" % (self.name, x, y) + if self.type == 'block': + print "new block: %s (%d %d)" % (self.name, x, y) self.svg = SVG() self.svg.set_scale(self.scale) @@ -147,15 +148,14 @@ class Block: self.spr.set_margins(self._left, self.svg.get_slot_depth(), self._right, self.svg.get_slot_depth()*2) - # If labels were passed, use them; - if len(labels) > 0: - for i, l in enumerate(labels): - self._set_labels(i, l) - # otherwise use default values; + if self.name in CONTENT_BLOCKS and len(self.values) > 0: + for i, v in enumerate(self.values): + self._set_labels(i, str(v)) elif BLOCK_NAMES.has_key(self.name): - for i, l in enumerate(BLOCK_NAMES[self.name]): - self._set_labels(i, l) - # and make sure the labels fit. + for i, n in enumerate(BLOCK_NAMES[self.name]): + self._set_labels(i, n) + + # Make sure the labels fit. self.resize() def _set_labels(self, i, label): @@ -221,14 +221,14 @@ class Block: self.svg.set_colors(self.colors) def _make_basic_style(self, e, svg): - self.svg.expand(40+e, 0) + self.svg.expand(25+e, 0) self._make_basic_block(svg) self.docks = (('flow',True,self.svg.docks[0][0],self.svg.docks[0][1]), ('flow',False,self.svg.docks[1][0],self.svg.docks[1][1])) self._left, self._right = 2, 2 def _make_basic_style_head(self, e, svg): - self.svg.expand(40+e, 0) + self.svg.expand(25+e, 0) self.svg.set_slot(False) self.svg.set_cap(True) self._make_basic_block(svg) @@ -238,7 +238,7 @@ class Block: self._left, self._right = 2, 2 def _make_basic_style_head_1arg(self, e, svg): - self.svg.expand(40+e, 0) + self.svg.expand(25+e, 0) self.svg.set_innie([True]) self.svg.set_slot(False) self.svg.set_cap(True) @@ -251,7 +251,7 @@ class Block: self._left, self._right = 2, self.svg.get_innie_width() def _make_basic_style_tail(self, e, svg): - self.svg.expand(40+e, 0) + self.svg.expand(25+e, 0) self.svg.set_tab(False) self._make_basic_block(svg) self.docks = (('flow', True, self.svg.docks[0][0], diff --git a/constants.py b/constants.py index 93583ec..b415f1c 100644 --- a/constants.py +++ b/constants.py @@ -33,23 +33,24 @@ TOP_LAYER = 1000 TURTLE = 0 PEN = 1 -NUMBER = 2 -FLOW = 3 -BLOCKS = 4 -EXTRAS = 5 -PORTFOLIO = 6 -TRASH = 7 +COLORS = 2 +NUMBER = 3 +FLOW = 4 +BLOCKS = 5 +EXTRAS = 6 +PORTFOLIO = 7 +TRASH = 8 -PALETTE_NAMES = ['turtle', 'pen', 'number', 'flow', 'blocks', 'extras', - 'portfolio', 'trash'] +PALETTE_NAMES = ['turtle', 'pen', 'colors', 'number', 'flow', 'blocks', + 'extras', 'portfolio', 'trash'] PALETTES = [['forward', 'back', 'clean', 'left', 'right', 'show', 'seth', 'setxy', 'heading', 'xcor', 'ycor', 'setscale', 'arc', 'scale'], ['penup','pendown', 'setpensize', 'fillscreen', 'pensize', 'settextsize', 'setcolor', 'setshade', 'textsize', 'color', - 'shade', 'red', 'orange', 'yellow', 'green', 'cyan', 'blue', - 'purple'], + 'shade'], + [ 'red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'purple'], ['plus2', 'minus2', 'product2', 'division2', 'identity2', 'remainder2', 'sqrt', 'random', 'number', 'greater', 'less', 'equal', 'not', 'and', 'or'], @@ -68,16 +69,16 @@ PALETTES = [['forward', 'back', 'clean', 'left', 'right', 'show', # block style attributes # -COLORS = [["#00FF00","#00A000"], ["#00FFFF","#00A0A0"], ["#FF00FF","#A000A0"], - ["#FFC000","#A08000"], ["#FFFF00","#A0A000"], ["#FF0000","#A0000"], - ["#0000FF","#0000FF"], ["#FFFF00","#A0A000"]] +COLORS = [["#00FF00","#00A000"], ["#00FFFF","#00A0A0"], ["#00FFFF","#00A0A0"], + ["#FF00FF","#A000A0"], ["#FFC000","#A08000"], ["#FFFF00","#A0A000"], + ["#FF0000","#A00000"], ["#0000FF","#0000FF"], ["#FFFF00","#A0A000"]] BOX_COLORS = {'red':["#FF0000","#A00000"],'orange':["#FFD000","#AA8000"], 'yellow':["#FFFF00","#A0A000"],'green':["#00FF00","#008000"], 'cyan':["#00FFFF","#00A0A0"],'blue':["#0000FF","#000080"], 'purple':["#FF00FF","#A000A0"]} -PALETTE_HEIGHT = 175 +PALETTE_HEIGHT = 120 SELECTOR_WIDTH = 55 ICON_SIZE = 55 SELECTED_COLOR = "#0000FF" @@ -130,7 +131,7 @@ BLOCK_NAMES = {'clean':[_('clean')], 'forward':[_('forward')], 'settextsize':[_('set text size')], 'setcolor':[_('set color')], 'setshade':[_('set shade')], 'fillscreen':[_('fill screen'),_('color'),_('shade')], - 'shade':[_('shade')], + 'shade':[_('shade')], 'nop':[_('load Python code')], 'pensize':[_('pen size')], 'textsize':[_('text size')], 'color':[_('color')], 'plus2':['+'], 'minus2':['–'], 'product2':['×'], 'division2':['/'], @@ -153,7 +154,7 @@ BLOCK_NAMES = {'clean':[_('clean')], 'forward':[_('forward')], 'setxy':[_('set xy'), _('x'), _('y')], 'scale':[_('scale')], 'keyboard':[_('keyboard')], 'push':[_('push')], 'pop':[_('pop')], 'kbinput':[_('query keyboard')], - 'myfunc':[_('python'), _('code'), _('value')], 'nop':[' '], + 'myfunc':[_('python'), _('code'), _('value')], 'printheap':[_('show heap')], 'turtle':[_('turtle')], 'clearheap':[_('empty heap')], 'restore':[_('restore')], 'red':[_('red')], 'orange':[_('orange')], 'yellow':[_('yellow')], diff --git a/images/colorsoff.svg b/images/colorsoff.svg new file mode 100644 index 0000000..b542d6b --- /dev/null +++ b/images/colorsoff.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + diff --git a/images/colorson.svg b/images/colorson.svg new file mode 100644 index 0000000..9cd4ef1 --- /dev/null +++ b/images/colorson.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + diff --git a/images/shapes/t0.svg b/images/shapes/t0.svg deleted file mode 100644 index 9318ab5..0000000 --- a/images/shapes/t0.svg +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t1.svg b/images/shapes/t1.svg deleted file mode 100644 index 7fc857e..0000000 --- a/images/shapes/t1.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t10.svg b/images/shapes/t10.svg deleted file mode 100644 index d5fb472..0000000 --- a/images/shapes/t10.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t11.svg b/images/shapes/t11.svg deleted file mode 100644 index b11db27..0000000 --- a/images/shapes/t11.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t12.svg b/images/shapes/t12.svg deleted file mode 100644 index 0ecde90..0000000 --- a/images/shapes/t12.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t13.svg b/images/shapes/t13.svg deleted file mode 100644 index f6e445f..0000000 --- a/images/shapes/t13.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t14.svg b/images/shapes/t14.svg deleted file mode 100644 index eb07232..0000000 --- a/images/shapes/t14.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t15.svg b/images/shapes/t15.svg deleted file mode 100644 index a99aeca..0000000 --- a/images/shapes/t15.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t16.svg b/images/shapes/t16.svg deleted file mode 100644 index e838d9a..0000000 --- a/images/shapes/t16.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t17.svg b/images/shapes/t17.svg deleted file mode 100644 index 6ac72b4..0000000 --- a/images/shapes/t17.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t18.svg b/images/shapes/t18.svg deleted file mode 100644 index dac4e7d..0000000 --- a/images/shapes/t18.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t19.svg b/images/shapes/t19.svg deleted file mode 100644 index 17e0de1..0000000 --- a/images/shapes/t19.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t2.svg b/images/shapes/t2.svg deleted file mode 100644 index a810bf4..0000000 --- a/images/shapes/t2.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t20.svg b/images/shapes/t20.svg deleted file mode 100644 index f314c05..0000000 --- a/images/shapes/t20.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t21.svg b/images/shapes/t21.svg deleted file mode 100644 index 31b3497..0000000 --- a/images/shapes/t21.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t22.svg b/images/shapes/t22.svg deleted file mode 100644 index f265deb..0000000 --- a/images/shapes/t22.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t23.svg b/images/shapes/t23.svg deleted file mode 100644 index 08d4fc7..0000000 --- a/images/shapes/t23.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t24.svg b/images/shapes/t24.svg deleted file mode 100644 index 92fb1b3..0000000 --- a/images/shapes/t24.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t25.svg b/images/shapes/t25.svg deleted file mode 100644 index 3949efa..0000000 --- a/images/shapes/t25.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t26.svg b/images/shapes/t26.svg deleted file mode 100644 index 0166fd0..0000000 --- a/images/shapes/t26.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t27.svg b/images/shapes/t27.svg deleted file mode 100644 index 48dcfe0..0000000 --- a/images/shapes/t27.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t28.svg b/images/shapes/t28.svg deleted file mode 100644 index ee56af7..0000000 --- a/images/shapes/t28.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t29.svg b/images/shapes/t29.svg deleted file mode 100644 index 520d24d..0000000 --- a/images/shapes/t29.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t3.svg b/images/shapes/t3.svg deleted file mode 100644 index cc7c89c..0000000 --- a/images/shapes/t3.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t30.svg b/images/shapes/t30.svg deleted file mode 100644 index 92dd2ff..0000000 --- a/images/shapes/t30.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t31.svg b/images/shapes/t31.svg deleted file mode 100644 index d1b0f64..0000000 --- a/images/shapes/t31.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t32.svg b/images/shapes/t32.svg deleted file mode 100644 index 38a6228..0000000 --- a/images/shapes/t32.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t33.svg b/images/shapes/t33.svg deleted file mode 100644 index 84127f2..0000000 --- a/images/shapes/t33.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t34.svg b/images/shapes/t34.svg deleted file mode 100644 index 2c63b22..0000000 --- a/images/shapes/t34.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t35.svg b/images/shapes/t35.svg deleted file mode 100644 index ac0b85a..0000000 --- a/images/shapes/t35.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t4.svg b/images/shapes/t4.svg deleted file mode 100644 index 9491d51..0000000 --- a/images/shapes/t4.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t5.svg b/images/shapes/t5.svg deleted file mode 100644 index 0a39cf7..0000000 --- a/images/shapes/t5.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t6.svg b/images/shapes/t6.svg deleted file mode 100644 index f215bee..0000000 --- a/images/shapes/t6.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t7.svg b/images/shapes/t7.svg deleted file mode 100644 index 6ce41cd..0000000 --- a/images/shapes/t7.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t8.svg b/images/shapes/t8.svg deleted file mode 100644 index 75a0ce8..0000000 --- a/images/shapes/t8.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/shapes/t9.svg b/images/shapes/t9.svg deleted file mode 100644 index 4b8dbd3..0000000 --- a/images/shapes/t9.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sprite_factory.py b/sprite_factory.py index b4d0b36..1a3f330 100755 --- a/sprite_factory.py +++ b/sprite_factory.py @@ -245,12 +245,17 @@ class SVG: self._width, self._height = 60, 60 return self._header() + svg - def palette(self, width1, width2, height): - self._width, self._height = width2, height - self._fill, self._stroke = "#282828", "none" - svg = self._rect(width2, 55, 0, 0) + def palette(self, width, height): + self._width, self._height = width, height self._fill, self._stroke = "#FFD000", "none" - svg += self._rect(width1, height-55, 0, 55) + svg = self._rect(width, height, 0, 0) + svg += self._footer() + return self._header() + svg + + def toolbar(self, width, height): + self._width, self._height = width, height + self._fill, self._stroke = "#282828", "none" + svg = self._rect(width, height, 0, 0) svg += self._footer() return self._header() + svg diff --git a/tajail.py b/tajail.py index 3bbd1b1..014ddad 100644 --- a/tajail.py +++ b/tajail.py @@ -39,6 +39,7 @@ def myfunc(lc, f, x): def myfunc_import(lc, f, x): userdefined = {} + print f exec f in globals(), userdefined return userdefined['myblock'](lc,x) diff --git a/talogo.py b/talogo.py index 8a4c27f..32867e9 100644 --- a/talogo.py +++ b/talogo.py @@ -74,7 +74,7 @@ def run_blocks(lc, blk, blocks, run_flag): lc.stacks['stack2'] = readline(lc,blocks_to_code(lc, b)) if b.name == 'hat': if (b.connections[1] is not None): - text = b.connections[1].spr.labels[0] + text = b.connections[1].values[0] lc.stacks['stack3'+text] = readline(lc,blocks_to_code(lc, b)) code = blocks_to_code(lc, blk) if run_flag is True: @@ -85,7 +85,6 @@ def run_blocks(lc, blk, blocks, run_flag): def blocks_to_code(lc, blk): if blk is None: return ['%nothing%'] - spr = blk.spr code = [] dock = blk.docks[0] if len(dock)>4: @@ -95,30 +94,29 @@ def blocks_to_code(lc, blk): else: if blk.name=='number': try: - code.append(float(spr.labels[0])) - except: - code.append(float(ord(spr.labels[0][0]))) + code.append(float(blk.values[0])) + except ValueError: + code.append(float(ord(blk.values[0][0]))) elif blk.name=='string' or blk.name=='title': - if type(spr.labels[0]) == float or type(spr.labels[0]) == int: - if int(spr.labels[0]) == spr.labels[0]: - spr.labels[0] = int(spr.labels[0]) - code.append('#s'+str(spr.labels[0])) + if type(blk.values[0]) == float or type(blk.values[0]) == int: + if int(blk.values[0]) == blk.values[0]: + blk.values[0] = int(blk.values[0]) + code.append('#s'+str(blk.values[0])) else: - code.append('#s'+spr.labels[0]) + code.append('#s'+blk.values[0]) elif blk.name=='journal': - if spr.ds_id is not None: # TODO: put ds_id in blk - code.append('#smedia_'+str(spr.ds_id)) + if blk.values[0] is not None: + code.append('#smedia_'+str(blk.values[0])) else: code.append('#smedia_None') - elif blk.name=='descriptionoff' or \ - blk.name=='descriptionon': - if spr.ds_id is not None: - code.append('#sdescr_'+str(spr.ds_id)) + elif blk.name=='descriptionoff' or blk.name=='descriptionon': + if blk.values[0] is not None: + code.append('#sdescr_'+str(blk.values[0])) else: code.append('#sdescr_None') elif blk.name=='audiooff' or blk.name=='audio': - if spr.ds_id is not None: - code.append('#saudio_'+str(spr.ds_id)) + if blk.values[0] is not None: + code.append('#saudio_'+str(blk.values[0])) else: code.append('#saudio_None') else: diff --git a/taproject.py b/taproject.py index 7bbd057..a270c6e 100644 --- a/taproject.py +++ b/taproject.py @@ -159,41 +159,38 @@ def read_data(tw, data): def load_block(tw, b): # TODO: optionally read blocks without x, y - # A block is saved as: (i, (btype, label), x, y, (c0,... cn)) + # A block is saved as: (i, (btype, value), x, y, (c0,... cn)) media = None - btype, label = b[1], None + btype, value = b[1], None if type(btype) == type((1,2)): - btype, label = btype - if label is None: - labels = [] + btype, value = btype + if btype in CONTENT_BLOCKS: + values = [value] else: - labels = [label] + values = [] - """ - # TODO: handle media if btype == 'journal' or btype == 'audiooff' or btype == 'descriptionoff': - media = label + media = value label = None - """ blk = block.Block(tw.block_list, tw.sprite_list, btype, b[2]+tw.canvas.cx, - b[3]+tw.canvas.cy, 'block', labels) - """ + b[3]+tw.canvas.cy, 'block', values) 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': + blk.value[0] = dsobject.object_id + # TODO: handle media icons + # setimage(spr, tw.media_shapes[shape_dict[spr.proto.name]]) + if blk.name == 'journal': + ''' pixbuf = get_pixbuf_from_journal(dsobject, spr.width,spr.height) if pixbuf is not None: setimage(spr, pixbuf) + ''' dsobject.destroy() except: - if hasattr(spr,"ds_id"): - print "couldn't open dsobject (" + str(spr.ds_id) + ")" - """ + print "couldn't open dsobject (%s)" % (blk.values[0]) blk.spr.set_layer(BLOCK_LAYER) return blk @@ -262,14 +259,10 @@ def _assemble_data_to_save(tw, save_turtle=True): for i, b in enumerate(tw._just_blocks()): b.id = i for b in tw._just_blocks(): - name = (b.name, b.spr.labels[0]) - """ - if tw.defdict.has_key(name) or name in nolabel: - if hasattr(b,"ds_id") and b.ds_id != None: - name=(name, str(b.ds_id)) - else: - name=(name, b.spr.labels[0]) - """ + if b.name in CONTENT_BLOCKS: + name = (b.name, b.values[0]) + else: + name = (b.name) if hasattr(b, 'connections'): connections = [get_id(c) for c in b.connections] else: diff --git a/tawindow.py b/tawindow.py index e7cee31..b921d8a 100644 --- a/tawindow.py +++ b/tawindow.py @@ -129,6 +129,7 @@ class TurtleArtWindow(): self.overlay_shapes = {} self.status_spr = None self.status_shapes = {} + self.toolbar_spr = None self.palette_sprs = [] self.palettes = [] self.selected_palette = None @@ -206,7 +207,7 @@ class TurtleArtWindow(): def set_userdefined(self): for blk in self._just_blocks(): if blk.name == 'nop': - blk.set_image(self.media_shapes['pythonloaded']) + blk.spr.set_label('Python code', 0) self.nop = 'pythonloaded' """ @@ -326,11 +327,12 @@ class TurtleArtWindow(): if self.palette_sprs[i] is not None: self.palette_sprs[i].set_layer(HIDE_LAYER) self.selected_palette = None + self.toolbar_spr.set_layer(HIDE_LAYER) def show_toolbar_palette(self, n, init_only=False): if self.selectors == []: svg = SVG() - x, y = 5, 0 + x, y = 25, 0 for i, name in enumerate(PALETTE_NAMES): a = self._load_sprite_from_file("%s/%soff.svg" % (self.path, name)) @@ -365,7 +367,16 @@ class TurtleArtWindow(): self.selectors[n].set_shape(self.selector_shapes[n][1]) self.selected_selector = self.selectors[n] + if self.toolbar_spr == None: + self.toolbar_spr = Sprite(self.sprite_list, 0, 0, + svg_str_to_pixbuf(svg.toolbar(self.width, ICON_SIZE))) + self.toolbar_spr.type = 'toolbar' + self.toolbar_spr.set_layer(CATEGORY_LAYER) + else: + self.toolbar_spr.set_layer(CATEGORY_LAYER) + if self.palettes[n] == []: + _min_width = len(PALETTES)*(SELECTOR_WIDTH+5) + 25 for i, name in enumerate(PALETTES[n]): self.palettes[n].append(Block(self.block_list, self.sprite_list, name, @@ -373,24 +384,24 @@ class TurtleArtWindow(): self.palettes[n][i].spr.set_layer(TAB_LAYER) self.palettes[n][i].spr.set_shape(self.palettes[n][i].shapes[0]) # simple packing algorithm - x, y, max_width = 5, ICON_SIZE+5, 0 + _x, _y, _max_width = 5, ICON_SIZE+5, 0 for i in range(len(PALETTES[n])): - w, h = self.palettes[n][i].spr.get_dimensions() - if y+h > PALETTE_HEIGHT: - y = ICON_SIZE+5 - x += int(max_width+5) - max_width = 0 - self.palettes[n][i].spr.move((int(x), int(y))) - y += int(h+5) - if w > max_width: - max_width = w + _w, _h = self.palettes[n][i].spr.get_dimensions() + if _y+_h > PALETTE_HEIGHT+ICON_SIZE: + _y = ICON_SIZE+5 + _x += int(_max_width+5) + _max_width = 0 + self.palettes[n][i].spr.move((int(_x), int(_y))) + _y += int(_h+5) + if _w > _max_width: + _max_width = _w svg = SVG() - w = x+max_width+5 - if w < len(PALETTES)*(SELECTOR_WIDTH+5) + 5: - w = len(PALETTES)*(SELECTOR_WIDTH+5) + 5 - self.palette_sprs[n] = Sprite(self.sprite_list, 0, 0, - svg_str_to_pixbuf(svg.palette(w, w, PALETTE_HEIGHT))) + _w = _x+_max_width+25 + if _w < _min_width: + _w = _min_width + self.palette_sprs[n] = Sprite(self.sprite_list, 0, ICON_SIZE, + svg_str_to_pixbuf(svg.palette(_w, PALETTE_HEIGHT))) self.palette_sprs[n].type = 'category' self.palette_sprs[n].set_layer(CATEGORY_LAYER) else: @@ -956,7 +967,7 @@ class TurtleArtWindow(): spr.set_image(self.media_shapes['audioon']) else: spr.set_image(self.media_shapes['decson']) - spr.ds_id = dsobject.object_id + blk.values[0] = dsobject.object_id dsobject.destroy() finally: chooser.destroy() @@ -1009,19 +1020,20 @@ class TurtleArtWindow(): Make a new block. """ def _new_block_from_category(self, name, x, y): - # load alternative image of nop block if python code is loaded - if name == 'nop' and self.nop == 'pythonloaded': - pass - # TODO: handle python-loaded case - # newspr = Sprite(self,x-20,y-20,self.media_shapes['pythonloaded']) + if name in CONTENT_BLOCKS: + newblk = Block(self.block_list, self.sprite_list, name, + x-20, y-20, 'block', DEFAULTS[name]) else: newblk = Block(self.block_list, self.sprite_list, name, - x-20, y-20, 'block', []) - newspr = newblk.spr + x-20, y-20, 'block') + if name == 'nop' and self.nop == 'pythonloaded': + newblk.spr.set_label('Python code', 0) + newspr = newblk.spr newspr.set_layer(TOP_LAYER) self.drag_pos = 20, 20 newblk.connections = [None]*len(newblk.docks) - for i, argvalue in enumerate(newblk.defaults): + print DEFAULTS[newblk.name] + for i, argvalue in enumerate(DEFAULTS[newblk.name]): # skip the first dock position--it is always a connector dock = newblk.docks[i+1] argname = dock[0] @@ -1032,11 +1044,10 @@ class TurtleArtWindow(): argname = 'string' (sx, sy) = newspr.get_xy() argblk = Block(self.block_list, self.sprite_list, - argname, 0, 0) + argname, 0, 0, 'block', [argvalue]) argdock = argblk.docks[0] nx, ny = sx+dock[2]-argdock[2], sy+dock[3]-argdock[3] argblk.spr.move((nx, ny)) - argblk.spr.set_label(str(argvalue)) argblk.spr.set_layer(TOP_LAYER) argblk.connections = [newblk, None] newblk.connections[i+1] = argblk -- cgit v0.9.1