annotate editgraph.py @ 75:0083b2f7b3c7

Partially working implementation of List. Modified build scripts to allow use of other compilers. Fixed some bugs involving method implementations on different types returning different numbers of outputs. Added Fold to the 'builtins' in the comipler.
author Mike Pavone <pavone@retrodev.com>
date Tue, 06 Jul 2010 07:52:59 -0400
parents 0534bb8ee7ad
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1 import Tkinter
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
2 from tkFont import Font
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
3
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
4 class Call(object):
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
5 def __init__(self, canvas, center, text = None, chars=None, padw = 20, padh = 4, fill="gray", outline="black",selectoutline="red"):
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
6 x,y = center
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
7 self.x = x
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
8 self.y = y
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
9 self.text = Tkinter.StringVar()
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
10 self.textlen = 0
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
11 if text != None:
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
12 self.text.set(text)
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
13 self.textlen = len(text)
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
14 if chars == None:
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
15 chars = len(text)+3
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
16 elif chars == None:
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
17 chars = 3
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
18 self.textwidget = Tkinter.Entry(canvas, width=chars, textvariable=self.text, font=Font(family="Courier New", size=10))
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
19 self.textwidget.bind('<Key>', self.textchanged, '+')
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
20 self.canvastext = canvas.create_window(x, y, window=self.textwidget)
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
21 box = canvas.bbox(self.canvastext)
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
22 self.width = box[2]-box[0]+padw
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
23 self.height = box[3]-box[1]+padh
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
24 hw = self.width / 2
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
25 hh = self.height / 2
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
26 ow = hw+10
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
27 self.poly = canvas.create_polygon(x-hw,y-hh, x+hw,y-hh, x+ow,y, x+hw,y+hh, x-hw,y+hh, x-ow,y, fill=fill, outline=outline)
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
28 self.outline = outline
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
29 self.selectoutline = selectoutline
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
30 self.mousex = self.mousey = 0
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
31
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
32 def hittest(self, x, y):
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
33 ow = self.width / 2 + 10
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
34 hh = self.height / 2
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
35 return abs(x-self.x) <= ow and abs(y-self.y) <= hh
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
36
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
37 def onclick(self, x, y):
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
38 canvas.itemconfig(self.poly, outline=self.selectoutline)
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
39 self.mousex = x
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
40 self.mousey = y
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
41
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
42 def lostfocus(self):
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
43 canvas.itemconfig(self.poly, outline=self.outline)
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
44
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
45 def ondrag(self, x, y):
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
46 self.x += x-self.mousex
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
47 self.y += y-self.mousey
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
48 self.mousex = x
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
49 self.mousey = y
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
50 hw = self.width / 2
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
51 hh = self.height / 2
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
52 ow = hw+10
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
53 canvas.coords(self.poly, self.x-hw,self.y-hh, self.x+hw,self.y-hh, self.x+ow,self.y, self.x+hw,self.y+hh, self.x-hw,self.y+hh, self.x-ow,self.y)
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
54 canvas.coords(self.canvastext, self.x, self.y)
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
55
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
56 def textchanged(self,event):
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
57 text = self.text.get()
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
58 newlen = len(text)
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
59 print text
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
60 if newlen != self.textlen:
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
61 print 'length changed'
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
62 self.textlen = newlen
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
63
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
64 grabbed = None
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
65 def onclick(event):
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
66 global grabbed
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
67 if grabbed != None:
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
68 grabbed.lostfocus()
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
69 grabbed = None
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
70 print "Click"
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
71 #TODO: Consider using quadtrees for performance
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
72 for i in range(len(nodes)-1,-1,-1):
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
73 node = nodes[i]
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
74 if node.hittest(event.x, event.y):
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
75 grabbed = node
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
76 print "Found hit!"
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
77 node.onclick(event.x, event.y)
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
78 break
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
79
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
80 def ondrag(event):
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
81 global grabbed
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
82 if grabbed != None:
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
83 grabbed.ondrag(event.x, event.y)
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
84
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
85 def ondoubleclick(event):
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
86 global nodes
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
87 nodes.append(Call(canvas, (event.x, event.y)))
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
88
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
89 root = Tkinter.Tk()
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
90 canvas = Tkinter.Canvas(root, width=302,height=302)
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
91 nodes = []
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
92 nodes.append(Call(canvas, (50,40), "Foo"))
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
93 canvas.bind('<Button-1>', onclick)
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
94 canvas.bind('<B1-Motion>', ondrag)
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
95 canvas.bind('<Double-Button-1>', ondoubleclick)
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
96 canvas.pack()
0534bb8ee7ad Added beginnings of graphical editor prototype
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
97 root.mainloop()