1  from teamwork.math.Interval import * 
  2   
  3  from Tkinter import * 
  4  import Pmw 
  5   
  7      """ Megawidget containing a scale, confidence and an indicator. 
  8      """ 
  9      confidenceValues = ['lo', 'med', 'hi'] 
 10       
 11 -    def __init__(self, parent = None, **kw): 
  12           
 13          optiondefs = ( 
 14              ('color',       1,                None), 
 15              ('confidence',  1,                Pmw.INITOPT), 
 16              ('orient',      'vertical',       Pmw.INITOPT), 
 17              ('labelmargin', 0,                Pmw.INITOPT), 
 18              ('labelpos',    'w',             Pmw.INITOPT), 
 19              ('text',        '',               Pmw.INITOPT), 
 20              ('showvalue',   0,                self.showValue), 
 21              ('threshold',   (50,),            None), 
 22              ('value',       None,             None), 
 23          ) 
 24          self.defineoptions(kw, optiondefs) 
 25   
 26           
 27          Pmw.MegaWidget.__init__(self, parent) 
 28   
 29           
 30          interior = self.interior() 
 31   
 32           
 33           
 34           
 35           
 36           
 37           
 38           
 39           
 40   
 41   
 42   
 43   
 44          self.group = self.createcomponent('Group', (), None, 
 45                                            Pmw.Group, interior, 
 46                                            tag_text=self['text'], 
 47                                            tag_font=('Helvetica',14,'bold')) 
 48          widget = self.group.component('tag') 
 49          self.activeFG = widget.cget('activeforeground') 
 50          self.disabledFG = widget.cget('disabledforeground') 
 51           
 52          if self['orient'] == 'vertical': 
 53               
 54               
 55              from_ = 100 
 56              to = 0 
 57          else: 
 58              from_ = 0 
 59              to = 100 
 60   
 61           
 62          self.scale = self.createcomponent('scale', 
 63                                            (), None, Scale, 
 64                                            self.group.interior(), 
 65                                            orient = self['orient'], 
 66                                             
 67   
 68                                            length = 200, 
 69                                            from_ = from_, 
 70                                            to = to) 
 71   
 72   
 73          if self['orient'] == 'vertical': 
 74              self.scale.pack(side=LEFT,fill=Y,expand=YES) 
 75          else: 
 76              self.scale.pack(side=TOP,fill=X,expand=YES) 
 77   
 78           
 79          self.buttonFrame = Frame(self.group.interior()) 
 80           
 81          if self['confidence']: 
 82              self.radio = self.createcomponent('radio',(),None, 
 83                                                Pmw.OptionMenu, 
 84                                                self.buttonFrame, 
 85                                                menubutton_width=3, 
 86                                                labelpos='w', 
 87                                                label_text='Confidence:', 
 88                                                items=self.confidenceValues 
 89                                                ) 
 90              self.radio.pack(side=LEFT,fill=Y,expand=YES) 
 91   
 92   
 93   
 94   
 95   
 96   
 97   
 98   
 99   
100   
101   
102   
103   
104   
105   
106   
107   
108   
109   
110   
111   
112   
113   
114          else: 
115              self.radio = None 
116          val = self['value'] 
117          self.setter(val) 
118           
119          self.initialiseoptions() 
120          self.buttonFrame.pack() 
121          self.group.pack(side=TOP,fill=X,expand=YES) 
 122   
124          """Configures the value visibility on the scale""" 
125          self.scale.configure(showvalue=self['showvalue']) 
 126           
141   
143          mean = self.scale.get() 
144          confidence = self.radio.getcurselection() 
145          if confidence == 'lo': 
146              span = 0.4 
147          elif confidence == 'med': 
148              span = 0.2 
149          else: 
150              span = 0.0 
151          return Interval(mean-span,mean+span) 
 152       
154          valueInt = self.scale.get() 
155          bottom = float(self['scale_from']) 
156          span = float(self['scale_to'])-bottom 
157          percent = (float(valueInt)-bottom)/span 
158          if self['color']: 
159              newColor = '#%02x%02x00' % \ 
160                         (int((1.0-percent)*255.),int(percent*255.)) 
161          else: 
162              value = int((1.0-percent)*255.) 
163              newColor = '#%02x%02x%02x' % (value,value,value) 
164          self.scale.configure(troughcolor=newColor) 
 165   
166   
168          """Disables all editing widgets""" 
169          widget = self.group.component('tag') 
170          widget.configure(state=state) 
171          self.scale.configure(state=state) 
172          if state == NORMAL: 
173              self.scale.configure(fg=self.activeFG) 
174          else: 
175              self.scale.configure(fg=self.disabledFG) 
176          if self['confidence']: 
177              self.radio.component('menubutton').configure(state=state) 
178              if state == NORMAL: 
179                  self.radio.component('label').configure(fg=self.activeFG) 
180              else: 
181                  self.radio.component('label').configure(fg=self.disabledFG) 
  182