Files @ 63f82ec045bf
Branch filter:

Location: light9/flax/TimelineDMX.py-merge

drewp@bigasterisk.com
don't stop midi input on a handler error
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()