From 8fcccae06415542040431d046dbd2bced51e65f5 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Mon, 11 Oct 2010 15:42:07 +0000 Subject: more consolidation of chooser code --- (limited to 'TurtleArt') diff --git a/TurtleArt/tautils.py b/TurtleArt/tautils.py index 9e9d2c3..47c2768 100644 --- a/TurtleArt/tautils.py +++ b/TurtleArt/tautils.py @@ -156,6 +156,28 @@ def get_save_name(suffix, load_save_folder, save_file_name): return do_dialog(_dialog, suffix, load_save_folder) +def chooser(caller, filter, action): + """ Choose an object from the datastore and take some action """ + from sugar.graphics.objectchooser import ObjectChooser + + _chooser = None + try: + _chooser = ObjectChooser(parent=caller, what_filter=filter) + except TypeError: + _chooser = ObjectChooser(None, caller, + gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT) + if _chooser is not None: + try: + result = _chooser.run() + if result == gtk.RESPONSE_ACCEPT: + dsobject = _chooser.get_selected_object() + action(dsobject) + dsobject.destroy() + finally: + _chooser.destroy() + del _chooser + + def data_from_file(ta_file): """ Open the .ta file, ignoring any .png file that might be present. """ file_handle = open(ta_file, "r") diff --git a/TurtleArt/tawindow.py b/TurtleArt/tawindow.py index f3b4beb..b3d14cf 100644 --- a/TurtleArt/tawindow.py +++ b/TurtleArt/tawindow.py @@ -68,7 +68,7 @@ from tautils import magnitude, get_load_name, get_save_name, data_from_file, \ collapsed, collapsible, hide_button_hit, show_button_hit, \ arithmetic_check, xy, find_block_to_run, find_top_block, \ find_start_stack, find_group, find_blk_below, olpc_xo_1, \ - dock_dx_dy, data_to_string, journal_check + dock_dx_dy, data_to_string, journal_check, chooser from tasprite_factory import SVG, svg_str_to_pixbuf, svg_from_file from sprites import Sprites, Sprite @@ -1713,16 +1713,7 @@ class TurtleArtWindow(): def _import_from_journal(self, blk): """ Import a file from the Sugar Journal """ if self.running_sugar: - chooser = ObjectChooser(parent=self.parent) - try: - result = chooser.run() - if result == gtk.RESPONSE_ACCEPT: - dsobject = chooser.get_selected_object() - self._update_media_icon(blk, dsobject, dsobject.object_id) - dsobject.destroy() - finally: - chooser.destroy() - del chooser + chooser(self.parent, '', self._update_media_blk) else: fname, self.load_save_folder = get_load_name('.*', self.load_save_folder) @@ -1741,6 +1732,11 @@ class TurtleArtWindow(): if dblk != None and (len(dblk.values) == 0 or dblk.values[0] is None): self._update_media_icon(dblk, None, blk.values[0]) + def _update_media_blk(self, dsobject): + """ Called from the chooser to load a media block """ + self._update_media_icon(self.selected_blk, dsobject, + dsobject.object_id) + def _update_media_icon(self, blk, name, value=''): """ Update the icon on a 'loaded' media block. """ if blk.name == 'journal': -- cgit v0.9.1