Mercurial > code > home > repos > light9
comparison light8/ExtSliderMapper.py @ 92:827a675131dc
better attach behavior, "attached" -> "synced"
author | dmcc |
---|---|
date | Sat, 13 Jul 2002 03:01:42 +0000 |
parents | a5c0b7ac63cf |
children | 29a8b23d8db5 |
comparison
equal
deleted
inserted
replaced
91:7f273883de60 | 92:827a675131dc |
---|---|
1 """some more of the panels""" | 1 """some more of the panels""" |
2 from Tix import * | 2 from Tix import * |
3 | 3 |
4 class SliderMapping: | 4 class SliderMapping: |
5 def __init__(self, default='disconnected', attached=0, extinputlevel=0, | 5 def __init__(self, default='disconnected', synced=0, extinputlevel=0, |
6 sublevel=0): | 6 sublevel=0): |
7 self.subname = StringVar() # name of submaster we're connected to | 7 self.subname = StringVar() # name of submaster we're connected to |
8 self.subname.set(default) | 8 self.subname.set(default) |
9 self.sublevel = DoubleVar() # scalelevel variable of that submaster | 9 self.sublevel = DoubleVar() # scalelevel variable of that submaster |
10 self.sublevel.set(sublevel) | 10 self.sublevel.set(sublevel) |
11 self.attached = BooleanVar() # currently attached | 11 self.synced = BooleanVar() # currently synced |
12 self.attached.set(attached) | 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. we hold on to |
17 # it so we can change its textvariable | 17 # it so we can change its textvariable |
18 self.lastbgcolor = None # last background color drawn to avoid unnecessary | 18 self.lastbgcolor = None # last background color drawn to avoid unnecessary |
19 # updates | 19 # updates |
20 def attach(self): | 20 self.ignoreunsync = 0 # whether to ignore the next request to unsync |
21 self.attached.set(1) | 21 # this is because we trace the slider variable, but |
22 self.color_text() | 22 # we are also semi-responsible for setting it in |
23 def detach(self): | 23 # Lightboard.changelevels. |
24 self.attached.set(0) | 24 def ignorenextunync(self): |
25 self.color_text() | 25 print "skipping next unsync" |
26 def isattached(self): | 26 self.ignoreunsync += 1 |
27 return self.attached.get() | 27 self.sync() |
28 # self.color_bg() | |
29 def sync(self, *args): | |
30 # print "syncing" | |
31 self.synced.set(1) | |
32 # self.color_bg() | |
33 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) | |
44 # self.color_bg() | |
45 def issynced(self): | |
46 return self.synced.get() | |
47 def disconnect(self, *args): | |
48 self.set_subname('disconnected') # a bit hack-like | |
49 self.sublabel.configure(text="N/A") | |
50 self.color_bg() | |
28 def isdisconnected(self): | 51 def isdisconnected(self): |
29 return self.subname.get() == 'disconnected' | 52 return self.subname.get() == 'disconnected' |
30 def check_attached(self): | 53 def check_synced(self, *args): |
31 'If external level is higher than the sublevel, it attaches' | 54 'If external level is near than the sublevel, it synces' |
32 if self.isdisconnected(): | 55 if self.isdisconnected(): |
33 self.detach() | 56 self.unsync() |
34 return | 57 return |
35 | 58 |
36 if self.extlevel.get() > self.sublevel.get(): | 59 if abs(self.extlevel.get() - self.sublevel.get()) <= 0.02: |
37 self.attached.set(1) | 60 self.sync() |
38 self.color_text() | |
39 def changed_extinput(self, newlevel): | 61 def changed_extinput(self, newlevel): |
40 'When a new external level is received, this incorporates it' | 62 'When a new external level is received, this incorporates it' |
41 self.extlevel.set(newlevel) | 63 self.extlevel.set(newlevel) |
42 self.check_attached() | 64 self.check_synced() |
43 self.color_text() | 65 self.color_bg() |
44 def set_subname(self, newname): | 66 def set_subname(self, newname): |
45 self.subname.set(newname) | 67 self.subname.set(newname) |
46 self.detach() | 68 self.unsync() |
47 self.color_text() | 69 self.color_bg() |
48 def color_text(self): | 70 def color_bg(self): |
49 if self.widgets: | 71 if self.widgets: |
72 self.check_synced() | |
50 if self.isdisconnected(): | 73 if self.isdisconnected(): |
51 color = 'honeyDew4' | 74 color = 'honeyDew4' |
52 elif self.isattached(): | 75 elif self.issynced(): |
76 # elif abs(self.extlevel.get() - self.sublevel.get()) <= 0.02: | |
53 color = 'honeyDew2' | 77 color = 'honeyDew2' |
54 else: # detached | 78 else: # unsynced |
55 color = 'red' | 79 color = 'red' |
56 | 80 |
81 # print "color", color, "lastbgcolor", self.lastbgcolor | |
57 if self.lastbgcolor == color: return | 82 if self.lastbgcolor == color: return |
58 for widget in self.widgets: | 83 for widget in self.widgets: |
59 widget.configure(bg=color) | 84 widget.configure(bg=color) |
60 self.lastbgcolor = color | 85 self.lastbgcolor = color |
61 def disconnect(self): | |
62 self.set_subname('disconnected') # a bit hack-like | |
63 self.sublabel.configure(text="N/A") | |
64 def set_sublevel_var(self, newvar): | 86 def set_sublevel_var(self, newvar): |
65 'newvar is one of the variables in scalelevels' | 87 'newvar is one of the variables in scalelevels' |
66 self.sublevel = newvar | 88 self.sublevel = newvar |
89 self.sublevel.trace('w', self.unsync) | |
67 if self.sublabel: | 90 if self.sublabel: |
68 self.sublabel.configure(textvariable=newvar) | 91 self.sublabel.configure(textvariable=newvar) |
69 self.check_attached() | 92 self.check_synced() |
70 def get_mapping(self): | 93 def get_mapping(self): |
71 'Get name of submaster currently mapped' | 94 'Get name of submaster currently mapped' |
72 return self.subname.get() | 95 return self.subname.get() |
73 def get_level_pair(self): | 96 def get_level_pair(self): |
74 'Returns suitable output for ExtSliderMapper.get_levels()' | 97 'Returns suitable output for ExtSliderMapper.get_levels()' |
80 c.slistbox.listbox.insert(END, "disconnected") | 103 c.slistbox.listbox.insert(END, "disconnected") |
81 for s in subnames: | 104 for s in subnames: |
82 c.slistbox.listbox.insert(END, s) | 105 c.slistbox.listbox.insert(END, s) |
83 c.entry.configure(width=12) | 106 c.entry.configure(width=12) |
84 statframe = Frame(frame) | 107 statframe = Frame(frame) |
85 cb = Checkbutton(statframe, variable=self.attached, | 108 cb = Checkbutton(statframe, variable=self.synced, |
86 text="Attached") | 109 text="Synced") |
87 cb.grid(columnspan=2, sticky=W) | 110 cb.grid(columnspan=2, sticky=W) |
88 ilabel = Label(statframe, text="Input", fg='blue') | 111 ilabel = Label(statframe, text="Input", fg='blue') |
89 ilabel.grid(row=1, sticky=W) | 112 ilabel.grid(row=1, sticky=W) |
90 extlabel = Label(statframe, textvariable=self.extlevel, width=5) | 113 extlabel = Label(statframe, textvariable=self.extlevel, width=5) |
91 extlabel.grid(row=1, column=1) | 114 extlabel.grid(row=1, column=1) |
159 rawlevels = self.sliderinput.get_levels() | 182 rawlevels = self.sliderinput.get_levels() |
160 for rawlev, slidermap in zip(rawlevels, self.current_mappings): | 183 for rawlev, slidermap in zip(rawlevels, self.current_mappings): |
161 slidermap.changed_extinput(rawlev) | 184 slidermap.changed_extinput(rawlev) |
162 | 185 |
163 outputlevels = {} | 186 outputlevels = {} |
187 for m in self.current_mappings: | |
188 if m.issynced(): | |
189 k, v = m.get_level_pair() | |
190 outputlevels[k] = v | |
191 m.ignorenextunync() | |
192 return outputlevels | |
193 ''' | |
164 return dict([m.get_level_pair() | 194 return dict([m.get_level_pair() |
165 for m in self.current_mappings | 195 for m in self.current_mappings |
166 if m.isattached()]) | 196 if m.issynced()]) |
197 ''' | |
167 def draw_interface(self): | 198 def draw_interface(self): |
168 self.reallevellabels = [] | 199 self.reallevellabels = [] |
169 subchoiceframe = Frame(self) | 200 subchoiceframe = Frame(self) |
170 for m in self.current_mappings: | 201 for m in self.current_mappings: |
171 m.draw_interface(subchoiceframe, self.subnames) | 202 m.draw_interface(subchoiceframe, self.subnames) |