Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Bender <walter@sugarlabs.org>2013-05-24 12:10:06 (GMT)
committer Walter Bender <walter@sugarlabs.org>2013-05-24 12:10:06 (GMT)
commitdaaeb35030b160b46caa6169e5210eaef372e9ed (patch)
tree678902c0fd6afc1b80fc7f0dff4c6958f8cc8b0a
parentd195291694a5e9b4ab7e54a01c1375021f606c42 (diff)
consolidation of chooser codev177
-rw-r--r--TurtleArt/tautils.py27
-rw-r--r--TurtleArt/tawindow.py8
-rw-r--r--TurtleArtActivity.py7
3 files changed, 24 insertions, 18 deletions
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. '''