Package teamwork :: Package widgets :: Package PsychGUI :: Module objectives
[hide private]
[frames] | no frames]

Source Code for Module teamwork.widgets.PsychGUI.objectives

  1  from Tkinter import * 
  2  import Pmw 
  3  from teamwork.widgets.cookbook import MultiListbox 
  4           
5 -class ObjectivesDialog( Pmw.ScrolledFrame ) :
6 - def __init__( self, parent=None, **kw):
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 # Create name entry field 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 # Create objective entry box 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 # Create box of add/remove buttons 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 # Create display of current objectives 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
82 - def addItem(self):
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
90 - def removeItems(self):
91 for item in self.list.curselection(): 92 self.list.delete(item) 93 del self['objectives'][int(item)]
94
95 - def updateEntity(self):
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
111 - def selectEntity(self,name):
112 pass
113