- import logging
- from gi.repository import Gtk
- from lib.config import Config
- import lib.connection as Connection
- class StreamblankToolbarController(object):
- """ Manages Accelerators and Clicks on the Composition Toolbar-Buttons """
- def __init__(self, drawing_area, win, uibuilder, warning_overlay):
- self.log = logging.getLogger('StreamblankToolbarController')
- self.warning_overlay = warning_overlay
- livebtn = uibuilder.find_widget_recursive(drawing_area, 'stream_live')
- blankbtn = uibuilder.find_widget_recursive(drawing_area, 'stream_blank')
- blankbtn_pos = drawing_area.get_item_index(blankbtn)
- if not Config.getboolean('stream-blanker', 'enabled'):
- self.log.info('disabling stream-blanker features because the server does not support them: %s', Config.getboolean('stream-blanker', 'enabled'))
- stream_blank_separator = uibuilder.find_widget_recursive(drawing_area, 'stream_blank_separator')
- drawing_area.remove(livebtn)
- drawing_area.remove(blankbtn)
- drawing_area.remove(stream_blank_separator)
- return
- blank_sources = Config.getlist('stream-blanker', 'sources')
- self.status_btns = {}
- self.current_status = None
- livebtn.connect('toggled', self.on_btn_toggled)
- livebtn.set_name('live')
- self.livebtn = livebtn
- self.blank_btns = {}
- for idx, name in enumerate(blank_sources):
- if idx == 0:
- new_btn = blankbtn
- else:
- new_icon = Gtk.Image.new_from_pixbuf(blankbtn.get_icon_widget().get_pixbuf())
- new_btn = Gtk.RadioToolButton(group=livebtn)
- new_btn.set_icon_widget(new_icon)
- drawing_area.insert(new_btn, blankbtn_pos+1)
- new_btn.set_label("Stream %s" % name)
- new_btn.connect('toggled', self.on_btn_toggled)
- new_btn.set_name(name)
- self.blank_btns[name] = new_btn
- # connect event-handler and request initial state
- Connection.on('stream_status', self.on_stream_status)
- Connection.send('get_stream_status')
- def on_btn_toggled(self, btn):
- if not btn.get_active():
- return
- btn_name = btn.get_name()
- if btn_name == 'live':
- self.warning_overlay.disable()
- else:
- self.warning_overlay.enable(btn_name)
- if self.current_status == btn_name:
- self.log.info('stream-status already activate: %s', btn_name)
- return
- self.log.info('stream-status activated: %s', btn_name)
- if btn_name == 'live':
- Connection.send('set_stream_live')
- else:
- Connection.send('set_stream_blank', btn_name)
- def on_stream_status(self, status, source = None):
- self.log.info('on_stream_status callback w/ status %s and source %s', status, source)
- self.current_status = source if source is not None else status
- if status == 'live':
- self.livebtn.set_active(True)
- else:
- self.blank_btns[source].set_active(True)
|