def __init__(self, tray_obj=None): super(TrayGui, self).__init__(False) self.tray_obj = tray_obj self.stream_icon = app_theme.get_pixbuf( "sound/device.png").get_pixbuf().scale_simple( 16, 16, gtk.gdk.INTERP_TILES) self.stream_num = 0 self.stream_list = {} # stream widgets self.stream_process = {} # process id to stream widgets self.stream_mpris = {} # stream id to mpris process id self.__mpris_total_height = 0 self.mpris_base_height = 70 self.mpris_list = {} # mpris widgets self.mpris_stream = {} # mpris process id to stream id self.mpris2 = Mpris2() self.mpris2.connect("new", self.mpris2_new_cb) self.mpris2.connect("removed", self.mpris2_removed_cb) self.mpris2.connect("changed", self.mpris2_changed_cb) self.__play_dingdong = Play( os.path.join(get_parent_dir(__file__, 1), 'dingdong.wav')) hbox = gtk.HBox(False) hbox.set_spacing(WIDGET_SPACING) #separator_color = [(0, ("#000000", 0.3)), (0.5, ("#000000", 0.2)), (1, ("#777777", 0.0))] #hseparator = HSeparator(app_theme.get_shadow_color("hSeparator").get_color_info(), 0, 0) #hseparator.set_size_request(150, 3) separator_color = [(0, ("#777777", 0.0)), (0.5, ("#000000", 0.3)), (1, ("#777777", 0.0))] hseparator = HSeparator(separator_color, 0, 0) hseparator.set_size_request(140, 5) #hbox.pack_start(self.__make_align(Label(_("Device"), enable_select=False, enable_double_click=False)), False, False) #hbox.pack_start(self.__make_align(hseparator), True, True) self.pack_start( self.__make_align(Label(_("Device"), enable_select=False, enable_double_click=False), height=-1), False, False) self.pack_start(self.__make_align(hseparator, xalign=0.5, height=5), False, False) volume_max_percent = pypulse.MAX_VOLUME_VALUE * 100 / pypulse.NORMAL_VOLUME_VALUE table = gtk.Table(2, 3) speaker_img = ImageBox(app_theme.get_pixbuf("sound/speaker-3.png")) self.speaker_scale = HScalebar(show_value=False, format_value="%", value_min=0, value_max=volume_max_percent) self.speaker_scale.set_magnetic_values([(0, 5), (100, 5), (volume_max_percent, 5)]) self.speaker_scale.set_size_request(90, 10) self.speaker_mute_button = SwitchButton( inactive_disable_dpixbuf=app_theme.get_pixbuf( "toggle_button/inactive_normal.png"), active_disable_dpixbuf=app_theme.get_pixbuf( "toggle_button/inactive_normal.png")) table.attach(self.__make_align(speaker_img), 0, 1, 0, 1, 4) table.attach( self.__make_align(self.speaker_scale, yalign=0.0, yscale=1.0, padding_left=5, padding_right=5, height=25), 1, 2, 0, 1, 4) table.attach(self.__make_align(self.speaker_mute_button), 2, 3, 0, 1, 4) #microphone_img = ImageBox(app_theme.get_pixbuf("sound/microphone.png")) #self.microphone_scale = HScalebar(show_value=False, format_value="%", value_min=0, value_max=volume_max_percent) #self.microphone_scale.set_size_request(90, 10) #self.microphone_mute_button = SwitchButton( #inactive_disable_dpixbuf=app_theme.get_pixbuf("toggle_button/inactive_normal.png"), #active_disable_dpixbuf=app_theme.get_pixbuf("toggle_button/inactive_normal.png")) #table.attach(self.__make_align(microphone_img), 0, 1, 1, 2, 4) #table.attach(self.__make_align(self.microphone_scale, yalign=0.0, yscale=1.0, padding_left=5, padding_right=5, height=25), 1, 2, 1, 2, 4) #table.attach(self.__make_align(self.microphone_mute_button), 2, 3, 1, 2, 4) self.pack_start(table, False, False) self.__app_vbox = gtk.VBox(False) separator_color = [(0, ("#777777", 0.0)), (0.5, ("#000000", 0.3)), (1, ("#777777", 0.0))] hseparator = HSeparator(separator_color, 0, 0) hseparator.set_size_request(140, 5) self.__app_vbox.pack_start( self.__make_align( Label(_("Applications"), enable_select=False, enable_double_click=False)), False, False) self.__app_vbox.pack_start( self.__make_align(hseparator, xalign=0.5, height=5), False, False) self.__mpris_vbox = gtk.VBox(False) self.__app_vbox.pack_start(self.__mpris_vbox) self.pack_start(self.__app_vbox) hseparator = HSeparator(separator_color, 0, 0) hseparator.set_size_request(140, 7) self.pack_start(self.__make_align(hseparator, xalign=0.5, height=7), False, False) self.button_more = SelectButton(_("Advanced..."), font_size=10, ali_padding=5) self.button_more.set_size_request(-1, 25) self.pack_start(self.button_more, False, False) #self.pack_start(self.__make_align(height=10)) ########################################## self.__fallback_sink_index = None self.__fallback_source_index = None state_cb_fun = {} state_cb_fun["server"] = self.__server_state_cb state_cb_fun["sink"] = self.__sink_state_cb #state_cb_fun["source"] = self.__source_state_cb state_cb_fun["sinkinput"] = self.__sinkinput_state_cb pypulse.PULSE.connect_to_pulse(state_cb_fun) self.__set_output_status() #self.__set_input_status() # widget signals self.speaker_mute_button.connect("toggled", self.speaker_toggled) #self.microphone_mute_button.connect("toggled", self.microphone_toggled) self.speaker_scale.connect("value-changed", self.speaker_scale_value_changed) self.speaker_scale.connect("button-release-event", lambda w, e: self.__play_dingdong.play()) #self.microphone_scale.connect("value-changed", self.microphone_scale_value_changed) # pulseaudio signals pypulse.PULSE.connect("sink-removed", self.sink_removed_cb) #pypulse.PULSE.connect("source-removed", self.source_removed_cb) pypulse.PULSE.connect("sinkinput-removed", self.sinkinput_removed_cb) self.mpris2.get_mpris_list() self.mpris_num = len(self.mpris2.mpris_process.keys()) if self.mpris_num == 0: self.__app_vbox.set_no_show_all(True)