From 0e845a0dca629b40166f95cf6d266181af605555 Mon Sep 17 00:00:00 2001 From: Ben Connors Date: Sat, 26 Oct 2019 21:57:45 -0400 Subject: Basically finish editing functionality - Can create, view, delete, edit audio functions o Integrated with chaser and base - Can rename functions - Can bind chaser steps to functions - Now confirms on exit --- interface/audioview.py | 109 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 interface/audioview.py (limited to 'interface/audioview.py') diff --git a/interface/audioview.py b/interface/audioview.py new file mode 100644 index 0000000..ebfe228 --- /dev/null +++ b/interface/audioview.py @@ -0,0 +1,109 @@ +import curses +import threading + +from .globals import CURSES_LOCK + +def format_time(t): + t = int(t/1000 + 0.5) + h = (t // 3600) + m = t % 3600 + + s = m % 60 + m = m // 60 + + if not m and not h: + return "%2ds" % s + elif not h: + return "%2dm%2ds" % (m, s) + return "%dh%2dm%2ds" % (h, m, s) + +class AudioView: + def set_dim(self, height, width): + with CURSES_LOCK, self._lock: + if (height, width) != (self._height, self._width): + self.win.erase() + self.win.refresh() + + self.win.resize(height, width) + self.win.redrawwin() + + self._height = height + self._width = width + self._refresh() + self.win.refresh() + + def set_pos(self, y, x): + with self._lock: + if (y, x) != (self._y, self._x): + with CURSES_LOCK: + self.win.mvwin(y, x) + self._put_title() + self.win.refresh() + + @property + def audio(self): + return self._audio + + @audio.setter + def audio(self, v): + with self._lock: + self._audio = v + self._refresh() + + @property + def title(self): + return self._title + + @title.setter + def title(self, value): + with self._lock: + self._title = value + self._put_title() + self.win.refresh() + + @property + def highlight(self): + return self._highlight + + @highlight.setter + def highlight(self, value): + with self._lock: + self._highlight = value + self._put_title() + self.win.refresh() + + def _put_title(self): + self.win.border() + pos = min(self._width-2-len(self._title), (3*self._width)//4 - (len(self._title) // 2)) + self.win.addstr(self._height-1, pos, self._title, curses.A_REVERSE if self._highlight else 0) + + def _refresh(self): + with CURSES_LOCK: + self.win.erase() + + if self._audio is not None: + self.win.addstr(1, 1, "Filename: "+str(self._audio.filename)) + self.win.addstr(2, 1, " Fade in: "+str(self._audio.fade_in)+"ms") + self.win.addstr(3, 1, "Duration: "+str(format_time(self._audio.duration))) + self.win.addstr(4, 1, "Fade out: "+str(self._audio.fade_out)+"ms") + + self._put_title() + self.win.refresh() + + def __init__(self, y, x, height, width): + with CURSES_LOCK: + self.win = curses.newwin(height, width, y, x) + self.win.keypad(True) + + self._lock = threading.RLock() + self._highlight = False + self._title = "Audio" + self._height = height + self._width = width + self._y = -1 + self._x = -1 + + self._audio = None + + self.set_pos(y, x) + self.set_dim(height, width) -- cgit v1.2.3