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 --- 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': diff --git a/TurtleArtActivity.py b/TurtleArtActivity.py index 8ce1fbc..940d548 100644 --- a/TurtleArtActivity.py +++ b/TurtleArtActivity.py @@ -54,7 +54,7 @@ from TurtleArt.taconstants import PALETTE_NAMES, OVERLAY_LAYER, HELP_STRINGS from TurtleArt.taexporthtml import save_html from TurtleArt.taexportlogo import save_logo from TurtleArt.tautils import data_to_file, data_to_string, data_from_string, \ - get_path + get_path, chooser from TurtleArt.tawindow import TurtleArtWindow from TurtleArt.taturtle import Turtle @@ -219,46 +219,25 @@ class TurtleArtActivity(activity.Activity): def do_load_ta_project_cb(self, button): """ Load a project from the Journal """ - from sugar.graphics.objectchooser import ObjectChooser - chooser = ObjectChooser(parent=self, - what_filter='org.laptop.TurtleArtActivity') + chooser(self, SERVICE, self._load_ta_project) + def _load_ta_project(self, dsobject): + """ Load a ta project from the datastore """ try: - result = chooser.run() - if result == gtk.RESPONSE_ACCEPT: - dsobject = chooser.get_selected_object() - try: - _logger.debug("opening %s " % dsobject.file_path) - self.read_file(dsobject.file_path, False) - except: - _logger.debug("couldn't open %s" % dsobject.file_path) - dsobject.destroy() - finally: - chooser.destroy() - del chooser - return + _logger.debug("opening %s " % dsobject.file_path) + self.read_file(dsobject.file_path, False) + except: + _logger.debug("couldn't open %s" % dsobject.file_path) def do_load_python_cb(self, button): """ Load Python code from the Journal. """ self.load_python.set_icon("pippy-openon") self.import_py() gobject.timeout_add(250, self.load_python.set_icon, "pippy-openoff") - return def import_py(self): """ Import Python code from the Journal to load into 'myblock'. """ - from sugar.graphics.objectchooser import ObjectChooser - chooser = ObjectChooser(parent=self, - what_filter='org.laptop.Pippy') - - try: - result = chooser.run() - if result == gtk.RESPONSE_ACCEPT: - dsobject = chooser.get_selected_object() - self._load_python(dsobject) - finally: - chooser.destroy() - del chooser + chooser(self, 'org.laptop.Pippy', self._load_python) def _load_python(self, dsobject): """ Read the Python code from the Journal object """ @@ -272,7 +251,6 @@ class TurtleArtActivity(activity.Activity): self.metadata['python code'] = dsobject.object_id except: _logger.debug("couldn't open %s" % dsobject.file_path) - dsobject.destroy() def do_save_as_image_cb(self, button): """ Save the canvas to the Journal. """ -- cgit v0.9.1