summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Connors <benconnors@outlook.com>2019-10-30 13:15:07 -0400
committerBen Connors <benconnors@outlook.com>2019-10-30 13:15:07 -0400
commit2ffa83443b2333bef73f391517767259ad033495 (patch)
tree4fe27c74550263f4150d02344e8d8d43c08b0a47
parent91bbc033d03df9b71637fb6bb6ad9d8ec8bbfa9c (diff)
Implement live viewing of scenes when editing
-rw-r--r--interface/__main__.py3
-rw-r--r--interface/interface.py26
-rw-r--r--interface/render.py7
3 files changed, 29 insertions, 7 deletions
diff --git a/interface/__main__.py b/interface/__main__.py
index a8c2738..64b47cd 100644
--- a/interface/__main__.py
+++ b/interface/__main__.py
@@ -3,8 +3,9 @@ import os
import sys
from .interface import Interface
+from .dummy import DummyOutput
if len(sys.argv) > 2:
raise ValueError("Usage: %s [workspace file]" % sys.argv[0])
-Interface(sys.argv[1] if len(sys.argv) == 2 else None).main()
+Interface(sys.argv[1] if len(sys.argv) == 2 else None, DummyOutput()).main()
diff --git a/interface/interface.py b/interface/interface.py
index 32d9060..32fca84 100644
--- a/interface/interface.py
+++ b/interface/interface.py
@@ -22,6 +22,8 @@ from .chaserview import ChaserView
from .pager import Pager
from .dialog import askyesnocancel
from .audioview import AudioView
+from .render import Renderer
+from .dummy import DummyOutput
def wrap_curses(f):
def inner(*args, **kwargs):
@@ -103,6 +105,8 @@ class Interface:
self.channel_bank = AudioView(*yx, *hw)
self.channel_bank.audio = f
self.channel_bank.title = f.type + ' "%s"' % f.name
+ self.renderer.clear_hold()
+ self.renderer.hold(f.values)
def handle_enter(self, fid):
with self.w_lock:
@@ -222,6 +226,8 @@ class Interface:
self.channel_bank.set_scope(self.primitive.scope)
if v is not None:
self.channel_bank.set_values(((c, v) for c in channels))
+ self.renderer.clear_hold()
+ self.renderer.hold(self.primitive.values)
def scene_clear(self, cr):
self.scene_set(cr, None)
@@ -280,6 +286,7 @@ class Interface:
self.input.context = self.context_base
self.chaser = None
self.current_cv = None
+ self.renderer.clear_hold()
def base_save(self, path=None):
with self.w_lock:
@@ -518,7 +525,10 @@ class Interface:
self.primitive.filename = fname
self.channel_bank.audio = self.primitive
- def __init__(self, path):
+ def _render_callback(self, t, values):
+ pass
+
+ def __init__(self, path, output):
## Have to do most of the actual initialization in the main method, as curses isn't
## ready yet.
self.channel_bank = None
@@ -580,7 +590,7 @@ class Interface:
}, self.help)
self.context_chaser = Input.parse_context((
- ("select $num", self.chaser_select),
+ ("choose $num", self.chaser_select),
("edit", self.chaser_edit),
("edit $num", self.chaser_edit),
@@ -602,10 +612,10 @@ class Interface:
("rename chaser $quoted_string", self.chaser_rename_self),
("move $num to $num", self.chaser_move),
("move $num", self.chaser_move),
- ("fade in $time", self.chaser_fade),
- ("fade out $time", lambda t: self.chaser_fade(t, True)),
- ("length $time", self.chaser_duration),
- ("unset", self.chaser_unset),
+ ("set fade in $time", self.chaser_fade),
+ ("set fade out $time", lambda t: self.chaser_fade(t, True)),
+ ("set length $time", self.chaser_duration),
+ ("unbind", self.chaser_unset),
("bind $num", self.chaser_bind),
("list fixtures", self.list_fixtures),
@@ -669,3 +679,7 @@ class Interface:
("quit", self.audio_exit),
))
+
+ self.output = output
+ self.renderer = Renderer(self.w, self.w_lock, self.output, self._render_callback)
+ self.rendering = False
diff --git a/interface/render.py b/interface/render.py
index 5b6c934..be7d770 100644
--- a/interface/render.py
+++ b/interface/render.py
@@ -9,6 +9,8 @@ from blc2.topology import Fixture
class Renderer:
def hold(self, values):
with self._lock:
+ if isinstance(values, dict):
+ values = values.items()
for c, v in values:
if v is None:
if c in self._hold:
@@ -20,6 +22,11 @@ class Renderer:
## If not, just update now
self._update()
+ def clear_hold(self):
+ with self._lock:
+ self._hold = {}
+ self.hold(())
+
def _update(self):
with self._lock:
self._values = {c: (v if c not in self._hold else self._hold[c]) for c, v in self._last.items()}