Mercurial > code > home > repos > light9
view flax/TimelineDMX.py-merge @ 271:97c08a1c4351
gyrocontroller: remap buttons, fix keep mode
Also, solo mode is now default, colors are brighter, numeric names for subs
are converted to subs with only that channel up, send zeroes when exiting
author | David McClosky <dmcc@bigasterisk.com> |
---|---|
date | Fri, 17 Jun 2005 04:23:07 +0000 |
parents | 851cf44cea40 |
children |
line wrap: on
line source
import sys, time, socket sys.path.append("../light8") import Tix as tk import Patch, Timeline, dmxclient, xmlrpclib import TheShow Patch.reload_data() <<<<<<< TimelineDMX.py class ShowRunner(tk.Frame): def __init__(self, master): tk.Frame.__init__(self, master) self.master = master self.lastsenttime=0 # time of last send to dmx server self.lastsentlevels=None # levels last sent to dmx server self.show = TheShow.show ======= class ShowRunner(tk.Frame): def __init__(self, master, show): tk.Frame.__init__(self, master) self.master = master self.show = show >>>>>>> 1.2 self.find_player() <<<<<<< TimelineDMX.py self.draw_ui() def draw_ui(self): self.build_timeline_list() self.draw_buttons() def draw_buttons(self): self.buttonframe = tk.Frame(self, bd=2, relief='raised') self.refreshbutton = tk.Button(self.buttonframe, command=self.refresh, text="Refresh", bg='blue') self.refreshbutton.pack() self.nothing = tk.Button(self.buttonframe, \ command=lambda: self.set_timeline(None), text="Nothing", \ bg='red') self.nothing.pack() self.buttonframe.pack() def build_timeline_list(self): self.tl_list = tk.Frame(self) timelines = self.show.get_timelines() timelines.sort() for tl in timelines: b=tk.Button(self.tl_list,text=tl, anchor='w',pady=1) b.config(command=lambda tl=tl: self.set_timeline(tl)) b.pack(side='top',fill='x') self.tl_list.pack() def set_timeline(self, tlname): print "TimelineDMX: set timeline to", tlname self.show.set_timeline(tlname) ======= self.build_timeline_list() def build_timeline_list(self): self.tl_list = tk.Frame(self) for tl in self.show.get_timelines(): b=tk.Button(self.tl_list,text=tl, anchor='w',pady=1) b.config(command=lambda tl=tl: self.set_timeline(tl)) b.pack(side='top',fill='x') self.tl_list.pack() def set_timeline(self, tlname): print "TimelineDMX: set timeline to", tlname self.show.set_timeline(tlname) >>>>>>> 1.2 def find_player(self): self.player = xmlrpclib.Server("http://dash:8040") def send_levels(self): <<<<<<< TimelineDMX.py try: # avoid sending the same levels too often (send only # when there's a change, or if a second has passed) levels = self.show.calc_active_submaster().get_dmx_list() if levels!=self.lastsentlevels or time.time()>self.lastsenttime+1: dmxclient.outputlevels(levels) self.lastsentlevels=levels[:] self.lastsenttime=time.time() except AttributeError: # hackified! pass ======= levels = self.show.calc_active_submaster().get_dmx_list() dmxclient.outputlevels(levels) >>>>>>> 1.2 def sync_times(self): try: playtime = self.player.gettime() self.show.set_time(playtime) except socket.error, e: print "Server error %s, waiting"%e time.sleep(2) def mainloop(self): try: while 1: self.sync_times() self.send_levels() time.sleep(0.01) self.master.update() except KeyboardInterrupt: sys.exit(0) def refresh(self): print "refresh..." # :) # print "reserved for future feature" import TheShow self.show = TheShow.show self.tl_list.destroy() self.buttonframe.destroy() self.draw_ui() if __name__ == "__main__": <<<<<<< TimelineDMX.py root = tk.Tk() s = ShowRunner(root) # s.show.set_timeline('song01') s.pack() import atexit def stop_sending_levels(): s.set_timeline(None) dmxclient.outputlevels([]) atexit.register(stop_sending_levels) import sys try: timelinename = sys.argv[1] s.set_timeline(timelinename) root.withdraw() except: # uh oh pass ======= root = tk.Tk() s = ShowRunner(root, TheShow.show) s.show.set_timeline('strobe test') s.pack() >>>>>>> 1.2 s.mainloop()