diff options
-rw-r--r-- | TurtleArt/tawindow.py | 37 | ||||
-rw-r--r-- | TurtleArtActivity.py | 9 | ||||
-rw-r--r-- | pysamples/sensors.py | 33 |
3 files changed, 68 insertions, 11 deletions
diff --git a/TurtleArt/tawindow.py b/TurtleArt/tawindow.py index dc58273..f1917e8 100644 --- a/TurtleArt/tawindow.py +++ b/TurtleArt/tawindow.py @@ -36,7 +36,6 @@ except ImportError: GST_AVAILABLE = False import os -import os.path from math import atan2, pi DEGTOR = 2 * pi / 360 @@ -2492,6 +2491,8 @@ class TurtleArtWindow(): try: datastore.write(dsobject) id = dsobject.object_id + debug_output("Copying %s to the datastore" % (fname), + self.running_sugar) except IOError: error_output("Error copying %s to the datastore" % (fname), self.running_sugar) @@ -2507,6 +2508,12 @@ class TurtleArtWindow(): self.set_userdefined(self.drag_group[0]) self.drag_group[0].values.append(dsobject.object_id) self.drag_group = None + # Save object ID in block value + if self.selected_blk is not None: + if len(self.selected_blk.values) == 0: + self.selected_blk.values.append(dsobject.object_id) + else: + self.selected_blk.values[0] = dsobject.object_id else: if len(self.selected_blk.values) == 0: self.selected_blk.values.append(fname) @@ -2527,6 +2534,7 @@ class TurtleArtWindow(): except IOError: debug_output("couldn't open %s" % dsobject.file_path, self.running_sugar) + # Save the object id as the block value if blk is None: blk = self.selected_blk if blk is not None: @@ -2669,14 +2677,25 @@ class TurtleArtWindow(): if value > 0: # catch deprecated format (#2501) self.python_code = None if self.running_sugar: - try: - dsobject = datastore.get(value) - except: # Should be IOError, but dbus error is raised - dsobject = None - debug_output("couldn't get dsobject %s" % value, - self.running_sugar) - if dsobject is not None: - self.load_python_code_from_journal(dsobject, blk) + debug_output(value, self.running_sugar) + # For security reasons, only open files found in + # Python samples directory + if os.path.exists(os.path.join(self.path, value)) and \ + value[0:9] == 'pysamples': + self.selected_blk = blk + self.load_python_code_from_file( + fname=os.path.join(self.path, value), + add_new_block=False) + self.selected_blk = None + else: # or files from the Journal + try: + dsobject = datastore.get(value) + except: # Should be IOError, but dbus error is raised + dsobject = None + debug_output("couldn't get dsobject %s" % value, + self.running_sugar) + if dsobject is not None: + self.load_python_code_from_journal(dsobject, blk) else: self.selected_blk = blk self.load_python_code_from_file(fname=value, diff --git a/TurtleArtActivity.py b/TurtleArtActivity.py index 8d178d0..28cefbf 100644 --- a/TurtleArtActivity.py +++ b/TurtleArtActivity.py @@ -24,6 +24,7 @@ import pygtk pygtk.require('2.0') import gtk import gobject +import dbus import logging _logger = logging.getLogger('turtleart-activity') @@ -58,10 +59,14 @@ from TurtleArt.tacollaboration import Collaboration class TurtleArtActivity(activity.Activity): + ''' Activity subclass for Turtle Art ''' def __init__(self, handle): - ''' Activity subclass for Turtle Art ''' - super(TurtleArtActivity, self).__init__(handle) + ''' Set up the toolbars, canvas, sharing, etc. ''' + try: + super(TurtleArtActivity, self).__init__(handle) + except dbus.exceptions.DBusException, e: + _logger.error(str(e)) self._check_ver_change(get_path(activity, 'data')) self._setup_visibility_handler() diff --git a/pysamples/sensors.py b/pysamples/sensors.py new file mode 100644 index 0000000..b05b6c7 --- /dev/null +++ b/pysamples/sensors.py @@ -0,0 +1,33 @@ +#Copyright (c) 2010-11, Walter Bender, Tony Forster +# +# This Python block returns with the brightness sensor value in the heap +# a range of parameters can be measured, for example, substitute any of +# these strings for the string in the program below. +# +# /sys/devices/platform/olpc-battery.0/power_supply/olpc-battery/current_now +# /sys/devices/platform/olpc-battery.0/power_supply/olpc-battery/voltage_now +# /sys/devices/platform/dcon/backlight/dcon-bl/actual_brightness + + +def myblock(tw, x): # ignores second argument + import os + + # The light sensor is only available on the XO 1.75 + device = '/sys/devices/platform/olpc-ols.0/power_state' + + if os.path.exists(device): + fh = open(device) + string = fh.read() + fh.close() + tw.lc.heap.append(float(string)) # append as a float value to the heap + else: + tw.lc.heap.append(-1) + +# If you can work out how to use them... +# accelerometer: /dev/input/event0 ??? +# power button: /dev/input/event1 +# lid switch: /dev/input/event2 +# ebook: /dev/input/event3 +# headphone jack: /dev/input/event7 +# microphone jack: /dev/input/event8 +# rotate, cursor, and game pad keys: /dev/input/event10 |