Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS31
-rw-r--r--TurtleArt/talogo.py1
-rw-r--r--TurtleArt/taturtle.py24
-rw-r--r--TurtleArt/tawindow.py90
-rw-r--r--TurtleArtActivity.py41
-rw-r--r--activity/activity.info2
-rw-r--r--images/Cartesian.svg406
-rw-r--r--po/ko.po67
-rw-r--r--po/quz.po30
-rw-r--r--samples/graphics-grid.tb161
-rw-r--r--samples/graphics-op-art-2.ta83
-rw-r--r--samples/media-music-dots.tb61
-rw-r--r--samples/media-music-keyboard.tb130
-rw-r--r--samples/media-music.ta179
-rw-r--r--samples/media-music.tb176
-rw-r--r--samples/thumbnails/graphics-grid.pngbin0 -> 15989 bytes
-rw-r--r--samples/thumbnails/graphics-op-art-2.pngbin0 -> 10050 bytes
-rw-r--r--samples/thumbnails/media-music-dots.pngbin0 -> 7073 bytes
-rw-r--r--samples/thumbnails/media-music-keyboard.pngbin0 -> 936 bytes
-rwxr-xr-xturtleblocks.py65
20 files changed, 1066 insertions, 481 deletions
diff --git a/NEWS b/NEWS
index d34ad7c..450d30c 100644
--- a/NEWS
+++ b/NEWS
@@ -1,13 +1,42 @@
+190
+
+ENHANCEMENT:
+* Set maximum number of participants
+
+189
+
+ENHANCEMENT:
+* New sample project
+
+BUG FIXES:
+* Fix alignment problem with GNOME version
+* Fix problem with default coordinate system
+
+
+188
+
+ENHANCEMENT:
+* Add labels to Cartesian coordinate grid
+
+BUG FIXES:
+* Ensure that default coordinate scale is 1 (pixel mode)
+* Adjust pen size to coordinate scale
+
187
ENHANCEMENTS:
* Use icon view for browsing sample projects
* New translations
* New sample progams
+* Save coordinate scale with gconf
+* Make scaled coordinates +-20 instead of +-100
-BUG FIX:
+BUG FIXES:
* Fixed more bugs in SVG save
* Fixed several bugs in non-interactive mode
+* Fixed problem with erratic Cntl-V (SL #2751)
+* Fixed problem with missing Stop button when malformed block encountered
+ (SL #4522)
186
diff --git a/TurtleArt/talogo.py b/TurtleArt/talogo.py
index 7aac4ce..0b178c6 100644
--- a/TurtleArt/talogo.py
+++ b/TurtleArt/talogo.py
@@ -394,6 +394,7 @@ class LogoCode:
if self._disable_help:
self.tw.no_help = False
self._disable_help = False
+ self.tw.display_coordinates()
def icall(self, fcn, *args):
""" Add a function and its arguments to the program stack. """
diff --git a/TurtleArt/taturtle.py b/TurtleArt/taturtle.py
index 10d0230..8d2afea 100644
--- a/TurtleArt/taturtle.py
+++ b/TurtleArt/taturtle.py
@@ -138,7 +138,10 @@ class Turtles:
self._active_turtle.set_color(0)
self._active_turtle.set_shade(50)
self._active_turtle.set_gray(100)
- self._active_turtle.set_pen_size(5)
+ if self.turtle_window.coord_scale == 1:
+ self._active_turtle.set_pen_size(5)
+ else:
+ self._active_turtle.set_pen_size(1)
self._active_turtle.reset_shapes()
self._active_turtle.set_heading(0.0)
self._active_turtle.set_pen_state(False)
@@ -202,7 +205,10 @@ class Turtle:
self._pen_shade = 50
self._pen_color = 0
self._pen_gray = 100
- self._pen_size = 5
+ if self._turtles.turtle_window.coord_scale == 1:
+ self._pen_size = 5
+ else:
+ self._pen_size = 1
self._pen_state = True
self._pen_fill = False
self._poly_points = []
@@ -422,7 +428,8 @@ class Turtle:
self._turtles.turtle_window.running_sugar)
return
- self._turtles.turtle_window.canvas.set_pen_size(self._pen_size)
+ self._turtles.turtle_window.canvas.set_pen_size(
+ self._pen_size * self._turtles.turtle_window.coord_scale)
if self._turtles.turtle_window.sharing() and share:
event = 'w|%s' % (data_to_string([self._turtles.turtle_window.nick,
@@ -555,12 +562,15 @@ class Turtle:
int(distance)]))
self._turtles.turtle_window.send_event(event)
- def set_xy(self, x, y, share=True, pendown=True):
+ def set_xy(self, x, y, share=True, pendown=True, dragging=False):
old = self.get_xy()
-
try:
- xcor = x * self._turtles.turtle_window.coord_scale
- ycor = y * self._turtles.turtle_window.coord_scale
+ if dragging:
+ xcor = x
+ ycor = y
+ else:
+ xcor = x * self._turtles.turtle_window.coord_scale
+ ycor = y * self._turtles.turtle_window.coord_scale
except (TypeError, ValueError):
debug_output('bad value sent to %s' % (__name__),
self._turtles.turtle_window.running_sugar)
diff --git a/TurtleArt/tawindow.py b/TurtleArt/tawindow.py
index a791919..3a8f4bb 100644
--- a/TurtleArt/tawindow.py
+++ b/TurtleArt/tawindow.py
@@ -102,10 +102,12 @@ class TurtleArtWindow():
def __init__(self, canvas_window, path, parent=None, activity=None,
mycolors=None, mynick=None, turtle_canvas=None,
running_sugar=True, running_turtleart=True):
- '''parent -- the GTK Window that TA runs in
- activity -- the object that instantiated this TurtleArtWindow (in
- GNOME, a TurtleMain instance)
- running_turtleart -- are we running TA or exported python code?
+ '''
+ parent: the GTK Window that TA runs in
+ activity: the object that instantiated this TurtleArtWindow (in
+ GNOME, a TurtleMain instance, in Sugar, the Activity
+ instance)
+ running_turtleart: are we running TA or exported python code?
'''
self.parent = parent
self.turtle_canvas = turtle_canvas
@@ -529,6 +531,8 @@ class TurtleArtWindow():
self._autohide_shape = True
for name in OVERLAY_SHAPES:
+ if name == 'Cartesian':
+ continue
self.overlay_shapes[name] = Sprite(
self.sprite_list,
int(self.width / 2 - 600),
@@ -538,6 +542,8 @@ class TurtleArtWindow():
self.overlay_shapes[name].hide()
self.overlay_shapes[name].type = 'overlay'
+ self._create_scaled_cartesian_coordinates()
+
if self.running_turtleart and not self.running_sugar:
# offset = 2 * self.width - 55 * len(TOOLBAR_SHAPES)
offset = 55 * (1 + len(palette_blocks))
@@ -553,6 +559,27 @@ class TurtleArtWindow():
self.toolbar_shapes[name].type = 'toolbar'
self.toolbar_shapes['stopiton'].hide()
+ def _create_scaled_cartesian_coordinates(self):
+ # Cartesian overlay has to be scaled to match the coordinate_scale
+ # 200 pixels in the graphic == height / 4. (10 units)
+ pixbuf = svg_str_to_pixbuf(
+ svg_from_file('%s/images/%s.svg' % (self.path, 'Cartesian')))
+
+ if self.running_sugar:
+ scale = self.height / 800.
+ else:
+ scale = self.height / 800.
+ # scale = (self.height + ICON_SIZE) / 800.
+ self.overlay_shapes['Cartesian'] = Sprite(
+ self.sprite_list,
+ int(self.width / 2 - 600),
+ int(self.height / 2 - 450),
+ pixbuf.scale_simple(int(1200 * scale),
+ int(900 * scale),
+ gtk.gdk.INTERP_BILINEAR))
+ self.overlay_shapes['Cartesian'].set_layer(TAB_LAYER)
+ self.overlay_shapes['Cartesian'].hide()
+
def set_sharing(self, shared):
self._sharing = shared
@@ -714,7 +741,8 @@ class TurtleArtWindow():
if self.running_sugar:
y_offset = 0
else:
- y_offset = ICON_SIZE
+ y_offset = 0
+ # y_offset = ICON_SIZE
self.canvas.draw_surface(
self.overlay_shapes[overlay].cached_surfaces[0],
(self.canvas.width - width) / 2.0,
@@ -722,10 +750,13 @@ class TurtleArtWindow():
width,
height)
- def update_overlay_position(self, widget, event):
+ def update_overlay_position(self, widget=None, event=None):
''' Reposition the overlays when window size changes '''
- self.width = event.width
- self.height = event.height
+ # self.width = event.width
+ # self.height = event.height
+ self.width = gtk.gdk.screen_width()
+ self.height = gtk.gdk.screen_height()
+
for name in OVERLAY_SHAPES:
if not name in self.overlay_shapes:
continue
@@ -734,17 +765,24 @@ class TurtleArtWindow():
if shape in shape._sprites.list:
shape.hide()
showing = True
+ self.overlay_shapes[name].move((int(self.width / 2 - 600),
+ int(self.height / 2 - 450)))
+ '''
self.overlay_shapes[name] = Sprite(
self.sprite_list,
int(self.width / 2 - 600),
int(self.height / 2 - 450),
svg_str_to_pixbuf(
svg_from_file('%s/images/%s.svg' % (self.path, name))))
+ '''
if showing:
self.overlay_shapes[name].set_layer(OVERLAY_LAYER)
else:
self.overlay_shapes[name].hide()
+ '''
self.overlay_shapes[name].type = 'overlay'
+ '''
+
self.cartesian = False
self.polar = False
self.metric = False
@@ -802,6 +840,7 @@ class TurtleArtWindow():
if not self.running_sugar or not self.activity.has_toolbarbox:
self.toolbar_spr.set_layer(CATEGORY_LAYER)
self.palette = True
+ self._set_coordinates_label(palette_names[n])
def hide_palette(self):
''' Hide the palette. '''
@@ -1410,6 +1449,13 @@ class TurtleArtWindow():
if spr is not None:
blk = self.block_list.spr_to_block(spr)
if blk is not None:
+ # Make sure stop button is visible
+ if self.running_sugar:
+ self.activity.stop_turtle_button.set_icon("stopiton")
+ self.activity.stop_turtle_button.set_tooltip(
+ _('Stop turtle'))
+ elif self.interactive_mode:
+ self.toolbar_shapes['stopiton'].set_layer(TAB_LAYER)
self.showlabel('status',
label=_('Please hit the Stop Button \
before making changes to your Turtle Blocks program'))
@@ -2511,10 +2557,12 @@ before making changes to your Turtle Blocks program'))
pos = self.turtles.screen_to_turtle_coordinates((dx, dy))
if self.selected_turtle.get_pen_state():
self.selected_turtle.set_pen_state(False)
- self.selected_turtle.set_xy(*pos, share=False)
+ self.selected_turtle.set_xy(*pos, share=False,
+ dragging=True)
self.selected_turtle.set_pen_state(True)
else:
- self.selected_turtle.set_xy(*pos, share=False)
+ self.selected_turtle.set_xy(*pos, share=False,
+ dragging=True)
if self.update_counter % 5:
self.lc.update_label_value(
'xcor', self.selected_turtle.get_xy()[0] /
@@ -3809,7 +3857,6 @@ before making changes to your Turtle Blocks program'))
(self._loaded_project), self.running_sugar)
saved_project_data = ''
current_project_data = data_to_string(self.assemble_data_to_save())
-
return saved_project_data != current_project_data
def load_files(self, ta_file, create_new_project=True):
@@ -4133,6 +4180,7 @@ before making changes to your Turtle Blocks program'))
[None, None]]])
else:
self.process_data(data_from_file(ta_file))
+ self._loaded_project = ta_file
def save_file(self, file_name=None):
''' Start a project to a file '''
@@ -4219,11 +4267,7 @@ before making changes to your Turtle Blocks program'))
def display_coordinates(self, clear=False):
''' Display the coordinates of the current turtle on the toolbar '''
if clear:
- if self.running_sugar:
- self.activity.coordinates_label.set_text('')
- self.activity.coordinates_label.show()
- elif self.interactive_mode:
- self.parent.set_title('')
+ self._set_coordinates_label('')
else:
x = round_int(float(self.turtles.get_active_turtle().get_xy()[0]) /
self.coord_scale)
@@ -4235,19 +4279,25 @@ before making changes to your Turtle Blocks program'))
formatting = '(%d, %d) %d'
else:
formatting = '(%0.2f, %0.2f) %0.2f'
- self.activity.coordinates_label.set_text(
- formatting % (x, y, h))
- self.activity.coordinates_label.show()
+ self._set_coordinates_label(formatting % (x, y, h))
elif self.interactive_mode:
if int(x) == x and int(y) == y and int(h) == h:
formatting = '%s — %s: %d %s: %d %s: %d'
else:
formatting = '%s — %s: %0.2f %s: %0.2f %s: %0.2f'
- self.parent.set_title(
+ self._set_coordinates_label(
formatting % (self.activity.name, _('xcor'), x,
_('ycor'), y, _('heading'), h))
self.update_counter = 0
+ def _set_coordinates_label(self, text):
+ if self.running_sugar:
+ self.activity.coordinates_label.set_text(text)
+ self.activity.coordinates_label.show()
+ elif self.interactive_mode:
+ self.parent.set_title(text)
+
+
def showlabel(self, shp, label=''):
''' Display a message on a status block '''
if not self.interactive_mode:
diff --git a/TurtleArtActivity.py b/TurtleArtActivity.py
index f965003..078377b 100644
--- a/TurtleArtActivity.py
+++ b/TurtleArtActivity.py
@@ -62,7 +62,7 @@ except ImportError:
from gettext import gettext as _
from TurtleArt.tapalette import (palette_names, help_strings, help_palettes,
- help_windows)
+ help_windows, default_values)
from TurtleArt.taconstants import (BLOCK_SCALE, XO1, XO15, XO175, XO4,
MIMETYPE)
from TurtleArt.taexportlogo import save_logo
@@ -78,6 +78,7 @@ if HAS_TOOLBARBOX:
class TurtleArtActivity(activity.Activity):
''' Activity subclass for Turtle Art '''
_HOVER_HELP = '/desktop/sugar/activities/turtleart/hoverhelp'
+ _COORDINATE_SCALE = '/desktop/sugar/activities/turtleart/coordinatescale'
def __init__(self, handle):
''' Set up the toolbars, canvas, sharing, etc. '''
@@ -131,6 +132,12 @@ class TurtleArtActivity(activity.Activity):
self.client = gconf.client_get_default()
if self.client.get_int(self._HOVER_HELP) == 1:
self._do_hover_help_toggle(None)
+ if not self.client.get_int(self._COORDINATE_SCALE) in [0, 1]:
+ self.tw.coord_scale = 1
+ self.do_rescale_cb(None)
+ else:
+ self.tw.coord_scale = 0
+ self.do_rescale_cb(None)
self._selected_sample = None
self._sample_window = None
@@ -316,7 +323,8 @@ class TurtleArtActivity(activity.Activity):
self.tw.no_help = False
self._hover_help_toggle.set_icon('help-off')
self._hover_help_toggle.set_tooltip(_('Turn off hover help'))
- self.client.set_int(self._HOVER_HELP, 0)
+ if HAS_GCONF:
+ self.client.set_int(self._HOVER_HELP, 0)
else:
self.tw.no_help = True
self.tw.last_label = None
@@ -324,7 +332,8 @@ class TurtleArtActivity(activity.Activity):
self.tw.status_spr.hide()
self._hover_help_toggle.set_icon('help-on')
self._hover_help_toggle.set_tooltip(_('Turn on hover help'))
- self.client.set_int(self._HOVER_HELP, 1)
+ if HAS_GCONF:
+ self.client.set_int(self._HOVER_HELP, 1)
# These methods are called both from toolbar buttons and blocks.
@@ -502,16 +511,27 @@ class TurtleArtActivity(activity.Activity):
self.tw.set_metric(True)
def do_rescale_cb(self, button):
- ''' Rescale coordinate system (100==height/2 or 100 pixels). '''
+ ''' Rescale coordinate system (20==height/2 or 100 pixels). '''
if self.tw.coord_scale == 1:
- self.tw.coord_scale = self.tw.height / 200
+ self.tw.coord_scale = self.tw.height / 40
self.rescale_button.set_icon('contract-coordinates')
self.rescale_button.set_tooltip(_('Rescale coordinates down'))
+ default_values['forward'] = [10]
+ default_values['back'] = [10]
+ default_values['arc'] = [90, 10]
+ default_values['setpensize'] = [1]
+ self.tw.turtles.get_active_turtle().set_pen_size(1)
else:
self.tw.coord_scale = 1
self.rescale_button.set_icon('expand-coordinates')
self.rescale_button.set_tooltip(_('Rescale coordinates up'))
- self.tw.eraser_button()
+ default_values['forward'] = [100]
+ default_values['back'] = [100]
+ default_values['arc'] = [90, 100]
+ default_values['setpensize'] = [5]
+ self.tw.turtles.get_active_turtle().set_pen_size(5)
+ if HAS_GCONF:
+ self.client.set_int(self._COORDINATE_SCALE, self.tw.coord_scale)
# Given the change in how overlays are handled (v123), there is no way
# to erase and then redraw the overlays.
@@ -594,6 +614,8 @@ class TurtleArtActivity(activity.Activity):
def _setup_toolbar(self):
''' Setup toolbar according to Sugar version. '''
if self.has_toolbarbox:
+ self.max_participants = 4
+
self._setup_toolbar_help()
self._toolbox = ToolbarBox()
@@ -626,7 +648,6 @@ class TurtleArtActivity(activity.Activity):
self._toolbox.toolbar.insert(self.palette_toolbar_button, -1)
self.set_toolbar_box(self._toolbox)
- self.palette_toolbar_button.set_expanded(True)
else:
self._toolbox = activity.ActivityToolbox(self)
self.set_toolbox(self._toolbox)
@@ -692,7 +713,11 @@ class TurtleArtActivity(activity.Activity):
self._view_toolbar.show()
self._toolbox.show()
- if not self.has_toolbarbox:
+ if self.has_toolbarbox:
+ self.edit_toolbar_button.set_expanded(True)
+ self.edit_toolbar_button.set_expanded(False)
+ self.palette_toolbar_button.set_expanded(True)
+ else:
self._toolbox.set_current_toolbar(1)
def _setup_extra_controls(self):
diff --git a/activity/activity.info b/activity/activity.info
index e9f55f9..f0fcf70 100644
--- a/activity/activity.info
+++ b/activity/activity.info
@@ -1,6 +1,6 @@
[Activity]
name = TurtleBlocks
-activity_version = 187
+activity_version = 190
license = MIT
bundle_id = org.laptop.TurtleArtActivity
exec = sugar-activity TurtleArtActivity.TurtleArtActivity
diff --git a/images/Cartesian.svg b/images/Cartesian.svg
index 7a29e22..b34751f 100644
--- a/images/Cartesian.svg
+++ b/images/Cartesian.svg
@@ -1,211 +1,213 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
- version="1.0"
+ version="1.2"
width="1200"
height="900"
id="svg2">
- <defs
- id="defs4" />
- <g
- id="layer1">
- <path
- d="M 0,850 L 1200,850"
- style="fill:none;stroke:#AAAAAA;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 0,750 L 1200,750"
- style="fill:none;stroke:#AAAAAA;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 0,650 L 1200,650"
- style="fill:none;stroke:#AAAAAA;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 0,550 L 1200,550"
- style="fill:none;stroke:#AAAAAA;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 0,350 L 1200,350"
- style="fill:none;stroke:#AAAAAA;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 0,250 L 1200,250"
- style="fill:none;stroke:#AAAAAA;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 0,150 L 1200,150"
- style="fill:none;stroke:#AAAAAA;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 0,50 L 1200,50"
- style="fill:none;stroke:#AAAAAA;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 1100,0 L 1100,900"
- style="fill:none;stroke:#AAAAAA;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 1000,0 L 1000,900"
- style="fill:none;stroke:#AAAAAA;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 900,0 L 900,900"
- style="fill:none;stroke:#AAAAAA;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 800,0 L 800,900"
- style="fill:none;stroke:#AAAAAA;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 700,0 L 700,900"
- style="fill:none;stroke:#AAAAAA;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 500,0 L 500,900"
- style="fill:none;stroke:#AAAAAA;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 400,0 L 400,900"
- style="fill:none;stroke:#AAAAAA;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 300,0 L 300,900"
- style="fill:none;stroke:#AAAAAA;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 200,0 L 200,900"
- style="fill:none;stroke:#AAAAAA;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 100,0 L 100,900"
- style="fill:none;stroke:#AAAAAA;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 590,850 L 610,850"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 590,750 L 610,750"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 590,650 L 610,650"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 590,550 L 610,550"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 0,450 L 1200,450"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 590,350 L 610,350"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 590,250 L 610,250"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 590,150 L 610,150"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 590,50 L 610,50"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 1100,440 L 1100,460"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 1000,440 L 1000,460"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 900,440 L 900,460"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 800,440 L 800,460"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 700,440 L 700,460"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 600,0 L 600,900"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 500,440 L 500,460"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 400,440 L 400,460"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 300,440 L 300,460"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 200,440 L 200,460"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
- <path
- d="M 100,440 L 100,460"
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
-<!--
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#0000FF;fill-opacity:1;stroke:none;text-anchor:middle;text-align:center;font-family:Bitstream Vera Sans"><tspan
- x="95"
- y="480">–500</tspan></text>
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#0000FF;fill-opacity:1;stroke:none;text-anchor:middle;text-align:center;font-family:Bitstream Vera Sans"><tspan
- x="195"
- y="480">–400</tspan></text>
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#0000FF;fill-opacity:1;stroke:none;text-anchor:middle;text-align:center;font-family:Bitstream Vera Sans"><tspan
- x="295"
- y="480">–300</tspan></text>
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#0000FF;fill-opacity:1;stroke:none;text-anchor:middle;text-align:center;font-family:Bitstream Vera Sans"><tspan
- x="395"
- y="480">–200</tspan></text>
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#0000FF;fill-opacity:1;stroke:none;text-anchor:middle;text-align:center;font-family:Bitstream Vera Sans"><tspan
- x="495"
- y="480">–100</tspan></text>
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#0000FF;fill-opacity:1;stroke:none;text-anchor:middle;text-align:center;font-family:Bitstream Vera Sans"><tspan
- x="650"
- y="480">x</tspan></text>
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#0000FF;fill-opacity:1;stroke:none;text-anchor:middle;text-align:center;font-family:Bitstream Vera Sans"><tspan
- x="700"
- y="480">100</tspan></text>
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#0000FF;fill-opacity:1;stroke:none;text-anchor:middle;text-align:center;font-family:Bitstream Vera Sans"><tspan
- x="800"
- y="480">200</tspan></text>
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#0000FF;fill-opacity:1;stroke:none;text-anchor:middle;text-align:center;font-family:Bitstream Vera Sans"><tspan
- x="900"
- y="480">300</tspan></text>
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#0000FF;fill-opacity:1;stroke:none;text-anchor:middle;text-align:center;font-family:Bitstream Vera Sans"><tspan
- x="1000"
- y="480">400</tspan></text>
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#0000FF;fill-opacity:1;stroke:none;text-anchor:middle;text-align:center;font-family:Bitstream Vera Sans"><tspan
- x="1100"
- y="480">500</tspan></text>
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#00AA00;fill-opacity:1;stroke:none;text-anchor:end;text-align:end;font-family:Bitstream Vera Sans"><tspan
- x="590"
- y="58">400</tspan></text>
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#00AA00;fill-opacity:1;stroke:none;text-anchor:end;text-align:end;font-family:Bitstream Vera Sans"><tspan
- x="590"
- y="158">300</tspan></text>
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#00AA00;fill-opacity:1;stroke:none;text-anchor:end;text-align:end;font-family:Bitstream Vera Sans"><tspan
- x="590"
- y="258">200</tspan></text>
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#00AA00;fill-opacity:1;stroke:none;text-anchor:end;text-align:end;font-family:Bitstream Vera Sans"><tspan
- x="590"
- y="358">100</tspan></text>
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#00AA00;fill-opacity:1;stroke:none;text-anchor:end;text-align:end;font-family:Bitstream Vera Sans"><tspan
- x="590"
- y="408">y</tspan></text>
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#00AA00;fill-opacity:1;stroke:none;text-anchor:end;text-align:end;font-family:Bitstream Vera Sans"><tspan
- x="590"
- y="558">–100</tspan></text>
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#00AA00;fill-opacity:1;stroke:none;text-anchor:end;text-align:end;font-family:Bitstream Vera Sans"><tspan
- x="590"
- y="658">–200</tspan></text>
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#00AA00;fill-opacity:1;stroke:none;text-anchor:end;text-align:end;font-family:Bitstream Vera Sans"><tspan
- x="590"
- y="758">–300</tspan></text>
- <text
- style="font-size:20px;font-style:normal;font-weight:normal;fill:#00AA00;fill-opacity:1;stroke:none;text-anchor:end;text-align:end;font-family:Bitstream Vera Sans"><tspan
- x="590"
- y="858">–400</tspan></text>
--->
- </g>
+ <path
+ d="m 0,850 1200,0"
+ style="fill:none;stroke:#aaaaaa;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 0,750 1200,0"
+ style="fill:none;stroke:#aaaaaa;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 0,650 1200,0"
+ style="fill:none;stroke:#aaaaaa;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 0,550 1200,0"
+ style="fill:none;stroke:#aaaaaa;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 0,350 1200,0"
+ style="fill:none;stroke:#aaaaaa;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 0,250 1200,0"
+ style="fill:none;stroke:#aaaaaa;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 0,150 1200,0"
+ style="fill:none;stroke:#aaaaaa;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 0,50 1200,0"
+ style="fill:none;stroke:#aaaaaa;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 1100,0 0,900"
+ style="fill:none;stroke:#aaaaaa;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 1000,0 0,900"
+ style="fill:none;stroke:#aaaaaa;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 900,0 0,900"
+ style="fill:none;stroke:#aaaaaa;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 800,0 0,900"
+ style="fill:none;stroke:#aaaaaa;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 700,0 0,900"
+ style="fill:none;stroke:#aaaaaa;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 500,0 0,900"
+ style="fill:none;stroke:#aaaaaa;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 400,0 0,900"
+ style="fill:none;stroke:#aaaaaa;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 300,0 0,900"
+ style="fill:none;stroke:#aaaaaa;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 200,0 0,900"
+ style="fill:none;stroke:#aaaaaa;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 100,0 0,900"
+ style="fill:none;stroke:#aaaaaa;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 590,850 20,0"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 590,750 20,0"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 590,650 20,0"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 590,550 20,0"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 0,450 1200,0"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 590,350 20,0"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 590,250 20,0"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 590,150 20,0"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 590,50 20,0"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 1100,440 0,20"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 1000,440 0,20"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 900,440 0,20"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 800,440 0,20"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 700,440 0,20"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 600,0 0,900"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 500,440 0,20"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 400,440 0,20"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 300,440 0,20"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 200,440 0,20"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <path
+ d="m 100,440 0,20"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1" />
+ <text
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="90"
+ y="447"
+ style="font-size:24px">-25</tspan></text>
+ <text
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="190"
+ y="447"
+ style="font-size:24px">-20</tspan></text>
+ <text
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="290"
+ y="447"
+ style="font-size:24px">-15</tspan></text>
+ <text
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="390"
+ y="447"
+ style="font-size:24px">-10</tspan></text>
+ <text
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="490"
+ y="447"
+ style="font-size:24px">-5</tspan></text>
+ <text
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="700"
+ y="447"
+ style="font-size:24px">5</tspan></text>
+ <text
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="800"
+ y="447"
+ style="font-size:24px">10</tspan></text>
+ <text
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="600"
+ y="447"
+ style="font-size:24px">0</tspan></text>
+ <text
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="900"
+ y="447"
+ style="font-size:24px">15</tspan></text>
+ <text
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="1000"
+ y="447"
+ style="font-size:24px">20</tspan></text>
+ <text
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="1100"
+ y="447"
+ style="font-size:24px">25</tspan></text>
+ <text
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="590"
+ y="747"
+ style="font-size:24px">-15</tspan></text>
+ <text
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="590"
+ y="647"
+ style="font-size:24px">-10</tspan></text>
+ <text
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="590"
+ y="547"
+ style="font-size:24px">-5</tspan></text>
+ <text
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="600"
+ y="347"
+ style="font-size:24px">5</tspan></text>
+ <text
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="600"
+ y="247"
+ style="font-size:24px">10</tspan></text>
+ <text
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="600"
+ y="147"
+ style="font-size:24px">15</tspan></text>
</svg>
diff --git a/po/ko.po b/po/ko.po
index 8eeab45..cc5a5c6 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -7,15 +7,14 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-05-17 00:31-0400\n"
-"PO-Revision-Date: 2009-05-10 23:43-0400\n"
+"PO-Revision-Date: 2013-08-06 11:21+0900\n"
"Last-Translator: Donghee Park <i4u_4ever@yahoo.com>\n"
"Language-Team: LANGUAGE <walter@sugarlabs.org>\n"
-"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Pootle 1.2.1\n"
+"X-Generator: Poedit 1.5.7\n"
#. TRANS: "name" option from activity.info file
msgid "TurtleBlocks"
@@ -86,7 +85,7 @@ msgstr "도"
#: TurtleArt/tabasics.py:182
msgid "radius"
-msgstr "라디우스"
+msgstr "반지름"
#: TurtleArt/tabasics.py:186
msgid "moves turtle along an arc"
@@ -177,7 +176,7 @@ msgstr ""
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:1194
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:1199
msgid "gray"
-msgstr ""
+msgstr "회색"
#: TurtleArt/tabasics.py:309
msgid "set color"
@@ -197,7 +196,7 @@ msgstr ""
#: TurtleArt/tabasics.py:333
msgid "set gray"
-msgstr ""
+msgstr "회색으로 설정"
#: TurtleArt/tabasics.py:336
msgid "sets gray level of the line drawn by the turtle"
@@ -241,7 +240,7 @@ msgstr ""
#: TurtleArt/tabasics.py:404
msgid "start fill"
-msgstr ""
+msgstr "채우기 시작"
#: TurtleArt/tabasics.py:406
msgid "starts filled polygon (used with end fill block)"
@@ -249,7 +248,7 @@ msgstr ""
#: TurtleArt/tabasics.py:413
msgid "end fill"
-msgstr ""
+msgstr "채우기 끝"
#: TurtleArt/tabasics.py:415
msgid "completes filled polygon (used with start fill block)"
@@ -269,35 +268,35 @@ msgstr ""
#: TurtleArt/tabasics.py:439
msgid "red"
-msgstr ""
+msgstr "빨간색"
#: TurtleArt/tabasics.py:440
msgid "orange"
-msgstr ""
+msgstr "오렌지색"
#: TurtleArt/tabasics.py:442
msgid "yellow"
-msgstr ""
+msgstr "노란색"
#: TurtleArt/tabasics.py:444
msgid "green"
-msgstr ""
+msgstr "초록색"
#: TurtleArt/tabasics.py:445
msgid "cyan"
-msgstr ""
+msgstr "사이안색"
#: TurtleArt/tabasics.py:446
msgid "blue"
-msgstr ""
+msgstr "파란색"
#: TurtleArt/tabasics.py:447
msgid "purple"
-msgstr ""
+msgstr "보라색"
#: TurtleArt/tabasics.py:449
msgid "white"
-msgstr ""
+msgstr "하얀색"
#: TurtleArt/tabasics.py:450
#, fuzzy
@@ -497,7 +496,7 @@ msgstr "이면"
#: TurtleArt/tabasics.py:775
msgid "if then"
-msgstr ""
+msgstr "만약"
#: TurtleArt/tabasics.py:777
msgid "if-then operator that uses boolean operators from Numbers palette"
@@ -509,7 +508,7 @@ msgstr "아니면"
#: TurtleArt/tabasics.py:789 TurtleArt/tabasics.py:797
msgid "if then else"
-msgstr ""
+msgstr "그 외"
#: TurtleArt/tabasics.py:790 TurtleArt/tabasics.py:798
msgid "if-then-else operator that uses boolean operators from Numbers palette"
@@ -533,7 +532,7 @@ msgstr ""
#: TurtleArt/tabasics.py:822
msgid "stop action"
-msgstr ""
+msgstr "멈춤"
#: TurtleArt/tabasics.py:825
msgid "stops current action"
@@ -573,7 +572,7 @@ msgstr ""
#: TurtleArt/tawindow.py:1461 TurtleArt/tawindow.py:2077
#: TurtleArt/tawindow.py:4363
msgid "action"
-msgstr ""
+msgstr "행동"
#: TurtleArt/tabasics.py:861
msgid "top of nameable action stack"
@@ -617,7 +616,7 @@ msgstr ""
#: TurtleArt/tabasics.py:924 TurtleArt/tawindow.py:4427
msgid "store in"
-msgstr ""
+msgstr "담기"
#: TurtleArt/tabasics.py:924 TurtleArt/tabasics.py:939
msgid "box"
@@ -625,7 +624,7 @@ msgstr "상자"
#: TurtleArt/tabasics.py:924 TurtleArt/tawindow.py:4427
msgid "value"
-msgstr ""
+msgstr "물체"
#: TurtleArt/tabasics.py:928 TurtleArt/tabasics.py:942
#: TurtleArt/tawindow.py:1355 TurtleArt/tawindow.py:1486
@@ -1128,7 +1127,7 @@ msgstr ""
#: plugins/accelerometer/accelerometer.py:56
#: plugins/accelerometer/accelerometer.py:63
msgid "acceleration"
-msgstr ""
+msgstr "가속도"
#: plugins/accelerometer/accelerometer.py:58
#: plugins/accelerometer/accelerometer.py:65
@@ -1148,7 +1147,7 @@ msgstr ""
#: plugins/audio_sensors/audio_sensors.py:90
#: plugins/audio_sensors/audio_sensors.py:105
msgid "loudness"
-msgstr ""
+msgstr "소리크기"
#: plugins/audio_sensors/audio_sensors.py:91
#: plugins/audio_sensors/audio_sensors.py:106
@@ -1206,7 +1205,7 @@ msgstr ""
#: plugins/light_sensor/light_sensor.py:56
#: plugins/light_sensor/light_sensor.py:63
msgid "brightness"
-msgstr ""
+msgstr "밝기"
#: plugins/camera_sensor/camera_sensor.py:82
#: plugins/camera_sensor/camera_sensor.py:130
@@ -1242,7 +1241,7 @@ msgstr ""
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:109
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:112
msgid "while"
-msgstr ""
+msgstr "하는 동안"
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:113
msgid "do-while-True operator that uses boolean operators from Numbers palette"
@@ -1251,7 +1250,7 @@ msgstr ""
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:119
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:122
msgid "until"
-msgstr ""
+msgstr "할 때 까지"
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:123
msgid "do-until-True operator that uses boolean operators from Numbers palette"
@@ -1303,7 +1302,7 @@ msgstr ""
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:200
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:228
msgid "show"
-msgstr ""
+msgstr "보이기"
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:204
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:217
@@ -1417,7 +1416,7 @@ msgstr ""
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:343
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:354
msgid "button down"
-msgstr ""
+msgstr "마우스 누름"
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:346
msgid "returns 1 if mouse button is pressed"
@@ -1429,7 +1428,7 @@ msgstr ""
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:364
msgid "mouse x"
-msgstr ""
+msgstr "마우스 가로 위치"
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:367
msgid "returns mouse x coordinate"
@@ -1437,7 +1436,7 @@ msgstr ""
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:374
msgid "mouse y"
-msgstr ""
+msgstr "마우스 세로 위치"
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:377
msgid "returns mouse y coordinate"
@@ -1462,7 +1461,7 @@ msgstr ""
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:430
msgid "read pixel"
-msgstr ""
+msgstr "색 확인"
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:433
msgid "RGB color under the turtle is pushed to the stack"
@@ -1470,7 +1469,7 @@ msgstr ""
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:441
msgid "turtle sees"
-msgstr ""
+msgstr "거북이가 보는 색깔"
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:443
msgid "returns the color that the turtle \"sees\""
@@ -1478,7 +1477,7 @@ msgstr ""
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:451
msgid "time"
-msgstr ""
+msgstr "시간"
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:454
msgid "elapsed time (in seconds) since program started"
diff --git a/po/quz.po b/po/quz.po
index d9b0e95..c844a47 100644
--- a/po/quz.po
+++ b/po/quz.po
@@ -4,7 +4,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-26 00:31-0400\n"
-"PO-Revision-Date: 2013-08-07 00:34+0200\n"
+"PO-Revision-Date: 2013-08-07 03:02+0200\n"
"Last-Translator: Irma <sankaypillo@gmail.com>\n"
"Language-Team: Voluntarios Quechua Sugar\n"
"Language: quz\n"
@@ -319,9 +319,8 @@ msgstr "Charapa puriptinqa chapipuni siq'ichanqa."
# "bajar pluma"
#: TurtleArt/tabasics.py:443
-#, fuzzy
msgid "pen down?"
-msgstr "qillqanata urayachiy"
+msgstr "qillqanata urayachinki?"
#: TurtleArt/tabasics.py:445
msgid "returns True if pen is down"
@@ -1230,9 +1229,8 @@ msgstr "Pythonta wicharichiy"
# [ES] "paleta"
#: TurtleArtActivity.py:933
-#, fuzzy
msgid "Palettes"
-msgstr "llimp'ikunap marun"
+msgstr "Llimp'ikunap marun"
# "Compartir bloques deshabilitado"
#: TurtleArtActivity.py:951
@@ -2062,7 +2060,7 @@ msgstr "Llamk'aq Charapa"
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:686
msgid "the name of the active turtle"
-msgstr ""
+msgstr "Charapa llamk'aqpa sutin"
# "caparazón de la tortuga"
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:696
@@ -2253,30 +2251,32 @@ msgstr "uraypi Y"
#: plugins/turtle_blocks_extras/turtle_blocks_extras.py:968
msgid "Palette of user-defined operators"
-msgstr ""
+msgstr "Haykuqmasi churasqan llamk'anapaq maru"
#: pysamples/brain.py:43
msgid "Please install the Speak Activity and try again."
-msgstr ""
+msgstr "Mira, churariy Rimay ruwanata, chaymantaqa wakmanta ruwariy."
#: pysamples/brain.py:52
msgid "Spanish"
-msgstr ""
+msgstr "Español simi"
#: pysamples/brain.py:56 pysamples/brain.py:69 pysamples/brain.py:71
#: pysamples/brain.py:77
msgid "English"
-msgstr ""
+msgstr "Inglés simi"
#: pysamples/brain.py:88
msgid "Sorry, I can't understand what you are asking about."
-msgstr ""
+msgstr "Pampachaway mana yachachkanichu tapuwasqaykitaqa."
#: pysamples/brain.py:97
msgid ""
"Sorry, there is no free memory to load my brain. Close other activities and "
"try once more."
msgstr ""
+"Pampachaway, umachayqa hunt'añam kachkan. Huk ruwanakunata wisq'ay, ichaqa "
+"wakmanta qhallariwaq."
# [ES] "empujar el valor rgb de destino a la pila"
#: pysamples/forward_push.py:48
@@ -2310,7 +2310,7 @@ msgstr "U hinata muyuchiy"
#: pysamples/uturn.py:37
msgid "turns the turtle 180 degrees"
-msgstr ""
+msgstr "charapachata 180 grados nisqata muyurichiy"
# "el uso es"
#: turtleblocks.py:91
@@ -2340,11 +2340,11 @@ msgstr "Musuq"
#: turtleblocks.py:376
msgid "Show sample projects"
-msgstr ""
+msgstr "Huk wakichinakunata qhawarichiy"
#: turtleblocks.py:378
msgid "Hide sample projects"
-msgstr ""
+msgstr "Wakichinakunata pakariy"
# "Guardar"
#: turtleblocks.py:382
@@ -2398,7 +2398,7 @@ msgstr "Charapa"
#: turtleblocks.py:436
msgid "About..."
-msgstr ""
+msgstr "Kaymanta..."
# "Hay trabajo sin guardar. ¿Le gustaría guardar antes de salir?"
#: turtleblocks.py:475
diff --git a/samples/graphics-grid.tb b/samples/graphics-grid.tb
new file mode 100644
index 0000000..03235d8
--- /dev/null
+++ b/samples/graphics-grid.tb
@@ -0,0 +1,161 @@
+[[0, ["start", 2.0], 0, 180, [null, 32]],
+[1, ["repeat", 21], 1240, 276, [11, 2, 8, 12]],
+[2, ["number", 4], 1299, 276, [1, null]],
+[3, ["storein", 0], 640, 514, [118, 4, 5, 57]],
+[4, ["string", "side"], 708, 514, [3, null]],
+[5, ["number", 24], 708, 556, [3, null]],
+[6, "box", 1329, 318, [8, 7, null]],
+[7, ["string", "side"], 1384, 318, [6, null]],
+[8, "forward", 1258, 318, [1, 6, 9]],
+[9, "right", 1258, 360, [8, 10, null]],
+[10, ["number", 90], 1316, 360, [9, null]],
+[11, "startfill", 1240, 234, [13, 1]],
+[12, "stopfill", 1240, 420, [1, null]],
+[13, "hat", 1240, 180, [null, 14, 11]],
+[14, ["string", "square"], 1298, 192, [13, null]],
+[15, "stack", 36, 1016, [80, 16, 49]],
+[16, ["string", "square"], 94, 1016, [15, null]],
+[17, ["repeat", 105], 18, 806, [47, 27, 48, 51]],
+[18, "seth", 36, 890, [48, 19, 22]],
+[19, ["random", 0], 94, 890, [18, 20, 21, null]],
+[20, ["number", -15], 180, 890, [19, null]],
+[21, ["number", 15], 180, 932, [19, null]],
+[22, ["vspace", 0], 36, 932, [18, 80]],
+[23, ["repeat", 177], 0, 722, [132, 26, 47, null]],
+[24, "width", 147, 806, [27, null]],
+[25, "height", 129, 722, [26, null]],
+[26, ["division2", 0], 59, 722, [23, 25, 28]],
+[27, ["division2", 0], 77, 806, [17, 24, 30]],
+[28, "box", 153, 764, [26, 29, null]],
+[29, ["string", "grid spacing"], 208, 764, [28, null]],
+[30, "box", 171, 848, [27, 31, null]],
+[31, ["string", "grid spacing"], 226, 848, [30, null]],
+[32, ["storein", 0], 0, 226, [0, 33, 34, 122]],
+[33, ["string", "grid spacing"], 68, 226, [32, null]],
+[34, ["number", 32], 68, 268, [32, null]],
+[35, ["setxy2", 20], 1240, 856, [65, 38, 42, 66]],
+[36, "xcor", 1352, 856, [38, null]],
+[37, "ycor", 1352, 658, [39, null]],
+[38, ["plus2", 0], 1298, 856, [35, 36, 55]],
+[39, ["plus2", 0], 1298, 658, [40, 37, 53]],
+[40, ["setxy2", 20], 1240, 576, [63, 62, 39, 64]],
+[41, "leftpos", 1352, 576, [62, null]],
+[42, "ycor", 1298, 938, [35, null]],
+[43, "hat", 1240, 760, [null, 44, 65]],
+[44, ["string", "inc x"], 1298, 772, [43, null]],
+[45, "hat", 1240, 480, [null, 46, 63]],
+[46, ["string", "inc y"], 1298, 492, [45, null]],
+[47, ["vspace", 0], 18, 764, [23, 17]],
+[48, ["vspace", 0], 36, 848, [17, 18]],
+[49, "stack", 36, 1058, [15, 50, null]],
+[50, ["string", "inc x"], 94, 1058, [49, null]],
+[51, "stack", 18, 1118, [17, 52, null]],
+[52, ["string", "inc y"], 76, 1118, [51, null]],
+[53, "box", 1352, 700, [39, 54, null]],
+[54, ["string", "grid spacing"], 1407, 700, [53, null]],
+[55, "box", 1352, 898, [38, 56, null]],
+[56, ["string", "grid spacing"], 1407, 898, [55, null]],
+[57, ["storein", 0], 640, 598, [3, 58, 59, 138]],
+[58, ["string", "offset"], 708, 598, [57, null]],
+[59, ["number", 4], 708, 640, [57, null]],
+[60, "box", 1352, 618, [62, 61, null]],
+[61, ["string", "offset"], 1407, 618, [60, null]],
+[62, ["plus2", 0], 1298, 576, [40, 41, 60]],
+[63, "penup", 1240, 534, [45, 40]],
+[64, "pendown", 1240, 700, [40, null]],
+[65, "penup", 1240, 814, [43, 35]],
+[66, "pendown", 1240, 980, [35, null]],
+[67, "setcolor", 300, 276, [69, 71, 74]],
+[68, "setgray", 300, 360, [74, 77, null]],
+[69, "setshade", 300, 234, [75, 70, 67]],
+[70, ["number", 50], 385, 234, [69, null]],
+[71, ["random", 0], 377, 276, [67, 72, 73, null]],
+[72, ["number", 5], 463, 276, [71, null]],
+[73, ["number", 15], 463, 318, [71, null]],
+[74, ["vspace", 0], 300, 318, [67, 68]],
+[75, "hat", 300, 180, [null, 76, 69]],
+[76, ["string", "color 1"], 358, 192, [75, null]],
+[77, ["random", 0], 373, 360, [68, 78, 79, null]],
+[78, ["number", 80], 459, 360, [77, null]],
+[79, ["number", 100], 459, 402, [77, null]],
+[80, "stack", 36, 974, [22, 92, 15]],
+[81, ["string", "color 1"], 368, 724, [90, null]],
+[82, "hat", 0, 460, [null, 83, 128]],
+[83, ["string", "grid"], 58, 472, [82, null]],
+[84, "hat", 940, 180, [null, 85, 94]],
+[85, ["string", "color 3"], 998, 192, [84, null]],
+[86, "hat", 620, 180, [null, 87, 105]],
+[87, ["string", "color 2"], 678, 192, [86, null]],
+[88, "stack", 300, 766, [90, 89, null]],
+[89, ["string", "grid"], 358, 766, [88, null]],
+[90, ["storein", 0], 300, 682, [152, 91, 81, 88]],
+[91, ["string", "color scheme"], 368, 682, [90, null]],
+[92, "box", 94, 974, [80, 93, null]],
+[93, ["string", "color scheme"], 149, 974, [92, null]],
+[94, "setshade", 940, 234, [84, 95, 96]],
+[95, ["number", 50], 1025, 234, [94, null]],
+[96, "setcolor", 940, 276, [94, 97, 100]],
+[97, ["random", 0], 1017, 276, [96, 98, 99, null]],
+[98, ["number", 10], 1103, 276, [97, null]],
+[99, ["number", 20], 1103, 318, [97, null]],
+[100, ["vspace", 0], 940, 318, [96, 101]],
+[101, "setgray", 940, 360, [100, 102, null]],
+[102, ["random", 0], 1013, 360, [101, 103, 104, null]],
+[103, ["number", 80], 1099, 360, [102, null]],
+[104, ["number", 100], 1099, 402, [102, null]],
+[105, "setshade", 620, 234, [86, 106, 107]],
+[106, ["number", 40], 705, 234, [105, null]],
+[107, "setcolor", 620, 276, [105, 108, 111]],
+[108, ["random", 0], 697, 276, [107, 109, 110, null]],
+[109, ["number", 35], 783, 276, [108, null]],
+[110, ["number", 65], 783, 318, [108, null]],
+[111, ["vspace", 0], 620, 318, [107, 112]],
+[112, "setgray", 620, 360, [111, 113, null]],
+[113, ["random", 0], 693, 360, [112, 114, 115, null]],
+[114, ["number", 80], 779, 360, [113, null]],
+[115, ["number", 100], 779, 402, [113, null]],
+[116, "hat", 300, 460, [null, 117, 149]],
+[117, ["string", "grid 1"], 358, 472, [116, null]],
+[118, "hat", 640, 460, [null, 119, 3]],
+[119, ["string", "grid 2"], 698, 472, [118, null]],
+[120, "hat", 940, 460, [null, 121, 143]],
+[121, ["string", "grid 3"], 998, 472, [120, null]],
+[122, "stack", 0, 310, [32, 123, 124]],
+[123, ["string", "grid 1"], 58, 310, [122, null]],
+[124, "stack", 0, 352, [122, 125, 126]],
+[125, ["string", "grid 2"], 58, 352, [124, null]],
+[126, "stack", 0, 394, [124, 127, null]],
+[127, ["string", "grid 3"], 58, 394, [126, null]],
+[128, "penup", 0, 514, [82, 129]],
+[129, ["setxy2", 20], 0, 556, [128, 155, 156, 132]],
+[130, "leftpos", 112, 556, [155, null]],
+[131, "bottompos", 112, 638, [156, null]],
+[132, "pendown", 0, 680, [129, 23]],
+[133, ["storein", 0], 940, 682, [146, 134, 135, 136]],
+[134, ["string", "color scheme"], 1008, 682, [133, null]],
+[135, ["string", "color 3"], 1008, 724, [133, null]],
+[136, "stack", 940, 766, [133, 137, null]],
+[137, ["string", "grid"], 998, 766, [136, null]],
+[138, ["storein", 0], 640, 682, [57, 139, 140, 141]],
+[139, ["string", "color scheme"], 708, 682, [138, null]],
+[140, ["string", "color 2"], 708, 724, [138, null]],
+[141, "stack", 640, 766, [138, 142, null]],
+[142, ["string", "grid"], 698, 766, [141, null]],
+[143, ["storein", 0], 940, 514, [120, 144, 145, 146]],
+[144, ["string", "side"], 1008, 514, [143, null]],
+[145, ["number", 16], 1008, 556, [143, null]],
+[146, ["storein", 0], 940, 598, [143, 147, 148, 133]],
+[147, ["string", "offset"], 1008, 598, [146, null]],
+[148, ["number", 8], 1008, 640, [146, null]],
+[149, ["storein", 0], 300, 514, [116, 150, 151, 152]],
+[150, ["string", "side"], 368, 514, [149, null]],
+[151, ["number", 32], 368, 556, [149, null]],
+[152, ["storein", 0], 300, 598, [149, 153, 154, 90]],
+[153, ["string", "offset"], 368, 598, [152, null]],
+[154, ["number", 0], 368, 640, [152, null]],
+[155, ["plus2", 0], 58, 556, [129, 130, 157]],
+[156, ["plus2", 0], 58, 638, [129, 131, 159]],
+[157, "box", 112, 598, [155, 158, null]],
+[158, ["string", "offset"], 167, 598, [157, null]],
+[159, "box", 112, 680, [156, 160, null]],
+[160, ["string", "offset"], 167, 680, [159, null]]]
diff --git a/samples/graphics-op-art-2.ta b/samples/graphics-op-art-2.ta
new file mode 100644
index 0000000..6f44202
--- /dev/null
+++ b/samples/graphics-op-art-2.ta
@@ -0,0 +1,83 @@
+[[0, ["start", 2.0], 180, 180, [null, 79]],
+[1, "hat", 560, 180, [null, 2, 3]],
+[2, ["string", "square"], 618, 192, [1, null]],
+[3, "startfill", 560, 234, [1, 8]],
+[4, "stopfill", 560, 420, [8, 81]],
+[5, "forward", 578, 318, [8, 13, 6]],
+[6, "right", 578, 360, [5, 7, null]],
+[7, ["number", 90], 636, 360, [6, null]],
+[8, ["repeat", 21], 560, 276, [3, 9, 5, 4]],
+[9, ["number", 4], 619, 276, [8, null]],
+[10, ["storein", 0], 180, 268, [79, 11, 12, 73]],
+[11, ["string", "size"], 248, 268, [10, null]],
+[12, ["number", 50.0], 248, 310, [10, null]],
+[13, "box", 649, 318, [5, 14, null]],
+[14, ["string", "size"], 704, 318, [13, null]],
+[15, ["repeat", 21], 560, 504, [81, 16, 17, 47]],
+[16, ["number", 4], 619, 504, [15, null]],
+[17, "forward", 578, 546, [15, 18, 20]],
+[18, "box", 649, 546, [17, 19, null]],
+[19, ["string", "size"], 704, 546, [18, null]],
+[20, "right", 578, 588, [17, 21, null]],
+[21, ["number", 90], 636, 588, [20, null]],
+[22, "yellow", 293, 1018, [42, null]],
+[23, "blue", 293, 934, [41, null]],
+[24, ["random", 0], 353, 646, [37, 25, 26, null]],
+[25, ["number", 0], 439, 646, [24, null]],
+[26, "box", 439, 688, [24, 27, null]],
+[27, ["string", "size"], 494, 688, [26, null]],
+[28, ["repeat", 342], 180, 520, [74, 67, 39, null]],
+[29, ["repeat", 124], 198, 770, [40, 56, 34, 64]],
+[30, "width", 451, 812, [31, null]],
+[31, ["division2", 0], 381, 812, [55, 30, 32]],
+[32, "box", 475, 854, [31, 33, null]],
+[33, ["string", "size"], 530, 854, [32, null]],
+[34, ["vspace", 40], 216, 812, [29, 41]],
+[35, ["setxy2", 20], 198, 604, [39, 37, 36, 40]],
+[36, "ycor", 256, 686, [35, null]],
+[37, ["minus2", 0], 256, 604, [35, 38, 24]],
+[38, "leftpos", 329, 604, [37, null]],
+[39, "penup", 198, 562, [28, 35]],
+[40, "pendown", 198, 728, [35, 29]],
+[41, "setcolor", 216, 934, [34, 23, 43]],
+[42, "setcolor", 216, 1018, [43, 22, 45]],
+[43, "stack", 216, 976, [41, 44, 42]],
+[44, ["string", "square"], 274, 976, [43, null]],
+[45, "stack", 216, 1060, [42, 46, null]],
+[46, ["string", "square"], 274, 1060, [45, null]],
+[47, "penup", 560, 648, [15, 49]],
+[48, "pendown", 560, 814, [49, null]],
+[49, ["setxy2", 20], 560, 690, [47, 52, 50, 48]],
+[50, "ycor", 618, 772, [49, null]],
+[51, "xcor", 672, 690, [52, null]],
+[52, ["plus2", 0], 618, 690, [49, 51, 53]],
+[53, "box", 672, 732, [52, 54, null]],
+[54, ["string", "size"], 727, 732, [53, null]],
+[55, ["division2", 20], 311, 812, [56, 31, 58]],
+[56, ["plus2", 0], 257, 770, [29, 57, 55]],
+[57, ["number", 2.0], 311, 770, [56, null]],
+[58, ["number", 2.0], 405, 894, [55, null]],
+[59, ["setxy2", 0], 198, 1162, [64, 61, 75, 65]],
+[60, "ycor", 329, 1204, [75, null]],
+[61, "leftpos", 256, 1162, [59, null]],
+[62, "box", 353, 1246, [75, 63, null]],
+[63, ["string", "size"], 408, 1246, [62, null]],
+[64, "penup", 198, 1120, [29, 59]],
+[65, "pendown", 198, 1246, [59, null]],
+[66, "height", 309, 520, [67, null]],
+[67, ["division2", 0], 239, 520, [28, 66, 68]],
+[68, "box", 333, 562, [67, 69, null]],
+[69, ["string", "size"], 388, 562, [68, null]],
+[70, ["setxy2", 0], 180, 394, [73, 71, 76, 74]],
+[71, "leftpos", 238, 394, [70, null]],
+[72, "toppos", 311, 436, [76, null]],
+[73, "penup", 180, 352, [10, 70]],
+[74, "pendown", 180, 478, [70, 28]],
+[75, ["minus2", 0], 256, 1204, [59, 60, 62]],
+[76, ["minus2", 0], 238, 436, [70, 72, 77]],
+[77, "box", 335, 478, [76, 78, null]],
+[78, ["string", "size"], 390, 478, [77, null]],
+[79, "setpensize", 180, 226, [0, 80, 10]],
+[80, ["number", 3.0], 282, 226, [79, null]],
+[81, "setgray", 560, 462, [4, 82, 15]],
+[82, ["number", 0.0], 633, 462, [81, null]]]
diff --git a/samples/media-music-dots.tb b/samples/media-music-dots.tb
new file mode 100644
index 0000000..19397e8
--- /dev/null
+++ b/samples/media-music-dots.tb
@@ -0,0 +1,61 @@
+[[0, ["start", 2.0], 160, 200, [null, 42]],
+[1, ["until", 63], 600, 254, [38, 22, 25, 46]],
+[2, ["forever", 230], 160, 288, [42, 40, null]],
+[3, "sinewave", 178, 656, [20, 36, 10, 4, 11]],
+[4, ["number", 0.33], 258, 740, [3, null]],
+[5, ["product2", 0], 392, 698, [10, 6, 7]],
+[6, ["number", 10000], 446, 698, [5, null]],
+[7, ["division2", 0], 446, 740, [5, 8, 34]],
+[8, ["number", 2093], 516, 740, [7, null]],
+[9, ["vspace", 20], 178, 532, [32, 20]],
+[10, ["identity2", 40], 258, 698, [3, 5]],
+[11, "wait", 178, 782, [3, 12, null]],
+[12, ["number", 0.33], 236, 782, [11, null]],
+[13, ["number", 1.06], 326, 532, [16, null]],
+[14, "comment", 178, 406, [18, 15, 32]],
+[15, ["string", "2^^(1/12) is factor between half-steps"], 261, 406, [14, null]],
+[16, ["myfunc2arg", 0], 246, 490, [32, 17, 13, 30, null]],
+[17, ["string", "130.81 * pow(x, y)"], 326, 490, [16, null]],
+[18, "comment", 178, 364, [40, 19, 14]],
+[19, ["string", "130.81 Hz is Low C"], 261, 364, [18, null]],
+[20, "comment", 178, 614, [9, 21, 3]],
+[21, ["string", "normalize volume by frequency"], 261, 614, [20, null]],
+[22, "mousebutton2", 656, 270, [1, null]],
+[23, "mousex", 676, 362, [27, null]],
+[24, "mousey", 676, 404, [27, null]],
+[25, "penup", 618, 320, [1, 27]],
+[26, "pendown", 618, 446, [27, null]],
+[27, ["setxy2", 0], 618, 362, [25, 23, 24, 26]],
+[28, ["storein", 0], 600, 632, [44, 29, 52, null]],
+[29, ["string", "note"], 668, 632, [28, null]],
+[30, "box", 326, 574, [16, 31, null]],
+[31, ["string", "note"], 381, 574, [30, null]],
+[32, ["storein", 0], 178, 448, [14, 33, 16, 9]],
+[33, ["string", "frequency"], 246, 448, [32, null]],
+[34, "box", 540, 782, [7, 35, null]],
+[35, ["string", "frequency"], 595, 782, [34, null]],
+[36, "box", 258, 656, [3, 37, null]],
+[37, ["string", "frequency"], 313, 656, [36, null]],
+[38, "hat", 600, 200, [null, 39, 1]],
+[39, ["string", "play"], 658, 212, [38, null]],
+[40, "stack", 178, 322, [2, 41, 18]],
+[41, ["string", "play"], 236, 322, [40, null]],
+[42, "setpensize", 160, 246, [0, 43, 2]],
+[43, ["number", 50.0], 262, 246, [42, null]],
+[44, "forward", 600, 590, [50, 45, 28]],
+[45, ["number", 1.0], 671, 590, [44, null]],
+[46, "setcolor", 600, 506, [1, 47, 50]],
+[47, ["random", 0], 677, 506, [46, 48, 49, null]],
+[48, ["number", 0], 763, 506, [47, null]],
+[49, ["number", 100], 763, 548, [47, null]],
+[50, ["vspace", 0], 600, 548, [46, 44]],
+[51, "xcor", 846, 674, [55, null]],
+[52, "int", 668, 674, [28, 54]],
+[53, ["number", 12.0], 910, 838, [56, null]],
+[54, ["division2", 40], 722, 674, [52, 55, 56]],
+[55, ["plus2", 0], 792, 674, [54, 51, 59]],
+[56, ["division2", 0], 816, 796, [54, 57, 53]],
+[57, "width", 886, 796, [56, null]],
+[58, "width", 916, 716, [59, null]],
+[59, ["division2", 0], 846, 716, [55, 58, 60]],
+[60, ["number", 2.0], 940, 758, [59, null]]]
diff --git a/samples/media-music-keyboard.tb b/samples/media-music-keyboard.tb
new file mode 100644
index 0000000..a525d33
--- /dev/null
+++ b/samples/media-music-keyboard.tb
@@ -0,0 +1,130 @@
+[[0, ["start", 2.0], 160, 200, [null, 110]],
+[1, ["until", 63], 600, 254, [38, 22, 25, 28]],
+[2, ["forever", 230], 160, 330, [112, 40, null]],
+[3, "sinewave", 178, 698, [20, 36, 10, 4, 11]],
+[4, ["number", 0.33], 258, 782, [3, null]],
+[5, ["product2", 0], 392, 740, [10, 6, 7]],
+[6, ["number", 10000], 446, 740, [5, null]],
+[7, ["division2", 0], 446, 782, [5, 8, 34]],
+[8, ["number", 2093], 516, 782, [7, null]],
+[9, ["vspace", 20], 178, 574, [32, 20]],
+[10, ["identity2", 40], 258, 740, [3, 5]],
+[11, "wait", 178, 824, [3, 12, null]],
+[12, ["number", 0.33], 236, 824, [11, null]],
+[13, ["number", 1.06], 326, 574, [16, null]],
+[14, "comment", 178, 448, [18, 15, 32]],
+[15, ["string", "2^^(1/12) is factor between half-steps"], 261, 448, [14, null]],
+[16, ["myfunc2arg", 0], 246, 532, [32, 17, 13, 30, null]],
+[17, ["string", "130.81 * pow(x, y)"], 326, 532, [16, null]],
+[18, "comment", 178, 406, [40, 19, 14]],
+[19, ["string", "130.81 Hz is Low C"], 261, 406, [18, null]],
+[20, "comment", 178, 656, [9, 21, 3]],
+[21, ["string", "normalize volume by frequency"], 261, 656, [20, null]],
+[22, "mousebutton2", 656, 270, [1, null]],
+[23, "mousex", 676, 362, [27, null]],
+[24, "mousey", 676, 404, [27, null]],
+[25, "penup", 618, 320, [1, 27]],
+[26, "pendown", 618, 446, [27, null]],
+[27, ["setxy2", 0], 618, 362, [25, 23, 24, 26]],
+[28, ["storein", 0], 600, 506, [1, 29, 82, null]],
+[29, ["string", "note"], 668, 506, [28, null]],
+[30, "box", 326, 616, [16, 31, null]],
+[31, ["string", "note"], 381, 616, [30, null]],
+[32, ["storein", 0], 178, 490, [14, 33, 16, 9]],
+[33, ["string", "frequency"], 246, 490, [32, null]],
+[34, "box", 540, 824, [7, 35, null]],
+[35, ["string", "frequency"], 595, 824, [34, null]],
+[36, "box", 258, 698, [3, 37, null]],
+[37, ["string", "frequency"], 313, 698, [36, null]],
+[38, "hat", 600, 200, [null, 39, 1]],
+[39, ["string", "paint"], 658, 212, [38, null]],
+[40, "stack", 178, 364, [2, 41, 18]],
+[41, ["string", "paint"], 236, 364, [40, null]],
+[42, ["repeat", 229], 853, 421, [58, 43, 44, 48]],
+[43, ["number", 8], 912, 421, [42, null]],
+[44, "penup", 871, 463, [42, 50]],
+[45, "pendown", 871, 589, [50, 86]],
+[46, "hat", 1431, 128, [null, 47, 67]],
+[47, ["string", "white key"], 1489, 140, [46, null]],
+[48, "setcolor", 853, 981, [42, 49, 87]],
+[49, "black", 930, 981, [48, null]],
+[50, ["setxy2", 0], 871, 505, [44, 59, 53, 45]],
+[51, "stack", 871, 715, [80, 52, 81]],
+[52, ["string", "white key"], 929, 715, [51, null]],
+[53, "bottompos", 929, 547, [50, null]],
+[54, "leftpos", 911, 295, [56, null]],
+[55, "bottompos", 911, 337, [56, null]],
+[56, ["setxy2", 0], 853, 295, [57, 54, 55, 58]],
+[57, "penup", 853, 253, [83, 56]],
+[58, "pendown", 853, 379, [56, 42]],
+[59, "xcor", 929, 505, [50, null]],
+[60, ["setxy2", 40], 871, 799, [81, 63, 62, null]],
+[61, "xcor", 983, 799, [63, null]],
+[62, "ycor", 929, 921, [60, null]],
+[63, ["plus2", 0], 929, 799, [60, 61, 65]],
+[64, ["number", 8], 1077, 883, [65, null]],
+[65, ["division2", 0], 983, 841, [63, 66, 64]],
+[66, "width", 1053, 841, [65, null]],
+[67, ["repeat", 84], 1431, 182, [46, 68, 69, null]],
+[68, ["number", 2], 1490, 182, [67, null]],
+[69, "forward", 1449, 224, [67, 70, 71]],
+[70, "height", 1520, 224, [69, null]],
+[71, "right", 1449, 266, [69, 72, 73]],
+[72, ["number", 90], 1507, 266, [71, null]],
+[73, "forward", 1449, 308, [71, 74, 77]],
+[74, ["division2", 0], 1520, 308, [73, 75, 76]],
+[75, "width", 1590, 308, [74, null]],
+[76, ["number", 8], 1614, 350, [74, null]],
+[77, ["vspace", 0], 1449, 350, [73, 78]],
+[78, "right", 1449, 392, [77, 79, null]],
+[79, ["number", 90], 1507, 392, [78, null]],
+[80, "startfill", 871, 673, [86, 51]],
+[81, "stopfill", 871, 757, [51, 60]],
+[82, "see", 668, 548, [28, null]],
+[83, "hat", 853, 199, [null, 84, 57]],
+[84, ["string", "draw keyboard"], 911, 211, [83, null]],
+[85, "pop", 948, 631, [86, null]],
+[86, "setcolor", 871, 631, [45, 85, 80]],
+[87, "penup", 853, 1023, [48, 88]],
+[88, ["setxy2", 0], 853, 1065, [87, 89, 90, 91]],
+[89, "leftpos", 911, 1065, [88, null]],
+[90, "bottompos", 911, 1107, [88, null]],
+[91, "pendown", 853, 1149, [88, 92]],
+[92, ["repeat", 166], 853, 1191, [91, 93, 94, null]],
+[93, ["number", 8], 912, 1191, [92, null]],
+[94, "penup", 871, 1233, [92, 95]],
+[95, ["setxy2", 0], 871, 1275, [94, 96, 97, 98]],
+[96, "xcor", 929, 1275, [95, null]],
+[97, "bottompos", 929, 1317, [95, null]],
+[98, "pendown", 871, 1359, [95, 99]],
+[99, "stack", 871, 1401, [98, 100, 101]],
+[100, ["string", "white key"], 929, 1401, [99, null]],
+[101, ["setxy2", 40], 871, 1443, [99, 102, 107, null]],
+[102, ["plus2", 0], 929, 1443, [101, 103, 104]],
+[103, "xcor", 983, 1443, [102, null]],
+[104, ["division2", 0], 983, 1485, [102, 105, 106]],
+[105, "width", 1053, 1485, [104, null]],
+[106, ["number", 8], 1077, 1527, [104, null]],
+[107, "ycor", 929, 1565, [101, null]],
+[108, "hat", 1096, 195, [null, 109, 114]],
+[109, ["string", "select notes"], 1154, 207, [108, null]],
+[110, "stack", 160, 246, [0, 111, 112]],
+[111, ["string", "select notes"], 218, 246, [110, null]],
+[112, "stack", 160, 288, [110, 113, 2]],
+[113, ["string", "draw keyboard"], 218, 288, [112, null]],
+[114, "push", 1096, 249, [108, 115, 116]],
+[115, ["number", 36.0], 1154, 249, [114, null]],
+[116, "push", 1096, 291, [114, 117, 118]],
+[117, ["number", 35.0], 1154, 291, [116, null]],
+[118, "push", 1096, 333, [116, 119, 120]],
+[119, ["number", 33.0], 1154, 333, [118, null]],
+[120, "push", 1096, 375, [118, 121, 122]],
+[121, ["number", 31.0], 1154, 375, [120, null]],
+[122, "push", 1096, 417, [120, 123, 124]],
+[123, ["number", 29.0], 1154, 417, [122, null]],
+[124, "push", 1096, 459, [122, 125, 126]],
+[125, ["number", 28.0], 1154, 459, [124, null]],
+[126, "push", 1096, 501, [124, 127, 128]],
+[127, ["number", 26.0], 1154, 501, [126, null]],
+[128, "push", 1096, 543, [126, 129, null]],
+[129, ["number", 24], 1154, 543, [128, null]]]
diff --git a/samples/media-music.ta b/samples/media-music.ta
deleted file mode 100644
index 13d952c..0000000
--- a/samples/media-music.ta
+++ /dev/null
@@ -1,179 +0,0 @@
-[[0, ["start", 2.0], 0, 0, [null, 11]],
-[1, "until", 740, 544, [9, 2, 5, null]],
-[2, ["greater2", 0], 778, 510, [1, 3, 4, null]],
-[3, "keyboard", 824, 510, [2, null]],
-[4, ["number", 0], 848, 552, [2, null]],
-[5, "wait", 792, 612, [1, 6, 7]],
-[6, ["number", 0.1], 850, 612, [5, null]],
-[7, "kbinput", 792, 654, [5, null]],
-[8, "forever", 0, 84, [11, 15, null]],
-[9, ["vspace", 0], 740, 502, [14, 1]],
-[10, "hat1", 740, 0, [null, 19]],
-[11, "stack1", 0, 42, [0, 8]],
-[12, "sinewave", 113, 502, [176, 69, 51, 13, 56]],
-[13, ["number", 0.33], 193, 586, [12, null]],
-[14, "hat2", 740, 460, [null, 9]],
-[15, "stack2", 61, 102, [8, 74]],
-[16, "repeat", 740, 84, [19, 17, 24, 18]],
-[17, ["number", 256], 791, 84, [16, null]],
-[18, ["vspace", 40], 740, 162, [16, 28]],
-[19, "storeinbox1", 740, 42, [10, 20, 16]],
-[20, ["number", 0], 858, 42, [19, null]],
-[21, "box1", 977, 228, [27, null]],
-[22, "storeinbox1", 805, 228, [24, 27, null]],
-[23, ["number", 1], 977, 270, [27, null]],
-[24, ["storein", 0], 805, 144, [16, 60, 25, 22]],
-[25, ["number", 0], 873, 186, [24, null]],
-[26, "box1", 927, 144, [60, null]],
-[27, ["plus2", 0], 923, 228, [22, 21, 23]],
-[28, "stack", 740, 284, [18, 29, 30]],
-[29, ["string", "12345678"], 798, 284, [28, null]],
-[30, "stack", 740, 326, [28, 31, 32]],
-[31, ["string", "qwertyui"], 798, 326, [30, null]],
-[32, "stack", 740, 368, [30, 33, 34]],
-[33, ["string", "asdfghjk"], 798, 368, [32, null]],
-[34, "stack", 740, 410, [32, 35, null]],
-[35, ["string", "zxcvbnm,"], 798, 410, [34, null]],
-[36, "hat", 480, 160, [null, 37, 124]],
-[37, ["string", "qwertyui"], 538, 168, [36, null]],
-[38, "hat", 480, 240, [null, 39, 150]],
-[39, ["string", "12345678"], 538, 248, [38, null]],
-[40, "hat", 480, 80, [null, 41, 98]],
-[41, ["string", "asdfghjk"], 538, 88, [40, null]],
-[42, "hat", 480, 0, [null, 43, 44]],
-[43, ["string", "zxcvbnm,"], 538, 8, [42, null]],
-[44, "sandwichtop_no_arm_no_label", 462, 50, [42, 71]],
-[45, ["product2", 0], 327, 544, [51, 46, 47]],
-[46, ["number", 10000], 381, 544, [45, null]],
-[47, ["division2", 0], 381, 586, [45, 48, 68]],
-[48, ["number", 2093], 435, 586, [47, null]],
-[49, "if", 61, 392, [50, 52, 176, null]],
-[50, ["vspace", 40], 61, 270, [66, 49]],
-[51, ["identity2", 40], 193, 544, [12, 45]],
-[52, ["greater2", 0], 99, 358, [49, 70, 53, null]],
-[53, ["number", 0], 169, 400, [52, null]],
-[54, "keyboard", 368, 312, [59, null]],
-[55, "box", 259, 312, [64, 59, null]],
-[56, "print", 113, 628, [12, 67, 57]],
-[57, "wait", 113, 670, [56, 58, null]],
-[58, ["number", 0.33], 171, 670, [57, null]],
-[59, "chr", 314, 312, [55, 54]],
-[60, "chr", 873, 144, [24, 26]],
-[61, ["number", 1.059463094], 259, 270, [64, null]],
-[62, "comment", 61, 186, [74, 63, 66]],
-[63, ["string", "2^^(1/12) is factor between half-steps"], 144, 186, [62, null]],
-[64, ["myfunc2arg", 0], 179, 228, [66, 65, 61, 55, null]],
-[65, ["string", "130.81 * pow(x, y)"], 259, 228, [64, null]],
-[66, "storeinbox2", 61, 228, [62, 64, 50]],
-[67, "box2", 171, 628, [56, null]],
-[68, "box2", 459, 628, [47, null]],
-[69, "box2", 193, 502, [12, null]],
-[70, "box2", 145, 358, [52, null]],
-[71, ["storein", 0], 480, 84, [44, 72, 73, 76]],
-[72, ["string", "z"], 548, 84, [71, null]],
-[73, ["number", 0], 548, 126, [71, null]],
-[74, "comment", 61, 144, [15, 75, 62]],
-[75, ["string", "130.81 Hz is Low C"], 144, 144, [74, null]],
-[76, ["storein", 0], 480, 168, [71, 77, 78, 79]],
-[77, ["string", "x"], 548, 168, [76, null]],
-[78, ["number", 2], 548, 210, [76, null]],
-[79, ["storein", 0], 480, 252, [76, 80, 81, 82]],
-[80, ["string", "c"], 548, 252, [79, null]],
-[81, ["number", 4], 548, 294, [79, null]],
-[82, ["storein", 0], 480, 336, [79, 83, 84, 85]],
-[83, ["string", "v"], 548, 336, [82, null]],
-[84, ["number", 5], 548, 378, [82, null]],
-[85, ["storein", 0], 480, 420, [82, 86, 87, 88]],
-[86, ["string", "b"], 548, 420, [85, null]],
-[87, ["number", 7], 548, 462, [85, null]],
-[88, ["storein", 0], 480, 504, [85, 89, 90, 91]],
-[89, ["string", "n"], 548, 504, [88, null]],
-[90, ["number", 9], 548, 546, [88, null]],
-[91, ["storein", 0], 480, 588, [88, 92, 93, 94]],
-[92, ["string", "m"], 548, 588, [91, null]],
-[93, ["number", 11], 548, 630, [91, null]],
-[94, ["storein", 0], 480, 672, [91, 95, 96, 97]],
-[95, ["string", ","], 548, 672, [94, null]],
-[96, ["number", 12], 548, 714, [94, null]],
-[97, ["sandwichcollapsed", 1], 480, 84, [94, null]],
-[98, "sandwichtop_no_arm_no_label", 462, 130, [40, 99]],
-[99, ["storein", 0], 480, 164, [98, 100, 101, 102]],
-[100, ["string", "a"], 548, 164, [99, null]],
-[101, ["number", 12], 548, 206, [99, null]],
-[102, ["storein", 0], 480, 248, [99, 103, 104, 105]],
-[103, ["string", "s"], 548, 248, [102, null]],
-[104, ["number", 14], 548, 290, [102, null]],
-[105, ["storein", 0], 480, 332, [102, 106, 107, 108]],
-[106, ["string", "d"], 548, 332, [105, null]],
-[107, ["number", 16], 548, 374, [105, null]],
-[108, ["storein", 0], 480, 416, [105, 109, 110, 111]],
-[109, ["string", "f"], 548, 416, [108, null]],
-[110, ["number", 17], 548, 458, [108, null]],
-[111, ["storein", 0], 480, 500, [108, 112, 113, 114]],
-[112, ["string", "g"], 548, 500, [111, null]],
-[113, ["number", 19], 548, 542, [111, null]],
-[114, ["storein", 0], 480, 584, [111, 115, 116, 117]],
-[115, ["string", "h"], 548, 584, [114, null]],
-[116, ["number", 21], 548, 626, [114, null]],
-[117, ["storein", 0], 480, 668, [114, 118, 119, 120]],
-[118, ["string", "j"], 548, 668, [117, null]],
-[119, ["number", 23], 548, 710, [117, null]],
-[120, ["storein", 0], 480, 752, [117, 121, 122, 123]],
-[121, ["string", "k"], 548, 752, [120, null]],
-[122, ["number", 24], 548, 794, [120, null]],
-[123, ["sandwichcollapsed", 1], 480, 164, [120, null]],
-[124, "sandwichtop_no_arm_no_label", 462, 210, [36, 125]],
-[125, ["storein", 0], 480, 244, [124, 126, 127, 128]],
-[126, ["string", "q"], 548, 244, [125, null]],
-[127, ["number", 24], 548, 286, [125, null]],
-[128, ["storein", 0], 480, 328, [125, 129, 130, 131]],
-[129, ["string", "w"], 548, 328, [128, null]],
-[130, ["number", 26], 548, 370, [128, null]],
-[131, ["storein", 0], 480, 412, [128, 132, 133, 134]],
-[132, ["string", "e"], 548, 412, [131, null]],
-[133, ["number", 28], 548, 454, [131, null]],
-[134, ["storein", 0], 480, 496, [131, 135, 136, 137]],
-[135, ["string", "r"], 548, 496, [134, null]],
-[136, ["number", 29], 548, 538, [134, null]],
-[137, ["storein", 0], 480, 580, [134, 138, 139, 140]],
-[138, ["string", "t"], 548, 580, [137, null]],
-[139, ["number", 31], 548, 622, [137, null]],
-[140, ["storein", 0], 480, 664, [137, 141, 142, 143]],
-[141, ["string", "y"], 548, 664, [140, null]],
-[142, ["number", 33], 548, 706, [140, null]],
-[143, ["storein", 0], 480, 748, [140, 144, 145, 146]],
-[144, ["string", "u"], 548, 748, [143, null]],
-[145, ["number", 35], 548, 790, [143, null]],
-[146, ["storein", 0], 480, 832, [143, 147, 148, 149]],
-[147, ["string", "i"], 548, 832, [146, null]],
-[148, ["number", 36], 548, 874, [146, null]],
-[149, ["sandwichcollapsed", 1], 480, 244, [146, null]],
-[150, "sandwichtop_no_arm_no_label", 462, 290, [38, 151]],
-[151, ["storein", 0], 480, 324, [150, 152, 153, 154]],
-[152, ["string", "1"], 548, 324, [151, null]],
-[153, ["number", 36], 548, 366, [151, null]],
-[154, ["storein", 0], 480, 408, [151, 155, 156, 157]],
-[155, ["string", "2"], 548, 408, [154, null]],
-[156, ["number", 38], 548, 450, [154, null]],
-[157, ["storein", 0], 480, 492, [154, 158, 159, 160]],
-[158, ["string", "3"], 548, 492, [157, null]],
-[159, ["number", 40], 548, 534, [157, null]],
-[160, ["storein", 0], 480, 576, [157, 161, 162, 163]],
-[161, ["string", "4"], 548, 576, [160, null]],
-[162, ["number", 41], 548, 618, [160, null]],
-[163, ["storein", 0], 480, 660, [160, 164, 165, 166]],
-[164, ["string", "5"], 548, 660, [163, null]],
-[165, ["number", 43], 548, 702, [163, null]],
-[166, ["storein", 0], 480, 744, [163, 167, 168, 169]],
-[167, ["string", "6"], 548, 744, [166, null]],
-[168, ["number", 45], 548, 786, [166, null]],
-[169, ["storein", 0], 480, 828, [166, 170, 171, 172]],
-[170, ["string", "7"], 548, 828, [169, null]],
-[171, ["number", 47], 548, 870, [169, null]],
-[172, ["storein", 0], 480, 912, [169, 173, 174, 175]],
-[173, ["string", "8"], 548, 912, [172, null]],
-[174, ["number", 48], 548, 954, [172, null]],
-[175, ["sandwichcollapsed", 1], 480, 324, [172, null]],
-[176, "comment", 113, 460, [49, 177, 12]],
-[177, ["string", "normalize volume by frequency"], 196, 460, [176, null]]]
-
diff --git a/samples/media-music.tb b/samples/media-music.tb
new file mode 100644
index 0000000..7aa39bf
--- /dev/null
+++ b/samples/media-music.tb
@@ -0,0 +1,176 @@
+[[0, ["start", 2.0], 195, 195, [null, null]],
+[1, "hat", 0, 0, [null, 175, 12]],
+[2, ["until", 21], 740, 548, [10, 3, 6, null]],
+[3, ["greater2", 0], 796, 514, [2, 4, 5, null]],
+[4, "keyboard", 852, 514, [3, null]],
+[5, ["number", 0], 876, 556, [3, null]],
+[6, "wait", 758, 614, [2, 7, 8]],
+[7, ["number", 0.1], 816, 614, [6, null]],
+[8, "kbinput", 758, 656, [6, null]],
+[9, ["forever", 292], 0, 96, [12, 16, null]],
+[10, ["vspace", 0], 740, 506, [15, 2]],
+[11, "hat1", 740, 0, [null, 20]],
+[12, "stack1", 0, 54, [1, 9]],
+[13, "sinewave", 36, 528, [173, 70, 52, 14, 57]],
+[14, ["number", 0.33], 116, 612, [13, null]],
+[15, "hat2", 740, 460, [null, 10]],
+[16, "stack2", 18, 130, [9, 75]],
+[17, ["repeat", 42], 740, 88, [20, 18, 25, 19]],
+[18, ["number", 256], 799, 88, [17, null]],
+[19, ["vspace", 40], 740, 274, [17, 29]],
+[20, "storeinbox1", 740, 46, [11, 21, 17]],
+[21, ["number", 0], 858, 46, [20, null]],
+[22, "box1", 930, 214, [28, null]],
+[23, "storeinbox1", 758, 214, [25, 28, null]],
+[24, ["number", 1], 930, 256, [28, null]],
+[25, ["storein", 0], 758, 130, [17, 61, 26, 23]],
+[26, ["number", 0], 826, 172, [25, null]],
+[27, "box1", 880, 130, [61, null]],
+[28, ["plus2", 0], 876, 214, [23, 22, 24]],
+[29, "stack", 740, 396, [19, 30, 31]],
+[30, ["string", "12345678"], 798, 396, [29, null]],
+[31, "stack", 740, 438, [29, 32, 33]],
+[32, ["string", "qwertyui"], 798, 438, [31, null]],
+[33, "stack", 740, 480, [31, 34, 35]],
+[34, ["string", "asdfghjk"], 798, 480, [33, null]],
+[35, "stack", 740, 522, [33, 36, null]],
+[36, ["string", "zxcvbnm,"], 798, 522, [35, null]],
+[37, "hat", 1028, 329, [null, 38, 123]],
+[38, ["string", "qwertyui"], 1086, 341, [37, null]],
+[39, "hat", 1083, 80, [null, 40, 148]],
+[40, ["string", "12345678"], 1141, 92, [39, null]],
+[41, "hat", 1096, 433, [null, 42, 98]],
+[42, ["string", "asdfghjk"], 1154, 445, [41, null]],
+[43, "hat", 1101, 202, [null, 44, 45]],
+[44, ["string", "zxcvbnm,"], 1159, 214, [43, null]],
+[45, "sandwichclampcollapsed", 1101, 256, [43, 72, null]],
+[46, ["product2", 0], 250, 570, [52, 47, 48]],
+[47, ["number", 10000], 304, 570, [46, null]],
+[48, ["division2", 0], 304, 612, [46, 49, 69]],
+[49, ["number", 2093], 374, 612, [48, null]],
+[50, ["if", 105], 18, 420, [51, 53, 173, null]],
+[51, ["vspace", 40], 18, 298, [67, 50]],
+[52, ["identity2", 40], 116, 570, [13, 46]],
+[53, ["greater2", 0], 74, 386, [50, 71, 54, null]],
+[54, ["number", 0], 154, 428, [53, null]],
+[55, "keyboard", 325, 340, [60, null]],
+[56, "box", 216, 340, [65, 60, null]],
+[57, "print", 36, 654, [13, 68, 58]],
+[58, "wait", 36, 696, [57, 59, null]],
+[59, ["number", 0.33], 94, 696, [58, null]],
+[60, "chr", 271, 340, [56, 55]],
+[61, "chr", 826, 130, [25, 27]],
+[62, ["number", 1.06], 216, 298, [65, null]],
+[63, "comment", 18, 214, [75, 64, 67]],
+[64, ["string", "2^^(1/12) is factor between half-steps"], 101, 214, [63, null]],
+[65, ["myfunc2arg", 0], 136, 256, [67, 66, 62, 56, null]],
+[66, ["string", "130.81 * pow(x, y)"], 216, 256, [65, null]],
+[67, "storeinbox2", 18, 256, [63, 65, 51]],
+[68, "box2", 94, 654, [57, null]],
+[69, "box2", 398, 654, [48, null]],
+[70, "box2", 116, 528, [13, null]],
+[71, "box2", 130, 386, [53, null]],
+[72, ["storein", 0], 1119, 290, [45, 73, 74, 77]],
+[73, ["string", "z"], 1187, 290, [72, null]],
+[74, ["number", 0], 1187, 332, [72, null]],
+[75, "comment", 18, 172, [16, 76, 63]],
+[76, ["string", "130.81 Hz is Low C"], 101, 172, [75, null]],
+[77, ["storein", 0], 1119, 374, [72, 78, 79, 80]],
+[78, ["string", "x"], 1187, 374, [77, null]],
+[79, ["number", 2], 1187, 416, [77, null]],
+[80, ["storein", 0], 1119, 458, [77, 81, 82, 83]],
+[81, ["string", "c"], 1187, 458, [80, null]],
+[82, ["number", 4], 1187, 500, [80, null]],
+[83, ["storein", 0], 1119, 542, [80, 84, 85, 86]],
+[84, ["string", "v"], 1187, 542, [83, null]],
+[85, ["number", 5], 1187, 584, [83, null]],
+[86, ["storein", 0], 1119, 626, [83, 87, 88, 89]],
+[87, ["string", "b"], 1187, 626, [86, null]],
+[88, ["number", 7], 1187, 668, [86, null]],
+[89, ["storein", 0], 1119, 710, [86, 90, 91, 92]],
+[90, ["string", "n"], 1187, 710, [89, null]],
+[91, ["number", 9], 1187, 752, [89, null]],
+[92, ["storein", 0], 1119, 794, [89, 93, 94, 95]],
+[93, ["string", "m"], 1187, 794, [92, null]],
+[94, ["number", 11], 1187, 836, [92, null]],
+[95, ["storein", 0], 1119, 878, [92, 96, 97, null]],
+[96, ["string", ","], 1187, 878, [95, null]],
+[97, ["number", 12], 1187, 920, [95, null]],
+[98, "sandwichclampcollapsed", 1096, 487, [41, 99, null]],
+[99, ["storein", 0], 1114, 521, [98, 100, 101, 102]],
+[100, ["string", "a"], 1182, 521, [99, null]],
+[101, ["number", 12], 1182, 563, [99, null]],
+[102, ["storein", 0], 1114, 605, [99, 103, 104, 105]],
+[103, ["string", "s"], 1182, 605, [102, null]],
+[104, ["number", 14], 1182, 647, [102, null]],
+[105, ["storein", 0], 1114, 689, [102, 106, 107, 108]],
+[106, ["string", "d"], 1182, 689, [105, null]],
+[107, ["number", 16], 1182, 731, [105, null]],
+[108, ["storein", 0], 1114, 773, [105, 109, 110, 111]],
+[109, ["string", "f"], 1182, 773, [108, null]],
+[110, ["number", 17], 1182, 815, [108, null]],
+[111, ["storein", 0], 1114, 857, [108, 112, 113, 114]],
+[112, ["string", "g"], 1182, 857, [111, null]],
+[113, ["number", 19], 1182, 899, [111, null]],
+[114, ["storein", 0], 1114, 941, [111, 115, 116, 117]],
+[115, ["string", "h"], 1182, 941, [114, null]],
+[116, ["number", 21], 1182, 983, [114, null]],
+[117, ["storein", 0], 1114, 1025, [114, 118, 119, 120]],
+[118, ["string", "j"], 1182, 1025, [117, null]],
+[119, ["number", 23], 1182, 1067, [117, null]],
+[120, ["storein", 0], 1114, 1109, [117, 121, 122, null]],
+[121, ["string", "k"], 1182, 1109, [120, null]],
+[122, ["number", 24], 1182, 1151, [120, null]],
+[123, "sandwichclampcollapsed", 1028, 383, [37, 124, null]],
+[124, ["storein", 0], 1046, 417, [123, 125, 126, 127]],
+[125, ["string", "q"], 1114, 417, [124, null]],
+[126, ["number", 24], 1114, 459, [124, null]],
+[127, ["storein", 0], 1046, 501, [124, 128, 129, 130]],
+[128, ["string", "w"], 1114, 501, [127, null]],
+[129, ["number", 26], 1114, 543, [127, null]],
+[130, ["storein", 0], 1046, 585, [127, 131, 132, 133]],
+[131, ["string", "e"], 1114, 585, [130, null]],
+[132, ["number", 28], 1114, 627, [130, null]],
+[133, ["storein", 0], 1046, 669, [130, 134, 135, 136]],
+[134, ["string", "r"], 1114, 669, [133, null]],
+[135, ["number", 29], 1114, 711, [133, null]],
+[136, ["storein", 0], 1046, 753, [133, 137, 138, 139]],
+[137, ["string", "t"], 1114, 753, [136, null]],
+[138, ["number", 31], 1114, 795, [136, null]],
+[139, ["storein", 0], 1046, 837, [136, 140, 141, 142]],
+[140, ["string", "y"], 1114, 837, [139, null]],
+[141, ["number", 33], 1114, 879, [139, null]],
+[142, ["storein", 0], 1046, 921, [139, 143, 144, 145]],
+[143, ["string", "u"], 1114, 921, [142, null]],
+[144, ["number", 35], 1114, 963, [142, null]],
+[145, ["storein", 0], 1046, 1005, [142, 146, 147, null]],
+[146, ["string", "i"], 1114, 1005, [145, null]],
+[147, ["number", 36], 1114, 1047, [145, null]],
+[148, "sandwichclampcollapsed", 1083, 134, [39, 149, null]],
+[149, ["storein", 0], 1101, 168, [148, 150, 151, 152]],
+[150, ["string", "1"], 1169, 168, [149, null]],
+[151, ["number", 36], 1169, 210, [149, null]],
+[152, ["storein", 0], 1101, 252, [149, 153, 154, 155]],
+[153, ["string", "2"], 1169, 252, [152, null]],
+[154, ["number", 38], 1169, 294, [152, null]],
+[155, ["storein", 0], 1101, 336, [152, 156, 157, 158]],
+[156, ["string", "3"], 1169, 336, [155, null]],
+[157, ["number", 40], 1169, 378, [155, null]],
+[158, ["storein", 0], 1101, 420, [155, 159, 160, 161]],
+[159, ["string", "4"], 1169, 420, [158, null]],
+[160, ["number", 41], 1169, 462, [158, null]],
+[161, ["storein", 0], 1101, 504, [158, 162, 163, 164]],
+[162, ["string", "5"], 1169, 504, [161, null]],
+[163, ["number", 43], 1169, 546, [161, null]],
+[164, ["storein", 0], 1101, 588, [161, 165, 166, 167]],
+[165, ["string", "6"], 1169, 588, [164, null]],
+[166, ["number", 45], 1169, 630, [164, null]],
+[167, ["storein", 0], 1101, 672, [164, 168, 169, 170]],
+[168, ["string", "7"], 1169, 672, [167, null]],
+[169, ["number", 47], 1169, 714, [167, null]],
+[170, ["storein", 0], 1101, 756, [167, 171, 172, null]],
+[171, ["string", "8"], 1169, 756, [170, null]],
+[172, ["number", 48], 1169, 798, [170, null]],
+[173, "comment", 36, 486, [50, 174, 13]],
+[174, ["string", "normalize volume by frequency"], 119, 486, [173, null]],
+[175, ["string", "start"], 58, 12, [1, null]]]
diff --git a/samples/thumbnails/graphics-grid.png b/samples/thumbnails/graphics-grid.png
new file mode 100644
index 0000000..bb6adf8
--- /dev/null
+++ b/samples/thumbnails/graphics-grid.png
Binary files differ
diff --git a/samples/thumbnails/graphics-op-art-2.png b/samples/thumbnails/graphics-op-art-2.png
new file mode 100644
index 0000000..e83349d
--- /dev/null
+++ b/samples/thumbnails/graphics-op-art-2.png
Binary files differ
diff --git a/samples/thumbnails/media-music-dots.png b/samples/thumbnails/media-music-dots.png
new file mode 100644
index 0000000..75a5631
--- /dev/null
+++ b/samples/thumbnails/media-music-dots.png
Binary files differ
diff --git a/samples/thumbnails/media-music-keyboard.png b/samples/thumbnails/media-music-keyboard.png
new file mode 100644
index 0000000..e515a24
--- /dev/null
+++ b/samples/thumbnails/media-music-keyboard.png
Binary files differ
diff --git a/turtleblocks.py b/turtleblocks.py
index 18bc1ac..b6e9fd6 100755
--- a/turtleblocks.py
+++ b/turtleblocks.py
@@ -54,6 +54,7 @@ from gettext import gettext as _
from TurtleArt.taconstants import (OVERLAY_LAYER, DEFAULT_TURTLE_COLORS,
TAB_LAYER, SUFFIX)
from TurtleArt.tautils import (data_from_string, get_save_name)
+from TurtleArt.tapalette import default_values
from TurtleArt.tawindow import TurtleArtWindow
from TurtleArt.taexportlogo import save_logo
@@ -68,8 +69,10 @@ class TurtleMain():
_ICON_SUBPATH = 'images/turtle.png'
_GNOME_PLUGIN_SUBPATH = 'gnome_plugins'
_HOVER_HELP = '/desktop/sugar/activities/turtleart/hoverhelp'
+ _COORDINATE_SCALE = '/desktop/sugar/activities/turtleart/coordinatescale'
def __init__(self):
+ self._setting_gconf_overrides = False
self._abspath = os.path.abspath('.')
self._execdirname = self._get_execution_dir()
if self._execdirname is not None:
@@ -187,6 +190,7 @@ return %s(self)" % (p, P, P)
else:
self.win.get_window().set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
gobject.idle_add(self._project_loader, self._ta_file)
+ self._set_gconf_overrides()
gtk.main()
def _project_loader(self, file_name):
@@ -216,16 +220,34 @@ return %s(self)" % (p, P, P)
cr = cairo.Context(img_surface)
surface = cr.get_target()
self.turtle_canvas = surface.create_similar(
- cairo.CONTENT_COLOR, max(1024, gtk.gdk.screen_width() * 2),
- max(768, gtk.gdk.screen_height() * 2))
+ cairo.CONTENT_COLOR,
+ # max(1024, gtk.gdk.screen_width() * 2),
+ # max(768, gtk.gdk.screen_height() * 2))
+ gtk.gdk.screen_width() * 2,
+ gtk.gdk.screen_height() * 2)
self.tw = TurtleArtWindow(self.canvas, self._execdirname,
turtle_canvas=self.turtle_canvas,
activity=self, running_sugar=False)
self.tw.save_folder = self._abspath # os.path.expanduser('~')
- if hasattr(self, 'client') and \
- self.client.get_int(self._HOVER_HELP) == 1:
- self.hover.set_active(False)
- self._do_hover_help_off_cb(None)
+
+ if hasattr(self, 'client'):
+ if self.client.get_int(self._HOVER_HELP) == 1:
+ self.hover.set_active(False)
+ self._do_hover_help_off_cb(None)
+ if not self.client.get_int(self._COORDINATE_SCALE) in [0, 1]:
+ self.tw.coord_scale = 1
+ else:
+ self.tw.coord_scale = 0
+
+ def _set_gconf_overrides(self):
+ if self.tw.coord_scale == 0:
+ self.tw.coord_scale = 1
+ else:
+ self._do_rescale_cb(None)
+ if self.tw.coord_scale != 1:
+ self._setting_gconf_overrides = True
+ self.coords.set_active(True)
+ self._setting_gconf_overrides = False
def _init_vars(self):
''' If we are invoked to start a project from Gnome, we should make
@@ -393,8 +415,9 @@ return %s(self)" % (p, P, P)
self._do_cartesian_cb)
MenuBuilder.make_menu_item(menu, _('Polar coordinates'),
self._do_polar_cb)
- MenuBuilder.make_menu_item(menu, _('Rescale coordinates'),
- self._do_rescale_cb)
+ self.coords = MenuBuilder.make_checkmenu_item(
+ menu, _('Rescale coordinates'),
+ self._do_rescale_cb, status=False)
MenuBuilder.make_menu_item(menu, _('Grow blocks'),
self._do_resize_cb, 1.5)
MenuBuilder.make_menu_item(menu, _('Shrink blocks'),
@@ -553,19 +576,31 @@ Would you like to save before quitting?'))
def _do_rescale_cb(self, button):
''' Callback to rescale coordinate space. '''
+ if self._setting_gconf_overrides:
+ return
if self.tw.coord_scale == 1:
- self.tw.coord_scale = self.tw.height / 200
- self.tw.eraser_button()
+ self.tw.coord_scale = self.tw.height / 40
+ self.tw.update_overlay_position()
if self.tw.cartesian is True:
self.tw.overlay_shapes['Cartesian_labeled'].hide()
self.tw.overlay_shapes['Cartesian'].set_layer(OVERLAY_LAYER)
+ default_values['forward'] = [10]
+ default_values['back'] = [10]
+ default_values['arc'] = [90, 10]
+ default_values['setpensize'] = [1]
+ self.tw.turtles.get_active_turtle().set_pen_size(1)
else:
self.tw.coord_scale = 1
- self.tw.eraser_button()
if self.tw.cartesian is True:
self.tw.overlay_shapes['Cartesian'].hide()
self.tw.overlay_shapes['Cartesian_labeled'].set_layer(
OVERLAY_LAYER)
+ default_values['forward'] = [100]
+ default_values['back'] = [100]
+ default_values['arc'] = [90, 100]
+ default_values['setpensize'] = [5]
+ self.tw.turtles.get_active_turtle().set_pen_size(5)
+ self.client.set_int(self._COORDINATE_SCALE, int(self.tw.coord_scale))
def _do_toggle_hover_help_cb(self, button):
''' Toggle hover help on/off '''
@@ -579,7 +614,8 @@ Would you like to save before quitting?'))
''' Turn hover help on '''
self.tw.no_help = False
self.hover.set_active(True)
- self.client.set_int(self._HOVER_HELP, 0)
+ if hasattr(self, 'client'):
+ self.client.set_int(self._HOVER_HELP, 0)
def _do_hover_help_off_cb(self, button):
''' Turn hover help off '''
@@ -588,7 +624,8 @@ Would you like to save before quitting?'))
if self.tw.status_spr is not None:
self.tw.status_spr.hide()
self.hover.set_active(False)
- self.client.set_int(self._HOVER_HELP, 1)
+ if hasattr(self, 'client'):
+ self.client.set_int(self._HOVER_HELP, 1)
def _do_palette_cb(self, widget):
''' Callback to show/hide palette of blocks. '''
@@ -817,7 +854,7 @@ Would you like to save before quitting?'))
if os.path.exists(file_path):
self.tw.load_files(file_path)
break
- self.tw.load_save_folder = os.path.join(activity.get_bundle_path(),
+ self.tw.load_save_folder = os.path.join(self._get_execution_dir(),
'samples')
def _fill_samples_list(self, store):