annotate light8/ExtSliderMapper.py @ 54:3011c1028eb7

Cue math error fixed. Cue math error fixed. Bad cues in ConfigDummy fixed, not fixed in Config yet. Cue fader back in rsn. Oh yeah.
author dmcc
date Mon, 08 Jul 2002 15:50:00 +0000
parents 45b12307c695
children 5f0c6bc8e9de
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
1 """ The External Slider Mapping widget determines which pots map to which
45b12307c695 Initial revision
drewp
parents:
diff changeset
2 submasters. It tells you the status of each mapping and saves and loads
45b12307c695 Initial revision
drewp
parents:
diff changeset
3 presets. The show is relying on this module! Do not lose it!
45b12307c695 Initial revision
drewp
parents:
diff changeset
4
45b12307c695 Initial revision
drewp
parents:
diff changeset
5 FUQ (frequently unasked question(s))
45b12307c695 Initial revision
drewp
parents:
diff changeset
6
45b12307c695 Initial revision
drewp
parents:
diff changeset
7 1. What's with all the *args?
45b12307c695 Initial revision
drewp
parents:
diff changeset
8
45b12307c695 Initial revision
drewp
parents:
diff changeset
9 It lets functions take any number of arguments and throw them away.
45b12307c695 Initial revision
drewp
parents:
diff changeset
10 Callbacks do this, and we typically don't care about what they have to say. """
45b12307c695 Initial revision
drewp
parents:
diff changeset
11
45b12307c695 Initial revision
drewp
parents:
diff changeset
12 from Tix import *
45b12307c695 Initial revision
drewp
parents:
diff changeset
13 from uihelpers import FancyDoubleVar, get_selection
45b12307c695 Initial revision
drewp
parents:
diff changeset
14
45b12307c695 Initial revision
drewp
parents:
diff changeset
15 stdfont = ('Arial', 8)
45b12307c695 Initial revision
drewp
parents:
diff changeset
16 colors = ('lightBlue', 'lightPink', 'lightGreen', 'aquamarine1')
45b12307c695 Initial revision
drewp
parents:
diff changeset
17
45b12307c695 Initial revision
drewp
parents:
diff changeset
18 class SliderMapping:
45b12307c695 Initial revision
drewp
parents:
diff changeset
19 def __init__(self, color, default='disconnected', synced=0,
45b12307c695 Initial revision
drewp
parents:
diff changeset
20 extinputlevel=0, sublevel=0):
45b12307c695 Initial revision
drewp
parents:
diff changeset
21 self.color = color
45b12307c695 Initial revision
drewp
parents:
diff changeset
22 self.subname = StringVar() # name of submaster we're connected to
45b12307c695 Initial revision
drewp
parents:
diff changeset
23 self.subname.set(default)
45b12307c695 Initial revision
drewp
parents:
diff changeset
24 self.sublevel = DoubleVar() # scalelevel variable of that submaster
45b12307c695 Initial revision
drewp
parents:
diff changeset
25 # self.sublevel = FancyDoubleVar() # scalelevel variable of that submaster
45b12307c695 Initial revision
drewp
parents:
diff changeset
26 self.sublevel.set(sublevel)
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 self.synced = BooleanVar() # currently synced
45b12307c695 Initial revision
drewp
parents:
diff changeset
28 self.synced.set(synced)
45b12307c695 Initial revision
drewp
parents:
diff changeset
29 self.extlevel = DoubleVar() # external slider's input
45b12307c695 Initial revision
drewp
parents:
diff changeset
30 self.extlevel.set(extinputlevel)
45b12307c695 Initial revision
drewp
parents:
diff changeset
31 self.widgets = [] # list of widgets drawn
45b12307c695 Initial revision
drewp
parents:
diff changeset
32 self.sublabel = None # the label which represents a sub level.
45b12307c695 Initial revision
drewp
parents:
diff changeset
33 # we hold on to it so we can change its
45b12307c695 Initial revision
drewp
parents:
diff changeset
34 # textvariable
45b12307c695 Initial revision
drewp
parents:
diff changeset
35 self.statuslabel = None # tells us sync status
45b12307c695 Initial revision
drewp
parents:
diff changeset
36 self.lastbgcolor = None # last background color drawn to avoid
45b12307c695 Initial revision
drewp
parents:
diff changeset
37 # unnecessary redraws
45b12307c695 Initial revision
drewp
parents:
diff changeset
38 self.subnames = [] # we need to keep track of this for idiotic reasons
45b12307c695 Initial revision
drewp
parents:
diff changeset
39 def sync(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
40 self.synced.set(1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
41 self.color_bg()
45b12307c695 Initial revision
drewp
parents:
diff changeset
42 def unsync(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
43 self.synced.set(0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
44 self.color_bg()
45b12307c695 Initial revision
drewp
parents:
diff changeset
45 def issynced(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
46 return self.synced.get()
45b12307c695 Initial revision
drewp
parents:
diff changeset
47 def disconnect(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
48 self.set_subname('disconnected') # a bit hack-like
45b12307c695 Initial revision
drewp
parents:
diff changeset
49 # self.sublevel.delete_named('sync')
45b12307c695 Initial revision
drewp
parents:
diff changeset
50 '''
45b12307c695 Initial revision
drewp
parents:
diff changeset
51 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
52 if self.sublevel.unsync_trace_cbname is not None:
45b12307c695 Initial revision
drewp
parents:
diff changeset
53 # self.sublevel.trace_vdelete('w',
45b12307c695 Initial revision
drewp
parents:
diff changeset
54 # self.sublevel.unsync_trace_cbname)
45b12307c695 Initial revision
drewp
parents:
diff changeset
55 self.sublevel._tk.call('trace', 'vdelete', self.sublevel._name,
45b12307c695 Initial revision
drewp
parents:
diff changeset
56 'w', self.sublevel.unsync_trace_cbname)
45b12307c695 Initial revision
drewp
parents:
diff changeset
57 self.sublevel.unsync_trace_cbname = None
45b12307c695 Initial revision
drewp
parents:
diff changeset
58 except AttributeError:
45b12307c695 Initial revision
drewp
parents:
diff changeset
59 pass
45b12307c695 Initial revision
drewp
parents:
diff changeset
60 '''
45b12307c695 Initial revision
drewp
parents:
diff changeset
61
45b12307c695 Initial revision
drewp
parents:
diff changeset
62 self.sublabel.configure(text="N/A")
45b12307c695 Initial revision
drewp
parents:
diff changeset
63 self.color_bg()
45b12307c695 Initial revision
drewp
parents:
diff changeset
64 def isdisconnected(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
65 return self.subname.get() == 'disconnected' # a bit more hack-like
45b12307c695 Initial revision
drewp
parents:
diff changeset
66 def check_synced(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
67 'If external level is near than the sublevel, it synces'
45b12307c695 Initial revision
drewp
parents:
diff changeset
68 if self.isdisconnected():
45b12307c695 Initial revision
drewp
parents:
diff changeset
69 self.unsync()
45b12307c695 Initial revision
drewp
parents:
diff changeset
70 return
45b12307c695 Initial revision
drewp
parents:
diff changeset
71
45b12307c695 Initial revision
drewp
parents:
diff changeset
72 if abs(self.extlevel.get() - self.sublevel.get()) <= 0.02:
45b12307c695 Initial revision
drewp
parents:
diff changeset
73 self.sync()
45b12307c695 Initial revision
drewp
parents:
diff changeset
74 def changed_extinput(self, newlevel):
45b12307c695 Initial revision
drewp
parents:
diff changeset
75 'When a new external level is received, this incorporates it'
45b12307c695 Initial revision
drewp
parents:
diff changeset
76 self.extlevel.set(newlevel)
45b12307c695 Initial revision
drewp
parents:
diff changeset
77 self.check_synced()
45b12307c695 Initial revision
drewp
parents:
diff changeset
78 self.color_bg()
45b12307c695 Initial revision
drewp
parents:
diff changeset
79 def set_subname(self, newname):
45b12307c695 Initial revision
drewp
parents:
diff changeset
80 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
81 self.listbox.listbox.select_clear(0, END)
45b12307c695 Initial revision
drewp
parents:
diff changeset
82 except IndexError:
45b12307c695 Initial revision
drewp
parents:
diff changeset
83 pass
45b12307c695 Initial revision
drewp
parents:
diff changeset
84 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
85 newindex = self.subnames.index(newname)
45b12307c695 Initial revision
drewp
parents:
diff changeset
86 self.listbox.listbox.select_set(newindex)
45b12307c695 Initial revision
drewp
parents:
diff changeset
87 self.listbox.listbox.see(newindex)
45b12307c695 Initial revision
drewp
parents:
diff changeset
88 except ValueError:
45b12307c695 Initial revision
drewp
parents:
diff changeset
89 pass
45b12307c695 Initial revision
drewp
parents:
diff changeset
90
45b12307c695 Initial revision
drewp
parents:
diff changeset
91 self.subname.set(newname)
45b12307c695 Initial revision
drewp
parents:
diff changeset
92 self.unsync()
45b12307c695 Initial revision
drewp
parents:
diff changeset
93 self.color_bg()
45b12307c695 Initial revision
drewp
parents:
diff changeset
94 def color_bg(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
95 if self.widgets:
45b12307c695 Initial revision
drewp
parents:
diff changeset
96 if self.isdisconnected():
45b12307c695 Initial revision
drewp
parents:
diff changeset
97 color = 'honeyDew4'
45b12307c695 Initial revision
drewp
parents:
diff changeset
98 # stupid hack
45b12307c695 Initial revision
drewp
parents:
diff changeset
99 # elif abs(self.extlevel.get() - self.sublevel.get()) <= 0.02:
45b12307c695 Initial revision
drewp
parents:
diff changeset
100 elif self.issynced():
45b12307c695 Initial revision
drewp
parents:
diff changeset
101 color = 'honeyDew2'
45b12307c695 Initial revision
drewp
parents:
diff changeset
102 else: # unsynced
45b12307c695 Initial revision
drewp
parents:
diff changeset
103 color = 'red'
45b12307c695 Initial revision
drewp
parents:
diff changeset
104
45b12307c695 Initial revision
drewp
parents:
diff changeset
105 if self.statuslabel: # more stupid hackery
45b12307c695 Initial revision
drewp
parents:
diff changeset
106 if color == 'honeyDew2': # connected
45b12307c695 Initial revision
drewp
parents:
diff changeset
107 self.statuslabel['text'] = 'Sync'
45b12307c695 Initial revision
drewp
parents:
diff changeset
108 elif self.extlevel.get() < self.sublevel.get():
45b12307c695 Initial revision
drewp
parents:
diff changeset
109 self.statuslabel['text'] = 'No sync (go up)'
45b12307c695 Initial revision
drewp
parents:
diff changeset
110 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
111 self.statuslabel['text'] = 'No sync (go down)'
45b12307c695 Initial revision
drewp
parents:
diff changeset
112
45b12307c695 Initial revision
drewp
parents:
diff changeset
113 # print "color", color, "lastbgcolor", self.lastbgcolor
45b12307c695 Initial revision
drewp
parents:
diff changeset
114 if self.lastbgcolor == color: return
45b12307c695 Initial revision
drewp
parents:
diff changeset
115 for widget in self.widgets:
45b12307c695 Initial revision
drewp
parents:
diff changeset
116 widget.configure(bg=color)
45b12307c695 Initial revision
drewp
parents:
diff changeset
117 self.lastbgcolor = color
45b12307c695 Initial revision
drewp
parents:
diff changeset
118 def set_sublevel_var(self, newvar):
45b12307c695 Initial revision
drewp
parents:
diff changeset
119 'newvar is one of the variables in scalelevels'
45b12307c695 Initial revision
drewp
parents:
diff changeset
120
45b12307c695 Initial revision
drewp
parents:
diff changeset
121 if newvar is not self.sublevel:
45b12307c695 Initial revision
drewp
parents:
diff changeset
122 # self.sublevel.delete_named('sync')
45b12307c695 Initial revision
drewp
parents:
diff changeset
123 self.sublevel = newvar
45b12307c695 Initial revision
drewp
parents:
diff changeset
124 self.sublabel.configure(textvariable=newvar)
45b12307c695 Initial revision
drewp
parents:
diff changeset
125 # self.sublevel.trace_named('sync', lambda *args: self.unsync(*args))
45b12307c695 Initial revision
drewp
parents:
diff changeset
126 '''
45b12307c695 Initial revision
drewp
parents:
diff changeset
127 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
128 if self.sublevel.unsync_trace_cbname is not None:
45b12307c695 Initial revision
drewp
parents:
diff changeset
129 # remove an old trace
45b12307c695 Initial revision
drewp
parents:
diff changeset
130 self.sublevel.trace_vdelete('w',
45b12307c695 Initial revision
drewp
parents:
diff changeset
131 self.sublevel.unsync_trace_cbname)
45b12307c695 Initial revision
drewp
parents:
diff changeset
132 except AttributeError:
45b12307c695 Initial revision
drewp
parents:
diff changeset
133 pass # it didn't have one
45b12307c695 Initial revision
drewp
parents:
diff changeset
134
45b12307c695 Initial revision
drewp
parents:
diff changeset
135 self.sublevel = newvar
45b12307c695 Initial revision
drewp
parents:
diff changeset
136 self.sublevel.unsync_trace_cbname = self.sublevel.trace('w',
45b12307c695 Initial revision
drewp
parents:
diff changeset
137 self.unsync)
45b12307c695 Initial revision
drewp
parents:
diff changeset
138 '''
45b12307c695 Initial revision
drewp
parents:
diff changeset
139
45b12307c695 Initial revision
drewp
parents:
diff changeset
140 # if self.sublabel:
45b12307c695 Initial revision
drewp
parents:
diff changeset
141 # self.sublabel.configure(textvariable=newvar)
45b12307c695 Initial revision
drewp
parents:
diff changeset
142 self.check_synced()
45b12307c695 Initial revision
drewp
parents:
diff changeset
143 def get_mapping(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
144 'Get name of submaster currently mapped'
45b12307c695 Initial revision
drewp
parents:
diff changeset
145 return self.subname.get()
45b12307c695 Initial revision
drewp
parents:
diff changeset
146 def get_level_pair(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
147 'Returns suitable output for ExtSliderMapper.get_levels()'
45b12307c695 Initial revision
drewp
parents:
diff changeset
148 return (self.subname.get(), self.extlevel.get())
45b12307c695 Initial revision
drewp
parents:
diff changeset
149 def listbox_cb(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
150 selection = get_selection(self.listbox.listbox)
45b12307c695 Initial revision
drewp
parents:
diff changeset
151 self.disconnect()
45b12307c695 Initial revision
drewp
parents:
diff changeset
152 self.subname.set(self.subnames[selection])
45b12307c695 Initial revision
drewp
parents:
diff changeset
153 self.listbox.listbox.select_set(selection)
45b12307c695 Initial revision
drewp
parents:
diff changeset
154 def draw_interface(self, master, subnames):
45b12307c695 Initial revision
drewp
parents:
diff changeset
155 'Draw interface into master, given a list of submaster names'
45b12307c695 Initial revision
drewp
parents:
diff changeset
156 self.subnames = subnames
45b12307c695 Initial revision
drewp
parents:
diff changeset
157 frame = Frame(master, bg='black')
45b12307c695 Initial revision
drewp
parents:
diff changeset
158 self.listbox = ScrolledListBox(frame, scrollbar='y', bg='black')
45b12307c695 Initial revision
drewp
parents:
diff changeset
159 self.listbox.listbox.bind("<<ListboxSelect>>", self.listbox_cb, add=1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
160 self.listbox.listbox.configure(font=stdfont, exportselection=0,
45b12307c695 Initial revision
drewp
parents:
diff changeset
161 selectmode=BROWSE, bg='black', fg='white',
45b12307c695 Initial revision
drewp
parents:
diff changeset
162 selectbackground=self.color)
45b12307c695 Initial revision
drewp
parents:
diff changeset
163 self.listbox.vsb.configure(troughcolor=self.color)
45b12307c695 Initial revision
drewp
parents:
diff changeset
164 # self.listbox.listbox.insert(END, "disconnected")
45b12307c695 Initial revision
drewp
parents:
diff changeset
165 for s in subnames:
45b12307c695 Initial revision
drewp
parents:
diff changeset
166 self.listbox.listbox.insert(END, s)
45b12307c695 Initial revision
drewp
parents:
diff changeset
167 statframe = Frame(frame, bg='black')
45b12307c695 Initial revision
drewp
parents:
diff changeset
168
45b12307c695 Initial revision
drewp
parents:
diff changeset
169 self.statuslabel = Label(statframe, text="No sync", width=15,
45b12307c695 Initial revision
drewp
parents:
diff changeset
170 font=stdfont)
45b12307c695 Initial revision
drewp
parents:
diff changeset
171 self.statuslabel.grid(columnspan=2, sticky=W)
45b12307c695 Initial revision
drewp
parents:
diff changeset
172 ilabel = Label(statframe, text="Input", fg='blue', font=stdfont)
45b12307c695 Initial revision
drewp
parents:
diff changeset
173 ilabel.grid(row=1, sticky=W)
45b12307c695 Initial revision
drewp
parents:
diff changeset
174 extlabel = Label(statframe, textvariable=self.extlevel, width=5,
45b12307c695 Initial revision
drewp
parents:
diff changeset
175 font=stdfont)
45b12307c695 Initial revision
drewp
parents:
diff changeset
176 extlabel.grid(row=1, column=1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
177 rlabel = Label(statframe, text="Real", font=stdfont)
45b12307c695 Initial revision
drewp
parents:
diff changeset
178 rlabel.grid(row=2, sticky=W)
45b12307c695 Initial revision
drewp
parents:
diff changeset
179 self.sublabel = Label(statframe, text="N/A", width=5, font=stdfont)
45b12307c695 Initial revision
drewp
parents:
diff changeset
180 self.sublabel.grid(row=2, column=1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
181 disc_button = Button(statframe, text="Disconnect",
45b12307c695 Initial revision
drewp
parents:
diff changeset
182 command=self.disconnect, padx=0, pady=0, font=stdfont)
45b12307c695 Initial revision
drewp
parents:
diff changeset
183 disc_button.grid(row=3, columnspan=2)
45b12307c695 Initial revision
drewp
parents:
diff changeset
184 statframe.pack(side=BOTTOM, expand=1, fill=BOTH)
45b12307c695 Initial revision
drewp
parents:
diff changeset
185 self.listbox.pack(expand=1, fill=BOTH)
45b12307c695 Initial revision
drewp
parents:
diff changeset
186 frame.pack(side=LEFT, expand=1, fill=BOTH)
45b12307c695 Initial revision
drewp
parents:
diff changeset
187
45b12307c695 Initial revision
drewp
parents:
diff changeset
188 self.widgets = [frame, self.listbox, statframe, self.statuslabel,
45b12307c695 Initial revision
drewp
parents:
diff changeset
189 ilabel, extlabel, rlabel, self.sublabel, disc_button]
45b12307c695 Initial revision
drewp
parents:
diff changeset
190
45b12307c695 Initial revision
drewp
parents:
diff changeset
191 class ExtSliderMapper(Frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
192 def __init__(self, parent, sliderlevels, sliderinput,
45b12307c695 Initial revision
drewp
parents:
diff changeset
193 lightboard, filename='slidermapping', numsliders=4):
45b12307c695 Initial revision
drewp
parents:
diff changeset
194 'Slider levels is scalelevels, sliderinput is an ExternalInput object'
45b12307c695 Initial revision
drewp
parents:
diff changeset
195 Frame.__init__(self, parent, bg='black')
45b12307c695 Initial revision
drewp
parents:
diff changeset
196 self.parent = parent
45b12307c695 Initial revision
drewp
parents:
diff changeset
197 self.sliderlevels = sliderlevels
45b12307c695 Initial revision
drewp
parents:
diff changeset
198 self.sliderinput = sliderinput
45b12307c695 Initial revision
drewp
parents:
diff changeset
199 self.filename = filename
45b12307c695 Initial revision
drewp
parents:
diff changeset
200 self.numsliders = numsliders
45b12307c695 Initial revision
drewp
parents:
diff changeset
201 self.lightboard = lightboard
45b12307c695 Initial revision
drewp
parents:
diff changeset
202 self.file = None
45b12307c695 Initial revision
drewp
parents:
diff changeset
203
45b12307c695 Initial revision
drewp
parents:
diff changeset
204 # don't call setup, let them do that when scalelevels is created
45b12307c695 Initial revision
drewp
parents:
diff changeset
205 def setup(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
206 self.subnames = self.sliderlevels.keys()
45b12307c695 Initial revision
drewp
parents:
diff changeset
207 self.subnames.sort()
45b12307c695 Initial revision
drewp
parents:
diff changeset
208 self.presets = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
209 self.load_presets()
45b12307c695 Initial revision
drewp
parents:
diff changeset
210
45b12307c695 Initial revision
drewp
parents:
diff changeset
211 self.current_preset = StringVar() # name of current preset
45b12307c695 Initial revision
drewp
parents:
diff changeset
212 self.current_mappings = []
45b12307c695 Initial revision
drewp
parents:
diff changeset
213 for i, color in zip(range(self.numsliders), colors):
45b12307c695 Initial revision
drewp
parents:
diff changeset
214 self.current_mappings.append(SliderMapping(color))
45b12307c695 Initial revision
drewp
parents:
diff changeset
215
45b12307c695 Initial revision
drewp
parents:
diff changeset
216 self.draw_interface()
45b12307c695 Initial revision
drewp
parents:
diff changeset
217 def load_presets(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
218 self.presets = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
219 self.file = open(self.filename, 'r')
45b12307c695 Initial revision
drewp
parents:
diff changeset
220 lines = self.file.readlines()
45b12307c695 Initial revision
drewp
parents:
diff changeset
221 for l in lines:
45b12307c695 Initial revision
drewp
parents:
diff changeset
222 tokens = l[:-1].split('\t')
45b12307c695 Initial revision
drewp
parents:
diff changeset
223 name = tokens.pop(0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
224 self.presets[name] = tokens
45b12307c695 Initial revision
drewp
parents:
diff changeset
225 self.file.close()
45b12307c695 Initial revision
drewp
parents:
diff changeset
226 if args: # called from callback
45b12307c695 Initial revision
drewp
parents:
diff changeset
227 self.draw_interface()
45b12307c695 Initial revision
drewp
parents:
diff changeset
228 def save_presets(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
229 self.file = open(self.filename, 'w')
45b12307c695 Initial revision
drewp
parents:
diff changeset
230 self.file.seek(0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
231 preset_names = self.presets.keys()
45b12307c695 Initial revision
drewp
parents:
diff changeset
232 preset_names.sort()
45b12307c695 Initial revision
drewp
parents:
diff changeset
233 for p in preset_names:
45b12307c695 Initial revision
drewp
parents:
diff changeset
234 s = '\t'.join([p] + self.presets[p]) + '\n'
45b12307c695 Initial revision
drewp
parents:
diff changeset
235 self.file.write(s)
45b12307c695 Initial revision
drewp
parents:
diff changeset
236 self.file.close()
45b12307c695 Initial revision
drewp
parents:
diff changeset
237 def load_scalelevels(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
238 for slidermap in self.current_mappings:
45b12307c695 Initial revision
drewp
parents:
diff changeset
239 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
240 v = self.sliderlevels[slidermap.get_mapping()]
45b12307c695 Initial revision
drewp
parents:
diff changeset
241 slidermap.set_sublevel_var(v)
45b12307c695 Initial revision
drewp
parents:
diff changeset
242 # print "ESM: Yes submaster named", slidermap.get_mapping()
45b12307c695 Initial revision
drewp
parents:
diff changeset
243 except KeyError:
45b12307c695 Initial revision
drewp
parents:
diff changeset
244 name = slidermap.get_mapping()
45b12307c695 Initial revision
drewp
parents:
diff changeset
245 if name != 'disconnected':
45b12307c695 Initial revision
drewp
parents:
diff changeset
246 print "ESM: No submaster named", name
45b12307c695 Initial revision
drewp
parents:
diff changeset
247
45b12307c695 Initial revision
drewp
parents:
diff changeset
248 def get_levels(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
249 'Called by changelevels, returns a dict of new values for submasters'
45b12307c695 Initial revision
drewp
parents:
diff changeset
250 if not self.sliderinput: return {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
251
45b12307c695 Initial revision
drewp
parents:
diff changeset
252 self.load_scalelevels() # freshen our input from the submasters
45b12307c695 Initial revision
drewp
parents:
diff changeset
253
45b12307c695 Initial revision
drewp
parents:
diff changeset
254 for m, color in zip(self.current_mappings, colors):
45b12307c695 Initial revision
drewp
parents:
diff changeset
255 name = m.get_mapping()
45b12307c695 Initial revision
drewp
parents:
diff changeset
256 lastsub = self.subs_highlighted.get(color)
45b12307c695 Initial revision
drewp
parents:
diff changeset
257 if name is not lastsub:
45b12307c695 Initial revision
drewp
parents:
diff changeset
258 if lastsub is not None:
45b12307c695 Initial revision
drewp
parents:
diff changeset
259 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
260 self.lightboard.highlight_sub(lastsub, 'restore')
45b12307c695 Initial revision
drewp
parents:
diff changeset
261 except KeyError:
45b12307c695 Initial revision
drewp
parents:
diff changeset
262 pass
45b12307c695 Initial revision
drewp
parents:
diff changeset
263 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
264 self.lightboard.highlight_sub(name, color)
45b12307c695 Initial revision
drewp
parents:
diff changeset
265 except KeyError:
45b12307c695 Initial revision
drewp
parents:
diff changeset
266 pass
45b12307c695 Initial revision
drewp
parents:
diff changeset
267 self.subs_highlighted[color] = name
45b12307c695 Initial revision
drewp
parents:
diff changeset
268
45b12307c695 Initial revision
drewp
parents:
diff changeset
269 rawlevels = self.sliderinput.get_levels()
45b12307c695 Initial revision
drewp
parents:
diff changeset
270 for rawlev, slidermap in zip(rawlevels, self.current_mappings):
45b12307c695 Initial revision
drewp
parents:
diff changeset
271 slidermap.changed_extinput(rawlev)
45b12307c695 Initial revision
drewp
parents:
diff changeset
272
45b12307c695 Initial revision
drewp
parents:
diff changeset
273 return dict([m.get_level_pair()
45b12307c695 Initial revision
drewp
parents:
diff changeset
274 for m in self.current_mappings
45b12307c695 Initial revision
drewp
parents:
diff changeset
275 if m.issynced()])
45b12307c695 Initial revision
drewp
parents:
diff changeset
276 def draw_interface(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
277 self.subs_highlighted = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
278 subchoiceframe = Frame(self, bg='black')
45b12307c695 Initial revision
drewp
parents:
diff changeset
279 for m in self.current_mappings:
45b12307c695 Initial revision
drewp
parents:
diff changeset
280 m.draw_interface(subchoiceframe, self.subnames)
45b12307c695 Initial revision
drewp
parents:
diff changeset
281 subchoiceframe.pack()
45b12307c695 Initial revision
drewp
parents:
diff changeset
282
45b12307c695 Initial revision
drewp
parents:
diff changeset
283 presetframe = Frame(self, bg='black')
45b12307c695 Initial revision
drewp
parents:
diff changeset
284 Label(presetframe, text="Preset:", font=('Arial', 10), bg='black',
45b12307c695 Initial revision
drewp
parents:
diff changeset
285 fg='white').pack(side=LEFT)
45b12307c695 Initial revision
drewp
parents:
diff changeset
286 self.presetcombo = ComboBox(presetframe, variable=self.current_preset,
45b12307c695 Initial revision
drewp
parents:
diff changeset
287 editable=1, command=self.apply_preset,
45b12307c695 Initial revision
drewp
parents:
diff changeset
288 dropdown=1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
289 self.presetcombo.slistbox.configure(bg='black')
45b12307c695 Initial revision
drewp
parents:
diff changeset
290 self.presetcombo.slistbox.listbox.configure(bg='black', fg='white')
45b12307c695 Initial revision
drewp
parents:
diff changeset
291 self.presetcombo.entry.configure(bg='black', fg='white')
45b12307c695 Initial revision
drewp
parents:
diff changeset
292 self.draw_presets()
45b12307c695 Initial revision
drewp
parents:
diff changeset
293 self.presetcombo.pack(side=LEFT)
45b12307c695 Initial revision
drewp
parents:
diff changeset
294 Button(presetframe, text="Prev", padx=0, pady=0, bg='black',
45b12307c695 Initial revision
drewp
parents:
diff changeset
295 fg='white', font=stdfont,
45b12307c695 Initial revision
drewp
parents:
diff changeset
296 command=self.prev_preset).pack(side=LEFT)
45b12307c695 Initial revision
drewp
parents:
diff changeset
297 Button(presetframe, text="Next", padx=0, pady=0, bg='black',
45b12307c695 Initial revision
drewp
parents:
diff changeset
298 fg='white', font=stdfont,
45b12307c695 Initial revision
drewp
parents:
diff changeset
299 command=self.next_preset).pack(side=LEFT)
45b12307c695 Initial revision
drewp
parents:
diff changeset
300 Button(presetframe, text="Add", padx=0, pady=0, bg='black',
45b12307c695 Initial revision
drewp
parents:
diff changeset
301 fg='white', font=stdfont,
45b12307c695 Initial revision
drewp
parents:
diff changeset
302 command=self.add_preset).pack(side=LEFT)
45b12307c695 Initial revision
drewp
parents:
diff changeset
303 Button(presetframe, text="Delete", padx=0, pady=0, bg='black',
45b12307c695 Initial revision
drewp
parents:
diff changeset
304 fg='white', font=stdfont,
45b12307c695 Initial revision
drewp
parents:
diff changeset
305 command=self.delete_preset).pack(side=LEFT)
45b12307c695 Initial revision
drewp
parents:
diff changeset
306 Button(presetframe, text="Disconnect", padx=0, pady=0, bg='black',
45b12307c695 Initial revision
drewp
parents:
diff changeset
307 fg='white', font=stdfont,
45b12307c695 Initial revision
drewp
parents:
diff changeset
308 command=self.disconnect_all).pack(side=LEFT)
45b12307c695 Initial revision
drewp
parents:
diff changeset
309 Button(presetframe, text="Reload", padx=0, pady=0, bg='black',
45b12307c695 Initial revision
drewp
parents:
diff changeset
310 fg='white', font=stdfont,
45b12307c695 Initial revision
drewp
parents:
diff changeset
311 command=self.load_presets).pack(side=LEFT)
45b12307c695 Initial revision
drewp
parents:
diff changeset
312 presetframe.pack(side=BOTTOM)
45b12307c695 Initial revision
drewp
parents:
diff changeset
313 def apply_preset(self, preset):
45b12307c695 Initial revision
drewp
parents:
diff changeset
314 if not preset: return
45b12307c695 Initial revision
drewp
parents:
diff changeset
315 preset_mapping = self.presets.get(preset)
45b12307c695 Initial revision
drewp
parents:
diff changeset
316 if not preset_mapping: return
45b12307c695 Initial revision
drewp
parents:
diff changeset
317 self.disconnect_all()
45b12307c695 Initial revision
drewp
parents:
diff changeset
318 for subname, slidermap in zip(preset_mapping, self.current_mappings):
45b12307c695 Initial revision
drewp
parents:
diff changeset
319 slidermap.set_subname(subname)
45b12307c695 Initial revision
drewp
parents:
diff changeset
320 def change_preset_by_index(self, delta):
45b12307c695 Initial revision
drewp
parents:
diff changeset
321 preset_names = self.presets.keys()
45b12307c695 Initial revision
drewp
parents:
diff changeset
322 preset_names.sort()
45b12307c695 Initial revision
drewp
parents:
diff changeset
323 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
324 next = preset_names[preset_names.index(self.current_preset.get())
45b12307c695 Initial revision
drewp
parents:
diff changeset
325 + delta]
45b12307c695 Initial revision
drewp
parents:
diff changeset
326 self.current_preset.set(next)
45b12307c695 Initial revision
drewp
parents:
diff changeset
327 self.apply_preset(next)
45b12307c695 Initial revision
drewp
parents:
diff changeset
328 except (IndexError, ValueError):
45b12307c695 Initial revision
drewp
parents:
diff changeset
329 print "Light 8.8: Can't go in that direction. Dig up!"
45b12307c695 Initial revision
drewp
parents:
diff changeset
330 def next_preset(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
331 self.change_preset_by_index(1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
332 def prev_preset(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
333 self.change_preset_by_index(-1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
334 def delete_preset(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
335 del self.presets[self.current_preset.get()]
45b12307c695 Initial revision
drewp
parents:
diff changeset
336 self.presetcombo.slistbox.listbox.delete(0, END)
45b12307c695 Initial revision
drewp
parents:
diff changeset
337 self.draw_presets()
45b12307c695 Initial revision
drewp
parents:
diff changeset
338 self.save_presets()
45b12307c695 Initial revision
drewp
parents:
diff changeset
339 def add_preset(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
340 self.presets[self.current_preset.get()] = [m.get_mapping()
45b12307c695 Initial revision
drewp
parents:
diff changeset
341 for m in self.current_mappings]
45b12307c695 Initial revision
drewp
parents:
diff changeset
342 self.presetcombo.slistbox.listbox.delete(0, END)
45b12307c695 Initial revision
drewp
parents:
diff changeset
343 self.draw_presets()
45b12307c695 Initial revision
drewp
parents:
diff changeset
344 self.save_presets()
45b12307c695 Initial revision
drewp
parents:
diff changeset
345 self.draw_interface()
45b12307c695 Initial revision
drewp
parents:
diff changeset
346 def draw_presets(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
347 preset_names = self.presets.keys()
45b12307c695 Initial revision
drewp
parents:
diff changeset
348 preset_names.sort()
45b12307c695 Initial revision
drewp
parents:
diff changeset
349 for p in preset_names:
45b12307c695 Initial revision
drewp
parents:
diff changeset
350 self.presetcombo.slistbox.listbox.insert(END, p)
45b12307c695 Initial revision
drewp
parents:
diff changeset
351 def disconnect_all(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
352 for m in self.current_mappings:
45b12307c695 Initial revision
drewp
parents:
diff changeset
353 m.disconnect()