Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--TurtleArt/tawindow.py37
-rw-r--r--TurtleArtActivity.py9
-rw-r--r--pysamples/sensors.py33
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