From daaeb35030b160b46caa6169e5210eaef372e9ed Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Fri, 24 May 2013 12:10:06 +0000 Subject: consolidation of chooser code --- diff --git a/TurtleArt/tautils.py b/TurtleArt/tautils.py index e6120ec..48162fe 100644 --- a/TurtleArt/tautils.py +++ b/TurtleArt/tautils.py @@ -317,31 +317,36 @@ def get_save_name(filefilter, load_save_folder, save_file_name): return do_dialog(dialog, filefilter, load_save_folder) -def chooser(parent_window, filter, action): +def chooser_dialog(parent_window, filter, action): ''' Choose an object from the datastore and take some action ''' from sugar.graphics.objectchooser import ObjectChooser chooser = None + dsobject = None + cleanup_needed = False try: chooser = ObjectChooser(parent=parent_window, what_filter=filter) - except TypeError: + except TypeError: # Old-syle Sugar chooser chooser = ObjectChooser( None, parent_window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT) + cleanup_needed = True + if chooser is not None: - dsobject = None - try: - result = chooser.run() - if result == gtk.RESPONSE_ACCEPT: - dsobject = chooser.get_selected_object() - finally: + result = chooser.run() + if result == gtk.RESPONSE_ACCEPT: + dsobject = chooser.get_selected_object() + if cleanup_needed: chooser.destroy() del chooser - if dsobject is not None: - action(dsobject) - dsobject.destroy() + if dsobject is not None: + gobject.idle_add(self._take_action, action, dsobject) + +def _take_action(self, action, dsobject): + action(dsobject) + dsobject.destroy() def data_from_file(ta_file): ''' Open the .ta file, ignoring any .png file that might be present. ''' diff --git a/TurtleArt/tawindow.py b/TurtleArt/tawindow.py index c332d35..e4c7b65 100644 --- a/TurtleArt/tawindow.py +++ b/TurtleArt/tawindow.py @@ -73,7 +73,7 @@ from tautils import (magnitude, get_load_name, get_save_name, data_from_file, data_to_file, round_int, get_id, get_pixbuf_from_journal, movie_media_type, audio_media_type, image_media_type, save_picture, calc_image_size, get_path, hide_button_hit, - show_button_hit, chooser, arithmetic_check, xy, + show_button_hit, chooser_dialog, arithmetic_check, xy, find_block_to_run, find_top_block, journal_check, find_group, find_blk_below, data_to_string, find_start_stack, get_hardware, debug_output, @@ -3348,7 +3348,7 @@ before making changes to your Turtle Blocks program')) ''' Import a file from the Sugar Journal ''' # TODO: check blk name to set filter if self.running_sugar: - chooser(self.parent, '', self._update_media_blk) + chooser_dialog(self.parent, '', self._update_media_blk) else: fname, self.load_save_folder = get_load_name('.*', self.load_save_folder) @@ -3719,8 +3719,8 @@ before making changes to your Turtle Blocks program')) def _import_py(self): ''' Import Python code into a block ''' if self.running_sugar: - chooser(self.parent, 'org.laptop.Pippy', - self.load_python_code_from_journal) + chooser_dialog(self.parent, 'org.laptop.Pippy', + self.load_python_code_from_journal) else: self.load_python_code_from_file(fname=None, add_new_block=False) diff --git a/TurtleArtActivity.py b/TurtleArtActivity.py index d16fad0..48fb47f 100644 --- a/TurtleArtActivity.py +++ b/TurtleArtActivity.py @@ -62,7 +62,7 @@ from TurtleArt.taconstants import (BLOCK_SCALE, XO1, XO15, XO175, XO4, MIMETYPE) from TurtleArt.taexportlogo import save_logo from TurtleArt.tautils import (data_to_file, data_to_string, data_from_string, - get_path, chooser, get_hardware) + get_path, chooser_dialog, get_hardware) from TurtleArt.tawindow import TurtleArtWindow from TurtleArt.tacollaboration import Collaboration @@ -194,7 +194,8 @@ class TurtleArtActivity(activity.Activity): if hasattr(self.get_window(), 'get_cursor'): self._old_cursor = self.get_window().get_cursor() self.get_window().set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) - chooser(self, 'org.laptop.TurtleArtActivity', self._load_ta_project) + chooser_dialog(self, 'org.laptop.TurtleArtActivity', + self._load_ta_project) def _load_ta_project(self, dsobject): ''' Load a TA project from the datastore. ''' @@ -212,7 +213,7 @@ class TurtleArtActivity(activity.Activity): self._old_cursor = self.get_window().get_cursor() self.get_window().set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) # FIXME: we are looking for tar files - gobject.idle_add(chooser, self, '', self._load_ta_plugin) + chooser_dialog(self, '', self._load_ta_plugin) def _load_ta_plugin(self, dsobject): ''' Load a TA plugin from the datastore. ''' -- cgit v0.9.1