Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TurtleArtActivity.py
diff options
context:
space:
mode:
authorMarion <marion.zepf@gmail.com>2013-09-09 12:42:03 (GMT)
committer Marion <marion.zepf@gmail.com>2013-09-09 12:42:03 (GMT)
commit066e85b7103e978bc306a46b15d5bd2477e42f00 (patch)
tree8bdae93d83020a8da7b48c02d67cf3874cfe6e8a /TurtleArtActivity.py
parent5079cc294deeb334ee2a07d746fd76b7dcda6a74 (diff)
add 'Save as Python' button in Sugar
Diffstat (limited to 'TurtleArtActivity.py')
-rw-r--r--TurtleArtActivity.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/TurtleArtActivity.py b/TurtleArtActivity.py
index 078377b..5e32f41 100644
--- a/TurtleArtActivity.py
+++ b/TurtleArtActivity.py
@@ -66,6 +66,7 @@ from TurtleArt.tapalette import (palette_names, help_strings, help_palettes,
from TurtleArt.taconstants import (BLOCK_SCALE, XO1, XO15, XO175, XO4,
MIMETYPE)
from TurtleArt.taexportlogo import save_logo
+from TurtleArt.taexportpython import save_python
from TurtleArt.tautils import (data_to_file, data_to_string, data_from_string,
get_path, chooser_dialog, get_hardware)
from TurtleArt.tawindow import TurtleArtWindow
@@ -206,6 +207,26 @@ class TurtleArtActivity(activity.Activity):
gobject.timeout_add(250, self.save_as_logo.set_icon, 'logo-saveoff')
self._notify_successful_save(title=_('Save as Logo'))
+ def do_save_as_python_cb(self, button):
+ ''' Write Python code to datastore. '''
+ self.save_as_python.set_icon('python-saveon')
+ py_code_path = self._dump_python_code()
+ if py_code_path is None:
+ return
+
+ dsobject = datastore.create()
+ dsobject.metadata['title'] = self.metadata['title'] + '.py'
+ dsobject.metadata['mime_type'] = 'text/plain'
+ dsobject.metadata['icon-color'] = profile.get_color().to_string()
+ dsobject.set_file_path(py_code_path)
+ datastore.write(dsobject)
+ dsobject.destroy()
+
+ os.remove(py_code_path)
+ gobject.timeout_add(250, self.save_as_python.set_icon,
+ 'python-saveoff')
+ self._notify_successful_save(title=_('Save as Python'))
+
def do_load_ta_project_cb(self, button, new=False):
''' Load a project from the Journal. '''
self._create_new = new
@@ -558,6 +579,23 @@ class TurtleArtActivity(activity.Activity):
tmpfile = None
return tmpfile
+ def _dump_python_code(self):
+ ''' Save Python code to temporary file. '''
+ datapath = get_path(activity, 'instance')
+ tmpfile = os.path.join(datapath, 'tmpfile.py')
+ code = save_python(self.tw)
+ if len(code) == 0:
+ _logger.debug('save_python returned None')
+ return None
+ try:
+ f = file(tmpfile, 'w')
+ f.write(code)
+ f.close()
+ except Exception, e:
+ _logger.error("Couldn't save Python code: " + str(e))
+ tmpfile = None
+ return tmpfile
+
def _dump_ta_code(self):
''' Save TA code to temporary file. '''
datapath = get_path(activity, 'instance')
@@ -804,6 +842,7 @@ class TurtleArtActivity(activity.Activity):
add_section(help_box, _('Save/Load'), icon='turtleoff')
add_paragraph(help_box, _('Save as image'), icon='image-saveoff')
add_paragraph(help_box, _('Save as Logo'), icon='logo-saveoff')
+ add_paragraph(help_box, _('Save as Python'), icon='python-saveoff')
add_paragraph(help_box, _('Load project'), icon='load-from-journal')
home = os.environ['HOME']
if activity.get_bundle_path()[0:len(home)] == home:
@@ -988,6 +1027,9 @@ class TurtleArtActivity(activity.Activity):
self.save_as_logo, label = self._add_button_and_label(
'logo-saveoff', _('Save as Logo'), self.do_save_as_logo_cb,
None, button_box)
+ self.save_as_python, label = self._add_button_and_label(
+ 'python-saveoff', _('Save as Python'),
+ self.do_save_as_python_cb, None, button_box)
# When screen is in portrait mode, the buttons don't fit
# on the main toolbar, so put them here.
@@ -1024,6 +1066,9 @@ class TurtleArtActivity(activity.Activity):
self.save_as_logo = self._add_button(
'logo-saveoff', _('Save as Logo'), self.do_save_as_logo_cb,
toolbar)
+ self.save_as_python = self._add_button(
+ 'python-saveoff', _('Save as Python'),
+ self.do_save_as_python_cb, toolbar)
self.keep_button = self._add_button(
'filesaveoff', _('Save snapshot'), self.do_keep_cb, toolbar)
self.load_ta_project = self._add_button(