#!/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("<Control-Key-q>",lambda ev: reactor.stop)
top.bind("<Destroy>",lambda ev: reactor.stop)
top.protocol('WM_DELETE_WINDOW', reactor.stop)
tksupport.install(ogl, ms=20)
prof.run(reactor.run, profile=False)