diff options
| author | Raymond Hogenson <rayhogenson@openmailbox.org> | 2016-09-27 23:12:49 -0400 |
|---|---|---|
| committer | Raymond Hogenson <rayhogenson@openmailbox.org> | 2016-09-27 23:12:49 -0400 |
| commit | ed0c631003b556e2e84f21bf4ebbf03891763641 (patch) | |
| tree | ced193b8214d8c1bf7f1e8b4dd1d16d3c3e104d4 /DummyRig.py | |
| parent | 7dced453f7b53146a730ef77df30f152247dafe1 (diff) | |
| parent | 6e265cfa5002a5667681733eae08357f2b9695e5 (diff) | |
| download | bridge-ed0c631003b556e2e84f21bf4ebbf03891763641.tar.zst | |
Merge branch 'master' of github.com:rayhogenson/bridge
Diffstat (limited to 'DummyRig.py')
| -rw-r--r-- | DummyRig.py | 72 |
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) |
