Mercurial > code > home > repos > light9
annotate light8/stage.py @ 15:c76b62eccdec
put **kw back in, they now go to the scale and can override the defaults.
put **kw back in, they now go to the scale and can override the defaults.
for our purposes, we probably want to edit the defaults so we don't have
them in every call.
author | dmcc |
---|---|
date | Sun, 07 Jul 2002 06:18:40 +0000 |
parents | 95ba7e14d15a |
children | 43aa1ee8b3a9 |
rev | line source |
---|---|
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
1 from Tkinter import * |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
2 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
3 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
4 def printevent(ev): |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
5 for k in dir(ev): |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
6 if not k.startswith('__'): |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
7 print k,getattr(ev,k) |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
8 print "" |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
9 |
0 | 10 |
14 | 11 textstyle={'font':'arial 7','fill':'white'} |
12 | |
13 | |
0 | 14 class Stage(Canvas): |
15 | |
16 """a fancy widget that shows light locations (and optionally their | |
17 aim locations on an image of the stage. you can select or | |
18 multiselect lights and drag them up or down to change their | |
19 brightness. | |
20 | |
21 ctrl-a is select all, | |
22 ctrl-shift-a or clicking on no light deselects all, | |
23 re-clicking a light with shift key down toggles whether it's in the selection. | |
24 ctrl-drag-rectangle deselects the lights in the rectangle, | |
25 shift-drag-rectangle selects the lights in the rectangle, | |
26 drag-rectangle selects only the lights in the rectangle. | |
27 | |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
28 a light can be selected on its location point, its aim point |
0 | 29 (which may or may not be present), or its name. |
30 | |
31 lights should be able to be interactively 'locked', which blocks | |
32 them from being selected. | |
33 | |
34 """ | |
35 def __init__(self,parent,**kw): | |
36 Canvas.__init__(self,parent,**kw) | |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
37 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
38 self.bind("<ButtonPress-1>", self.leftpress) |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
39 self.bind("<B1-Motion>", self.leftmotion) |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
40 self.bind("<ButtonRelease-1>", self.leftrelease) |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
41 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
42 self.halo=11 # search radius for clicked items |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
43 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
44 self.lmbstate=None # as you perform with LMB, this goes from None to 'pressed','rectangle','levelchange' |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
45 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
46 self.alllights=[] |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
47 self.selectedlights=[] |
7 | 48 self.alllighttags={} # tag: name lookup |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
49 |
7 | 50 |
51 def setimage(self,stageimage): | |
52 img = Image('photo',file=stageimage) | |
53 self.img=img # can't lose this! | |
54 print img.width() | |
55 self.create_image(0,0,anchor='nw',image=img) | |
56 self.config(width=img.width(),height=img.height()) | |
57 | |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
58 # |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
59 # selection management |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
60 # |
7 | 61 def updateselectionboxes(self): |
62 "make selection boxes that match self.selectedlights" | |
63 self.delete("selectbox") | |
64 for l in self.selectedlights: | |
65 for c in self.getlightbboxes(l): | |
66 self.create_rectangle(c[0]-2,c[1]-2,c[2]+2,c[3]+2,outline='red',tag="selectbox") | |
67 | |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
68 def clearselection(self,dyn=0): |
7 | 69 self.selectedlights=[] |
70 self.updateselectionboxes() | |
71 | |
72 def markfordynselection(self): | |
73 """call this before calls to replacedynselection""" | |
74 self.origselection = self.selectedlights | |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
75 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
76 def replacedynselection(self,newlightnames): |
7 | 77 """as a dynamic selection changes, keep calling this function with the |
78 names of the lights in the dynamic selection. the original selection (at the time | |
79 of markfordynselection) will be shown along with any new lights""" | |
80 self.selectedlights = self.origselection + [l for l in newlightnames if l not in self.origselection] | |
81 self.updateselectionboxes() | |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
82 |
7 | 83 def select(self,lightname,select=1,dyn=0): # select=0 for deselect |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
84 if select: |
7 | 85 if lightname not in self.selectedlights: |
86 self.selectedlights.append(lightname) | |
87 elif lightname in self.selectedlights: | |
88 self.selectedlights.remove(lightname) | |
89 | |
90 self.updateselectionboxes() | |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
91 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
92 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
93 # |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
94 # LMB click or drag |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
95 # |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
96 def leftpress(self,ev): |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
97 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
98 self.lmbstate='pressed' |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
99 self.lmbstart=(ev.x,ev.y) |
10 | 100 print "click at",self.lmbstart |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
101 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
102 shifted=ev.state & 1 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
103 control=ev.state & 4 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
104 touching=self.findoverlappinglights((ev.x-self.halo,ev.y-self.halo,ev.x+self.halo,ev.y+self.halo)) |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
105 istouching=len(touching)>0 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
106 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
107 if not istouching: |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
108 # clicked in space |
7 | 109 if not shifted and not control and len(self.selectedlights)>0: |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
110 # either a deselect (if no motion) or a level change (if motion) |
7 | 111 self.lmbstate = 'deselect-or-level' |
112 if shifted or control or len(self.selectedlights)==0: | |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
113 # with shift/control, add/subtract lights to selection |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
114 self.lmbstate='rectangle' |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
115 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
116 else: |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
117 # clicked a selectable object |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
118 # toggle selection |
7 | 119 if touching[0] in self.selectedlights: |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
120 if shifted: |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
121 # deselect |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
122 self.select(touching[0],0) |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
123 # and do nothing else |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
124 self.lmbstate=None |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
125 else: |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
126 # select only this light |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
127 self.clearselection() |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
128 self.select(touching[0]) |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
129 # and adjust its level |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
130 self.lmbstate='levelchange' |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
131 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
132 else: |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
133 if not shifted: |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
134 self.clearselection() |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
135 self.select(touching[0]) |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
136 # and adjust levels now |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
137 self.lmbstate='levelchange' |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
138 |
7 | 139 if self.lmbstate=='rectangle': |
140 self.markfordynselection() | |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
141 def leftmotion(self,ev): |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
142 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
143 coords=(ev.x,ev.y) |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
144 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
145 shifted=ev.state & 1 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
146 control=ev.state & 4 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
147 |
7 | 148 if self.lmbstate=='deselect-or-level': |
149 if (coords[0]-self.lmbstart[0])**2+(coords[1]-self.lmbstart[1])**2>self.halo**2: | |
150 # they moved enough, it's a level change | |
151 self.lmbstate='levelchange' | |
152 | |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
153 if self.lmbstate=='levelchange': |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
154 delta = self.lmbstart[1]-ev.y |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
155 print "change by",delta |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
156 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
157 if self.lmbstate=='rectangle': |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
158 sr = self.find_withtag('selectrect') |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
159 if not sr: |
8 | 160 sr=self.create_rectangle( self.lmbstart[0],self.lmbstart[1],coords[0],coords[1], |
14 | 161 outlinestipple='gray50',outline='yellow', |
8 | 162 tag='selectrect') |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
163 |
8 | 164 # move rectangle with mouse |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
165 self.coords(sr,*(self.lmbstart+coords)) |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
166 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
167 # redo the dynselection with the new rectangle |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
168 self.replacedynselection([o for o in self.findoverlappinglights((self.lmbstart+coords),1)]) |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
169 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
170 # need to handle ctrl |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
171 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
172 def leftrelease(self,ev): |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
173 if self.lmbstate: |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
174 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
175 if self.lmbstate=='rectangle': |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
176 self.delete('selectrect') |
7 | 177 |
178 if self.lmbstate=='deselect-or-level': | |
179 # they didn't move enough to promote the mode to level, so it's a deselect click | |
180 self.clearselection() | |
0 | 181 |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
182 # all items that were in dynselection join the selection |
7 | 183 # self.incorporatedynselection() |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
184 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
185 self.lmbstate=None |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
186 |
7 | 187 # |
188 # light names vs. canvas object tags | |
189 # | |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
190 def nametag(self,name): |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
191 "returns a safe version of the name that won't match other names" |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
192 return name.replace(" ","__") |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
193 |
7 | 194 def tagtoname(self,tag): |
195 "finds the real light name for a tag written by nametag()" | |
196 return self.alllighttags[tag] | |
197 | |
198 # | |
199 # light methods | |
200 # | |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
201 def addlight(self,name,location,aim=None): |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
202 tags='light selectable name_%s' % self.nametag(name) |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
203 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
204 self.create_oval(location[0]-2,location[1]-2, |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
205 location[0]+2,location[1]+2, |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
206 fill='red',tag=tags+" hotspot") |
7 | 207 if aim: |
208 self.create_oval(aim[0]-2,aim[1]-2, | |
209 aim[0]+2,aim[1]+2, | |
210 fill='red',tag=tags+" hotspot") | |
14 | 211 self.create_line(location[0],location[1],aim[0],aim[1],fill='lightblue', |
7 | 212 arrow='last',arrowshape="9 15 6",tag='light') |
14 | 213 self.create_text(location[0]-1,location[1]+6,anchor='n',text=name,fill='black',tag=tags,**dict([(k,v) for k,v in textstyle.items() if k!='fill'])) |
214 self.create_text(location[0],location[1]+5,anchor='n',text=name,tag=tags,**textstyle) | |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
215 self.alllights.append(name) |
7 | 216 self.alllighttags[self.nametag(name)]=name |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
217 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
218 def getlightbboxes(self,tag): |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
219 """returns a list of bboxes for a light with a given name_ tag. the selection |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
220 mechanism draws around these bboxes to show that a light is selected""" |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
221 bboxes=[] |
7 | 222 for o in self.find_withtag("name_%s" % self.nametag(tag)): |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
223 if 'hotspot' in self.gettags(o): |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
224 bboxes.append(self.bbox(o)) |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
225 return bboxes |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
226 |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
227 def findoverlappinglights(self,box,enclosed=0): |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
228 "returns all the different name_ tags for lights that are within (or enclosed by) the box" |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
229 lights=[] |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
230 if enclosed: |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
231 candidates = self.find_enclosed(*box) |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
232 else: |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
233 candidates = self.find_overlapping(*box) |
7 | 234 |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
235 for o in candidates: |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
236 for t in self.gettags(o): |
7 | 237 if t.startswith("name_"): |
238 n = self.tagtoname(t[5:]) | |
239 if n and (n not in lights): | |
240 lights.append(n) | |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
241 return lights |
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
242 |
10 | 243 |
14 | 244 def createlights(s): |
245 s.setimage('guysanddolls.gif') | |
246 s.addlight('desk1',(46, 659), aim=(210, 381)) | |
247 s.addlight('marry1',(78, 661), aim=(398, 428)) | |
248 s.addlight('b13',(110, 661)) | |
249 s.addlight('hotbox1',(147, 657), aim=(402, 327)) | |
250 s.addlight('edge',(179, 651), aim=(116, 441)) | |
251 s.addlight('phone',(214, 652), aim=(651, 417)) | |
252 s.addlight('cuba1',(315, 656), aim=(559, 407)) | |
253 s.addlight('b22',(347, 661), aim=(247, 458)) | |
254 s.addlight('b23',(379, 661)) | |
255 s.addlight('b24',(417, 661)) | |
256 s.addlight('b25',(455, 658), aim=(520, 466)) | |
257 s.addlight('desk2',(490, 655), aim=(237, 375)) | |
258 s.addlight('rock',(571, 655), aim=(286, 304)) | |
259 s.addlight('b32',(606, 650)) | |
260 s.addlight('hotbox2',(637, 650), aim=(433, 337)) | |
261 s.addlight('b34',(671, 651)) | |
262 s.addlight('marry2',(703, 651), aim=(429, 426)) | |
263 s.addlight('cuba2',(733, 652), aim=(602, 408)) | |
264 | |
265 s.addlight('sidefill1',(115, 473),aim=(228, 423)) | |
266 s.addlight('sidefill2',(617, 475),aim=(526, 425)) | |
267 | |
268 s.addlight('cycright',(485, 164),(483, 109)) | |
269 s.addlight('cycleft',(330, 154),(333, 108)) | |
270 | |
271 s.addlight('upfill1',(275, 325),(262, 237)) | |
272 s.addlight('upfill2',(333, 326),(330, 229)) | |
273 s.addlight('upfill3',(473, 325),(454, 226)) | |
274 s.addlight('upfill4',(541, 325),(528, 223)) | |
275 | |
276 s.addlight('god',(369,549)) | |
277 | |
278 s.addlight('patio1',(42, 560),(12, 512)) | |
279 s.addlight('patio2',(675, 553),(793, 514)) | |
280 | |
281 s.addlight('hotback',(413, 476),(414, 396)) | |
10 | 282 |
6
119369e60da1
tag-heavy selection management is getting hard - about to switch to python lists
drewp
parents:
5
diff
changeset
|
283 |
14 | 284 |
285 if __name__=='__main__': | |
286 root=Tk() | |
287 root.wm_geometry("+376+330") | |
288 s=Stage(root) | |
289 s.setimage('guysanddolls.gif') | |
290 s.pack() | |
291 | |
292 createlights(s) | |
293 root.mainloop() | |
294 |