From 3a6635f5b36142412739ef5f76aa6bcab5ebc678 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Mon, 02 Feb 2009 18:26:02 +0000 Subject: rebase on TAPortfolio --- (limited to 'tasetup.py') 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 -- cgit v0.9.1