diff options
Diffstat (limited to 'turtleblocks.py')
-rwxr-xr-x | turtleblocks.py | 40 |
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): ''' |