Files @ 62bea321edbf
Branch filter:

Location: light9/bin/lightsim

drewp@bigasterisk.com
fix illegal import
#!/usr/bin/python

from __future__ import division
import run_local
import xmlrpclib, sys, logging

sys.path.append("lib")
import qt4reactor
qt4reactor.install()

from rdflib import Literal, URIRef
from twisted.internet import reactor
from twisted.internet.task import LoopingCall
from twisted.web.xmlrpc import Proxy
from louie import dispatcher
from PyQt4 import QtCore, QtGui, QtOpenGL
from OpenGL.GL import *
from OpenGL.GLU import *

from light9 import networking, Patch, showconfig, dmxclient, updatefreq, prof
from light9.namespaces import L9
from lightsim.openglsim import Surface

log = logging.getLogger()
logging.basicConfig(format="%(asctime)s %(levelname)-5s %(name)s %(filename)s:%(lineno)d: %(message)s")
log.setLevel(logging.DEBUG)

def poll(graph, serv, pollFreq, oglSurface):
    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

        oglSurface.newLevels(levels=level)
    d.addCallback(received)
    return d

class StatusKeys(object):
    # 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)



class Window(QtGui.QMainWindow):
    def __init__(self, filenames):
        QtGui.QMainWindow.__init__(self, None)

        self.w = QtGui.QWidget()
        self.setCentralWidget(self.w)
        
        self.glWidget = Surface(self, filenames,
                                width=120*3, height=80*3,
                                imgRescaleTo=128)

        self.glWidget.newLevels(levels={
            "lightsim/skyline/front-left.png" : .4,
            "lightsim/skyline/front-right.png" : .8})

        mainLayout = QtGui.QHBoxLayout()
        mainLayout.addWidget(self.glWidget)
        self.w.setLayout(mainLayout)

        self.setWindowTitle(dmxclient._id)

if __name__ == '__main__':
    app = reactor.qApp

    graph = showconfig.getGraph()
    filenames = []
    for lyr in graph.objects(None, L9['previewLayer']):
        for p in graph.objects(lyr, L9['path']):
            filenames.append(str(p))
    filenames.append("lightsim/skyline/front-left.png") # test
    filenames.append("lightsim/skyline/front-right.png") # test

    window = Window(filenames)
    window.show()

    serv = Proxy(networking.dmxServerUrl())
    pollFreq = updatefreq.Updatefreq(samples=5)
    LoopingCall(poll, graph, serv, pollFreq, window.glWidget).start(.1)

    reactor.run()


######################################################
#sk = StatusKeys(root)
#sk.pack(side='top', fill='x')
#prof.run(reactor.run, profile=False)