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 --- (limited to 'TurtleArt') 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) -- cgit v0.9.1