view flax/TimelineDMX.py @ 168:f8b5cb5fbeed

- CueFader is hopefully done: - CueFader is hopefully done: - The TimedGoButton accepts a wheel to change the times. You can also enter times directly. - TimedGoButton really has a default starting time of 2 now. (there was a variable attached to the wrong widget before) - We send DMX levels with dmxclient now. - Autoload Times is a new option. - We load times from the next cue if Autoload Times is true. - Time predictions in the LabelledScale are slightly better. You still can change the time of an active fade. - Cue cache and DMX level computing now have their own functions, which get called at (hopefully) All The Right Times. - There are even some docs now! - Cues: sub_level parsing is better, will only throw out one line if it encounters problems (instead of the rest of the cue) - CueList: lots of 0 vs. None bugs fixed. - TkCueList: stores a reference to the controlling fader so it can alert it about changed cues. - CueEditron: You can edit sub_levels now. - cuelist1 was edited, checking it in for consistency's sake
author dmcc
date Wed, 09 Jul 2003 03:59:40 +0000
parents 83e2c4ceb79a
children 3905d3c92aaa
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()

class ShowRunner(tk.Frame):
    def __init__(self, master, show):
        tk.Frame.__init__(self, master)
        self.master = master

        self.show = show
        self.find_player()
        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)
    def find_player(self):
        self.player = xmlrpclib.Server("http://localhost:8040")
    def send_levels(self):
        levels = self.show.calc_active_submaster().get_dmx_list()
        
        dmxclient.outputlevels(levels)
    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)

if __name__ == "__main__":
    root = tk.Tk()
    s = ShowRunner(root, TheShow.show)
    s.show.set_timeline('strobe test')
    s.pack()
    s.mainloop()