diff bin/lightsim @ 463:60b49f6c2027

start porting lightsim to qt
author drewp@bigasterisk.com
date Mon, 01 Sep 2008 00:41:29 +0000
parents c6aabf5bd3bc
children f69ba5ac17c5
line wrap: on
line diff
--- a/bin/lightsim	Wed Jun 18 07:19:53 2008 +0000
+++ b/bin/lightsim	Mon Sep 01 00:41:29 2008 +0000
@@ -2,31 +2,30 @@
 
 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, tksupport
+from twisted.internet import reactor
 from twisted.internet.task import LoopingCall
 from twisted.web.xmlrpc import Proxy
-import xmlrpclib, sys, logging
+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)
-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):
+def poll(graph, serv, pollFreq, oglSurface):
     pollFreq.update()
     dispatcher.send("status", key="pollFreq", value=str(pollFreq))
     d = serv.callRemote("currentlevels", dmxclient._id)
@@ -45,11 +44,11 @@
                 for imgPath in graph.objects(lyr, L9['path']):
                     level[str(imgPath)] = lev
 
-        ogl.newLevels(levels=level)
+        oglSurface.newLevels(levels=level)
     d.addCallback(received)
     return d
 
-class StatusKeys(tk.Frame):
+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):
@@ -69,31 +68,51 @@
             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')
 
 
+class Window(QtGui.QMainWindow):
+    def __init__(self, filenames):
+        QtGui.QMainWindow.__init__(self, None)
 
-serv = Proxy(networking.dmxServerUrl())
-LoopingCall(poll, graph, serv, pollFreq).start(.1)
+        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)
 
-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)
+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
 
-prof.run(reactor.run, profile=False)
+    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)