class AudioSwitch::UI

Public Class Methods

new(model) click to toggle source
# File lib/audio_switch/ui.rb, line 6
def initialize(model)
  @model = model
  @menu = Gtk::Menu.new
  @items = []
end

Public Instance Methods

start() click to toggle source
# File lib/audio_switch/ui.rb, line 12
def start
  add_to_tray
  subscribe
  AudioSwitch::LOG.info 'starting GTK main'
  loop do
    Gtk.main
    AudioSwitch::LOG.info 'restarting GTK main'
  end
end

Private Instance Methods

add(item) click to toggle source
# File lib/audio_switch/ui.rb, line 50
def add(item)
  @menu.append item
  @items.push item
  item.show
end
add_to_tray() click to toggle source
# File lib/audio_switch/ui.rb, line 24
def add_to_tray
  indicator = AppIndicator::AppIndicator.new(
    self.class.name,
    'multimedia-volume-control',
    AppIndicator::Category::HARDWARE
  )
  indicator.set_menu(@menu)
  indicator.set_status(AppIndicator::Status::ACTIVE)
end
clear() click to toggle source
# File lib/audio_switch/ui.rb, line 104
def clear
  @menu.remove(@items.pop) until @items.empty?
end
draw(sinks) click to toggle source
# File lib/audio_switch/ui.rb, line 38
def draw(sinks)
  clear
  sinks
    .sort_by { |sink| sink[:description] }
    .each { |sink| add new_item(sink) }
  add new_separator
  add new_rtp_toggle
  add new_mute_toggle
  add new_separator
  add new_quit_item
end
new_item(sink) click to toggle source
# File lib/audio_switch/ui.rb, line 56
def new_item(sink)
  item = Gtk::RadioMenuItem.new(@items, sink[:description])
  item.signal_connect('toggled') do
    @model.select_sink(sink[:id]) if item.active?
  end
  item.set_active(sink[:default])
  item
end
new_mute_toggle() click to toggle source
# File lib/audio_switch/ui.rb, line 78
def new_mute_toggle
  toggle = Gtk::CheckMenuItem.new('Mute Inputs')
  toggle.active = @model.sources_mute?
  toggle.sensitive = !@model.rtp_on?
  toggle.signal_connect('toggled') do
    if toggle.active?
      @model.mute_sources
    else
      @model.unmute_sources
    end
  end
  toggle
end
new_quit_item() click to toggle source
# File lib/audio_switch/ui.rb, line 92
def new_quit_item
  item = Gtk::MenuItem.new('Quit')
  item.signal_connect('activate') do
    AudioSwitch::App.quit
  end
  item
end
new_rtp_toggle() click to toggle source
# File lib/audio_switch/ui.rb, line 65
def new_rtp_toggle
  toggle = Gtk::CheckMenuItem.new('Enable RTP')
  toggle.active = @model.rtp_on?
  toggle.signal_connect('toggled') do
    if toggle.active?
      @model.rtp_on
    else
      @model.rtp_off
    end
  end
  toggle
end
new_separator() click to toggle source
# File lib/audio_switch/ui.rb, line 100
def new_separator
  Gtk::SeparatorMenuItem.new
end
subscribe() click to toggle source
# File lib/audio_switch/ui.rb, line 34
def subscribe
  @model.watch { draw(@model.sinks) }
end