Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/tasetup.py
diff options
context:
space:
mode:
authorWalter Bender <walter@walter-laptop.(none)>2009-02-02 18:26:02 (GMT)
committer Walter Bender <walter@walter-laptop.(none)>2009-02-02 18:26:02 (GMT)
commit3a6635f5b36142412739ef5f76aa6bcab5ebc678 (patch)
tree1713ba853ef4d5093e7cc1ed4bd44fcf07d52029 /tasetup.py
parente518308ac3890a625d363c07df2a88924bf3ea23 (diff)
rebase on TAPortfolio
Diffstat (limited to 'tasetup.py')
-rw-r--r--tasetup.py216
1 files changed, 140 insertions, 76 deletions
diff --git a/tasetup.py b/tasetup.py
index d03dd05..77ce0fb 100644
--- a/tasetup.py
+++ b/tasetup.py
@@ -24,6 +24,7 @@ import gtk
import gobject
import os
class taProto: pass
+import time
from gettext import gettext as _
@@ -39,6 +40,7 @@ def strcheck(new, old):
try: str(new); return new
except ValueError,e : return old
+# proto name, primitive name, dock details, arguments
selectors = (
('turtle', 55,
(('clean','clean','noarg'),
@@ -49,9 +51,13 @@ selectors = (
('arc','arc','twoargs',90,100),
('setxy','setxy','twoargs',0,0),
('seth','seth','onearg',0),
+ ('write','write','1sarg',_('text'),32),
+ ('image','insertimage','image','None'),
('xcor','xcor','num'),
('ycor','ycor','num'),
- ('heading','heading','num'))),
+ ('heading','heading','num'),
+ # not on palette, but needed by write
+ ('journal','','media','','',''))),
('pen', 55,
(('penup','penup','noarg'),
('pendown','pendown','noarg'),
@@ -59,17 +65,20 @@ selectors = (
('setcolor','setcolor','1arg',0),
('setshade','setshade','1arg',50),
('fillscreen','fillscreen','twoargs',60,80),
+ ('settextcolor','settextcolor','1arg',0),
('pensize','pensize','num'),
('color','color','num'),
('shade','shade','num'))),
('numbers', 55,
(('number','','num',100,float,numcheck),
- ('plus','+','ari'),
- ('minus','-','ari'),
- ('product','*','ari'),
- ('division','/','ari'),
- ('remainder','%','ari2'),
+ ('plus2','plus','newari'),
+ ('minus2','minus','newari2'),
+ ('product2','product','newari'),
+ ('division2','division','newari2'),
+ ('remainder2','mod','newari2'),
('sqrt','sqrt','sqrt',100),
+ ('identity','id','id'),
+ ('identity2','id','id2'),
('random','random','random',0,100),
('greater','greater?','comp'),
('less','less?','comp'),
@@ -77,7 +86,13 @@ selectors = (
('and','and','and'),
('or','or','and'),
('not','not','not'),
- ('print','print','onearg'))),
+ ('print','print','onearg'),
+ # not selectable, but here for backward compatability
+ ('minus','-','ari'),
+ ('product','*','ari'),
+ ('division','/','ari'),
+ ('remainder','%','ari2'),
+ ('plus','+','ari'))),
('sensors', 55,
(('volume','sensor_val0','num'),
('pitch','sensor_val1','num'),
@@ -93,7 +108,8 @@ selectors = (
('hspace','nop','hspace'),
('vspace','nop','vspace'))),
('myblocks', 55,
- (('hat1','nop1','start'),
+ (('start','nop','start'),
+ ('hat1','nop1','start'),
('stack1','stack1','noarg'),
('hat2','nop2','start'),
('stack2','stack2','noarg'),
@@ -103,91 +119,157 @@ selectors = (
('box1','box1','num'),
('storeinbox2','storeinbox2','1arg'),
('box2','box2','num'),
- ('storeinbox','storeinbox','1sarg',100,_('box')),
+ ('storeinbox','storeinbox','1sarg',_('box'),100),
('box','box','nfuncs',_('box')),
- ('string','','string',_('name'),str,strcheck),
+ ('string','','string',_('name'),str,strcheck), #'string'
('push','push','onearg'),
('pop','pop','num'),
('printheap','heap','noarg2'),
('clearheap','emptyheap','noarg2'))))
-toolbaritems = (
- ('stopit',75),
- ('eraser',75),
- ('hideshow',75),
- ('run',75),
- ('step',75))
-
dockdetails = {
'noarg': (('flow',True,37,5),('flow',False,37,44)),
'noarg2': (('flow',True,37,5),('flow',False,37,59)),
'onearg': (('flow',True,37,5),('num',False,74,21),('flow',False,37,44)),
'1arg': (('flow',True,37,5),('num',False,74,29),('flow',False,37,59)),
- 'twoargs': (('flow',True,37,5),('num',False,74,21),('num',False,74,58),('flow',False,37,81)),
- 'forever': (('flow',True,37,5),('flow',False,118,19,'['),('unavailable',False,0,0,']')),
- 'repeat': (('flow',True,37,5),('num',False,86,21),('flow',False,132,54,'['),('flow',False,37,95,']')),
+ 'twoargs': (('flow',True,37,5),('num',False,74,21),('num',False,74,58), \
+ ('flow',False,37,81)),
+ 'forever': (('flow',True,37,5),('flow',False,118,19,'['), \
+ ('unavailable',False,0,0,']')),
+ 'repeat': (('flow',True,37,5),('num',False,86,21), \
+ ('flow',False,132,54,'['),('flow',False,37,95,']')),
'num': (('num',True,0,12),('numend',False,105,12)),
- 'if': (('flow',True,37,5),('logi+',False,80,31),('flow',False,132,79,'['),('flow',False,37,120,']')),
- 'ifelse': (('flow',True,37,5),('logi+',False,80,31),('flow',False,132,79,'['),('flow',False,217,79,']['),('flow',False,37,120,']')),
+ 'if': (('flow',True,37,5),('logi+',False,80,31),
+ ('flow',False,132,79,'['),('flow',False,37,120,']')),
+ 'ifelse': (('flow',True,37,5),('logi+',False,80,31), \
+ ('flow',False,132,79,'['),('flow',False,217,79,']['), \
+ ('flow',False,37,120,']')),
'ari': (('numend',True,12,20),('num',False,39,20)),
+ 'newari': (('num',True,0,36),('num',False,40,20),('num',False,40,53)),
+ 'newari2': (('num',True,0,36),('num',False,40,20),('num',False,59,53)),
'ari2': (('numend',True,12,20),('num',False,51,20)),
'sqrt': (('num',True,0,20),('num',False,42,20)),
'stop': (('flow',True,37,5),('unavailable',False,0,0)),
- 'comp': (('logi+',True,0,21,'('),('num',False,32,21),('num',False,181,21),('logi-',False,320,21,')')),
- 'random': (('num',True,0,31,'('),('num',False,28,31),('num',False,150,31),('numend',False,279,31,')')),
+ 'comp': (('logi+',True,0,21,'('),('num',False,32,21), \
+ ('num',False,181,21),('logi-',False,320,21,')')),
+ 'random': (('num',True,0,31,'('),('num',False,28,31), \
+ ('num',False,150,31),('numend',False,279,31,')')),
'and': (('logi-',True,28,24),('logi+',False,64,24)),
'vspace': (('flow',True,37,5),('flow',False,37,74)),
'hspace': (('flow',True,37,14),('flow',False,128,13)),
- 'not': (('logi+',True,0,24),('unavailable',False,0,0),('logi+',False,55,24)),
+ 'id': (('num',True,0,12),('num',False,40,40)),
+ 'id2': (('num',True,0,48),('num',False,40,19)),
+ 'lock': (('flow',True,37,514),('flow',False,235,13)),
+ 'not': (('logi+',True,0,24),('unavailable',False,0,0), \
+ ('logi+',False,55,24)),
'start': (('start',True,50,0),('flow',False,49,55)),
'string': (('string',True,0,11),('stringend',False,105,11)),
- 'nfuncs': (('num',True,0,17),('string',False,20,17),('numend',False,140,17)),
- 'starts': (('start',True,50,0),('string',False,22,38),('flow',False,75,75)),
- 'sarg': (('flow',True,37,5),('string',False,12,23),('flow',False,37,44)),
- '1sarg': (('flow',True,37,5),('num',False,130,23),('string',False,13,23),('flow',False,37,44)),
+ 'nfuncs': (('num',True,0,17),('string',False,18,16), \
+ ('numend',False,128,17)),
+ 'starts': (('start',True,50,0),('string',False,21,38), \
+ ('flow',False,75,75)),
+ 'sarg': (('flow',True,37,5),('string',False,12,23), \
+ ('flow',False,37,44)),
+ '1sarg': (('flow',True,37,5),('string',False,12,22), \
+ ('num',False,130,23),('flow',False,37,44)),
+ 'myfunc': (('num',True,0,23),('string',False,24,22), \
+ ('num',False,142,21)),
+ 'media': (('media',True,0,27),('mediaend',False,75,27)),
+ 'text': (('media',True,0,27),('mediaend',False,75,27)),
+ 'audio': (('audio',True,0,27),('audioend',False,75,27)),
+ 'tp1': (('flow',True,37,5),('string',False,10,26), \
+ ('media',False,10,73),('flow',False,37,113)),
+ 'tp2': (('flow',True,37,5),('string',False,10,26), \
+ ('media',False,10,73),('media',False,90,73),('flow',False,37,167)),
+ 'tp3': (('flow',True,37,5),('string',False,10,25), \
+ ('string',False,10,51),('string',False,10,77), \
+ ('string',False,10,103),('string',False,10,129), \
+ ('string',False,10,155), ('string',False,10,181), \
+ ('string',False,10,207),('flow',False,37,230)),
+ 'image': (('flow',True,37,5),('media',False,10,48), \
+ ('flow',False,37,89)),
+ 'sound': (('flow',True,37,5),('audio',False,128,29), \
+ ('flow',False,37,55)),
+ 'tp6': (('flow',True,37,5),('string',False,10,26), \
+ ('media',False,10,73),('media',False,10,130),('flow',False,37,167)),
+ 'tp7': (('flow',True,37,5),('string',False,10,26), \
+ ('media',False,10,73),('media',False,90,73),('media',False,10,130), \
+ ('media',False,90,130),('flow',False,37,167)),
+ 'string1': (('flow',True,37,5),('string',False,10,29),('flow',False,37,55))
}
+def count_up(self):
+ time.sleep(1)
+ return True
-def setup_selectors(tw):
+def prep_selectors(tw):
tw.protodict = {}
tw.valdict = {}
tw.defdict = {}
- y = 30
+ tw.y = 30
tw.selbuttons = []
- for s in selectors:
- name,dy,blockdescriptions = s
- cat = setup_selector(tw,name,y, blockdescriptions)
- y += dy
- tw.selbuttons.append(cat)
+
+def setup_selectors(tw,s):
+# for s in selectors:
+# s = selectors[i]
+ name,dy,blockdescriptions = s
+ cat = setup_selector(tw, name, tw.y, blockdescriptions)
+ tw.y += dy
+ tw.selbuttons.append(cat)
+
+def setup_misc(tw):
tw.category_spr = sprNew(tw,0, 0, tw.selbuttons[0].group)
tw.category_spr.type = 'category'
setlayer(tw.category_spr,660)
+ # masks get positioned on top of other blocks
tw.select_mask = sprNew(tw,100,100,load_image(tw.path, '', 'masknumber'))
tw.select_mask.type = 'selectmask'
- tw.select_mask_string = sprNew(tw,100,100,load_image(tw.path, '', 'maskstring'))
+ tw.select_mask_string = sprNew(tw,100,100,load_image(tw.path, '', \
+ 'maskstring'))
tw.select_mask_string.type = 'selectmask'
- tw.hidden_palette_icon = load_image(tw.path, 'toolbar','blocks-')
+ # used to hide the palette
+ tw.hidden_palette_icon = load_image(tw.path, '','blocks-')
+ # media blocks get positioned into other blocks
+ tw.media_shapes = {}
+ tw.media_shapes['texton'] = load_image(tw.path, 'turtle', 'texton')
+ # status shapes get positioned at the bottom of the screen
tw.status_shapes = {}
tw.status_shapes['status'] = load_image(tw.path, '', 'status')
tw.status_shapes['nostack'] = load_image(tw.path, '', 'nostack')
tw.status_shapes['noinput'] = load_image(tw.path, '', 'noinput')
tw.status_shapes['emptyheap'] = load_image(tw.path, '', 'emptyheap')
- # position status shapes at bottom of screen (minus shape height and toolbar height)
- screenh = gtk.gdk.screen_height() - 38 - 120
- tw.status_spr = sprNew(tw,0,screenh,tw.status_shapes['status'],True)
+ tw.status_shapes['nomedia'] = load_image(tw.path, '', 'nomedia')
+ tw.status_shapes['syntaxerror'] = load_image(tw.path, '', 'syntaxerror')
+ # for some reason, the status bar is displayed off screen on the XO
+ if os.path.exists('/sys/power/olpc-pm'):
+ tw.status_spr = sprNew(tw,0,(tw.height-83), \
+ tw.status_shapes['status'],True)
+ else:
+ tw.status_spr = sprNew(tw,0,(tw.height-70), \
+ tw.status_shapes['status'],True)
tw.status_spr.type = 'status'
setlayer(tw.status_spr,400)
+ # everything should be loaded at this point
+ tw.loaded = True
def setup_selector(tw,name,y,blockdescriptions):
+ # selector tabs
offshape = load_image(tw.path,'palette',name+'off')
onshape = load_image(tw.path,'palette',name+'on')
- who = sprNew(tw,143,y,offshape)
- setlayer(who,800)
- who.offshape = offshape
- who.onshape = onshape
- who.group = load_image(tw.path, name,name+'group')
- who.mask = load_image(tw.path, name,name+'mask')
- who.type = 'selbutton'
+ spr = sprNew(tw,143,y,offshape)
+ setlayer(spr,800)
+ spr.offshape = offshape
+ spr.onshape = onshape
+ print 'setting up selector ' + name
+ # some sensor inputs are hardware dependent
+ if name == 'sensors' and os.path.exists('/sys/power/olpc-pm'):
+ spr.group = load_image(tw.path, name,name+'group'+'xo')
+ spr.mask = load_image(tw.path, name,name+'mask'+'xo')
+ else:
+ spr.group = load_image(tw.path, name,name+'group')
+ spr.mask = load_image(tw.path, name,name+'mask')
+ spr.type = 'selbutton'
+ # block prototypes
protos = []
for b in blockdescriptions:
bname,primname,docktype = b[0:3]
@@ -208,38 +290,20 @@ def setup_selector(tw,name,y,blockdescriptions):
else: proto.docks = docktype
tw.protodict[bname] = proto
protos.append(proto)
- who.blockprotos = protos
- return who
-
-def setup_toolbar(tw):
- tw.toolsprs = {}
- # need to adjust to variable screen width (from right to left)
- x,y = gtk.gdk.screen_width(),10
- for s in toolbaritems:
- name,dx= s
- x -= dx
- tw.toolsprs[name]=setup_tool(tw,x,y,name)
- return
-
-def setup_tool(tw,x,y,name):
- offshape = load_image(tw.path, 'toolbar',name+'off')
- onshape = load_image(tw.path, 'toolbar',name+'on')
- who = sprNew(tw,x,y,offshape)
- setlayer(who,800)
- who.offshape = offshape
- who.onshape = onshape
- who.type = 'tool'
- who.blocktype = name
- return who
+ spr.blockprotos = protos
+ return spr
def load_image(path, dir, file):
from sugar.activity import activity
# first try to open the cached image
- # if you fail, open the .svg file and cache the result
- # gtk.gdk.pixbuf_new_from_file_at_size(filename, width, height)
- try: return gtk.gdk.pixbuf_new_from_file(os.path.join(activity.get_activity_root(),"data",file+'.png'))
+ # if you fail, open the .svg file and cache the result as png
+ try:
+ return gtk.gdk.pixbuf_new_from_file( \
+ os.path.join(activity.get_activity_root(),"data",file+'.png'))
except:
- foo = gtk.gdk.pixbuf_new_from_file(os.path.join(path,dir,file+'.svg'))
- foo.save(os.path.join(activity.get_activity_root(),"data",file+'.png'), "png")
+ foo = gtk.gdk.pixbuf_new_from_file(os.path.join(path,dir,file \
+ +'.svg'))
+ foo.save(os.path.join(activity.get_activity_root(),"data",file \
+ +'.png'), "png")
return foo