#!/usr/bin/python from __future__ import division import run_local from rdflib import Literal, URIRef from twisted.internet import reactor, tksupport from twisted.internet.task import LoopingCall from twisted.web.xmlrpc import Proxy import xmlrpclib, sys, logging log = logging.getLogger() logging.basicConfig(format="%(asctime)s %(levelname)-5s %(name)s %(filename)s:%(lineno)d: %(message)s") log.setLevel(logging.DEBUG) import Tkinter as tk from light9 import networking, Patch, showconfig, dmxclient, updatefreq, prof from light9.namespaces import L9 from louie import dispatcher try: from OpenGL import Tk as Togl from OpenGL.GL import * except ImportError: sys.path.append("/usr/lib/python2.4/site-packages/OpenGL/Tk/linux2-tk8.4") from OpenGL.GL import * import Togl from lightsim.openglsim import Surface def poll(graph, serv, pollFreq): pollFreq.update() dispatcher.send("status", key="pollFreq", value=str(pollFreq)) d = serv.callRemote("currentlevels", dmxclient._id) def received(dmxLevels): level = {} # filename : level for i, lev in enumerate(dmxLevels): if lev == 0: continue try: chan = Patch.get_channel_uri(Patch.get_channel_name(i + 1)) except KeyError: continue for lyr in graph.objects(chan, L9['previewLayer']): for imgPath in graph.objects(lyr, L9['path']): level[str(imgPath)] = lev ogl.newLevels(levels=level) d.addCallback(received) return d class StatusKeys(tk.Frame): # watch out- this might be an accidental redo of what curvecalc # has. Or, maybe CC should use this obj def __init__(self, master): tk.Frame.__init__(self, master) dispatcher.connect(self.status, "status") self.row = {} # key name : (Frame, value Label) def status(self, key, value): if key not in self.row: f = tk.Frame(self) f.pack(side='top') tk.Label(f, text=key, font="arial 8").pack(side='left') l = tk.Label(f, text=value, font="arial 8") l.pack(side='left') self.row[key] = (f, l) else: row, lab = self.row[key] lab.config(text=value) root = tk.Frame() root.pack(expand=True, fill='both') pollFreq = updatefreq.Updatefreq(samples=5) graph = showconfig.getGraph() filenames = [] for lyr in graph.objects(None, L9['previewLayer']): for p in graph.objects(lyr, L9['path']): filenames.append(str(p)) ogl = Surface(root, filenames, width=120, height=80, imgRescaleTo=128) ogl.pack(side='top', expand=True, fill='both') sk = StatusKeys(root) sk.pack(side='top', fill='x') serv = Proxy(networking.dmxServerUrl()) LoopingCall(poll, graph, serv, pollFreq).start(.1) top = root.winfo_toplevel() top.wm_title(dmxclient._id) top.bind("",lambda ev: reactor.stop) top.bind("",lambda ev: reactor.stop) top.protocol('WM_DELETE_WINDOW', reactor.stop) tksupport.install(ogl, ms=20) prof.run(reactor.run, profile=False)