| Home | Trees | Indices | Help |
|
|---|
|
|
1 #!/usr/bin/env python
2 #
3 # The Vision Egg: EPhysGUI
4 #
5 # Copyright (C) 2001-2004 Andrew Straw.
6 # Copyright (C) 2004 Imran S. Ali, Lachlan Dowd
7 # Copyright (C) 2004, 2008 California Institute of Technology
8 #
9 # Author: Andrew Straw <astraw@users.sourceforge.net>
10 # URL: <http://www.visionegg.org/>
11 #
12 # Distributed under the terms of the GNU Lesser General Public License
13 # (LGPL). See LICENSE.TXT that came with this file.
14 #
15 # $Id: EPhysGUI.py 1455 2008-06-07 15:42:14Z astraw $
16
17 import VisionEgg
18 __version__ = VisionEgg.release_name
19 __cvs__ = '$Revision: 1455 $'.split()[1]
20 __date__ = ' '.join('$Date: 2008-06-07 08:42:14 -0700 (Sat, 07 Jun 2008) $'.split()[1:3])
21 __author__ = 'Andrew Straw <astraw@users.sourceforge.net>'
22
23 import sys, socket, re, time, string, types, os
24 import parser, symbol, token, compiler
25 import pickle, random, math, threading
26 import Tkinter, tkMessageBox, tkSimpleDialog, tkFileDialog
27 import StringIO
28 import Pyro
29 import numpy
30
31 import VisionEgg
32 import VisionEgg.PyroClient
33 import VisionEgg.PyroApps.ScreenPositionGUI
34 import VisionEgg.GUI
35 import VisionEgg.ParameterTypes as ve_types
36
37 # Add your client modules here
38 import VisionEgg.PyroApps.TargetGUI
39 import VisionEgg.PyroApps.MouseTargetGUI
40 import VisionEgg.PyroApps.FlatGratingGUI
41 import VisionEgg.PyroApps.SphereGratingGUI
42 import VisionEgg.PyroApps.SpinningDrumGUI
43 import VisionEgg.PyroApps.GridGUI
44 import VisionEgg.PyroApps.ColorCalGUI
45
46 import VisionEgg.PyroApps.DropinGUI
47 import VisionEgg.PyroApps.AST_ext as AST_ext
48 import VisionEgg.PyroApps.VarTypes as VarTypes
49
50 client_list = []
51 client_list.extend( VisionEgg.PyroApps.TargetGUI.get_control_list() )
52 client_list.extend( VisionEgg.PyroApps.MouseTargetGUI.get_control_list() )
53 client_list.extend( VisionEgg.PyroApps.FlatGratingGUI.get_control_list() )
54 client_list.extend( VisionEgg.PyroApps.SphereGratingGUI.get_control_list() )
55 client_list.extend( VisionEgg.PyroApps.SpinningDrumGUI.get_control_list() )
56 client_list.extend( VisionEgg.PyroApps.GridGUI.get_control_list() )
57 client_list.extend( VisionEgg.PyroApps.ColorCalGUI.get_control_list() )
58 client_list.extend( VisionEgg.PyroApps.DropinGUI.get_control_list() )
59
61 """Base class to encapsulate objects, provides useful methods when used in GUI"""
68 header = "unknown parameters"
69
71 - def __init__(self,master=None,list_of_contained_objects=None,contained_objectbject_maker=None,
72 container_class=ContainedObjectBase,
73 **cnf):
74 Tkinter.Frame.__init__(self, master, **cnf)
75 if list_of_contained_objects is None:
76 self.list = []
77 else:
78 self.list = list_of_contained_objects
79 self.container_class = container_class
80
81 # allow column to expand
82 self.columnconfigure(0,weight=1)
83
84 # The frame that has the list and the vscroll
85 self.frame = Tkinter.Frame(self,borderwidth=2)
86 self.frame.grid(row=0,sticky="nwes")
87
88 # allow column to expand
89 self.frame.columnconfigure(0,weight=1)
90
91 self.frame.vscroll = Tkinter.Scrollbar(self.frame,orient=Tkinter.VERTICAL)
92 self.frame.hscroll = Tkinter.Scrollbar(self.frame,orient=Tkinter.HORIZONTAL)
93 self.frame.title = Tkinter.Listbox(
94 self.frame,
95 relief=Tkinter.FLAT,
96 font=('courier',10,'bold'),
97 height=1,
98 # selectbackground='#eed5b7',
99 # selectborderwidth=0,
100 # selectmode=None,
101 exportselection=0)
102 self.frame.title.insert(Tkinter.END, self.container_class.header)
103 self.frame.list = Tkinter.Listbox(
104 self.frame,
105 relief=Tkinter.SUNKEN,
106 font=('courier',10,'normal'),
107 width=40, height=10,
108 selectbackground='#eed5b7',
109 selectborderwidth=0,
110 selectmode=Tkinter.BROWSE,
111 xscroll=self.frame.hscroll.set,
112 yscroll=self.frame.vscroll.set,
113 exportselection=0)
114
115 self.frame.hscroll['command'] = self.delegate_hscroll
116 self.frame.hscroll.grid(row=3,column=0,sticky='we')
117 self.frame.vscroll['command'] = self.frame.list.yview
118 self.frame.vscroll.grid(row=2,column=1,sticky='ns')
119 self.frame.title.grid(row=1,column=0,ipady=0,pady=0,sticky='we')
120 self.frame.list.grid(row=2,column=0,sticky='nwes')
121 self.frame.list.bind('<Double-Button-1>',self.edit_selected)
122
123 # The buttons on bottom
124 self.bar = Tkinter.Frame(self,borderwidth=2)
125 self.bar.grid(row=1,sticky="we")
126 self.bar.add = Tkinter.Button(self.bar,text='Add...',command=self.add_new)
127 self.bar.add.grid(row=0,column=0,sticky='we')
128 self.bar.edit = Tkinter.Button(self.bar,text='Edit...',command=self.edit_selected)
129 self.bar.edit.grid(row=0,column=1,sticky='we')
130 self.bar.remove = Tkinter.Button(self.bar,text='Remove',command=self.remove_selected)
131 self.bar.remove.grid(row=0,column=2,sticky='we')
132 self.bar.move_up = Tkinter.Button(self.bar,text='Up',command=self.move_selected_up)
133 self.bar.move_up.grid(row=0,column=3,sticky='we')
134 self.bar.move_down = Tkinter.Button(self.bar,text='Down',command=self.move_selected_down)
135 self.bar.move_down.grid(row=0,column=4,sticky='we')
136 self.bar.tk_menuBar(self.bar.add,self.bar.remove)
137 #Lachie- My bar for setting parent
138 self.bar.merge = Tkinter.Button(self.bar,text='Merge/Unmerge',command=self.make_merge)
139 self.bar.merge.grid(row=0,column=5,sticky='we')
140 self.bar.tk_menuBar(self.bar.add,self.bar.remove)
141 self.update_now()
142
144 # This is a function for finding the 2-d
145 # list coordinates of an element which may be inside a
146 # list-nested-list.
147 # eg. if x = [[e, e, e], [e], [e, e]]
148 # Then the coordinates of the element at index 4 is: (2, 0)
149 #
150 # Initialization:
151 i = -1
152 j = -1
153 element_count = 0
154 # Main body:
155 for nested_list in main_list:
156 j = -1
157 i = i + 1
158 for element in nested_list:
159 j = j + 1
160 element_count = element_count + 1
161 if (element_count - 1) == main_index:
162 return [i, j]
163 # Unsuccessful exit:
164 return [-1, -1]
165
169
171 results = []
172 for contained_object_item in self.list:
173 #results.append( contained_object_item.get_contained() )
174 results.append( contained_object_item )
175 return results
176
178 self.frame.list.delete(0,Tkinter.END)
179 max_len = 0
180 for loop_container in self.list:
181 for loop in loop_container:
182 item_str_30 = loop.get_str_30()
183 max_len = max(max_len,len(item_str_30))
184 self.frame.list.insert(Tkinter.END,item_str_30)
185 self.frame.list.insert(Tkinter.END,"")
186 self.frame.title.delete(0,Tkinter.END)
187 self.frame.title.insert(Tkinter.END, self.container_class.header.ljust(max_len))
188
190 contained_object = self.make_contained_object(self.container_class)
191 if contained_object:
192 self.list.append( [contained_object] )
193 self.update_now()
194
196 selected = self.get_selected()
197 # Get 2-D list coordinates of selected object of class "LoopContainedObject":
198 loop_coordinates = self.