Mercurial > code > home > repos > light9
comparison bin/keyboardcomposer @ 955:c0f7fc86f89b
fix up hardware sliders in KC. big mess now
Ignore-this: 28956846058bf05ad44d9eeea2796c75
author | drewp@bigasterisk.com |
---|---|
date | Sat, 15 Jun 2013 06:09:57 +0000 |
parents | 8bdd2d35ea61 |
children | 901884392e24 |
comparison
equal
deleted
inserted
replaced
954:8152b1dd8a2f | 955:c0f7fc86f89b |
---|---|
62 class SubmasterBox(Frame): | 62 class SubmasterBox(Frame): |
63 """ | 63 """ |
64 this object owns the level of the submaster (the rdf graph is the | 64 this object owns the level of the submaster (the rdf graph is the |
65 real authority) | 65 real authority) |
66 """ | 66 """ |
67 def __init__(self, master, sub, session): | 67 def __init__(self, master, sub, session, col, row): |
68 self.sub = sub | 68 self.sub = sub |
69 self.session = session | 69 self.session = session |
70 self.col, self.row = col, row | |
70 bg = sub.graph.value(sub.uri, L9.color, default='#000000') | 71 bg = sub.graph.value(sub.uri, L9.color, default='#000000') |
71 rgb = webcolors.hex_to_rgb(bg) | 72 rgb = webcolors.hex_to_rgb(bg) |
72 hsv = colorsys.rgb_to_hsv(*[x/255 for x in rgb]) | 73 hsv = colorsys.rgb_to_hsv(*[x/255 for x in rgb]) |
73 darkBg = webcolors.rgb_to_hex(tuple([x * 255 for x in colorsys.hsv_to_rgb( | 74 darkBg = webcolors.rgb_to_hex(tuple([x * 255 for x in colorsys.hsv_to_rgb( |
74 hsv[0], hsv[1], .3)])) | 75 hsv[0], hsv[1], .3)])) |
94 self._slider_var_trace = self.slider_var.trace('w', self.slider_changed) | 95 self._slider_var_trace = self.slider_var.trace('w', self.slider_changed) |
95 | 96 |
96 sub.graph.addHandler(self.updateLevelFromGraph) | 97 sub.graph.addHandler(self.updateLevelFromGraph) |
97 | 98 |
98 # initial position | 99 # initial position |
99 # self.send_to_hw(sub.name, col + 1) # needs fix | 100 # stil need? dispatcher.send("send_to_hw", sub=sub.uri, hwCol=col + 1) |
100 | 101 |
101 def cleanup(self): | 102 def cleanup(self): |
102 self.slider_var.trace_vdelete('w', self._slider_var_trace) | 103 self.slider_var.trace_vdelete('w', self._slider_var_trace) |
103 | 104 |
104 def slider_changed(self, *args): | 105 def slider_changed(self, *args): |
105 self.scale.draw_indicator_colors() | 106 self.scale.draw_indicator_colors() |
106 | 107 |
107 if self.pauseTrace: | 108 if self.pauseTrace: |
108 return | 109 return |
109 self.updateGraphWithLevel(self.sub.uri, self.slider_var.get()) | 110 self.updateGraphWithLevel(self.sub.uri, self.slider_var.get()) |
110 # dispatcher.send("level changed") # in progress | |
111 ###self.send_levels() # use dispatcher? | |
112 | 111 |
113 # needs fixing: plan is to use dispatcher or a method call to tell a hardware-mapping object who changed, and then it can make io if that's a current hw slider | 112 # needs fixing: plan is to use dispatcher or a method call to tell a hardware-mapping object who changed, and then it can make io if that's a current hw slider |
114 #if rowcount == self.current_row: | 113 dispatcher.send("send_to_hw", sub=self.sub.uri, hwCol=self.col + 1, |
115 # self.send_to_hw(sub.name, col + 1) | 114 boxRow=self.row) |
116 | 115 |
117 def updateGraphWithLevel(self, uri, level): | 116 def updateGraphWithLevel(self, uri, level): |
118 """in our per-session graph, we maintain SubSetting objects like this: | 117 """in our per-session graph, we maintain SubSetting objects like this: |
119 | 118 |
120 ?session :subSetting [a :SubSetting; :sub ?s; :level ?l] | 119 ?session :subSetting [a :SubSetting; :sub ?s; :level ?l] |
234 if col == 0 or group != last_group: | 233 if col == 0 or group != last_group: |
235 row = self.make_row(group) | 234 row = self.make_row(group) |
236 rowcount += 1 | 235 rowcount += 1 |
237 col = 0 | 236 col = 0 |
238 | 237 |
239 subbox = SubmasterBox(row, sub, self.session) | 238 subbox = SubmasterBox(row, sub, self.session, col, rowcount) |
240 subbox.place(relx=col / 8, rely=0, relwidth=1 / 8, relheight=1) | 239 subbox.place(relx=col / 8, rely=0, relwidth=1 / 8, relheight=1) |
241 self.subbox[sub.uri] = self.slider_table[(rowcount, col)] = subbox | 240 self.subbox[sub.uri] = self.slider_table[(rowcount, col)] = subbox |
242 | 241 |
243 self.setup_key_nudgers(subbox.scale) | 242 self.setup_key_nudgers(subbox.scale) |
244 | 243 |
260 self.sliders = Sliders(self) | 259 self.sliders = Sliders(self) |
261 except IOError: | 260 except IOError: |
262 log.info("no hardware sliders") | 261 log.info("no hardware sliders") |
263 self.sliders = DummySliders() | 262 self.sliders = DummySliders() |
264 self.use_hw_sliders = False | 263 self.use_hw_sliders = False |
264 dispatcher.connect(self.send_to_hw, 'send_to_hw') | |
265 else: | 265 else: |
266 self.sliders = DummySliders() | 266 self.sliders = DummySliders() |
267 | 267 |
268 def make_key_hints(self): | 268 def make_key_hints(self): |
269 keyhintrow = Frame(self) | 269 keyhintrow = Frame(self) |
347 # unfilled bottom row has holes (plus rows with incomplete | 347 # unfilled bottom row has holes (plus rows with incomplete |
348 # groups | 348 # groups |
349 self.sliders.valueOut("button-upper%d" % col, False) | 349 self.sliders.valueOut("button-upper%d" % col, False) |
350 self.sliders.valueOut("slider%d" % col, 0) | 350 self.sliders.valueOut("slider%d" % col, 0) |
351 continue | 351 continue |
352 self.send_to_hw(subbox.name, col) | 352 self.send_to_hw(sub=subbox.sub.uri, hwCol=col, |
353 boxRow=self.current_row) | |
353 | 354 |
354 def got_nudger(self, number, direction, full=0): | 355 def got_nudger(self, number, direction, full=0): |
355 try: | 356 try: |
356 subbox = self.slider_table[(self.current_row, number)] | 357 subbox = self.slider_table[(self.current_row, number)] |
357 except KeyError: | 358 except KeyError: |
372 value = int(value * 100) / 100 | 373 value = int(value * 100) / 100 |
373 try: | 374 try: |
374 subbox = self.slider_table[(self.current_row, col)] | 375 subbox = self.slider_table[(self.current_row, col)] |
375 except KeyError: | 376 except KeyError: |
376 return # no slider assigned at that column | 377 return # no slider assigned at that column |
377 subbox.scale.set(value) | 378 subbox.slider_var.set(value) |
378 | 379 |
379 def send_to_hw(self, subUri, hwNum): | 380 def send_to_hw(self, sub, hwCol, boxRow): |
380 if isinstance(self.sliders, DummySliders): | 381 if isinstance(self.sliders, DummySliders): |
381 return | 382 return |
382 | 383 |
383 v = round(127 * self.slider_vars[subUri].get()) | 384 assert isinstance(sub, URIRef), repr(subUri) |
384 chan = "slider%s" % hwNum | 385 |
386 if boxRow != self.current_row: | |
387 return | |
388 | |
389 try: | |
390 level = self.get_levels()[sub] | |
391 except KeyError: | |
392 log.warn("%r not in %r", sub, self.get_levels()) | |
393 raise | |
394 v = round(127 * level) | |
395 chan = "slider%s" % hwCol | |
385 | 396 |
386 # workaround for some rounding issue, where we receive one | 397 # workaround for some rounding issue, where we receive one |
387 # value and then decide to send back a value that's one step | 398 # value and then decide to send back a value that's one step |
388 # lower. -5 is a fallback for having no last value. hopefully | 399 # lower. -5 is a fallback for having no last value. hopefully |
389 # we won't really see it | 400 # we won't really see it |