1 from Tkinter import *
2 import Pmw
3 from teamwork.widgets.cookbook import MultiListbox
4
7 optiondefs = (
8 ('psyop',1,Pmw.INITOPT),
9 ('wildcardLabel','Anybody',Pmw.INITOPT),
10 ('entities',[],Pmw.INITOPT),
11 ('nameChange',1,Pmw.INITOPT),
12 ('name','Psyop Units',Pmw.INITOPT),
13 ('objectives',[],Pmw.INITOPT),
14 )
15 self.defineoptions(kw,optiondefs)
16 Pmw.ScrolledFrame.__init__( self, parent )
17 if self['psyop']:
18 name = "Psyop Objectives"
19 Label( self, text="%s:" % (name)).pack( fill = X,
20 expand=YES,
21 anchor=NW )
22
23 name = 'Name of Psyop-Associated Entity:'
24 self._nameField = Pmw.EntryField( self.interior(),labelpos = W,
25 label_text=name,
26 command=self.updateEntity)
27 self._nameField.pack( side=TOP, fill=X, expand=YES, anchor=NW )
28 if nameChange:
29 self._nameField.component('entry').configure(state=NORMAL)
30 else:
31 self._nameField.component('entry').configure(state=DISABLED)
32 self._nameField.setentry(self.name)
33
34 self.fields = ['Entity','Feature','Direction']
35 widths = {'Feature':16,
36 'Entity':16,
37 'Direction':8}
38 g = Pmw.Group(self.interior(),tag_text='Enter new objective:')
39 self.buttons = {}
40 for index in range(len(self.fields)):
41 field = self.fields[index]
42 l = Label(g.interior(),text=field+':',anchor=W,
43 justify='left')
44 l.grid(row=index,column=0)
45 b = Pmw.OptionMenu(g.interior(),
46 menubutton_width=30)
47 if field == 'Entity':
48 eList = map(lambda e:e.name,self['entities'])
49 b.setitems([self['wildcardLabel']]+eList)
50 b.configure(command=self.selectEntity)
51 elif field == 'Direction':
52 b.setitems(['Maximize','Minimize'])
53 elif field == 'Feature':
54 self.states = []
55 self.actions = []
56 for entity in self['entities']:
57 for feature in entity.getStateFeatures():
58 if not feature in self.states:
59 self.states.append(feature)
60 for actionList in entity.actions.getOptions():
61 for action in actionList:
62 if not action['type'] in self.actions:
63 self.actions.append(action['type'])
64 b.setitems(self.states+self.actions)
65 b.grid(row=index,column=1)
66 self.buttons[field] = b
67 g.pack(fill=X,expand=YES)
68
69 box = Pmw.ButtonBox(self.interior())
70 box.add('Add',command=self.addItem)
71 box.add('Remove',command=self.removeItems)
72 box.pack(side=TOP)
73
74 self.list = MultiListbox(self.interior(),
75 map(lambda f,w=widths:(f,w[f]),
76 self.fields))
77 self.list.pack(expand=YES,fill=BOTH)
78 for item in self['objectives']:
79 self.list.insert(END,item)
80 self.initialiseoptions()
81
83 item = ()
84 for field in self.fields:
85 item += (self.buttons[field].getvalue(),)
86 if not item in self['objectives']:
87 self.list.insert(END,item)
88 self['objectives'].append(item)
89
94
96 name = self._nameField.getvalue()
97 oldName = self.name
98 self.name = name
99 eList = [self['wildcardLabel']]+\
100 map(lambda e:e.name,self['entities'])
101 self.buttons['Entity'].setitems(eList)
102 for index in range(len(self['objectives'])):
103 item = self['objectives'][index]
104 if item[1] == oldName:
105 self['objectives'].remove(item)
106 item = (item[0],name,item[2])
107 self['objectives'].insert(index,item)
108 self.list.delete(index)
109 self.list.insert(index,item)
110
113