From 8edead04e565eaebd453f59e4e3aa52c2167f7e9 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Sun, 31 Jan 2010 20:38:28 +0000 Subject: expandable bullet list --- diff --git a/block.py b/block.py index e37d745..168b56a 100644 --- a/block.py +++ b/block.py @@ -87,6 +87,7 @@ class Block: self.primitive = None self.type = type self._dx = 0 + self._ei = 0 self._ex = 0 self._ey = 0 self._font_size = [6.0, 4.5] @@ -134,6 +135,15 @@ class Block: self._make_block(self.svg) self.spr.set_shape(self.shapes[0]) + # We may want to add "innies" + def add_arg(self): + h = self.svg.get_height() + self._ei += 1 + self.svg.set_show(True) + self._make_block(self.svg) + self.spr.set_shape(self.shapes[0]) + return self.svg.get_height()-h + # We may want to grow a block vertically. def expand_in_y(self, dy): self._ey += dy @@ -142,7 +152,7 @@ class Block: self._make_block(self.svg) self.spr.set_shape(self.shapes[0]) - # We may want to grow a block vertically. + # We may want to grow a block horizontally. def expand_in_x(self, dx): self._ex += dx self.svg.set_hide(True) @@ -150,7 +160,6 @@ class Block: self._make_block(self.svg) self.spr.set_shape(self.shapes[0]) - # We may want to reset to the original size def reset_x(self): dx = -self._ex self._ex = 0 @@ -169,6 +178,9 @@ class Block: self.spr.set_shape(self.shapes[0]) return dy + def get_expand_x_y(self): + return (self._ex, self._ey) + def _new_block_from_factory(self, sprite_list, x, y): self.svg = SVG() self.svg.set_scale(self.scale) @@ -227,7 +239,7 @@ class Block: elif self.name in BASIC_STYLE_2ARG: self._make_basic_style_2arg(svg) elif self.name in BULLET_STYLE: - self._make_basic_style_8arg(svg) + self._make_basic_style_var_arg(svg) elif self.name in BOX_STYLE: self._make_box_style(svg) elif self.name in BOX_STYLE_MEDIA: @@ -276,8 +288,8 @@ class Block: def _make_basic_style(self, svg): self.svg.expand(self._dx+self._ex, self._ey) 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.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, svg): @@ -285,9 +297,9 @@ class Block: self.svg.set_slot(False) self.svg.set_cap(True) self._make_basic_block(svg) - self.docks = (('start', True, 0, 0), - ('flow', False, self.svg.docks[0][0], - self.svg.docks[0][1])) + self.docks = [['start', True, 0, 0], + ['flow', False, self.svg.docks[0][0], + self.svg.docks[0][1]]] self._left, self._right = 2, 2 def _make_basic_style_head_1arg(self, svg): @@ -296,87 +308,81 @@ class Block: self.svg.set_slot(False) self.svg.set_cap(True) self._make_basic_block(svg) - self.docks = (('start', True, 0, 0), - ('string', False, self.svg.docks[0][0], - self.svg.docks[0][1]), - ('flow', False, self.svg.docks[1][0], - self.svg.docks[1][1])) + self.docks = [['start', True, 0, 0], + ['string', False, 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, self.svg.get_innie_width()*1.5 def _make_basic_style_tail(self, svg): self.svg.expand(10+self._dx+self._ex, self._ey) self.svg.set_tab(False) self._make_basic_block(svg) - self.docks = (('flow', True, self.svg.docks[0][0], - self.svg.docks[0][1]), - ('unavailable', False, 0, 0)) + self.docks = [['flow', True, self.svg.docks[0][0], + self.svg.docks[0][1]], + ['unavailable', False, 0, 0]] def _make_basic_style_1arg(self, svg): self.svg.expand(10+self._dx+self._ex, self._ey) self.svg.set_innie([True]) self._make_basic_block(svg) - self.docks = (('flow', True, self.svg.docks[0][0], - self.svg.docks[0][1]), - ('number', False, self.svg.docks[1][0], - self.svg.docks[1][1]), - ('flow', False, self.svg.docks[2][0], - self.svg.docks[2][1])) + self.docks = [['flow', True, self.svg.docks[0][0], + self.svg.docks[0][1]], + ['number', False, self.svg.docks[1][0], + self.svg.docks[1][1]], + ['flow', False, self.svg.docks[2][0], + self.svg.docks[2][1]]] self._left, self._right = 2, self.svg.get_innie_width()*1.5 def _make_basic_style_2arg(self, svg): self.svg.expand(10+self._dx+self._ex, self._ey) self.svg.set_innie([True,True]) self._make_basic_block(svg) - self.docks = (('flow', True, self.svg.docks[0][0], - self.svg.docks[0][1]), - ('number', False, self.svg.docks[1][0], - self.svg.docks[1][1]), - ('number', False, self.svg.docks[2][0], - self.svg.docks[2][1]), - ('flow', False, self.svg.docks[3][0], - self.svg.docks[3][1])) + self.docks = [['flow', True, self.svg.docks[0][0], + self.svg.docks[0][1]], + ['number', False, self.svg.docks[1][0], + self.svg.docks[1][1]], + ['number', False, self.svg.docks[2][0], + self.svg.docks[2][1]], + ['flow', False, self.svg.docks[3][0], + self.svg.docks[3][1]]] self._left, self._right = 2, self.svg.get_innie_width()*1.5 - def _make_basic_style_8arg(self, svg): + def _make_basic_style_var_arg(self, svg): self.svg.expand(10+self._dx+self._ex, self._ey) - self.svg.set_innie([True,True,True,True,True,True,True,True]) + innie = [True, True] + for i in range(self._ei): + innie.append(True) + self.svg.set_innie(innie) self._make_basic_block(svg) - self.docks = (('flow', True, self.svg.docks[0][0], - self.svg.docks[0][1]), - ('string', False, self.svg.docks[1][0], - self.svg.docks[1][1]), - ('string', False, self.svg.docks[2][0], - self.svg.docks[2][1]), - ('string', False, self.svg.docks[3][0], - self.svg.docks[3][1]), - ('string', False, self.svg.docks[4][0], - self.svg.docks[4][1]), - ('string', False, self.svg.docks[5][0], - self.svg.docks[5][1]), - ('string', False, self.svg.docks[6][0], - self.svg.docks[6][1]), - ('string', False, self.svg.docks[7][0], - self.svg.docks[7][1]), - ('string', False, self.svg.docks[8][0], - self.svg.docks[8][1]), - ('flow', False, self.svg.docks[9][0], - self.svg.docks[9][1])) + self.docks = [['flow', True, self.svg.docks[0][0], + self.svg.docks[0][1]], + ['string', False, self.svg.docks[1][0], + self.svg.docks[1][1]], + ['string', False, self.svg.docks[2][0], + self.svg.docks[2][1], '[']] + for i in range(self._ei): + self.docks.append(['string', False, self.svg.docks[i+3][0], + self.svg.docks[i+3][1]]) + self.docks.append(['flow', False, self.svg.docks[self._ei+3][0], + self.svg.docks[self._ei+3][1], ']']) self._left, self._right = 2, self.svg.get_innie_width()*1.5 def _make_box_style(self, svg): self.svg.expand(60+self._dx+self._ex, self._ey) self._make_basic_box(svg) - self.docks = (('number', True, self.svg.docks[0][0], - self.svg.docks[0][1]), - ('unavailable', False, 0, 0)) + self.docks = [['number', True, self.svg.docks[0][0], + self.svg.docks[0][1]], + ['unavailable', False, 0, 0]] self._left, self._right = self.svg.docks[1][0], 1 def _make_media_style(self, svg): self.svg.expand(40+self._dx+self._ex, 10+self._ey) self._make_basic_box(svg) - self.docks = (('number', True, self.svg.docks[0][0], - self.svg.docks[0][1]), - ('unavailable', False, 0, 0)) + self.docks = [['number', True, self.svg.docks[0][0], + self.svg.docks[0][1]], + ['unavailable', False, 0, 0]] self._left, self._right = self.svg.docks[1][0], 1 def _make_number_style(self, svg): @@ -390,12 +396,12 @@ class Block: NOTE: The "outie" is added last, so the dock order in the NUMBER_STYLE needs to be modified. """ - self.docks = (('number', True, self.svg.docks[2][0], - self.svg.docks[2][1]), - ('number', False, self.svg.docks[0][0], - self.svg.docks[0][1]), - ('number', False, self.svg.docks[1][0], - self.svg.docks[1][1])) + self.docks = [['number', True, self.svg.docks[2][0], + self.svg.docks[2][1]], + ['number', False, self.svg.docks[0][0], + self.svg.docks[0][1]], + ['number', False, self.svg.docks[1][0], + self.svg.docks[1][1]]] self._left = self.svg.docks[2][0] self._right = self.svg.get_innie_width()*1.5 @@ -406,13 +412,13 @@ class Block: self.svg.set_tab(False) self.svg.set_slot(False) self._make_basic_block(svg) - self.docks = (('number', True, self.svg.docks[2][0], - self.svg.docks[2][1], '('), - ('number', False, self.svg.docks[0][0], - self.svg.docks[0][1]), - ('number', False, self.svg.docks[1][0], - self.svg.docks[1][1]), - ('unavailable', False, 0, 0, ')')) + self.docks = [['number', True, self.svg.docks[2][0], + self.svg.docks[2][1], '('], + ['number', False, self.svg.docks[0][0], + self.svg.docks[0][1]], + ['number', False, self.svg.docks[1][0], + self.svg.docks[1][1]], + ['unavailable', False, 0, 0, ')']] self._left = self.svg.docks[2][0] self._right = self.svg.get_innie_width()*1.5 @@ -423,10 +429,10 @@ class Block: self.svg.set_tab(False) self.svg.set_slot(False) self._make_basic_block(svg) - self.docks = (('number', True, self.svg.docks[1][0], - self.svg.docks[1][1]), - ('number', False, self.svg.docks[0][0], - self.svg.docks[0][1])) + self.docks = [['number', True, self.svg.docks[1][0], + self.svg.docks[1][1]], + ['number', False, self.svg.docks[0][0], + self.svg.docks[0][1]]] self._left, self._right = self.svg.docks[1][0], self.svg.docks[1][0] def _make_number_style_1strarg(self, svg): @@ -436,11 +442,11 @@ class Block: self.svg.set_tab(False) self.svg.set_slot(False) self._make_basic_block(svg) - self.docks = (('number', True, self.svg.docks[1][0], - self.svg.docks[1][1]), - ('string', False, self.svg.docks[0][0], - self.svg.docks[0][1]), - ('unavailable', False, 0, 0)) + self.docks = [['number', True, self.svg.docks[1][0], + self.svg.docks[1][1]], + ['string', False, self.svg.docks[0][0], + self.svg.docks[0][1]], + ['unavailable', False, 0, 0]] self._left, self._right = self.svg.docks[1][0], self.svg.docks[1][0] def _make_number_style_porch(self, svg): @@ -451,45 +457,45 @@ class Block: self.svg.set_slot(False) self.svg.set_porch(True) self._make_basic_block(svg) - self.docks = (('number', True, self.svg.docks[2][0], - self.svg.docks[2][1]), - ('number', False, self.svg.docks[0][0], - self.svg.docks[0][1]), - ('number', False, self.svg.docks[1][0], - self.svg.docks[1][1])) + self.docks = [['number', True, self.svg.docks[2][0], + self.svg.docks[2][1]], + ['number', False, self.svg.docks[0][0], + self.svg.docks[0][1]], + ['number', False, self.svg.docks[1][0], + self.svg.docks[1][1]]] self._left = self.svg.docks[2][0] self._right = self.svg.get_width()-self.svg.docks[0][0] def _make_compare_style(self, svg): self.svg.expand(10+self._dx+self._ex, self._ey) self._make_boolean_compare(svg) - self.docks = (('bool', True, self.svg.docks[0][0], - self.svg.docks[0][1], '('), - ('number', False, self.svg.docks[1][0], - self.svg.docks[1][1]), - ('number', False, self.svg.docks[2][0], - self.svg.docks[2][1]), - ('unavailable', False, 0, 0, ')')) + self.docks = [['bool', True, self.svg.docks[0][0], + self.svg.docks[0][1], '('], + ['number', False, self.svg.docks[1][0], + self.svg.docks[1][1]], + ['number', False, self.svg.docks[2][0], + self.svg.docks[2][1]], + ['unavailable', False, 0, 0, ')']] self._left, self._right = self.svg.get_width()-self.svg.docks[2][0], 0 def _make_boolean_style(self, svg): self.svg.expand(10+self._dx+self._ex, self._ey) self._make_boolean_and_or(svg) - self.docks = (('bool', True, self.svg.docks[0][0], - self.svg.docks[0][1]), - ('bool', False, self.svg.docks[1][0], - self.svg.docks[1][1]), - ('bool', False, self.svg.docks[2][0], - self.svg.docks[2][1])) + self.docks = [['bool', True, self.svg.docks[0][0], + self.svg.docks[0][1]], + ['bool', False, self.svg.docks[1][0], + self.svg.docks[1][1]], + ['bool', False, self.svg.docks[2][0], + self.svg.docks[2][1]]] self._left, self._right = self.svg.get_width()-self.svg.docks[1][0], 0 def _make_not_style(self, svg): self.svg.expand(15+self._dx+self._ex, self._ey) self._make_boolean_not(svg) - self.docks = (('bool', True, self.svg.docks[0][0], - self.svg.docks[0][1]), - ('bool', False, self.svg.docks[1][0], - self.svg.docks[1][1])) + self.docks = [['bool', True, self.svg.docks[0][0], + self.svg.docks[0][1]], + ['bool', False, self.svg.docks[1][0], + self.svg.docks[1][1]]] self._right = self.svg.get_width()-self.svg.docks[1][0] self._left = self._right @@ -500,16 +506,16 @@ class Block: self._make_basic_flow(svg) # This is an ugly hack. if self.name == 'forever': - 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], '['), - ('unavailable', False, 0, 0, ']')) + 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], '['], + ['unavailable', False, 0, 0, ']']] else: - 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.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 = 0, self.svg.get_width()-self.svg.docks[1][0] def _make_flow_style_1arg(self, svg): @@ -518,14 +524,14 @@ class Block: self.svg.set_tab(True) self.svg.set_innie([True]) self._make_basic_flow(svg) - self.docks = (('flow', True, self.svg.docks[0][0], - self.svg.docks[0][1]), - ('number', False, self.svg.docks[1][0], - self.svg.docks[1][1]), - ('flow', False, self.svg.docks[2][0], - self.svg.docks[2][1], '['), - ('flow', False, self.svg.docks[3][0], - self.svg.docks[3][1], ']')) + self.docks = [['flow', True, self.svg.docks[0][0], + self.svg.docks[0][1]], + ['number', False, self.svg.docks[1][0], + self.svg.docks[1][1]], + ['flow', False, self.svg.docks[2][0], + self.svg.docks[2][1], '['], + ['flow', False, self.svg.docks[3][0], + self.svg.docks[3][1], ']']] self._left = 2 self._right = self.svg.get_width()-self.svg.docks[1][0]+ \ self.svg.get_innie_width()*1.5 @@ -536,14 +542,14 @@ class Block: self.svg.set_tab(True) self.svg.set_boolean(True) self._make_basic_flow(svg) - self.docks = (('flow', True, self.svg.docks[0][0], - self.svg.docks[0][1]), - ('bool', False, self.svg.docks[1][0], - self.svg.docks[1][1]), - ('flow', False, self.svg.docks[2][0], - self.svg.docks[2][1], '['), - ('flow', False, self.svg.docks[3][0], - self.svg.docks[3][1], ']')) + self.docks = [['flow', True, self.svg.docks[0][0], + self.svg.docks[0][1]], + ['bool', False, self.svg.docks[1][0], + self.svg.docks[1][1]], + ['flow', False, self.svg.docks[2][0], + self.svg.docks[2][1], '['], + ['flow', False, self.svg.docks[3][0], + self.svg.docks[3][1], ']']] self._left, self._right = 2, self.svg.get_width()-self.svg.docks[1][0] def _make_flow_style_else(self, svg): @@ -553,16 +559,16 @@ class Block: self.svg.set_else(True) self.svg.set_boolean(True) self._make_basic_flow(svg) - self.docks = (('flow', True, self.svg.docks[0][0], - self.svg.docks[0][1]), - ('bool', False, self.svg.docks[1][0], - self.svg.docks[1][1]), - ('flow', False, self.svg.docks[3][0], - self.svg.docks[3][1], '['), - ('flow', False, self.svg.docks[2][0], - self.svg.docks[2][1], ']['), - ('flow', False, self.svg.docks[4][0], - self.svg.docks[4][1], ']')) + self.docks = [['flow', True, self.svg.docks[0][0], + self.svg.docks[0][1]], + ['bool', False, self.svg.docks[1][0], + self.svg.docks[1][1]], + ['flow', False, self.svg.docks[3][0], + self.svg.docks[3][1], '['], + ['flow', False, self.svg.docks[2][0], + self.svg.docks[2][1], ']['], + ['flow', False, self.svg.docks[4][0], + self.svg.docks[4][1], ']']] self._left, self._right = 2, self.svg.get_width()-self.svg.docks[1][0] def _make_portfolio_style(self, svg): @@ -571,20 +577,20 @@ class Block: self.svg.set_tab(True) self.svg.set_innie([True, True, False, True]) self._make_portfolio(svg) - self.docks = (('flow', True, self.svg.docks[0][0], - self.svg.docks[0][1]), - ('string', False, self.svg.docks[6][0], - self.svg.docks[6][1]), - ('media', False, self.svg.docks[5][0], - self.svg.docks[5][1]), - ('media', False, self.svg.docks[1][0], - self.svg.docks[1][1]), - ('media', False, self.svg.docks[4][0], - self.svg.docks[4][1]), - ('media', False, self.svg.docks[2][0], - self.svg.docks[2][1]), - ('flow', False, self.svg.docks[3][0], - self.svg.docks[3][1])) + self.docks = [['flow', True, self.svg.docks[0][0], + self.svg.docks[0][1]], + ['string', False, self.svg.docks[6][0], + self.svg.docks[6][1]], + ['media', False, self.svg.docks[5][0], + self.svg.docks[5][1]], + ['media', False, self.svg.docks[1][0], + self.svg.docks[1][1]], + ['media', False, self.svg.docks[4][0], + self.svg.docks[4][1]], + ['media', False, self.svg.docks[2][0], + self.svg.docks[2][1]], + ['flow', False, self.svg.docks[3][0], + self.svg.docks[3][1]]] self._left, self._right = 2, self.svg.get_width()-self.svg.docks[1][0] def _make_portfolio_style_2pix(self, svg): @@ -593,16 +599,16 @@ class Block: self.svg.set_tab(True) self.svg.set_innie([True, True]) self._make_portfolio(svg) - self.docks = (('flow', True, self.svg.docks[0][0], - self.svg.docks[0][1]), - ('string', False, self.svg.docks[4][0], - self.svg.docks[4][1]), - ('media', False, self.svg.docks[3][0], - self.svg.docks[3][1]), - ('media', False, self.svg.docks[1][0], - self.svg.docks[1][1]), - ('flow', False, self.svg.docks[2][0], - self.svg.docks[2][1])) + self.docks = [['flow', True, self.svg.docks[0][0], + self.svg.docks[0][1]], + ['string', False, self.svg.docks[4][0], + self.svg.docks[4][1]], + ['media', False, self.svg.docks[3][0], + self.svg.docks[3][1]], + ['media', False, self.svg.docks[1][0], + self.svg.docks[1][1]], + ['flow', False, self.svg.docks[2][0], + self.svg.docks[2][1]]] self._left, self._right = 2, self.svg.get_width()-self.svg.docks[1][0] def _make_basic_block(self, svg): diff --git a/constants.py b/constants.py index e4f17c5..47ae511 100644 --- a/constants.py +++ b/constants.py @@ -53,7 +53,7 @@ PALETTES = [['forward', 'back', 'clean', 'left', 'right', 'show', 'myfunc', 'nop', 'leftpos', 'toppos', 'width', 'rightpos', 'bottompos', 'height', 'turtle', 'print'], ['journal', 'audio', 'description', 'hideblocks', 'template7', - 'template2', 'template3'], + 'template2', 'list'], ['restore']] # @@ -76,6 +76,9 @@ SELECTED_COLOR = "#0000FF" SELECTED_STROKE_WIDTH = 1.5 STANDARD_STROKE_WIDTH = 1.0 +PALETTE_SCALE = {'template7':1.0} + + # # block style definitions # @@ -107,14 +110,14 @@ FLOW_STYLE_1ARG = ['repeat'] FLOW_STYLE_BOOLEAN = ['if'] FLOW_STYLE_ELSE = ['ifelse'] PORTFOLIO_STYLE = ['template7'] -BULLET_STYLE = ['template3'] +BULLET_STYLE = ['list'] PORTFOLIO_STYLE_1PIX = ['template1'] PORTFOLIO_STYLE_2PIX = ['template2', 'template6'] # # blocks that are expandable # -EXPANDABLE = ['vspace', 'hspace'] +EXPANDABLE = ['vspace', 'hspace', 'list'] # # blocks that contain media @@ -124,7 +127,6 @@ CONTENT_BLOCKS = ['number', 'string', 'description', 'audio', 'journal'] # # block name dictionary # - BLOCK_NAMES = { 'and':[_('and')], 'arc':[_('arc'),_('angle'),_('radius')], @@ -161,6 +163,7 @@ BLOCK_NAMES = { 'left':[_('left')], 'leftpos':[_('left')], 'less':['<'],'greater':[">"], + 'list':[_('list')], 'minus2':['–'], 'myfunc':[_('Python'),_('code'),_('value')], 'nop':[_(' ')], @@ -259,6 +262,7 @@ PRIMITIVES = { 'left':'left', 'leftpos':'leftpos', 'less':'less?', + 'list':'bullet', 'minus2':'minus', 'myfunc':'myfunc', 'nop':'userdefined', @@ -302,7 +306,6 @@ PRIMITIVES = { 'storeinbox2':'storeinbox2', 'template1':'tp1', 'template2':'tp2', - 'template3':'tp3', 'template6':'tp6', 'template7':'tp7', 'textsize':'textsize', @@ -330,6 +333,7 @@ DEFAULTS = { 'hat':[_('action')], 'journal':[None], 'left':[90], + 'list':[_('Title'), '∙ '], 'media':[None], 'myfunc':[_('x'),100], 'nop':[100], @@ -352,7 +356,6 @@ DEFAULTS = { 'string':[_('text')], 'template1':[_('Title'), 'None'], 'template2':[_('Title'), 'None', 'None'], - 'template3':[_('Title'), '∙ ', '∙ ', '∙ ', '∙ ', '∙ ', '∙ ', '∙ '], 'template6':[_('Title'), 'None', 'None'], 'template7':[_('Title'), 'None', 'None', 'None', 'None'], 'turtle':[1], @@ -380,7 +383,7 @@ OLD_NAMES = {'product':'product2', 'storeinbox':'storein', 'division':'division2', 'plus':'plus2', 'remainder':'remainder2', 'identity':'identity2', 'division':'division2', 'if else':'if', 'audiooff':'audio', - 'descriptionoff':'description'} + 'descriptionoff':'description','template3':'list'} # # 'dead key' Unicode dictionaries diff --git a/sprite_factory.py b/sprite_factory.py index 3cd595b..ad40194 100755 --- a/sprite_factory.py +++ b/sprite_factory.py @@ -744,13 +744,14 @@ def generator(datapath): svg_str = svgt.turtle() f.write(svg_str) close_file(f) + """ svg0 = SVG() f = open_file(datapath, "portfolio-test.svg") svg0.set_scale(1) - svg0.expand(40,0) + svg0.expand(25,10) svg0.set_slot(True) - svg0.set_innie([True, True, False, False, True]) + svg0.set_innie([True, True, False, True]) svg0.set_tab(True) svg0.set_gradiant(True) svg_str = svg0.portfolio() @@ -770,7 +771,6 @@ def generator(datapath): f.write(svg_str) close_file(f) - """ svg2 = SVG() f = open_file(datapath, "box-test.svg") svg2.set_scale(1) diff --git a/talogo.py b/talogo.py index 729a7b6..b7633b0 100644 --- a/talogo.py +++ b/talogo.py @@ -59,7 +59,6 @@ def audio_media_type(suffix): return True return False - class symbol: def __init__(self, name): self.name = name @@ -101,6 +100,9 @@ def blocks_to_code(lc, blk): if blk is None: return ['%nothing%'] code = [] + print blk.name + print blk.docks + print blk.connections dock = blk.docks[0] if len(dock)>4: code.append(dock[4]) @@ -113,6 +115,7 @@ def blocks_to_code(lc, blk): except ValueError: code.append(float(ord(blk.values[0][0]))) elif blk.name=='string' or blk.name=='title': + print "%s %s" % (blk.name, blk.values[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]) @@ -145,7 +148,6 @@ def blocks_to_code(lc, blk): if b is not None: code.extend(blocks_to_code(lc, b)) elif blk.docks[i][0] not in ['flow', 'unavailable']: - print "appending nothing" code.append('%nothing%') return code @@ -320,6 +322,10 @@ def prim_repeat(lc, num, list): if lc.procstop: break ireturn(lc); yield True +def prim_bullet(lc, title, list): + show_bullets(lc, title, list) + ireturn(lc); yield True + def prim_forever(lc, list): while True: icall(lc,evline, list[:]); yield True @@ -588,8 +594,7 @@ def lcNew(tw): defprim(lc,'tp1', 2, lambda lc,x,y: show_template1(lc, x, y)) defprim(lc,'tp8', 2, lambda lc,x,y: show_template8(lc, x, y)) defprim(lc,'tp6', 3, lambda lc,x,y,z: show_template6(lc, x, y, z)) - defprim(lc,'tp3', 8, lambda lc,x,y,z,a,b,c,d,e: \ - show_template3(lc, x, y, z, a, b, c, d, e)) + defprim(lc,'bullet', 2, prim_bullet, True) defprim(lc,'sound', 1, lambda lc,x: play_sound(lc, x)) defprim(lc,'video', 1, lambda lc,x: play_movie(lc, x)) defprim(lc,'tp2', 3, lambda lc,x,y,z: \ @@ -814,8 +819,8 @@ def show_template2(lc, title, media1, media2): # restore text size lc.tw.canvas.settextsize(save_text_size) -# title and seven bullets -def show_template3(lc, title, s1, s2, s3, s4, s5, s6, s7): +# title and varible number of bullets +def show_bullets(lc, title, sarray): w,h,xo,yo,dx,dy = calc_position(lc,'tp3') x = -(lc.tw.canvas.width/2)+xo y = lc.tw.canvas.height/2 @@ -828,26 +833,11 @@ def show_template3(lc, title, s1, s2, s3, s4, s5, s6, s7): # set body text size lc.tw.canvas.settextsize(lc.bullet_height) y -= int(lc.title_height*2*lc.tw.lead) # leave some space below the title - lc.tw.canvas.setxy(x, y) - show(lc, s1) - y -= int(lc.bullet_height*2*lc.tw.lead) - lc.tw.canvas.setxy(x, y) - show(lc, s2) - y -= int(lc.bullet_height*2*lc.tw.lead) - lc.tw.canvas.setxy(x, y) - show(lc, s3) - y -= int(lc.bullet_height*2*lc.tw.lead) - lc.tw.canvas.setxy(x, y) - show(lc, s4) - y -= int(lc.bullet_height*2*lc.tw.lead) - lc.tw.canvas.setxy(x, y) - show(lc, s5) - y -= int(lc.bullet_height*2*lc.tw.lead) - lc.tw.canvas.setxy(x, y) - show(lc, s6) - y -= int(lc.bullet_height*2*lc.tw.lead) - lc.tw.canvas.setxy(x, y) - show(lc, s7) + for s in sarray: + print "bullet: %s" % (s) + lc.tw.canvas.setxy(x, y) + show(lc, s) + y -= int(lc.bullet_height*2*lc.tw.lead) # restore text size lc.tw.canvas.settextsize(save_text_size) diff --git a/tawindow.py b/tawindow.py index caecda9..df1fb55 100644 --- a/tawindow.py +++ b/tawindow.py @@ -380,10 +380,9 @@ class TurtleArtWindow(): if self.palettes[n] == []: _min_width = (len(PALETTES)+1)*(SELECTOR_WIDTH) for i, name in enumerate(PALETTES[n]): - if name in PORTFOLIO_STYLE or name in PORTFOLIO_STYLE_2PIX: - scale = 1.0 - elif name in BULLET_STYLE: - scale = 0.67 + # Some blocks are too big to fit the palette. + if PALETTE_SCALE.has_key(name): + scale = PALETTE_SCALE[name] else: scale = 1.5 self.palettes[n].append(Block(self.block_list, @@ -391,14 +390,13 @@ class TurtleArtWindow(): 0, 0, 'proto', [], scale)) self.palettes[n][i].spr.set_layer(TAB_LAYER) self.palettes[n][i].spr.set_shape(self.palettes[n][i].shapes[0]) - # Add a skin to some blocks + # Some blocks get a skin. if name in BOX_STYLE_MEDIA: self.palettes[n][i].spr.set_image(self.media_shapes[ name+'small'], 1, 28, 7) elif name == 'nop': self.palettes[n][i].spr.set_image(self.media_shapes[ 'pythonsmall'], 1, 10, 7) - # simple packing algorithm _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() @@ -991,6 +989,26 @@ class TurtleArtWindow(): blk.expand_in_x(dx) for b in group: b.spr.move_relative((dx*blk.scale, 0)) + elif blk.name=='list': + n = len(blk.connections) + group = self._find_group(blk.connections[n-1]) + r,g,b,a = blk.spr.get_pixel((x, y)) + dy = blk.add_arg() + for b in group: + b.spr.move_relative((0, dy)) + blk.connections.append(blk.connections[n-1]) + argname = blk.docks[n-1][0] + argvalue = DEFAULTS[blk.name][len(DEFAULTS[blk.name])-1] + argblk = Block(self.block_list, self.sprite_list, argname, + 0, 0, 'block', [argvalue]) + argdock = argblk.docks[0] + (bx, by) = blk.spr.get_xy() + nx = bx+blk.docks[n-1][2]-argdock[2] + ny = by+blk.docks[n-1][3]-argdock[3] + argblk.spr.move((nx, ny)) + argblk.spr.set_layer(TOP_LAYER) + argblk.connections = [blk, None] + blk.connections[n-1] = argblk elif blk.name=='nop' and self.myblock==None: self._import_py() else: @@ -1228,6 +1246,8 @@ class TurtleArtWindow(): dock2 = block2.docks[dock2n] d1type, d1dir, d1x, d1y = dock1[0:4] d2type, d2dir, d2x, d2y = dock2[0:4] + if block1 == block2: + return (100,100) if (d2type is not 'number') or (dock2n is not 0): if block1.connections is not None and \ dock1n < len(block1.connections) and \ @@ -1237,13 +1257,11 @@ class TurtleArtWindow(): dock2n < len(block2.connections) and \ block2.connections[dock2n] is not None: return (100,100) - if block1 == block2: - return (100,100) if d1type != d2type: # some blocks can take strings or nums if block1.name in ('write', 'plus', 'equal', 'less', 'greater', 'template1', 'template2', 'template3', - 'template4', 'template6', 'template7', 'nop', + 'template4', 'template6', 'list', 'nop', 'print', 'stack', 'hat'): if block1.name == 'write' and d1type == 'string': if d2type == 'number' or d2type == 'string': -- cgit v0.9.1