Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Bender <walter@walter-laptop.(none)>2010-01-30 20:36:57 (GMT)
committer Walter Bender <walter@walter-laptop.(none)>2010-01-30 20:36:57 (GMT)
commit840418d256e37736aba2c58ad49d936d7eddac73 (patch)
treee11c21e427eacd607527b581a4c62cc3f3725bc8
parent4744cb84201c2c04d37a7abb392fa5136f7a20ef (diff)
adding portfolio blocks back in...
-rw-r--r--block.py32
-rw-r--r--constants.py6
-rwxr-xr-xsprite_factory.py56
-rw-r--r--talogo.py8
-rw-r--r--taproject.py8
-rw-r--r--tawindow.py20
6 files changed, 110 insertions, 20 deletions
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]