From f043247f4bc2f3c652e06c6a27386533b3b8bdbc Mon Sep 17 00:00:00 2001 From: Franziska Kunsmann Date: Wed, 11 Jan 2023 15:22:28 +0100 Subject: styling, improvements and stuff --- gui.py | 53 +++++++++++++++++++++++++++++------------------------ style.css | 2 +- switcher.py | 10 ++++++---- 3 files changed, 36 insertions(+), 29 deletions(-) diff --git a/gui.py b/gui.py index eb73bc3..8aa5abe 100644 --- a/gui.py +++ b/gui.py @@ -30,6 +30,8 @@ class PyATEMSwitcherGui(): self.switcher.on_connect(self._switcher_connected) self.switcher.on_connect_attempt(self._switcher_connect_attempt) self.switcher.on_disconnect(self._switcher_disconnected) + + self.switcher.on_connect(self._switcher_state_changed) self.switcher.on_receive(self._switcher_state_changed) self.window.set_border_width(BUTTON_SPACING) @@ -58,14 +60,15 @@ class PyATEMSwitcherGui(): ctx.remove_class('selected') def _switcher_connected(self, params): + switcher = params['switcher'] log = logging.getLogger('GUI connected') log.debug(f'_switcher_connected({params})') - log.info(f'Connected to "{params.atemModel}" @ {params.ip}') - self.header.props.title = f'{params.atemModel} @ {params.ip}' + log.info(f'Connected to "{switcher.atemModel}" @ {switcher.ip}') + self.header.props.title = f'{switcher.atemModel} @ {switcher.ip}' inputs = {} - for idx,i in enumerate(params.inputProperties): + for idx,i in enumerate(switcher.inputProperties): if not i.shortName: break log.debug(f'Creating Button for {i.shortName} of type {i.externalPortType}: {i.longName}') @@ -81,8 +84,6 @@ class PyATEMSwitcherGui(): self.buttons[f'in_{i.shortName}'] = (btn, idx) inputs.setdefault(str(i.externalPortType), []).append(btn) - log.debug(repr(inputs)) - log.debug('Creating vertically stacked box as container') self.box = Gtk.VBox(spacing=BUTTON_SPACING) @@ -90,19 +91,10 @@ class PyATEMSwitcherGui(): if input_type not in inputs: continue -# log.debug(f'Creating FlowBox for {input_type} buttons') -# flowbox = Gtk.VBox() -# flowbox.set_column_spacing(BUTTON_SPACING) -# flowbox.set_max_children_per_line(2) -# flowbox.set_row_spacing(BUTTON_SPACING) -# flowbox.set_selection_mode(Gtk.SelectionMode.NONE) -# flowbox.set_valign(Gtk.Align.START) - for btn in inputs[input_type]: self.box.pack_start(btn, True, True, 0) - #self.box.pack_start(flowbox, True, True, 0) - log.debug('All FlowBoxes added, adding box to window') + log.debug('All buttons added, adding box to window') self.window.add(self.box) self.window.show_all() self.log.debug('done') @@ -118,15 +110,28 @@ class PyATEMSwitcherGui(): self.header.props.title = 'PyATEMSwitcherGui: Not connected' def _switcher_state_changed(self, params): - source = params['switcher'].programInput[0].videoSource - sn = params['switcher'].inputProperties[source].shortName - for btn in self.buttons: - ctx = self.buttons[btn][0].get_style_context() - if btn == f'in_{sn}': - ctx.add_class('program') - else: - ctx.remove_class('program') - ctx.remove_class('selected') + cmd = params.get('cmd', 'PrgI') + + if cmd in ('PrgI', 'PrvI'): + pgm = params['switcher'].programInput[0].videoSource + prv = params['switcher'].previewInput[0].videoSource + pgm_n = params['switcher'].inputProperties[pgm].shortName + prv_n = params['switcher'].inputProperties[prv].shortName + for btn in self.buttons: + ctx = self.buttons[btn][0].get_style_context() + if btn == f'in_{pgm_n}': + ctx.add_class('program') + else: + ctx.remove_class('program') + if btn == f'in_{prv_n}' and pgm != prv: + ctx.add_class('preview') + else: + ctx.remove_class('preview') + ctx.remove_class('selected') + elif cmd == 'TrPs' and params['switcher'].transition[0].position == 0: + for btn in self.buttons: + ctx = self.buttons[btn][0].get_style_context() + ctx.remove_class('preview') def main_loop(self): self.switcher.connect() diff --git a/style.css b/style.css index 45da0e7..18108c0 100644 --- a/style.css +++ b/style.css @@ -4,7 +4,7 @@ button { } button.program { - background: #800000; + background: #A00000; color: #FFFFFF; } diff --git a/switcher.py b/switcher.py index e14dbad..c025ce7 100644 --- a/switcher.py +++ b/switcher.py @@ -44,17 +44,17 @@ class PyATEMSwitcher: self.log.debug(f'_on_connect({repr(params)})') self._push_config() for callback in self._connect_subscribers: - callback(params['switcher']) + callback(params) def _on_connect_attempt(self, params): self.log.debug(f'_on_connect_attempt({repr(params)})') for callback in self._connect_attempt_subscribers: - callback(params['switcher']) + callback(params) def _on_disconnect(self, params): self.log.debug(f'_on_disconnect({repr(params)})') for callback in self._disconnect_subscribers: - callback(params['switcher']) + callback(params) def _on_receive(self, params): self.log.debug(f'_on_receive({repr(params)})') @@ -110,7 +110,9 @@ class PyATEMSwitcher: def trans(self, input): self.log.debug(f'hehehehe trans({repr(input)})') - self.atem.setProgramInputVideoSource( + self.atem.setPreviewInputVideoSource( ATEMTransitionStyles.mix, input, ) + self.atem.setTransitionMixRate(0, 10) + self.atem.execAutoME(0) -- cgit v1.2.3