def build_layout(self): size = Gtk.IconSize.from_name("audio-button") player_status = self.player.get_playback_status() # Player buttons button_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) button_box.set_homogeneous(True) vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.pack_start(vbox, True, True, 2) vbox.pack_start(button_box, True, True, 0) vbox.set_valign(Gtk.Align.CENTER) self.previous_button = TransparentButton( "media-skip-backward-symbolic", size) self.previous_button.show() trackers.con_tracker_get().connect(self.previous_button, "clicked", self.on_previous_clicked) button_box.pack_start(self.previous_button, True, True, 2) self.play_pause_button = TransparentButton( self.get_play_pause_icon_name(player_status), size) self.play_pause_button.show() trackers.con_tracker_get().connect(self.play_pause_button, "clicked", self.on_play_pause_clicked) button_box.pack_start(self.play_pause_button, True, True, 2) self.next_button = TransparentButton("media-skip-forward-symbolic", size) self.next_button.show() trackers.con_tracker_get().connect(self.next_button, "clicked", self.on_next_clicked) button_box.pack_start(self.next_button, True, True, 2) self.update_buttons(player_status) status.focusWidgets = status.focusWidgets + [ self.previous_button, self.play_pause_button, self.next_button ] # Position labels and bar vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.pack_start(vbox, True, True, 4) vbox.set_valign(Gtk.Align.CENTER) position_length_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) vbox.pack_start(position_length_box, True, True, 2) self.current_pos_label = BlinkingLabel("", 400) self.current_pos_label.get_style_context().add_class("positionlabel") position_length_box.pack_start(self.current_pos_label, False, False, 2) self.max_pos_label = BlinkingLabel("", 400) self.max_pos_label.get_style_context().add_class("positionlabel") position_length_box.pack_end(self.max_pos_label, False, False, 2) self.position_bar = PositionBar() vbox.pack_end(self.position_bar, True, True, 2) # Track info vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.pack_start(vbox, True, True, 6) vbox.set_valign(Gtk.Align.CENTER) self.track_name_label = MarqueeLabel("") self.track_name_label.get_style_context().add_class("trackname") vbox.pack_start(self.track_name_label, True, True, 2) self.album_artist_label = MarqueeLabel("") self.album_artist_label.get_style_context().add_class("albumartist") vbox.pack_end(self.album_artist_label, True, True, 2) self.show_all() trackers.con_tracker_get().connect(self.player, "position-changed", self.on_position_changed) trackers.con_tracker_get().connect(self.player, "status-changed", self.on_playback_status_changed) trackers.con_tracker_get().connect(self.player, "metadata-changed", self.on_metadata_changed) self.on_playback_status_changed(self.player, player_status) self.on_metadata_changed(self.player) trackers.con_tracker_get().connect(self, "destroy", self.on_widget_destroy) self.update_position_timer(player_status)