206
|
1 import sys, time, socket
|
|
2 sys.path.append("../light8")
|
|
3 import Tix as tk
|
|
4
|
|
5 import Patch, Timeline, dmxclient, xmlrpclib
|
|
6 import TheShow
|
|
7
|
|
8 Patch.reload_data()
|
|
9
|
|
10 <<<<<<< TimelineDMX.py
|
|
11 class ShowRunner(tk.Frame):
|
|
12 def __init__(self, master):
|
|
13 tk.Frame.__init__(self, master)
|
|
14 self.master = master
|
|
15
|
|
16 self.lastsenttime=0 # time of last send to dmx server
|
|
17 self.lastsentlevels=None # levels last sent to dmx server
|
|
18
|
|
19 self.show = TheShow.show
|
|
20 =======
|
|
21 class ShowRunner(tk.Frame):
|
|
22 def __init__(self, master, show):
|
|
23 tk.Frame.__init__(self, master)
|
|
24 self.master = master
|
|
25
|
|
26 self.show = show
|
|
27 >>>>>>> 1.2
|
|
28 self.find_player()
|
|
29 <<<<<<< TimelineDMX.py
|
|
30 self.draw_ui()
|
|
31
|
|
32 def draw_ui(self):
|
|
33 self.build_timeline_list()
|
|
34 self.draw_buttons()
|
|
35 def draw_buttons(self):
|
|
36 self.buttonframe = tk.Frame(self, bd=2, relief='raised')
|
|
37 self.refreshbutton = tk.Button(self.buttonframe, command=self.refresh,
|
|
38 text="Refresh", bg='blue')
|
|
39 self.refreshbutton.pack()
|
|
40 self.nothing = tk.Button(self.buttonframe, \
|
|
41 command=lambda: self.set_timeline(None), text="Nothing", \
|
|
42 bg='red')
|
|
43 self.nothing.pack()
|
|
44 self.buttonframe.pack()
|
|
45 def build_timeline_list(self):
|
|
46 self.tl_list = tk.Frame(self)
|
|
47 timelines = self.show.get_timelines()
|
|
48 timelines.sort()
|
|
49 for tl in timelines:
|
|
50 b=tk.Button(self.tl_list,text=tl,
|
|
51 anchor='w',pady=1)
|
|
52 b.config(command=lambda tl=tl: self.set_timeline(tl))
|
|
53 b.pack(side='top',fill='x')
|
|
54 self.tl_list.pack()
|
|
55 def set_timeline(self, tlname):
|
|
56 print "TimelineDMX: set timeline to", tlname
|
|
57 self.show.set_timeline(tlname)
|
|
58 =======
|
|
59 self.build_timeline_list()
|
|
60 def build_timeline_list(self):
|
|
61 self.tl_list = tk.Frame(self)
|
|
62 for tl in self.show.get_timelines():
|
|
63 b=tk.Button(self.tl_list,text=tl,
|
|
64 anchor='w',pady=1)
|
|
65 b.config(command=lambda tl=tl: self.set_timeline(tl))
|
|
66 b.pack(side='top',fill='x')
|
|
67 self.tl_list.pack()
|
|
68 def set_timeline(self, tlname):
|
|
69 print "TimelineDMX: set timeline to", tlname
|
|
70 self.show.set_timeline(tlname)
|
|
71 >>>>>>> 1.2
|
|
72 def find_player(self):
|
|
73 self.player = xmlrpclib.Server("http://dash:8040")
|
|
74 def send_levels(self):
|
|
75 <<<<<<< TimelineDMX.py
|
|
76 try:
|
|
77 # avoid sending the same levels too often (send only
|
|
78 # when there's a change, or if a second has passed)
|
|
79 levels = self.show.calc_active_submaster().get_dmx_list()
|
|
80 if levels!=self.lastsentlevels or time.time()>self.lastsenttime+1:
|
|
81 dmxclient.outputlevels(levels)
|
|
82 self.lastsentlevels=levels[:]
|
|
83 self.lastsenttime=time.time()
|
|
84
|
|
85 except AttributeError: # hackified!
|
|
86 pass
|
|
87 =======
|
|
88 levels = self.show.calc_active_submaster().get_dmx_list()
|
|
89
|
|
90 dmxclient.outputlevels(levels)
|
|
91 >>>>>>> 1.2
|
|
92 def sync_times(self):
|
|
93 try:
|
|
94 playtime = self.player.gettime()
|
|
95 self.show.set_time(playtime)
|
|
96 except socket.error, e:
|
|
97 print "Server error %s, waiting"%e
|
|
98 time.sleep(2)
|
|
99 def mainloop(self):
|
|
100 try:
|
|
101 while 1:
|
|
102 self.sync_times()
|
|
103 self.send_levels()
|
|
104 time.sleep(0.01)
|
|
105 self.master.update()
|
|
106 except KeyboardInterrupt:
|
|
107 sys.exit(0)
|
|
108 def refresh(self):
|
|
109 print "refresh..."
|
|
110 # :)
|
|
111 # print "reserved for future feature"
|
|
112 import TheShow
|
|
113 self.show = TheShow.show
|
|
114 self.tl_list.destroy()
|
|
115 self.buttonframe.destroy()
|
|
116 self.draw_ui()
|
|
117
|
|
118 if __name__ == "__main__":
|
|
119 <<<<<<< TimelineDMX.py
|
|
120 root = tk.Tk()
|
|
121 s = ShowRunner(root)
|
|
122 # s.show.set_timeline('song01')
|
|
123 s.pack()
|
|
124
|
|
125 import atexit
|
|
126 def stop_sending_levels():
|
|
127 s.set_timeline(None)
|
|
128 dmxclient.outputlevels([])
|
|
129 atexit.register(stop_sending_levels)
|
|
130
|
|
131 import sys
|
|
132 try:
|
|
133 timelinename = sys.argv[1]
|
|
134 s.set_timeline(timelinename)
|
|
135 root.withdraw()
|
|
136 except: # uh oh
|
|
137 pass
|
|
138
|
|
139 =======
|
|
140 root = tk.Tk()
|
|
141 s = ShowRunner(root, TheShow.show)
|
|
142 s.show.set_timeline('strobe test')
|
|
143 s.pack()
|
|
144 >>>>>>> 1.2
|
|
145 s.mainloop()
|