Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/turtleblocks.py
diff options
context:
space:
mode:
Diffstat (limited to 'turtleblocks.py')
-rwxr-xr-xturtleblocks.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/turtleblocks.py b/turtleblocks.py
index 94c0fb7..604d609 100755
--- a/turtleblocks.py
+++ b/turtleblocks.py
@@ -57,6 +57,8 @@ 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
+from TurtleArt.taexportpython import save_python
+from TurtleArt.taprimitive import PyExportError
from util.menubuilder import MenuBuilder
@@ -405,6 +407,8 @@ return %s(self)" % (p, P, P)
self._do_save_picture_cb)
MenuBuilder.make_menu_item(menu, _('Save as Logo'),
self._do_save_logo_cb)
+ MenuBuilder.make_menu_item(menu, _('Save as Python'),
+ self._do_save_python_cb)
MenuBuilder.make_menu_item(menu, _('Quit'), self._quit_ta)
activity_menu = MenuBuilder.make_sub_menu(menu, _('File'))
@@ -547,6 +551,7 @@ Would you like to save before quitting?'))
if len(logocode) == 0:
return
save_type = '.lg'
+ self.tw.load_save_folder = self._get_execution_dir()
filename, self.tw.load_save_folder = get_save_name(
save_type, self.tw.load_save_folder, 'logosession')
if isinstance(filename, unicode):
@@ -556,6 +561,36 @@ Would you like to save before quitting?'))
f.write(logocode)
f.close()
+ def _do_save_python_cb(self, widget):
+ ''' Callback for saving the project as Python code. '''
+ # catch PyExportError and display a user-friendly message instead
+ try:
+ pythoncode = save_python(self.tw)
+ except PyExportError as pyee:
+ if pyee.block is not None:
+ pyee.block.highlight()
+ self.tw.showlabel('status', str(pyee))
+ print pyee
+ return
+ if not pythoncode:
+ return
+ # use name of TA project if it has been saved already
+ default_name = self.tw.save_file_name
+ if default_name is None:
+ default_name = _("myproject")
+ elif default_name.endswith(".ta") or default_name.endswith(".tb"):
+ default_name = default_name[:-3]
+ save_type = '.py'
+ self.tw.load_save_folder = self._get_execution_dir()
+ filename, self.tw.load_save_folder = get_save_name(
+ save_type, self.tw.load_save_folder, default_name)
+ if isinstance(filename, unicode):
+ filename = filename.encode('utf-8')
+ if filename is not None:
+ f = file(filename, 'w')
+ f.write(pythoncode)
+ f.close()
+
def _do_resize_cb(self, widget, factor):
''' Callback to resize blocks. '''
if factor == -1:
@@ -846,6 +881,10 @@ Would you like to save before quitting?'))
self._selected_sample = image_path
self._sample_window.hide()
+ self.win.get_window().set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
+ gobject.idle_add(self._sample_loader)
+
+ def _sample_loader(self):
# Convert from thumbnail path to sample path
basename = os.path.basename(self._selected_sample)[:-4]
for suffix in ['.ta', '.tb']:
@@ -856,6 +895,7 @@ Would you like to save before quitting?'))
break
self.tw.load_save_folder = os.path.join(self._get_execution_dir(),
'samples')
+ self.win.get_window().set_cursor(gtk.gdk.Cursor(gtk.gdk.LEFT_PTR))
def _fill_samples_list(self, store):
'''