diff options
author | Marion <marion.zepf@gmail.com> | 2013-09-09 12:42:03 (GMT) |
---|---|---|
committer | Marion <marion.zepf@gmail.com> | 2013-09-09 12:42:03 (GMT) |
commit | 066e85b7103e978bc306a46b15d5bd2477e42f00 (patch) | |
tree | 8bdae93d83020a8da7b48c02d67cf3874cfe6e8a /TurtleArtActivity.py | |
parent | 5079cc294deeb334ee2a07d746fd76b7dcda6a74 (diff) |
add 'Save as Python' button in Sugar
Diffstat (limited to 'TurtleArtActivity.py')
-rw-r--r-- | TurtleArtActivity.py | 45 |
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( |