summaryrefslogtreecommitdiffstats
path: root/DummyRig.py
diff options
context:
space:
mode:
Diffstat (limited to 'DummyRig.py')
-rw-r--r--DummyRig.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/DummyRig.py b/DummyRig.py
new file mode 100644
index 0000000..093a655
--- /dev/null
+++ b/DummyRig.py
@@ -0,0 +1,72 @@
+from Tkinter import *
+import re
+import threading
+import time
+
+def rgbToTkColor(r, g, b):
+ if not (0 <= r <= 1 and 0 <= g <= 1 and 0 <= b <= 1):
+ print "invalid r={}, g={}, b={}".format(r, g, b)
+ assert(False)
+
+ r_hex = int(r * 0xFF)
+ g_hex = int(g * 0xFF)
+ b_hex = int(b * 0xFF)
+ return "#{:02x}{:02x}{:02x}".format(r_hex, g_hex, b_hex)
+
+class DummyLight(object):
+ WIDTH_PX = 8
+ HEIGHT_PX = 20
+
+ def __init__(self, canvas):
+ self.canvas = canvas
+ self.color = (0, 0, 0)
+
+ def setRGBRaw(self, r, g, b):
+ self.color = (r, g, b)
+ self.canvas.itemconfig(self.rect_id, fill=rgbToTkColor(*self.color))
+
+
+class DummyRig(object):
+ def __init__(self, width, height):
+ self.width = width
+ self.height = height
+ self.margin = 5
+
+ def init(self):
+ self.root = Tk()
+ self.canvas = Canvas(self.root,
+ width=self.width*DummyLight.WIDTH_PX + self.margin*2,
+ height=self.height*DummyLight.HEIGHT_PX + self.margin*2)
+ self.canvas.pack()
+ self.root.resizable(width=0, height=0)
+
+ self.lights = [[DummyLight(self.canvas) for _ in xrange(self.height)]
+ for _ in xrange(self.width)]
+
+ self.rootThread = threading.Thread(target=self.root.mainloop)
+ self.rootThread.start()
+
+ self.initRects()
+
+ def select(self, pattern):
+ match = re.search("\$side=(.*?)\[\$sequence=(.*?)\]", pattern)
+ if match.group(1) == "bot":
+ y = 1
+ elif match.group(1) == "top":
+ y = 0
+
+ x = int(match.group(2)) - 1
+ return self.lights[x][y]
+
+ def updateOnce(self):
+ pass
+
+ def initRects(self):
+ for x in xrange(self.width):
+ for y in xrange(self.height):
+ light = self.lights[x][y]
+ x0 = self.margin + x * DummyLight.WIDTH_PX
+ y0 = self.margin + y * DummyLight.HEIGHT_PX
+ light.rect_id = self.canvas.create_rectangle(x0, y0, x0 + DummyLight.WIDTH_PX,
+ y0 + DummyLight.HEIGHT_PX,
+ width=1)