Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TurtleArt/talogo.py
diff options
context:
space:
mode:
Diffstat (limited to 'TurtleArt/talogo.py')
-rw-r--r--TurtleArt/talogo.py894
1 files changed, 4 insertions, 890 deletions
diff --git a/TurtleArt/talogo.py b/TurtleArt/talogo.py
index 8674fb3..4092536 100644
--- a/TurtleArt/talogo.py
+++ b/TurtleArt/talogo.py
@@ -36,9 +36,8 @@ try:
except ImportError:
pass
-from taconstants import TAB_LAYER, BLACK, WHITE, DEFAULT_SCALE, ICON_SIZE, \
- BLOCK_NAMES, CONSTANTS, PREFIX_DICTIONARY
-from tajail import myfunc, myfunc_import
+from taconstants import TAB_LAYER, DEFAULT_SCALE, BLOCK_NAMES, \
+ PREFIX_DICTIONARY, CONSTANTS, BLACK, WHITE
from tautils import get_pixbuf_from_journal, convert, data_from_file, \
text_media_type, round_int, chr_to_ord, strtype, get_path, debug_output
@@ -46,8 +45,7 @@ from util.RtfParser import RtfTextOnly
from gettext import gettext as _
-VALUE_BLOCKS = ['box1', 'box2', 'color', 'shade', 'gray', 'scale', 'pensize',
- 'heading', 'xcor', 'ycor', 'pop', 'time', 'keyboard', 'see']
+VALUE_BLOCKS = []
MEDIA_BLOCKS_DICTIONARY = {} # new media blocks get added here
PLUGIN_DICTIONARY = {} # new block primitives get added here
@@ -81,184 +79,6 @@ class logoerror(Exception):
# Utility functions
-
-def _num_type(x):
- """ Is x a number type? """
- if type(x) == int:
- return True
- if type(x) == float:
- return True
- if type(x) == ord:
- return True
- return False
-
-
-def _string_to_num(x):
- """ Try to comvert a string to a number """
- xx = convert(x.replace(self.tw.decimal_point, '.'), float)
- if type(xx) is float:
- return xx
- else:
- xx, xflag = chr_to_ord(x)
- if xflag:
- return xx
- else:
- raise logoerror("#syntaxerror")
-
-
-def _and(x, y):
- """ Logical and """
- return x & y
-
-
-def _or(x, y):
- """ Logical or """
- return x | y
-
-
-def _careful_divide(x, y):
- """ Raise error on divide by zero """
- try:
- return x / y
- except ZeroDivisionError:
- raise logoerror("#zerodivide")
- except TypeError:
- try:
- return _string_to_num(x) / _string_to_num(y)
- except ZeroDivisionError:
- raise logoerror("#zerodivide")
- except ValueError:
- raise logoerror("#syntaxerror")
- except TypeError:
- raise logoerror("#notanumber")
-
-
-def _equal(x, y):
- """ Numeric and logical equal """
- try:
- return float(x) == float(y)
- except TypeError:
- typex, typey = False, False
- if strtype(x):
- typex = True
- if strtype(y):
- typey = True
- if typex and typey:
- return x == y
- try:
- return _string_to_num(x) == _string_to_num(y)
- except ValueError:
- raise logoerror("#syntaxerror")
-
-
-def _less(x, y):
- """ Compare numbers and strings """
- try:
- return float(x) < float(y)
- except ValueError:
- typex, typey = False, False
- if strtype(x):
- typex = True
- if strtype(y):
- typey = True
- if typex and typey:
- return x < y
- try:
- return _string_to_num(x) < _string_to_num(y)
- except TypeError:
- raise logoerror("#notanumber")
-
-
-def _more(x, y):
- """ Compare numbers and strings """
- return _less(y, x)
-
-
-def _plus(x, y):
- """ Add numbers, concat strings """
- if _num_type(x) and _num_type(y):
- return(x + y)
- else:
- if _num_type(x):
- xx = str(round_int(x))
- else:
- xx = str(x)
- if _num_type(y):
- yy = str(round_int(y))
- else:
- yy = str(y)
- return(xx + yy)
-
-
-def _minus(x, y):
- """ Numerical subtraction """
- if _num_type(x) and _num_type(y):
- return(x - y)
- try:
- return _string_to_num(x) - _string_to_num(y)
- except TypeError:
- raise logoerror("#notanumber")
-
-
-def _product(x, y):
- """ Numerical multiplication """
- if _num_type(x) and _num_type(y):
- return(x * y)
- try:
- return _string_to_num(x) * _string_to_num(y)
- except TypeError:
- raise logoerror("#notanumber")
-
-
-def _mod(x, y):
- """ Numerical mod """
- if _num_type(x) and _num_type(y):
- return(x % y)
- try:
- return _string_to_num(x) % _string_to_num(y)
- except TypeError:
- raise logoerror("#notanumber")
- except ValueError:
- raise logoerror("#syntaxerror")
-
-
-def _sqrt(x):
- """ Square root """
- if _num_type(x):
- if x < 0:
- raise logoerror("#negroot")
- return sqrt(x)
- try:
- return sqrt(_string_to_num(x))
- except ValueError:
- raise logoerror("#negroot")
- except TypeError:
- raise logoerror("#notanumber")
-
-
-def _random(x, y):
- """ Random integer """
- if _num_type(x) and _num_type(y):
- return(int(round(uniform(x, y), 0)))
- xx, xflag = chr_to_ord(x)
- yy, yflag = chr_to_ord(y)
- if xflag and yflag:
- return chr(int(round(uniform(xx, yy), 0)))
- if not xflag:
- xx = _string_to_num(x)
- if not yflag:
- yy = _string_to_num(y)
- try:
- return(int(round(uniform(xx, yy), 0)))
- except TypeError:
- raise logoerror("#notanumber")
-
-
-def _identity(x):
- """ Identity function """
- return(x)
-
-
def _just_stop():
""" yield False to stop stack """
yield False
@@ -280,149 +100,17 @@ class LogoCode:
# TODO: remove plugin blocks
DEFPRIM = {
'(': [1, lambda self, x: self._prim_opar(x)],
- 'and': [2, lambda self, x, y: _and(x, y)],
- 'arc': [2, lambda self, x, y: self._prim_arc(self.tw.canvas.arc, x,
- y)],
- 'audio': [1, lambda self, x: self._play_sound(x)],
- 'back': [1, lambda self, x: self._prim_move(self.tw.canvas.forward,
- -x)],
- 'black': [0, lambda self: BLACK],
- 'blue': [0, lambda self: CONSTANTS['blue']],
- 'bpos': [0, lambda self: CONSTANTS['bottompos']],
- 'boty': [0, lambda self: CONSTANTS['bottomy']],
- 'box1': [0, lambda self: self.boxes['box1']],
- 'box': [1, lambda self, x: self._box(x)],
- 'box2': [0, lambda self: self.boxes['box2']],
'bullet': [1, self._prim_bullet, True],
'bulletlist': [1, self._prim_list, True],
- 'cartesian': [0, lambda self: self.tw.set_cartesian(True)],
- 'clean': [0, lambda self: self.prim_clear()],
- 'clearheap': [0, lambda self: self._empty_heap()],
- 'color': [0, lambda self: self.tw.canvas.color],
- 'gray': [0, lambda self: self.tw.canvas.gray],
- 'comment': [1, lambda self, x: self._prim_print(x, True)],
'container': [1, lambda self, x: x],
- 'cyan': [0, lambda self: CONSTANTS['cyan']],
'define': [2, self._prim_define],
- 'division': [2, lambda self, x, y: _careful_divide(x, y)],
- 'equal?': [2, lambda self, x, y: _equal(x, y)],
- 'fillscreen': [2, lambda self, x, y: self.tw.canvas.fillscreen(x, y)],
- 'forever': [1, self._prim_forever, True],
- 'forward': [1, lambda self, x: self._prim_move(self.tw.canvas.forward,
- x)],
- 'fullscreen': [0, lambda self: self.tw.set_fullscreen()],
- 'greater?': [2, lambda self, x, y: _more(x, y)],
- 'green': [0, lambda self: CONSTANTS['green']],
- 'heading': [0, lambda self: self.tw.canvas.heading],
- 'hideblocks': [0, lambda self: self.tw.hideblocks()],
- 'hres': [0, lambda self: CONSTANTS['width']],
- 'id': [1, lambda self, x: _identity(x)],
- 'if': [2, self._prim_if, True],
- 'ifelse': [3, self._prim_ifelse, True],
'insertimage': [1, lambda self, x: self._insert_image(False,
filepath=x)],
- 'kbinput': [0, lambda self: self._prim_kbinput()],
- 'keyboard': [0, lambda self: self.keyboard],
- 'left': [1, lambda self, x: self._prim_right(-x)],
- 'leftx': [0, lambda self: CONSTANTS['leftx']],
- 'lpos': [0, lambda self: CONSTANTS['leftpos']],
- 'less?': [2, lambda self, x, y: _less(x, y)],
- 'mediawait': [0, self._media_wait, True],
- 'minus': [2, lambda self, x, y: _minus(x, y)],
- 'mod': [2, lambda self, x, y: _mod(x, y)],
- 'myfunction': [2, lambda self, f, x: self._myfunction(f, [x])],
- 'myfunction2': [3, lambda self, f, x, y: self._myfunction(f, [x, y])],
- 'myfunction3': [4, lambda self, f, x, y, z: self._myfunction(
- f, [x, y, z])],
'nop': [0, lambda self: None],
- 'nop1': [0, lambda self: None],
- 'nop2': [0, lambda self: None],
- 'nop3': [1, lambda self, x: None],
- 'not': [1, lambda self, x: not x],
- 'orange': [0, lambda self: CONSTANTS['orange']],
- 'or': [2, lambda self, x, y: _or(x, y)],
- 'pendown': [0, lambda self: self.tw.canvas.setpen(True)],
- 'pensize': [0, lambda self: self.tw.canvas.pensize],
- 'penup': [0, lambda self: self.tw.canvas.setpen(False)],
- 'plus': [2, lambda self, x, y: _plus(x, y)],
- 'polar': [0, lambda self: self.tw.set_polar(True)],
- 'pop': [0, lambda self: self._prim_pop()],
- 'print': [1, lambda self, x: self._prim_print(x, False)],
- 'printheap': [0, lambda self: self._prim_print_heap()],
- 'product': [2, lambda self, x, y: _product(x, y)],
- 'purple': [0, lambda self: CONSTANTS['purple']],
- 'push': [1, lambda self, x: self._prim_push(x)],
- 'random': [2, lambda self, x, y: _random(x, y)],
- 'readpixel': [0, lambda self: self._read_pixel()],
- 'red': [0, lambda self: CONSTANTS['red']],
- 'repeat': [2, self._prim_repeat, True],
- 'right': [1, lambda self, x: self._prim_right(x)],
- 'rightx': [0, lambda self: CONSTANTS['rightx']],
- 'rpos': [0, lambda self: CONSTANTS['rightpos']],
- 'savepix': [1, lambda self, x: self._save_picture(x)],
- 'savesvg': [1, lambda self, x: self._save_svg(x)],
- 'scale': [0, lambda self: self.scale],
- 'see': [0, lambda self: self.see()],
- 'setcolor': [1, lambda self, x: self._prim_set('color',
- self.tw.canvas.setcolor, x)],
- 'setgray': [1, lambda self, x: self._prim_set('gray',
- self.tw.canvas.setgray, x)],
- 'seth': [1, lambda self, x: self._prim_set('heading',
- self.tw.canvas.seth, x)],
- 'setpensize': [1, lambda self, x: self._prim_set('pensize',
- self.tw.canvas.setpensize, x)],
- 'setscale': [1, lambda self, x: self._prim_set('scale',
- self._set_scale, x)],
- 'setshade': [1, lambda self, x: self._prim_set('shade',
- self.tw.canvas.setshade, x)],
'settextcolor': [1, lambda self, x: self.tw.canvas.settextcolor(x)],
'settextsize': [1, lambda self, x: self.tw.canvas.settextsize(x)],
- 'setxy2': [2, lambda self, x, y: self._prim_move(self.tw.canvas.setxy,
- x, y)],
- 'setxy': [2, lambda self, x, y: self._prim_move(self.tw.canvas.setxy,
- x, y, pendown=False)],
- 'shade': [0, lambda self: self.tw.canvas.shade],
- 'show': [1, lambda self, x: self._show(x, True)],
- 'showaligned': [1, lambda self, x: self._show(x, False)],
- 'showblocks': [0, lambda self: self.tw.showblocks()],
- 'skin': [1, lambda self, x: self._reskin(x)],
- 'sqrt': [1, lambda self, x: _sqrt(x)],
- 'stack1': [0, self._prim_stack1, True],
- 'stack': [1, self._prim_stack, True],
- 'stack2': [0, self._prim_stack2, True],
- 'start': [0, lambda self: self._prim_start()],
- 'startfill': [0, lambda self: self.tw.canvas.start_fill()],
- 'stopfill': [0, lambda self: self.tw.canvas.stop_fill()],
- 'stopstack': [0, lambda self: self._prim_stopstack()],
- 'storeinbox1': [1, lambda self, x: self._prim_setbox('box1', None, x)],
- 'storeinbox2': [1, lambda self, x: self._prim_setbox('box2', None, x)],
- 'storeinbox': [2, lambda self, x, y: self._prim_setbox('box3', x, y)],
- 't1x1': [2, lambda self, x, y: self._show_template1x1(x, y)],
- 't1x1a': [2, lambda self, x, y: self._show_template1x1a(x, y)],
- 't1x2': [3, lambda self, x, y, z: self._show_template1x2(x, y, z)],
- 't2x1': [3, lambda self, x, y, z: self._show_template2x1(x, y, z)],
- 't2x2': [5, lambda self, x, y, z, a, b: self._show_template2x2(
- x, y, z, a, b)],
'textcolor': [0, lambda self: self.tw.canvas.textcolor],
- 'textsize': [0, lambda self: self.tw.textsize],
- 'time': [0, lambda self: self._elapsed_time()],
- 'titlex': [0, lambda self: CONSTANTS['titlex']],
- 'titley': [0, lambda self: CONSTANTS['titley']],
- 'topy': [0, lambda self: CONSTANTS['topy']],
- 'tpos': [0, lambda self: CONSTANTS['toppos']],
- 'turtle': [1, lambda self, x: self.tw.canvas.set_turtle(x)],
- 'userdefined': [1, lambda self, x: self._prim_myblock([x])],
- 'userdefined2': [2, lambda self, x, y: self._prim_myblock([x, y])],
- 'userdefined3': [3, lambda self, x, y,
- z: self._prim_myblock([x, y, z])],
- 'video': [1, lambda self, x: self._play_video(x)],
- 'vres': [0, lambda self: CONSTANTS['height']],
- 'wait': [1, self._prim_wait, True],
- 'white': [0, lambda self: WHITE],
- 'write': [2, lambda self, x, y: self._write(self, x, y)],
- 'xcor': [0, lambda self: self.tw.canvas.xcor / self.tw.coord_scale],
- 'ycor': [0, lambda self: self.tw.canvas.ycor / self.tw.coord_scale],
- 'yellow': [0, lambda self: CONSTANTS['yellow']]}
+ 'textsize': [0, lambda self: self.tw.textsize]}
for p in iter(DEFPRIM):
if len(DEFPRIM[p]) == 2:
@@ -811,47 +499,6 @@ class LogoCode:
# Primitives
#
- def prim_clear(self):
- """ Clear screen """
- if self.tw.gst_available:
- from tagplay import stop_media
- stop_media(self)
- self.tw.canvas.clearscreen()
- self.scale = DEFAULT_SCALE
- # Note: users find this "feature" confusing
- # self.tw.set_polar(False)
- # self.tw.set_cartesian(False)
- self.hidden_turtle = None
- self._start_time = time()
- for name in VALUE_BLOCKS:
- self.update_label_value(name)
-
- def _prim_start(self):
- """ Start block: recenter """
- if self.tw.running_sugar:
- self.tw.activity.recenter()
-
- def _prim_wait(self, time):
- """ Show the turtle while we wait """
- self.tw.active_turtle.show()
- endtime = _millisecond() + time * 1000.
- while _millisecond() < endtime:
- yield True
- self.tw.active_turtle.hide()
- self._ireturn()
- yield True
-
- def _prim_repeat(self, num, blklist):
- """ Repeat list num times. """
- num = self._int(num)
- for i in range(num):
- self._icall(self._evline, blklist[:])
- yield True
- if self.procstop:
- break
- self._ireturn()
- yield True
-
def _prim_bullet(self, blklist):
""" Depreciated bullet-list block style """
self._show_bullets(blklist)
@@ -864,75 +511,6 @@ class LogoCode:
self._ireturn()
yield True
- def _myfunction(self, f, x):
- """ Programmable block """
- try:
- y = myfunc(f, x)
- if str(y) == 'nan':
- debug_output('Python function returned NAN',
- self.tw.running_sugar)
- self.stop_logo()
- raise logoerror("#notanumber")
- else:
- return y
- except ZeroDivisionError:
- self.stop_logo()
- raise logoerror("#zerodivide")
- except ValueError, e:
- self.stop_logo()
- raise logoerror('#' + str(e))
- except SyntaxError, e:
- self.stop_logo()
- raise logoerror('#' + str(e))
- except NameError, e:
- self.stop_logo()
- raise logoerror('#' + str(e))
- except OverflowError:
- self.stop_logo()
- raise logoerror("#overflowerror")
- except TypeError:
- self.stop_logo()
- raise logoerror("#notanumber")
-
- def _prim_forever(self, blklist):
- """ Do list forever """
- while True:
- self._icall(self._evline, blklist[:])
- yield True
- if self.procstop:
- break
- self._ireturn()
- yield True
-
- '''
- def _prim_while(self, list1, list2):
- list = [self._intern('if')]
- for i in list1:
- list.append(i)
- list.append(list2)
- while self._icall(self._evline, list[:]):
- yield True
- self._ireturn()
- yield True
- '''
-
- def _prim_if(self, boolean, blklist):
- """ If bool, do list """
- if boolean:
- self._icall(self._evline, blklist[:])
- yield True
- self._ireturn()
- yield True
-
- def _prim_ifelse(self, boolean, list1, list2):
- """ If bool, do list1, else do list2 """
- if boolean:
- self._ijmp(self._evline, list1[:])
- yield True
- else:
- self._ijmp(self._evline, list2[:])
- yield True
-
def _prim_opar(self, val):
self.iline.pop(0)
return val
@@ -978,14 +556,6 @@ class LogoCode:
self._ireturn()
yield True
- def _prim_stopstack(self):
- """ Stop execution of a stack """
- self.procstop = True
-
- def _prim_print_heap(self):
- """ Display contents of heap """
- self.tw.showlabel('status', str(self.heap) + ' ')
-
def _int(self, n):
""" Raise an error if n doesn't convert to int. """
if type(n) == int:
@@ -998,68 +568,6 @@ class LogoCode:
raise logoerror("%s %s %s %s" \
% (self.cfun.name, _("doesn't like"), str(n), _("as input")))
- def _box(self, x):
- """ Retrieve value from named box """
- if type(convert(x, float, False)) == float:
- if int(float(x)) == x:
- x = int(x)
- try:
- return self.boxes['box3' + str(x)]
- except KeyError:
- raise logoerror("#emptybox")
-
- def _prim_myblock(self, x):
- """ Run Python code imported from Journal """
- if self.bindex is not None and self.bindex in self.tw.myblock:
- try:
- if len(x) == 1:
- myfunc_import(self, self.tw.myblock[self.bindex], x[0])
- else:
- myfunc_import(self, self.tw.myblock[self.bindex], x)
- except:
- raise logoerror("#syntaxerror")
-
- def _prim_print(self, n, flag):
- """ Print object n """
- if flag and (self.tw.hide or self.tw.step_time == 0):
- return
- if type(n) == str or type(n) == unicode:
- if n[0:6] == 'media_' and \
- n[6:].lower not in MEDIA_BLOCKS_DICTIONARY:
- try:
- if self.tw.running_sugar:
- try:
- dsobject = datastore.get(n[6:])
- except:
- debug_output("Couldn't open %s" % (n[6:]),
- self.tw.running_sugar)
- self.tw.showlabel('status', dsobject.metadata['title'])
- dsobject.destroy()
- else:
- self.tw.showlabel('status', n[6:])
- except IOError:
- self.tw.showlabel('status', n)
- else:
- self.tw.showlabel('status', n)
- elif type(n) == int:
- self.tw.showlabel('status', n)
- else:
- self.tw.showlabel('status',
- str(round_int(n)).replace('.', self.tw.decimal_point))
-
- def _prim_kbinput(self):
- """ Query keyboard """
- if len(self.tw.keypress) == 1:
- self.keyboard = ord(self.tw.keypress[0])
- else:
- try:
- self.keyboard = {'Escape': 27, 'space': 32, ' ': 32,
- 'Return': 13, 'KP_Up': 2, 'KP_Down': 4,
- 'KP_Left': 1, 'KP_Right': 3}[self.tw.keypress]
- except KeyError:
- self.keyboard = 0
- self.update_label_value('keyboard', self.keyboard)
- self.tw.keypress = ''
def find_value_blocks(self):
""" Find any value blocks that may need label updates """
@@ -1087,69 +595,6 @@ class LogoCode:
block.spr.set_label(BLOCK_NAMES[name][0] + ' = ' + valstring)
block.resize()
- def _prim_set(self, name, cmd, value=None):
- """ Set a value and update the associated value blocks """
- if value is not None:
- cmd(value)
- self.update_label_value(name, value)
-
- def _prim_right(self, value):
- """ Turtle rotates clockwise """
- self.tw.canvas.right(float(value))
- self.update_label_value('heading', self.tw.canvas.heading)
-
- def _prim_move(self, cmd, value1, value2=None, pendown=True):
- """ Turtle moves by method specified in value1 """
- if value2 is None:
- cmd(value1)
- else:
- cmd(float(value1), float(value2), pendown=pendown)
- self.update_label_value('xcor',
- self.tw.canvas.xcor / self.tw.coord_scale)
- self.update_label_value('ycor',
- self.tw.canvas.ycor / self.tw.coord_scale)
- if len(self.value_blocks['see']) > 0:
- self.see()
-
- def _prim_arc(self, cmd, value1, value2):
- """ Turtle draws an arc of degree, radius """
- cmd(float(value1), float(value2))
- self.update_label_value('xcor',
- self.tw.canvas.xcor / self.tw.coord_scale)
- self.update_label_value('ycor',
- self.tw.canvas.ycor / self.tw.coord_scale)
- self.update_label_value('heading', self.tw.canvas.heading)
- if len(self.value_blocks['see']) > 0:
- self.see()
-
- def _prim_setbox(self, name, x, val):
- """ Define value of named box """
- if x is not None:
- if type(convert(x, float, False)) == float:
- if int(float(x)) == x:
- x = int(x)
- self.boxes[name + str(x)] = val
- return
-
- self.boxes[name] = val
- self.update_label_value(name, val)
-
- def _prim_push(self, val):
- """ Push value onto FILO """
- self.heap.append(val)
- self.update_label_value('pop', val)
-
- def _prim_pop(self):
- """ Pop value off of FILO """
- if len(self.heap) == 0:
- raise logoerror("#emptyheap")
- else:
- if len(self.heap) == 1:
- self.update_label_value('pop')
- else:
- self.update_label_value('pop', self.heap[-2])
- return self.heap.pop(-1)
-
def push_file_data_to_heap(self, dsobject):
""" push contents of a data store object (assuming json encoding) """
data = data_from_file(dsobject.file_path)
@@ -1158,19 +603,6 @@ class LogoCode:
self.heap.append(val)
self.update_label_value('pop', self.heap[-1])
- def _empty_heap(self):
- """ Empty FILO """
- self.heap = []
-
- def _save_picture(self, name):
- """ Save canvas to file as PNG """
- self.tw.save_as_image(name)
-
- def _save_svg(self, name):
- """ Save SVG to file """
- self.tw.canvas.svg_close()
- self.tw.save_as_image(name, True)
-
def _show_list(self, sarray):
""" Display list of media objects """
x = self.tw.canvas.xcor / self.tw.coord_scale
@@ -1180,47 +612,6 @@ class LogoCode:
self._show(s)
y -= int(self.tw.canvas.textsize * self.tw.lead)
- def _set_scale(self, x):
- """ Set scale used by media object display """
- self.scale = x
-
- def _reskin(self, media):
- """ Reskin the turtle with an image from a file """
- scale = int(ICON_SIZE * float(self.scale) / DEFAULT_SCALE)
- if scale < 1:
- return
- self.filepath = None
- dsobject = None
- if os.path.exists(media[6:]): # is it a path?
- self.filepath = media[6:]
- elif self.tw.running_sugar: # is it a datastore object?
- try:
- dsobject = datastore.get(media[6:])
- except:
- debug_output("Couldn't open skin %s" % (media[6:]),
- self.tw.running_sugar)
- if dsobject is not None:
- self.filepath = dsobject.file_path
- if self.filepath == None:
- self.tw.showlabel('nojournal', self.filepath)
- return
- pixbuf = None
- try:
- pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(self.filepath, scale,
- scale)
- except:
- self.tw.showlabel('nojournal', self.filepath)
- debug_output("Couldn't open skin %s" % (self.filepath),
- self.tw.running_sugar)
- if pixbuf is not None:
- self.tw.active_turtle.set_shapes([pixbuf])
- pen_state = self.tw.active_turtle.get_pen_state()
- if pen_state:
- self.tw.canvas.setpen(False)
- self.tw.canvas.forward(0)
- if pen_state:
- self.tw.canvas.setpen(True)
-
def _x(self):
""" Convert screen coordinates to turtle coordinates """
return int(self.tw.canvas.width / 2) + int(self.tw.canvas.xcor)
@@ -1237,73 +628,6 @@ class LogoCode:
""" Convert screen coordinates to turtle coordinates """
return int((self.tw.canvas.height * self.scale) / 100.)
- def _show(self, string, center=False):
- """ Show is the general-purpose media-rendering block. """
- if type(string) == str or type(string) == unicode:
- if string in ['media_', 'descr_', 'audio_', 'video_',
- 'media_None', 'descr_None', 'audio_None',
- 'video_None']:
- pass
- elif string[0:6] in ['media_', 'descr_', 'audio_', 'video_']:
- self.filepath = None
- self.dsobject = None
- print string[6:], MEDIA_BLOCKS_DICTIONARY
- if string[6:].lower() in MEDIA_BLOCKS_DICTIONARY:
- MEDIA_BLOCKS_DICTIONARY[string[6:].lower()]()
- elif os.path.exists(string[6:]): # is it a path?
- self.filepath = string[6:]
- elif self.tw.running_sugar: # is it a datastore object?
- try:
- self.dsobject = datastore.get(string[6:])
- except:
- debug_output("Couldn't find dsobject %s" % (
- string[6:]), self.tw.running_sugar)
- if self.dsobject is not None:
- self.filepath = self.dsobject.file_path
- if self.filepath == None:
- if self.dsobject is not None:
- self.tw.showlabel('nojournal',
- self.dsobject.metadata['title'])
- else:
- self.tw.showlabel('nojournal', string[6:])
- debug_output("Couldn't open %s" % (string[6:]),
- self.tw.running_sugar)
- elif string[0:6] == 'media_':
- self._insert_image(center)
- elif string[0:6] == 'descr_':
- mimetype = None
- if self.dsobject is not None and \
- 'mime_type' in self.dsobject.metadata:
- mimetype = self.dsobject.metadata['mime_type']
- description = None
- if self.dsobject is not None and \
- 'description' in self.dsobject.metadata:
- description = self.dsobject.metadata['description']
- self._insert_desc(mimetype, description)
- elif string[0:6] == 'audio_':
- self._play_sound()
- elif string[0:6] == 'video_':
- self._play_video()
- if self.dsobject is not None:
- self.dsobject.destroy()
- else: # assume it is text to display
- x, y = self._x(), self._y()
- if center:
- y -= self.tw.canvas.textsize
- self.tw.canvas.draw_text(string, x, y,
- int(self.tw.canvas.textsize * \
- self.scale / 100.),
- self.tw.canvas.width - x)
- elif type(string) == float or type(string) == int:
- string = round_int(string)
- x, y = self._x(), self._y()
- if center:
- y -= self.tw.canvas.textsize
- self.tw.canvas.draw_text(string, x, y,
- int(self.tw.canvas.textsize * \
- self.scale / 100.),
- self.tw.canvas.width - x)
-
def _insert_image(self, center=False, filepath=None):
""" Image only (at current x, y) """
if filepath is not None:
@@ -1393,213 +717,3 @@ class LogoCode:
from tagplay import play_movie_from_file
play_movie_from_file(self, self.filepath, self._x(), self._y(),
w, h)
-
- def _elapsed_time(self):
- """ Number of seconds since program execution has started or
- clean (prim_clear) block encountered """
- elapsed_time = int(time() - self._start_time)
- self.update_label_value('time', elapsed_time)
- return elapsed_time
-
- def see(self):
- """ Read r, g, b from the canvas and return a corresponding palette
- color """
- r, g, b, a = self.tw.canvas.get_pixel()
- color_index = self.tw.canvas.get_color_index(r, g, b)
- self.update_label_value('see', color_index)
- return color_index
-
- def _read_pixel(self):
- """ Read r, g, b, a from the canvas and push b, g, r to the stack """
- r, g, b, a = self.tw.canvas.get_pixel()
- self.heap.append(b)
- self.heap.append(g)
- self.heap.append(r)
- # Depreciated block methods
-
- def _show_template1x1(self, title, media):
- """ title, one image, and description """
- xo = self.tw.calc_position('t1x1')[2]
- x = -(self.tw.canvas.width / 2) + xo
- y = self.tw.canvas.height / 2
- self.tw.canvas.setxy(x, y, pendown=False)
- # save the text size so we can restore it later
- save_text_size = self.tw.canvas.textsize
- # set title text
- self.tw.canvas.settextsize(self.title_height)
- self._show(title)
- # calculate and set scale for media blocks
- myscale = 45 * (self.tw.canvas.height - self.title_height * 2) \
- / self.tw.canvas.height
- self._set_scale(myscale)
- # set body text size
- self.tw.canvas.settextsize(self.body_height)
- # render media object
- # leave some space below the title
- y -= int(self.title_height * 2 * self.tw.lead)
- self.tw.canvas.setxy(x, y, pendown=False)
- self._show(media)
- if self.tw.running_sugar:
- x = 0
- self.tw.canvas.setxy(x, y, pendown=False)
- self._show(media.replace('media_', 'descr_'))
- # restore text size
- self.tw.canvas.settextsize(save_text_size)
-
- def _show_template2x1(self, title, media1, media2):
- """ title, two images (horizontal), two descriptions """
- xo = self.tw.calc_position('t2x1')[2]
- x = -(self.tw.canvas.width / 2) + xo
- y = self.tw.canvas.height / 2
- self.tw.canvas.setxy(x, y, pendown=False)
- # save the text size so we can restore it later
- save_text_size = self.tw.canvas.textsize
- # set title text
- self.tw.canvas.settextsize(self.title_height)
- self._show(title)
- # calculate and set scale for media blocks
- myscale = 45 * (self.tw.canvas.height - self.title_height * 2) / \
- self.tw.canvas.height
- self._set_scale(myscale)
- # set body text size
- self.tw.canvas.settextsize(self.body_height)
- # render four quadrents
- # leave some space below the title
- y -= int(self.title_height * 2 * self.tw.lead)
- self.tw.canvas.setxy(x, y, pendown=False)
- self._show(media1)
- x = 0
- self.tw.canvas.setxy(x, y, pendown=False)
- self._show(media2)
- y = -self.title_height
- if self.tw.running_sugar:
- self.tw.canvas.setxy(x, y, pendown=False)
- self._show(media2.replace('media_', 'descr_'))
- x = -(self.tw.canvas.width / 2) + xo
- self.tw.canvas.setxy(x, y, pendown=False)
- self._show(media1.replace('media_', 'descr_'))
- # restore text size
- self.tw.canvas.settextsize(save_text_size)
-
- def _show_bullets(self, sarray):
- """ title and varible number of bullets """
- xo = self.tw.calc_position('bullet')[2]
- x = -(self.tw.canvas.width / 2) + xo
- y = self.tw.canvas.height / 2
- self.tw.canvas.setxy(x, y, pendown=False)
- # save the text size so we can restore it later
- save_text_size = self.tw.canvas.textsize
- # set title text
- self.tw.canvas.settextsize(self.title_height)
- self._show(sarray[0])
- # set body text size
- self.tw.canvas.settextsize(self.bullet_height)
- # leave some space below the title
- y -= int(self.title_height * 2 * self.tw.lead)
- for s in sarray[1:]:
- self.tw.canvas.setxy(x, y, pendown=False)
- self._show(s)
- y -= int(self.bullet_height * 2 * self.tw.lead)
- # restore text size
- self.tw.canvas.settextsize(save_text_size)
-
- def _show_template1x2(self, title, media1, media2):
- """ title, two images (vertical), two desciptions """
- xo = self.tw.calc_position('t1x2')[2]
- x = -(self.tw.canvas.width / 2) + xo
- y = self.tw.canvas.height / 2
- self.tw.canvas.setxy(x, y, pendown=False)
- # save the text size so we can restore it later
- save_text_size = self.tw.canvas.textsize
- # set title text
- self.tw.canvas.settextsize(self.title_height)
- self._show(title)
- # calculate and set scale for media blocks
- myscale = 45 * (self.tw.canvas.height - self.title_height * 2) / \
- self.tw.canvas.height
- self._set_scale(myscale)
- # set body text size
- self.tw.canvas.settextsize(self.body_height)
- # render four quadrents
- # leave some space below the title
- y -= int(self.title_height * 2 * self.tw.lead)
- self.tw.canvas.setxy(x, y, pendown=False)
- self._show(media1)
- if self.tw.running_sugar:
- x = 0
- self.tw.canvas.setxy(x, y, pendown=False)
- self._show(media1.replace('media_', 'descr_'))
- y = -self.title_height
- self.tw.canvas.setxy(x, y, pendown=False)
- self._show(media2.replace('media_', 'descr_'))
- x = -(self.tw.canvas.width / 2) + xo
- self.tw.canvas.setxy(x, y, pendown=False)
- self._show(media2)
- # restore text size
- self.tw.canvas.settextsize(save_text_size)
-
- def _show_template2x2(self, title, media1, media2, media3, media4):
- """ title and four images """
- xo = self.tw.calc_position('t2x2')[2]
- x = -(self.tw.canvas.width / 2) + xo
- y = self.tw.canvas.height / 2
- self.tw.canvas.setxy(x, y, pendown=False)
- # save the text size so we can restore it later
- save_text_size = self.tw.canvas.textsize
- # set title text
- self.tw.canvas.settextsize(self.title_height)
- self._show(title)
- # calculate and set scale for media blocks
- myscale = 45 * (self.tw.canvas.height - self.title_height * 2) / \
- self.tw.canvas.height
- self._set_scale(myscale)
- # set body text size
- self.tw.canvas.settextsize(self.body_height)
- # render four quadrents
- # leave some space below the title
- y -= int(self.title_height * 2 * self.tw.lead)
- self.tw.canvas.setxy(x, y, pendown=False)
- self._show(media1)
- x = 0
- self.tw.canvas.setxy(x, y, pendown=False)
- self._show(media2)
- y = -self.title_height
- self.tw.canvas.setxy(x, y, pendown=False)
- self._show(media4)
- x = -(self.tw.canvas.width / 2) + xo
- self.tw.canvas.setxy(x, y, pendown=False)
- self._show(media3)
- # restore text size
- self.tw.canvas.settextsize(save_text_size)
-
- def _show_template1x1a(self, title, media1):
- """ title, one media object """
- xo = self.tw.calc_position('t1x1a')[2]
- x = -(self.tw.canvas.width / 2) + xo
- y = self.tw.canvas.height / 2
- self.tw.canvas.setxy(x, y, pendown=False)
- # save the text size so we can restore it later
- save_text_size = self.tw.canvas.textsize
- # set title text
- self.tw.canvas.settextsize(self.title_height)
- self._show(title)
- # calculate and set scale for media blocks
- myscale = 90 * (self.tw.canvas.height - self.title_height * 2) / \
- self.tw.canvas.height
- self._set_scale(myscale)
- # set body text size
- self.tw.canvas.settextsize(self.body_height)
- # render media object
- # leave some space below the title
- y -= int(self.title_height * 2 * self.tw.lead)
- self.tw.canvas.setxy(x, y, pendown=False)
- self._show(media1)
- # restore text size
- self.tw.canvas.settextsize(save_text_size)
-
- def _write(self, string, fsize):
- """ Write string at size """
- x = self.tw.canvas.width / 2 + int(self.tw.canvas.xcor)
- y = self.tw.canvas.height / 2 - int(self.tw.canvas.ycor)
- self.tw.canvas.draw_text(string, x, y - 15, int(fsize),
- self.tw.canvas.width)