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