Files @ 97c08a1c4351
Branch filter:

Location: light9/flax/TimelineDMX.py-merge

David McClosky
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
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()