comparison light8/ExtSliderMapper.py @ 94:29a8b23d8db5

ready for better scalelevel variable, checkbutton -> label
author dmcc
date Sat, 13 Jul 2002 03:23:35 +0000
parents 827a675131dc
children d1a1ded20ec7
comparison
equal deleted inserted replaced
93:d6c48d2d3bd6 94:29a8b23d8db5
11 self.synced = BooleanVar() # currently synced 11 self.synced = BooleanVar() # currently synced
12 self.synced.set(synced) 12 self.synced.set(synced)
13 self.extlevel = DoubleVar() # external slider's input 13 self.extlevel = DoubleVar() # external slider's input
14 self.extlevel.set(extinputlevel) 14 self.extlevel.set(extinputlevel)
15 self.widgets = [] # list of widgets drawn 15 self.widgets = [] # list of widgets drawn
16 self.sublabel = None # the label which represents a sub level. we hold on to 16 self.sublabel = None # the label which represents a sub level.
17 # it so we can change its textvariable 17 # we hold on to it so we can change its
18 self.lastbgcolor = None # last background color drawn to avoid unnecessary 18 # textvariable
19 # updates 19 self.statuslabel = None # tells us sync status
20 self.ignoreunsync = 0 # whether to ignore the next request to unsync 20 self.lastbgcolor = None # last background color drawn to avoid
21 # this is because we trace the slider variable, but 21 # unnecessary redraws
22 # we are also semi-responsible for setting it in
23 # Lightboard.changelevels.
24 def ignorenextunync(self):
25 print "skipping next unsync"
26 self.ignoreunsync += 1
27 self.sync()
28 # self.color_bg()
29 def sync(self, *args): 22 def sync(self, *args):
30 # print "syncing"
31 self.synced.set(1) 23 self.synced.set(1)
32 # self.color_bg() 24 self.color_bg()
33 def unsync(self, *args): 25 def unsync(self, *args):
34 if self.ignoreunsync > 0:
35 print "skipped unsync", self.ignoreunsync
36 self.synced.set(1)
37 self.color_bg()
38 self.ignoreunsync -= 1
39 return
40 '''
41 print "unsyncing"
42 '''
43 self.synced.set(0) 26 self.synced.set(0)
44 # self.color_bg() 27 self.color_bg()
45 def issynced(self): 28 def issynced(self):
46 return self.synced.get() 29 return self.synced.get()
47 def disconnect(self, *args): 30 def disconnect(self, *args):
48 self.set_subname('disconnected') # a bit hack-like 31 self.set_subname('disconnected') # a bit hack-like
49 self.sublabel.configure(text="N/A") 32 self.sublabel.configure(text="N/A")
50 self.color_bg() 33 self.color_bg()
51 def isdisconnected(self): 34 def isdisconnected(self):
52 return self.subname.get() == 'disconnected' 35 return self.subname.get() == 'disconnected' # a bit more hack-like
53 def check_synced(self, *args): 36 def check_synced(self, *args):
54 'If external level is near than the sublevel, it synces' 37 'If external level is near than the sublevel, it synces'
55 if self.isdisconnected(): 38 if self.isdisconnected():
56 self.unsync() 39 self.unsync()
57 return 40 return
67 self.subname.set(newname) 50 self.subname.set(newname)
68 self.unsync() 51 self.unsync()
69 self.color_bg() 52 self.color_bg()
70 def color_bg(self): 53 def color_bg(self):
71 if self.widgets: 54 if self.widgets:
72 self.check_synced()
73 if self.isdisconnected(): 55 if self.isdisconnected():
74 color = 'honeyDew4' 56 color = 'honeyDew4'
75 elif self.issynced(): 57 elif self.issynced():
76 # elif abs(self.extlevel.get() - self.sublevel.get()) <= 0.02: 58 # elif abs(self.extlevel.get() - self.sublevel.get()) <= 0.02:
77 color = 'honeyDew2' 59 color = 'honeyDew2'
78 else: # unsynced 60 else: # unsynced
79 color = 'red' 61 color = 'red'
62
63 if self.statuslabel:
64 if color == 'honeyDew2': # connected
65 self.statuslabel['text'] = 'Sync'
66 else:
67 self.statuslabel['text'] = 'No sync'
80 68
81 # print "color", color, "lastbgcolor", self.lastbgcolor 69 # print "color", color, "lastbgcolor", self.lastbgcolor
82 if self.lastbgcolor == color: return 70 if self.lastbgcolor == color: return
83 for widget in self.widgets: 71 for widget in self.widgets:
84 widget.configure(bg=color) 72 widget.configure(bg=color)
103 c.slistbox.listbox.insert(END, "disconnected") 91 c.slistbox.listbox.insert(END, "disconnected")
104 for s in subnames: 92 for s in subnames:
105 c.slistbox.listbox.insert(END, s) 93 c.slistbox.listbox.insert(END, s)
106 c.entry.configure(width=12) 94 c.entry.configure(width=12)
107 statframe = Frame(frame) 95 statframe = Frame(frame)
96
97 '''
108 cb = Checkbutton(statframe, variable=self.synced, 98 cb = Checkbutton(statframe, variable=self.synced,
109 text="Synced") 99 text="Synced")
110 cb.grid(columnspan=2, sticky=W) 100 cb.grid(columnspan=2, sticky=W)
101 '''
102 self.statuslabel = Label(statframe, text="No sync")
103 self.statuslabel.grid(columnspan=2, sticky=W)
111 ilabel = Label(statframe, text="Input", fg='blue') 104 ilabel = Label(statframe, text="Input", fg='blue')
112 ilabel.grid(row=1, sticky=W) 105 ilabel.grid(row=1, sticky=W)
113 extlabel = Label(statframe, textvariable=self.extlevel, width=5) 106 extlabel = Label(statframe, textvariable=self.extlevel, width=5)
114 extlabel.grid(row=1, column=1) 107 extlabel.grid(row=1, column=1)
115 rlabel = Label(statframe, text="Real") 108 rlabel = Label(statframe, text="Real")
118 self.sublabel.grid(row=2, column=1) 111 self.sublabel.grid(row=2, column=1)
119 statframe.pack(side=BOTTOM, expand=1, fill=X) 112 statframe.pack(side=BOTTOM, expand=1, fill=X)
120 c.pack() 113 c.pack()
121 frame.pack(side=LEFT, expand=1, fill=BOTH) 114 frame.pack(side=LEFT, expand=1, fill=BOTH)
122 115
123 self.widgets = [frame, c, statframe, cb, ilabel, extlabel, rlabel, 116 self.widgets = [frame, c, statframe, self.statuslabel, ilabel, extlabel,
124 self.sublabel] 117 rlabel, self.sublabel]
125 118
126 class ExtSliderMapper(Frame): 119 class ExtSliderMapper(Frame):
127 def __init__(self, parent, sliderlevels, sliderinput, filename='slidermapping', 120 def __init__(self, parent, sliderlevels, sliderinput, filename='slidermapping',
128 numsliders=4): 121 numsliders=4):
129 'Slider levels is scalelevels, sliderinput is an ExternalInput object' 122 'Slider levels is scalelevels, sliderinput is an ExternalInput object'
181 174
182 rawlevels = self.sliderinput.get_levels() 175 rawlevels = self.sliderinput.get_levels()
183 for rawlev, slidermap in zip(rawlevels, self.current_mappings): 176 for rawlev, slidermap in zip(rawlevels, self.current_mappings):
184 slidermap.changed_extinput(rawlev) 177 slidermap.changed_extinput(rawlev)
185 178
179 '''
186 outputlevels = {} 180 outputlevels = {}
187 for m in self.current_mappings: 181 for m in self.current_mappings:
188 if m.issynced(): 182 if m.issynced():
189 k, v = m.get_level_pair() 183 k, v = m.get_level_pair()
190 outputlevels[k] = v 184 outputlevels[k] = v
192 return outputlevels 186 return outputlevels
193 ''' 187 '''
194 return dict([m.get_level_pair() 188 return dict([m.get_level_pair()
195 for m in self.current_mappings 189 for m in self.current_mappings
196 if m.issynced()]) 190 if m.issynced()])
197 '''
198 def draw_interface(self): 191 def draw_interface(self):
199 self.reallevellabels = [] 192 self.reallevellabels = []
200 subchoiceframe = Frame(self) 193 subchoiceframe = Frame(self)
201 for m in self.current_mappings: 194 for m in self.current_mappings:
202 m.draw_interface(subchoiceframe, self.subnames) 195 m.draw_interface(subchoiceframe, self.subnames)