Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Bender <walter@walter-laptop.(none)>2009-10-15 07:48:32 (GMT)
committer Walter Bender <walter@walter-laptop.(none)>2009-10-15 07:48:32 (GMT)
commit6b2bf1a50428cdd4e9a9aa3bbc76b7f03c05bb90 (patch)
tree068a7206b18e6ec4b451557c4cf60ff2737974bb
parent818e3268ad0ea663b35d86b5d8aa8c70420a8b4e (diff)
pushing v74 patches
-rw-r--r--TurtleArtActivity.py6
-rw-r--r--talogo.py27
-rw-r--r--taproject.py29
-rw-r--r--tasetup.py2
-rw-r--r--tawindow.py67
-rwxr-xr-xturtleart.py4
6 files changed, 73 insertions, 62 deletions
diff --git a/TurtleArtActivity.py b/TurtleArtActivity.py
index f7b030b..129d17d 100644
--- a/TurtleArtActivity.py
+++ b/TurtleArtActivity.py
@@ -375,6 +375,8 @@ class TurtleArtActivity(activity.Activity):
if self._jobject and self._jobject.file_path:
self.read_file(self._jobject.file_path)
+ else: # if new, load a start brick onto the canvas
+ tawindow.load_start(self.tw)
"""
A simplistic sharing model: the sharer is the master;
@@ -487,7 +489,7 @@ class TurtleArtActivity(activity.Activity):
def _do_load_python_cb(self, button):
self.load_python.set_icon("pippy-openon")
- self._import_py()
+ self.import_py()
gobject.timeout_add(250,self.load_python.set_icon, "pippy-openoff")
return
@@ -511,7 +513,7 @@ class TurtleArtActivity(activity.Activity):
return
# Import Python code from the Journal to load into "myblock"
- def _import_py(self):
+ def import_py(self):
from sugar.graphics.objectchooser import ObjectChooser
chooser = ObjectChooser('Python code', None, gtk.DIALOG_MODAL | \
gtk.DIALOG_DESTROY_WITH_PARENT)
diff --git a/talogo.py b/talogo.py
index fdee6c4..a49b3f9 100644
--- a/talogo.py
+++ b/talogo.py
@@ -618,23 +618,23 @@ def callmyfunc(lc, f, x):
def show_picture(lc, media, x, y, w, h):
if media == "" or media[6:] == "":
-# raise logoerror("#nomedia")
- print "no media"
+ # raise logoerror("#nomedia")
+ pass
elif media[6:] != "None":
try:
dsobject = datastore.get(media[6:])
except:
raise logoerror("#nomedia")
# check to see if it is a movie
- print dsobject.file_path
- print "object has file suffix of: " + dsobject.file_path[-4:]
+ # print dsobject.file_path
+ # print "object has file suffix of: " + dsobject.file_path[-4:]
if dsobject.file_path[-4:] == '.ogv' or \
dsobject.file_path[-4:] == '.vob' or \
dsobject.file_path[-4:] == '.mp4' or \
dsobject.file_path[-4:] == '.wmv' or \
dsobject.file_path[-4:] == '.mov':
- print "playing movie x:" + str(x) + " y:" + str(y) + " w:" \
- + str(w) + " h:" + str(h)
+ # print "playing movie x:" + str(x) + " y:" + str(y) + " w:" + \
+ # str(w) + " h:" + str(h)
play_dsobject(lc, dsobject, int(x), int(y), int(w), int(h))
else:
pixbuf = get_pixbuf_from_journal(dsobject, int(w), int(h))
@@ -650,12 +650,11 @@ def get_pixbuf_from_journal(dsobject,w,h):
except:
try:
# print "Trying preview..."
- pixbufloader = gtk.gdk.pixbuf_loader_new_with_mime_type \
- ('image/png')
+ pixbufloader = \
+ gtk.gdk.pixbuf_loader_new_with_mime_type('image/png')
pixbufloader.set_size(min(300,int(w)),min(225,int(h)))
pixbufloader.write(dsobject.metadata['preview'])
pixbufloader.close()
-# gtk.gdk_pixbuf_loader_close(pixbufloader)
pixbuf = pixbufloader.get_pixbuf()
except:
# print "No preview"
@@ -664,8 +663,8 @@ def get_pixbuf_from_journal(dsobject,w,h):
def show_description(lc, media, x, y, w, h):
if media == "" or media[6:] == "":
-# raise logoerror("#nomedia")
- print "no media"
+ # raise logoerror("#nomedia")
+ pass
elif media[6:] != "None":
try:
dsobject = datastore.get(media[6:])
@@ -678,7 +677,7 @@ def show_description(lc, media, x, y, w, h):
def draw_title(lc,title,x,y):
draw_text(lc.tw.turtle,title,int(x),int(y),lc.title_height, \
- lc.tw.turtle.width-x)
+ lc.tw.turtle.width-x)
def calc_position(lc,t):
w,h,x,y,dx,dy = lc.templates[t]
@@ -1007,8 +1006,8 @@ def kbinput(lc):
else:
try:
lc.keyboard = {'Escape': 27, 'space': 32, ' ': 32, 'Return': 13, \
- 'KP_Up': 2, 'KP_Down': 4, 'KP_Left': 1, 'KP_Right': 3,} \
- [lc.tw.keypress]
+ 'KP_Up': 2, 'KP_Down': 4, 'KP_Left': 1, \
+ 'KP_Right': 3,}[lc.tw.keypress]
except:
lc.keyboard = 0
lc.tw.keypress = ""
diff --git a/taproject.py b/taproject.py
index 37b0964..05c2a87 100644
--- a/taproject.py
+++ b/taproject.py
@@ -45,12 +45,13 @@ import os.path
from tasprites import *
from taturtle import *
from talogo import stop_logo
+from talogo import get_pixbuf_from_journal
try:
from sugar.datastore import datastore
except:
pass
-nolabel = ['audiooff', 'descriptionoff','journal']
+nolabel = ['audiooff', 'descriptionoff', 'journal']
shape_dict = {'journal':'texton', \
'descriptionoff':'decson', \
'audiooff':'audioon'}
@@ -157,7 +158,7 @@ def load_spr(tw,b):
btype, label = btype
if btype == 'title': # for backward compatibility
btype = 'string'
- if btype == 'journal' or btype == 'audiooff':
+ if btype == 'journal' or btype == 'audiooff' or btype == 'descriptionoff':
media = label
label = None
proto = tw.protodict[btype]
@@ -173,7 +174,6 @@ def load_spr(tw,b):
spr.ds_id = dsobject.object_id
setimage(spr, tw.media_shapes[shape_dict[spr.proto.name]])
if spr.proto.name == 'journal':
- from talogo import get_pixbuf_from_journal
pixbuf = get_pixbuf_from_journal \
(dsobject,spr.width,spr.height)
if pixbuf is not None:
@@ -233,8 +233,8 @@ def save_data(tw,fname):
f.close()
# Used to send data across a shared session
-def save_string(tw):
- data = assemble_data_to_save(tw)
+def save_string(tw,save_turtle=True):
+ data = assemble_data_to_save(tw,save_turtle)
if _old_Sugar_system is True:
text = json.write(data)
else:
@@ -243,7 +243,7 @@ def save_string(tw):
text = io.getvalue()
return text
-def assemble_data_to_save(tw):
+def assemble_data_to_save(tw,save_turtle=True):
bs = blocks(tw)
data = []
for i in range(len(bs)): bs[i].id=i
@@ -260,9 +260,10 @@ def assemble_data_to_save(tw):
connections = None
data.append((b.id,name,b.x-tw.turtle.canvas.x, \
b.y-tw.turtle.canvas.y,connections))
- data.append((-1,'turtle',
- tw.turtle.xcor,tw.turtle.ycor,tw.turtle.heading,
- tw.turtle.color,tw.turtle.shade,tw.turtle.pensize))
+ if save_turtle is True:
+ data.append((-1,'turtle',
+ tw.turtle.xcor,tw.turtle.ycor,tw.turtle.heading,
+ tw.turtle.color,tw.turtle.shade,tw.turtle.pensize))
return data
# serialize a stack to save to the clipboard
@@ -279,7 +280,6 @@ def serialize_stack(tw):
# find the stack under the cursor and serialize it
def assemble_stack_to_clone(tw):
(x,y) = tw.window.get_pointer()
- # print x,y
spr = findsprite(tw,(x,y))
bs = findgroup(find_top_block(spr))
@@ -336,7 +336,12 @@ def findgroup(b):
def find_top_block(spr):
b = spr
- while b.connections[0]!=None:
- b=b.connections[0]
+ if hasattr(b,"connections"):
+ while b.connections[0]!=None:
+ b=b.connections[0]
return b
+# start a new project with a start brick
+def load_start(tw):
+ clone_stack(tw,str("[[0,\"start\",250,30,[null,null]]]"))
+
diff --git a/tasetup.py b/tasetup.py
index d2a1de1..77c5be9 100644
--- a/tasetup.py
+++ b/tasetup.py
@@ -315,7 +315,7 @@ def setup_selector(tw,name,y,blockdescriptions):
proto.name = bname
proto.image = image
proto.primname=primname
- if primname=='':
+ if primname=='': # handle definable blocks differently
tw.valdict[docktype]=bname
tw.defdict[bname]=b[3]
proto.eval=b[4]
diff --git a/tawindow.py b/tawindow.py
index 3fe3f8e..0578909 100644
--- a/tawindow.py
+++ b/tawindow.py
@@ -103,7 +103,6 @@ def twNew(win, path, lang, parent=None):
tw.dead_key = ""
tw.area = win.window
tw.gc = tw.area.new_gc()
- # tw.window.textentry = gtk.Entry()
# on an OLPC-XO-1, there is a scaling factor
if os.path.exists('/sys/power/olpc-pm'):
tw.lead = 1.6
@@ -425,33 +424,39 @@ def button_release(tw, x, y, verbose=False):
elif tw.defdict.has_key(spr.proto.name):
tw.selected_block = spr
if spr.proto.name=='string':
- # entry = gtk.Entry()
move(tw.select_mask_string, (spr.x-5,spr.y-5))
setlayer(tw.select_mask_string, 660)
tw.firstkey = True
elif spr.proto.name in importblocks:
import_from_journal(tw, spr)
+ # if Python block is clicked before any code has been loaded
+ # initiate the chooser dialog
+ elif spr.proto.name=='nop' and tw.myblock==None:
+ tw.activity.import_py()
else: run_stack(tw, spr)
def import_from_journal(tw, spr):
- chooser = ObjectChooser('Choose image', None, gtk.DIALOG_MODAL | \
- gtk.DIALOG_DESTROY_WITH_PARENT)
- try:
- result = chooser.run()
- if result == gtk.RESPONSE_ACCEPT:
- dsobject = chooser.get_selected_object()
- # change block graphic to indicate that object is "loaded"
- if spr.proto.name == 'journal':
- load_image(tw, dsobject, spr)
- elif spr.proto.name == 'audiooff':
- setimage(spr,tw.media_shapes['audioon'])
- else:
- setimage(spr, tw.media_shapes['decson'])
- spr.ds_id = dsobject.object_id
- dsobject.destroy()
- finally:
- chooser.destroy()
- del chooser
+ if hasattr(tw,"activity"):
+ chooser = ObjectChooser('Choose image', None,\
+ gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT)
+ try:
+ result = chooser.run()
+ if result == gtk.RESPONSE_ACCEPT:
+ dsobject = chooser.get_selected_object()
+ # change block graphic to indicate that object is "loaded"
+ if spr.proto.name == 'journal':
+ load_image(tw, dsobject, spr)
+ elif spr.proto.name == 'audiooff':
+ setimage(spr,tw.media_shapes['audioon'])
+ else:
+ setimage(spr, tw.media_shapes['decson'])
+ spr.ds_id = dsobject.object_id
+ dsobject.destroy()
+ finally:
+ chooser.destroy()
+ del chooser
+ else:
+ print "Journal Object Chooser unavailable from outside of Sugar"
# Replace Journal block graphic with preview image
def load_image(tw, picture, spr):
@@ -770,17 +775,17 @@ def xy(event):
return map(int, event.get_coords())
def showPopup(block_name,tw):
- if hasattr(tw,"activity"):
- if block_name in blocks_dict:
- block_name_s = _(blocks_dict[block_name])
- else:
- block_name_s = _(block_name)
-
- try:
- label = block_name_s + ": " + hover_dict[block_name]
- except:
- label = block_name_s
- # Use new toolbar
+ if blocks_dict.has_key(block_name):
+ block_name_s = _(blocks_dict[block_name])
+ else:
+ block_name_s = _(block_name)
+ if hover_dict.has_key(block_name):
+ label = block_name_s + ": " + hover_dict[block_name]
+ else:
+ label = block_name_s
+ if hasattr(tw, "activity"):
tw.activity.hover_help_label.set_text(label)
tw.activity.hover_help_label.show()
+ elif hasattr(tw, "win"):
+ tw.win.set_title(_("Turtle Art") + " — " + label)
return 0
diff --git a/turtleart.py b/turtleart.py
index df871fa..f9b9ce1 100755
--- a/turtleart.py
+++ b/turtleart.py
@@ -67,7 +67,7 @@ class TurtleMain():
if not lang:
lang = 'en'
lang = lang[0:2]
-
+
win = gtk.Window(gtk.WINDOW_TOPLEVEL)
win.maximize()
win.set_title(_("Turtle Art"))
@@ -136,7 +136,7 @@ class TurtleMain():
win.show_all()
self.tw = twNew(canvas, os.path.abspath('.'), lang)
- self.tw.win = canvas
+ self.tw.win = win
def _do_open_cb(self, widget):
load_file(self.tw, True)