Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pysamples/copy_from_heap.py35
-rw-r--r--pysamples/dotted_line.py151
-rw-r--r--pysamples/load_journal_entry_to_heap.py35
-rw-r--r--pysamples/paste_to_heap.py39
-rw-r--r--pysamples/push_mouse_event.py40
-rw-r--r--pysamples/push_time.py37
-rw-r--r--pysamples/save_heap_to_journal_entry.py55
-rw-r--r--pysamples/set_rgb.py50
8 files changed, 442 insertions, 0 deletions
diff --git a/pysamples/copy_from_heap.py b/pysamples/copy_from_heap.py
new file mode 100644
index 0000000..8483fde
--- /dev/null
+++ b/pysamples/copy_from_heap.py
@@ -0,0 +1,35 @@
+#Copyright (c) 2010, Walter Bender, Tony Forster
+
+#Permission is hereby granted, free of charge, to any person obtaining a copy
+#of this software and associated documentation files (the "Software"), to deal
+#in the Software without restriction, including without limitation the rights
+#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+#copies of the Software, and to permit persons to whom the Software is
+#furnished to do so, subject to the following conditions:
+
+#The above copyright notice and this permission notice shall be included in
+#all copies or substantial portions of the Software.
+
+#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+#THE SOFTWARE.
+
+# This procedure is invoked when the user-definable block on the "extras"
+# palette is selected.
+
+def myblock(lc, x):
+
+ ###########################################################################
+ #
+ # Copy heap to clipboard
+ #
+ ###########################################################################
+
+ from gtk import Clipboard
+ from tautils import data_to_string
+
+ Clipboard().set_text(data_to_string(lc.heap))
diff --git a/pysamples/dotted_line.py b/pysamples/dotted_line.py
new file mode 100644
index 0000000..9db7f9d
--- /dev/null
+++ b/pysamples/dotted_line.py
@@ -0,0 +1,151 @@
+#Copyright (c) 2009-10, Walter Bender
+
+#Permission is hereby granted, free of charge, to any person obtaining a copy
+#of this software and associated documentation files (the "Software"), to deal
+#in the Software without restriction, including without limitation the rights
+#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+#copies of the Software, and to permit persons to whom the Software is
+#furnished to do so, subject to the following conditions:
+
+#The above copyright notice and this permission notice shall be included in
+#all copies or substantial portions of the Software.
+
+#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+#THE SOFTWARE.
+
+#
+# This procedure is invoked when the user-definable block on the "extras"
+# palette is selected. Some examples of how to use this block are included
+# below. Try uncommenting an example or write your own Python code.
+#
+# To uncomment code, remove the '# ' in the Python code. Take care to preserve
+# the proper indentations.
+#
+#
+# NOTES:
+#
+# Turtle Art is created in object oriented Python code. This is based
+# around the definition of classes and the creation of object(s) which
+# are instance(s) of that class. These objects then have properties and
+# methods which are defined by their class.
+#
+# See http://docs.python.org/tutorial/classes.html for a description of
+# classes in Python.
+#
+# Class Defined in Instance Created in
+# TurtleArtWindow tawindow.py tw TurtleArtActivity.py
+# LogoCode talogo.py lc tawindow.py
+# TurtleGraphics tacanvas.py canvas tawindow.py
+# Turtles, Turtle taturtle.py turtles tawindow.py,
+# tacanvas.py
+# Blocks, Block tablock.py block_list tawindow.py
+#
+#
+# Class TurtleArtWindow -- useful properties and methods (from within
+# tamyblock.py, lc.tw is the class instance)
+#
+# Methods and data attributes Example
+# set_fullscreen(self) lc.tw.set_fullscreen()
+# Note: Hides the Sugar toolbar
+# set_cartesian(self, flag) lc.tw.set_cartesian(True)
+# Note: True will make the overlay visible;
+# False will make it invisible
+# set_polar(self, flag) lc.tw.set_polar(True)
+# Note: True will make the overlay visible;
+# False will make it invisible
+# hideshow_button(self, flag) lc.tw.hideshow_button()
+# Note: Toggles visibility of blocks and palettes
+# self.active_turtle lc.tw.active_turtle
+# Note: The active turtle instance
+#
+#
+# Class TurtleGraphics -- useful properties and methods (from within
+# tamyblock.py, lc.tw.canvas is the class instance)
+#
+# Methods and data attributes Example
+# clearscreen(self) lc.tw.canvas.clearscreen()
+# Note: Clears the screen and resets all turtle and
+# pen attributes to default values
+# setpen(self, flag) lc.tw.canvas.setpen(True)
+# Note: True will set the pen "down", enabling drawing;
+# False will set the pen "up"
+# forward(self, n) lc.tw.canvas.forward(100)
+# Note: Move the turtle forward 100 units
+# arc(self, a, r) lc.tw.canvas.arc(120, 50)
+# Note: Move the turtle along an arc of 120 degrees
+# (clockwise) and radius of 50 units
+# setheading(self, a) lc.tw.canvas.setheading(180)
+# Note: Set the turtle heading to 180
+# (towards the bottom of the screen)
+# self.heading lc.tw.canvas.heading
+# Note: The current heading
+# setpensize(self, n) lc.tw.canvas.setpensize(25)
+# Note: Set the turtle pensize to 25 units
+# self.pensize lc.tw.canvas.pensize
+# Note: The current pensize
+# setcolor(self, c) lc.tw.canvas.color(70)
+# Note: Set the pen color to 70 (blue)
+# self.color lc.tw.canvas.color
+# Note: The current pen color
+# setshade(self, s) lc.tw.canvas.shade(50)
+# Note: Set the pen shade to 50
+# self.shade lc.tw.canvas.shade
+# Note: The current pen shade
+# fillscreen(self, c, s) lc.tw.canvas.fillscreen(70, 90)
+# Note: Fill the screen with color 70, shade 90 (light blue)
+# setxy(self, x, y) lc.tw.canvas.setxy(100,100)
+# Note: Move the turtle to position (100, 100)
+# self.xcor lc.tw.canvas.xcor
+# Note: The current x coordinate of the turtle
+# (scaled to current units)
+# self.ycor lc.tw.canvas.ycor
+# Note: The current y coordinate of the turtle
+# (scaled to current units)
+# self.set_turtle(name) lc.tw.canvas.set_turtle(1)
+# Note: Set the current turtle to turtle '1'
+#
+#
+# Other useful Python functions
+# Module Example
+# from math import pow pow(2,3) returns 2 to the 3rd power
+# Note: See http://docs.python.org/library/math.html
+# from math import sin, pi sin(45*pi/180) returns sin of 45 (0.707)
+# Note: See http://docs.python.org/library/math.html
+# from time import localtime localtime().tm_hour returns the current hour
+# Note: See http://docs.python.org/library/time.html
+# lc.heap.append(data) adds data to the heap
+# Note: See http://docs.python.org/tutorial/datastructures.html
+# data = lc.heap.pop(-1) pops data off the heap
+# Note: See http://docs.python.org/tutorial/datastructures.html
+#
+
+def myblock(lc, x):
+
+ ###########################################################################
+ #
+ # Draw a dotted line of length x.
+ #
+ ###########################################################################
+
+ try: # make sure x is a number
+ x = float(x)
+ except ValueError:
+ return
+ if lc.tw.canvas.pendown:
+ dist = 0
+ while dist+lc.tw.canvas.pensize < x: # repeat drawing dots
+ lc.tw.canvas.setpen(True)
+ lc.tw.canvas.forward(1)
+ lc.tw.canvas.setpen(False)
+ lc.tw.canvas.forward((lc.tw.canvas.pensize*2)-1)
+ dist += (lc.tw.canvas.pensize*2)
+ lc.tw.canvas.forward(x-dist) # make sure we have moved exactly x
+ lc.tw.canvas.setpen(True)
+ else:
+ lc.tw.canvas.forward(x)
+ return
diff --git a/pysamples/load_journal_entry_to_heap.py b/pysamples/load_journal_entry_to_heap.py
new file mode 100644
index 0000000..7416554
--- /dev/null
+++ b/pysamples/load_journal_entry_to_heap.py
@@ -0,0 +1,35 @@
+#Copyright (c) 2010, Walter Bender, Tony Forster
+
+#Permission is hereby granted, free of charge, to any person obtaining a copy
+#of this software and associated documentation files (the "Software"), to deal
+#in the Software without restriction, including without limitation the rights
+#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+#copies of the Software, and to permit persons to whom the Software is
+#furnished to do so, subject to the following conditions:
+
+#The above copyright notice and this permission notice shall be included in
+#all copies or substantial portions of the Software.
+
+#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+#THE SOFTWARE.
+
+# This procedure is invoked when the user-definable block on the "extras"
+# palette is selected.
+
+def myblock(lc, x):
+
+ ###########################################################################
+ #
+ # Load heap from journal
+ #
+ ###########################################################################
+
+ from tautils import chooser
+
+ # Choose a datastore object and push data to heap (Sugar only)
+ chooser(lc.tw.parent, '', lc.push_file_data_to_heap)
diff --git a/pysamples/paste_to_heap.py b/pysamples/paste_to_heap.py
new file mode 100644
index 0000000..9255a93
--- /dev/null
+++ b/pysamples/paste_to_heap.py
@@ -0,0 +1,39 @@
+#Copyright (c) 2010, Walter Bender, Tony Forster
+
+#Permission is hereby granted, free of charge, to any person obtaining a copy
+#of this software and associated documentation files (the "Software"), to deal
+#in the Software without restriction, including without limitation the rights
+#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+#copies of the Software, and to permit persons to whom the Software is
+#furnished to do so, subject to the following conditions:
+
+#The above copyright notice and this permission notice shall be included in
+#all copies or substantial portions of the Software.
+
+#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+#THE SOFTWARE.
+
+# This procedure is invoked when the user-definable block on the "extras"
+# palette is selected.
+
+def myblock(lc, x):
+
+ ###########################################################################
+ #
+ # Paste from clipboard to heap
+ #
+ ###########################################################################
+
+ from gtk import Clipboard
+ from tautils import data_from_string
+
+ text = Clipboard().wait_for_text()
+ if text is not None:
+ for val in data_from_string(text):
+ lc.heap.append(val)
+ lc.update_label_value('pop', val)
diff --git a/pysamples/push_mouse_event.py b/pysamples/push_mouse_event.py
new file mode 100644
index 0000000..a79f53e
--- /dev/null
+++ b/pysamples/push_mouse_event.py
@@ -0,0 +1,40 @@
+#Copyright (c) 2009-10, Walter Bender, Tony Forster
+
+#Permission is hereby granted, free of charge, to any person obtaining a copy
+#of this software and associated documentation files (the "Software"), to deal
+#in the Software without restriction, including without limitation the rights
+#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+#copies of the Software, and to permit persons to whom the Software is
+#furnished to do so, subject to the following conditions:
+
+#The above copyright notice and this permission notice shall be included in
+#all copies or substantial portions of the Software.
+
+#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+#THE SOFTWARE.
+
+#
+# This procedure is invoked when the user-definable block on the "extras"
+# palette is selected.
+
+def myblock(lc, x):
+
+ ###########################################################################
+ #
+ # Push mouse event to stack
+ #
+ ###########################################################################
+
+ if lc.tw.mouse_flag == 1:
+ # push y first so x will be popped first
+ lc.heap.append(lc.tw.mouse_y)
+ lc.heap.append(lc.tw.mouse_x)
+ lc.heap.append(1) # mouse event
+ lc.tw.mouse_flag = 0
+ else:
+ lc.heap.append(0) # no mouse event
diff --git a/pysamples/push_time.py b/pysamples/push_time.py
new file mode 100644
index 0000000..ae22684
--- /dev/null
+++ b/pysamples/push_time.py
@@ -0,0 +1,37 @@
+#Copyright (c) 2009-10, Walter Bender
+
+#Permission is hereby granted, free of charge, to any person obtaining a copy
+#of this software and associated documentation files (the "Software"), to deal
+#in the Software without restriction, including without limitation the rights
+#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+#copies of the Software, and to permit persons to whom the Software is
+#furnished to do so, subject to the following conditions:
+
+#The above copyright notice and this permission notice shall be included in
+#all copies or substantial portions of the Software.
+
+#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+#THE SOFTWARE.
+
+# This procedure is invoked when the user-definable block on the "extras"
+# palette is selected.
+
+def myblock(lc, x):
+
+ ###########################################################################
+ #
+ # Push hours, minutes, seconds onto the FILO.
+ # Use three 'pop' blocks to retrieve these values.
+ # Note: because we use a FILO (first in, last out heap),
+ # the first value you pop off of the FILO will be seconds.
+ #
+ ###########################################################################
+
+ lc.heap.append(localtime().tm_hour)
+ lc.heap.append(localtime().tm_min)
+ lc.heap.append(localtime().tm_sec)
diff --git a/pysamples/save_heap_to_journal_entry.py b/pysamples/save_heap_to_journal_entry.py
new file mode 100644
index 0000000..c4f2d50
--- /dev/null
+++ b/pysamples/save_heap_to_journal_entry.py
@@ -0,0 +1,55 @@
+#Copyright (c) 2010, Walter Bender, Tony Forster
+
+#Permission is hereby granted, free of charge, to any person obtaining a copy
+#of this software and associated documentation files (the "Software"), to deal
+#in the Software without restriction, including without limitation the rights
+#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+#copies of the Software, and to permit persons to whom the Software is
+#furnished to do so, subject to the following conditions:
+
+#The above copyright notice and this permission notice shall be included in
+#all copies or substantial portions of the Software.
+
+#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+#THE SOFTWARE.
+
+# This procedure is invoked when the user-definable block on the "extras"
+# palette is selected.
+
+def myblock(lc, x):
+
+ ###########################################################################
+ #
+ # Save heap to journal (Sugar only)
+ #
+ ###########################################################################
+
+ import os.path
+ from gettext import gettext as _
+
+ from sugar.activity import activity
+ from sugar.datastore import datastore
+ from sugar import profile
+
+ from tautils import get_path, data_to_file
+
+ # Save JSON-encoded heap to temporary file
+ heap_file = os.path.join(get_path(activity, 'instance'), str(x) + '.txt')
+ data_to_file(lc.heap, heap_file)
+
+ # Create a datastore object
+ dsobject = datastore.create()
+
+ # Write any metadata (specifically set the title of the file
+ # and specify that this is a plain text file).
+ dsobject.metadata['title'] = str(x)
+ dsobject.metadata['icon-color'] = profile.get_color().to_string()
+ dsobject.metadata['mime_type'] = 'text/plain'
+ dsobject.set_file_path(heap_file)
+ datastore.write(dsobject)
+ dsobject.destroy()
diff --git a/pysamples/set_rgb.py b/pysamples/set_rgb.py
new file mode 100644
index 0000000..f524ec6
--- /dev/null
+++ b/pysamples/set_rgb.py
@@ -0,0 +1,50 @@
+#Copyright (c) 2009-10, Walter Bender
+
+#Permission is hereby granted, free of charge, to any person obtaining a copy
+#of this software and associated documentation files (the "Software"), to deal
+#in the Software without restriction, including without limitation the rights
+#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+#copies of the Software, and to permit persons to whom the Software is
+#furnished to do so, subject to the following conditions:
+
+#The above copyright notice and this permission notice shall be included in
+#all copies or substantial portions of the Software.
+
+#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+#THE SOFTWARE.
+
+#
+# This procedure is invoked when the user-definable block on the "extras"
+# palette is selected and expanded to 3 arguments.
+
+def myblock(lc, x):
+
+ ###########################################################################
+ #
+ # Set rgb color from values
+ #
+ ###########################################################################
+
+ # assuming x is an array [r, g, b]
+ b = int(x[2])
+ while b < 0:
+ b += 256
+ while b > 255:
+ b -= 256
+ g = int(x[1])
+ while g < 0:
+ g += 256
+ while g > 255:
+ g -= 256
+ r = int(x[0])
+ while r < 0:
+ r += 256
+ while r > 255:
+ r -= 256
+ rgb = "#%02x%02x%02x" % (r,g,b)
+ lc.tw.canvas.fgcolor = lc.tw.canvas.cm.alloc_color(rgb)