From e6c65d33e68fdfe3b28bff284c62ead374566504 Mon Sep 17 00:00:00 2001 From: Brian Silverman Date: Wed, 30 May 2007 13:28:45 +0000 Subject: Initial import --- (limited to 'turtlesetup.py') diff --git a/turtlesetup.py b/turtlesetup.py new file mode 100755 index 0000000..6525a1c --- /dev/null +++ b/turtlesetup.py @@ -0,0 +1,179 @@ +import pygtk +pygtk.require('2.0') +import gtk +import gobject +import os +#import os.path + +from sprites import * + +selectors = ( + ('turtle', 37, + (('clean','clean','noarg'), + ('forward','forward','onearg',100), + ('back','back','onearg',100), + ('left','left','onearg',90), + ('right','right','onearg',90), + ('arc','arc','twoargs',90,100), + ('setxy','setxy','twoargs',0,0), + ('seth','seth','onearg',0), + ('xcor','xcor','num'), + ('ycor','ycor','num'), + ('heading','heading','num'))), + ('pen', 30, + (('penup','penup','noarg'), + ('pendown','pendown','noarg'), + ('setpensize','setpensize','1arg',5), + ('setcolor','setcolor','1arg',0), + ('setshade','setshade','1arg',50), + ('fillscreen','fillscreen','twoargs',60,80), + ('pensize','pensize','num'), + ('color','color','num'), + ('shade','shade','num'))), + ('numbers', 55, + (('number','','num'), + ('plus','+','ari'), + ('minus','-','ari'), + ('product','*','ari'), + ('division','/','ari'), + ('remainder','%','ari2'), + ('random','random','random',0,100), + ('greater','greater?','comp'), + ('less','less?','comp'), + ('equal','equal?','comp'), + ('and','and','and'), + ('or','or','and'), + ('not','not','not'), + ('print','print','onearg'))), + ('flow', 30, + (('wait','wait','onearg',10), + ('forever','forever','forever'), + ('repeat','repeat','repeat',4), + ('if','if','if'), + ('stopstack','stopstack','stop'), + ('ifelse','ifelse','ifelse'), + ('hspace','nop','hspace'), + ('vspace','nop','vspace'))), + ('myblocks', 46, + (('hat1','nop','start'), + ('stack1','stack1','noarg'), + ('hat2','nop','start'), + ('stack2','stack2','noarg'), + ('storeinbox1','storeinbox1','1arg'), + ('box1','box1','num'), + ('storeinbox2','storeinbox2','1arg'), + ('box2','box2','num')))) + +toolbaritems = ( +# ('new',0,20),('open',70,20), ('save',70,20), + ('hideshow',700, 850),('eraser',54,850), ('stopit',54,850)) +# ('hideshow',200, 2),('eraser',54,3), ('stopit',54,2)) + +dockdetails = { + 'noarg': (('flow',True,37,5),('flow',False,37,44)), + '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,']')), + '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,']')), + 'ari': (('numend',True,12,20),('num',False,39,20)), + 'ari2': (('numend',True,12,20),('num',False,51,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,')')), + '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)), + 'start': (('start',True,50,0),('flow',False,49,55)) +} + +protodict = {} +toolsprs = {} +base_path = None + +class BlockProto: + def __init__(self,name): + self.name = name + + +def setup_selectors(path): + global base_path + base_path = path + y = 25 + categories = [] + for s in selectors: + name,dy,blockdescriptions = s + cat = setup_selector(name,y, blockdescriptions) + y += dy*3/2 + categories.append(cat) + category_spr = Sprite(0, 0, categories[0].group) + category_spr.type = 'category' + category_spr.setlayer(660) + return category_spr, categories, categories[0] + +def setup_selector(name,y,blockdescriptions): + offshape = gtk.gdk.pixbuf_new_from_file(os.path.join(base_path, 'palette',name+'off.gif')) + onshape = gtk.gdk.pixbuf_new_from_file(os.path.join(base_path, 'palette',name+'on.gif')) + who = Sprite(140,y,offshape) + who.setlayer(800) + who.offshape = offshape + who.onshape = onshape + who.group = gtk.gdk.pixbuf_new_from_file(os.path.join(base_path, name,name+'group.gif')) + maskname = os.path.join(base_path, name,name+'mask.gif') + if os.access(maskname, os.F_OK): + who.mask = gtk.gdk.pixbuf_new_from_file(maskname) + else: who.mask = None + who.type = 'selbutton' + protos = [] + for b in blockdescriptions: + bname,primname,docktype = b[0:3] + image = gtk.gdk.pixbuf_new_from_file(os.path.join(base_path, name, bname+'.gif')) + proto = BlockProto(bname) + proto.image = image + proto.primname=primname + proto.defaults=b[3:] + if docktype in dockdetails: proto.docks=dockdetails[docktype] + else: proto.docks = docktype + protodict[bname] = proto + protos.append(proto) + who.blockprotos = protos + return who + +def setup_toolbar(): + x,y = 330,0 + for s in toolbaritems: + name,dx,dy= s + x += dx + setup_tool(x,y + dy,name) + return + +def setup_tool(x,y,name): + offshape = gtk.gdk.pixbuf_new_from_file(os.path.join(base_path, 'toolbar',name+'off.gif')) + onshape = gtk.gdk.pixbuf_new_from_file(os.path.join(base_path, 'toolbar',name+'on.gif')) + who = Sprite(x,y,offshape) + who.setlayer(800) + who.offshape = offshape + who.onshape = onshape + who.type = 'tool' + who.blocktype = name + toolsprs[name] = who + +def setup_project_flap(): + project_flap = { + 'closed': gtk.gdk.pixbuf_new_from_file(os.path.join(base_path, 'toolbar','project-.gif')), + 'open': gtk.gdk.pixbuf_new_from_file(os.path.join(base_path, 'toolbar','project.gif')), + 'mask': gtk.gdk.pixbuf_new_from_file(os.path.join(base_path, 'toolbar','projectmask.gif'))} +# who = Sprite(720,0,project_flap['closed']) + who = Sprite(888,0,project_flap['closed']) + who.type = 'project_flap' + who.setlayer(800) + return project_flap + +def blockproto(name): return protodict[name] + +def toolsprite(name): return toolsprs[name] + -- cgit v0.9.1