Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--TurtleArt/tautils.py22
-rw-r--r--TurtleArt/tawindow.py18
-rw-r--r--TurtleArtActivity.py40
3 files changed, 38 insertions, 42 deletions
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. """