From 840418d256e37736aba2c58ad49d936d7eddac73 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Sat, 30 Jan 2010 20:36:57 +0000 Subject: adding portfolio blocks back in... --- diff --git a/block.py b/block.py index f6f2a09..0a4e55b 100644 --- a/block.py +++ b/block.py @@ -228,6 +228,8 @@ class Block: self._make_flow_style_boolean(svg) elif self.name in FLOW_STYLE_ELSE: self._make_flow_style_else(svg) + elif self.name in PORTFOLIO_STYLE: + self._make_portfolio_style(svg) else: self._make_basic_style(svg) print ">>>>> I don't know how to create a %s block" % (self.name) @@ -507,6 +509,28 @@ class Block: 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): + self.svg.expand(25+self._dx+self._ex, self._ey) + self.svg.set_slot(True) + 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[1][0], + self.svg.docks[1][1]), + ('media', False, self.svg.docks[6][0], + self.svg.docks[6][1]), + ('media', False, self.svg.docks[2][0], + self.svg.docks[2][1]), + ('media', False, self.svg.docks[5][0], + self.svg.docks[5][1]), + ('media', False, self.svg.docks[3][0], + self.svg.docks[3][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_basic_block(self, svg): self.shapes.append(svg_str_to_pixbuf(self.svg.basic_block())) self.width = self.svg.get_width() @@ -523,6 +547,14 @@ class Block: self.svg.set_stroke_color(SELECTED_COLOR) self.shapes.append(svg_str_to_pixbuf(self.svg.basic_box())) + def _make_portfolio(self, svg): + self.shapes.append(svg_str_to_pixbuf(self.svg.portfolio())) + self.width = self.svg.get_width() + self.height = self.svg.get_height() + self.svg.set_stroke_width(SELECTED_STROKE_WIDTH) + self.svg.set_stroke_color(SELECTED_COLOR) + self.shapes.append(svg_str_to_pixbuf(self.svg.portfolio())) + def _make_basic_flow(self, svg): self.shapes.append(svg_str_to_pixbuf(self.svg.basic_flow())) self.width = self.svg.get_width() diff --git a/constants.py b/constants.py index 938a32a..116392b 100644 --- a/constants.py +++ b/constants.py @@ -52,7 +52,7 @@ PALETTES = [['forward', 'back', 'clean', 'left', 'right', 'show', ['kbinput', 'push', 'printheap', 'keyboard', 'pop', 'clearheap', 'myfunc', 'nop', 'leftpos', 'toppos', 'width', 'rightpos', 'bottompos', 'height', 'turtle', 'print'], - ['journal', 'audio', 'description', 'hideblocks'], + ['journal', 'audio', 'description', 'hideblocks', 'template7'], ['restore']] # @@ -105,6 +105,7 @@ FLOW_STYLE = ['forever', 'hspace'] FLOW_STYLE_1ARG = ['repeat'] FLOW_STYLE_BOOLEAN = ['if'] FLOW_STYLE_ELSE = ['ifelse'] +PORTFOLIO_STYLE = ['template7'] # # blocks that contain media @@ -195,6 +196,7 @@ BLOCK_NAMES = { 'storeinbox1':[_('store in box 1')], 'storeinbox2':[_('store in box 2')], 'string':[_('text')], + 'template7':[' '], 'textsize':[_('text size')], 'toppos':[_('top')], 'turtle':[_('turtle')], @@ -285,6 +287,7 @@ PRIMITIVES = { 'storein':'storeinbox', 'storeinbox1':'storeinbox1', 'storeinbox2':'storeinbox2', + 'template7':'tp7', 'textsize':'textsize', 'toppos':'toppos', 'turtle':'turtle', @@ -330,6 +333,7 @@ DEFAULTS = { 'storeinbox2':[100], 'storein':[_('my box'),100], 'string':[_('text')], + 'template7':[_('Title'), 'None', 'None', 'None', 'None'], 'turtle':[1], 'wait':[1]} diff --git a/sprite_factory.py b/sprite_factory.py index 66ab25f..6f6f272 100755 --- a/sprite_factory.py +++ b/sprite_factory.py @@ -145,6 +145,39 @@ class SVG: svg += self._footer() return self._header() + svg + def portfolio(self): + (x, y) = self._calculate_x_y() + x += self._innie_x1+self._innie_x2 + svg = self._new_path(x, y) + svg += self._rarc_to(1, -1) + svg += self._do_slot() + xx = self._x + svg += self._rline_to(self._expand_x, 0) + svg += self._rarc_to(1, 1) + for i in range(len(self._innie)): + if self._innie[i] is True: + svg += self._do_innie() + svg += self._rline_to(0, 2*self._innie_y2+self._innie_spacer) + else: + svg += self._rline_to(0, 2*self._innie_y2+self._innie_spacer) + svg += self._rline_to(0, self._expand_y) + svg += self._rarc_to(-1, 1) + svg += self._line_to(xx, self._y) + svg += self._do_tab() + svg += self._rarc_to(-1, -1) + svg += self._rline_to(0, -self._expand_y) + for i in range(len(self._innie)-1): # skip one for title + if self._innie[len(self._innie)-i-1] is True: + svg += self._rline_to(0, -2*self._innie_y2-self._innie_spacer) + svg += self._do_reverse_innie() + else: + svg += self._rline_to(0, -2*self._innie_y2-self._innie_spacer) + svg += self._close_path() + self._calculate_w_h() + svg += self._style() + svg += self._footer() + return self._header() + svg + def basic_box(self): self.set_outie(True) x = self._stroke_width/2.0+self._innie_x1+self._innie_x2 @@ -578,6 +611,18 @@ class SVG: self._rline_to(0, -self._innie_y1), self._rline_to(self._innie_x1, 0)) + def _do_reverse_innie(self): + self.docks.append((int((self._x+self._stroke_width)*self._scale), + int((self._y)*self._scale))) + return "%s%s%s%s%s%s%s" % ( + self._rline_to(-self._innie_x1, 0), + self._rline_to(0, self._innie_y1), + self._rline_to(-self._innie_x2, 0), + self._rline_to(0, -self._innie_y2-2*self._innie_y1), + self._rline_to(self._innie_x2, 0), + self._rline_to(0, self._innie_y1), + self._rline_to(self._innie_x1, 0)) + def _do_outie(self): if self._outie is not True: return self._rline_to(0, -self._innie_y2) @@ -663,15 +708,14 @@ def generator(datapath): """ svg0 = SVG() - f = open_file(datapath, "flow-test.svg") + f = open_file(datapath, "portfolio-test.svg") svg0.set_scale(1) - svg0.expand(20,0) - # svg0.set_innie([True]) - svg0.set_boolean(True) + svg0.expand(40,0) + svg0.set_slot(True) + svg0.set_innie([True, True, False, False, True]) svg0.set_tab(True) - svg0.set_else(True) svg0.set_gradiant(True) - svg_str = svg0.basic_flow() + svg_str = svg0.portfolio() f.write(svg_str) close_file(f) diff --git a/talogo.py b/talogo.py index d0d41fe..19003c0 100644 --- a/talogo.py +++ b/talogo.py @@ -762,14 +762,14 @@ def show_template1(lc, title, media): # save the text size so we can restore it later save_text_size = lc.tw.textsize # set title text - settextsize(lc.tw.canvas, lc.title_height) + lc.tw.canvas.settextsize(lc.title_height) show(lc,title) # calculate and set scale for media blocks myscale = 45 * (lc.tw.canvas.height - lc.title_height*2) \ / lc.tw.canvas.height set_scale(lc,myscale) # set body text size - settextsize(lc.tw.canvas, lc.body_height) + lc.tw.canvas.settextsize(lc.body_height) # render media object y -= int(lc.title_height*2*lc.tw.lead) # leave some space below the title lc.tw.canvas.setxy(x, y) @@ -847,7 +847,7 @@ def show_template3(lc, title, s1, s2, s3, s4, s5, s6, s7): lc.tw.canvas.setxy(x, y) show(lc, s7) # restore text size - settextsize(lc.tw.canvas, save_text_size) + lc.tw.canvas.settextsize(save_text_size) # title, two images (vertical), two desciptions def show_template6(lc, title, media1, media2): @@ -911,7 +911,7 @@ def show_template7(lc, title, media1, media2, media3, media4): lc.tw.canvas.setxy(x, y) show(lc, media3) # restore text size - settextsize(lc.tw.canvas, save_text_size) + lc.tw.canvas.settextsize(save_text_size) # title, one media object def show_template8(lc, title, media1): diff --git a/taproject.py b/taproject.py index b5c1e12..9f33bf3 100644 --- a/taproject.py +++ b/taproject.py @@ -59,7 +59,7 @@ def new_project(tw): tw.save_file_name = None def load_file(tw, create_new_project=True): - fname = _get_load_name(tw, '.ta') + fname = get_load_name(tw, '.ta') if fname==None: return if fname[-3:] == '.ta': @@ -70,7 +70,7 @@ def load_file(tw, create_new_project=True): # From Suger, we use the Journal, but from outside of Sugar, we load from a file def load_python_code(tw): - fname = _get_load_name(tw, '.py') + fname = get_load_name(tw, '.py') if fname==None: return f = open(fname, 'r') @@ -105,7 +105,7 @@ def _json_load(text): # json converts tuples to lists, so we need to convert back, return _tuplify(listdata) -def _get_load_name(tw, suffix): +def get_load_name(tw, suffix): dialog = gtk.FileChooserDialog("Load...", None, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, @@ -209,7 +209,7 @@ def load_block(tw, b): pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(blk.values[0], 80, 60) if pixbuf is not None: - blk.spr.set_image(pixbuf, 1, 37, 6) + blk.spr.set_image(pixbuf, 1, 17, 2) else: blk.spr.set_image(tw.media_shapes['journalon'], 1, 37, 6) blk.spr.set_label(' ') diff --git a/tawindow.py b/tawindow.py index 44285ed..87df608 100644 --- a/tawindow.py +++ b/tawindow.py @@ -380,9 +380,13 @@ 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: + scale = 1.0 + else: + scale = 1.5 self.palettes[n].append(Block(self.block_list, self.sprite_list, name, - 0, 0, 'proto', [], 1.5)) + 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 @@ -1042,7 +1046,7 @@ class TurtleArtWindow(): chooser.destroy() del chooser else: - fname = _get_load_name(self, '.*') + fname = get_load_name(self, '.*') if fname is None: return if movie_media_type(fname[-4:]): @@ -1055,7 +1059,7 @@ class TurtleArtWindow(): else: pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(fname, 80, 60) if pixbuf is not None: - blk.spr.set_image(pixbuf, 1, 37, 6) + blk.spr.set_image(pixbuf, 1, 17, 2) blk.values[0] = fname blk.spr.set_label(' ') @@ -1141,14 +1145,20 @@ class TurtleArtWindow(): argname = dock[0] if argname == 'unavailable': continue - if (type(argvalue) is str or type(argvalue) is unicode) and\ - argname == 'number': + if argname == 'media': + argname = 'journal' + elif argname == 'number' and\ + (type(argvalue) is str or type(argvalue) is unicode): argname = 'string' (sx, sy) = newspr.get_xy() argblk = Block(self.block_list, self.sprite_list, argname, 0, 0, 'block', [argvalue]) argdock = argblk.docks[0] nx, ny = sx+dock[2]-argdock[2], sy+dock[3]-argdock[3] + if argname == 'journal': + argblk.spr.set_image(self.media_shapes['journaloff'], + 1, 37, 6) + argblk.spr.set_label(' ') argblk.spr.move((nx, ny)) argblk.spr.set_layer(TOP_LAYER) argblk.connections = [newblk, None] -- cgit v0.9.1