def __on_status_changed(self, player): """ Update controllers @param player as Player """ ProgressController.on_status_changed(self, player) PlaybackController.on_status_changed(self, player)
def do_destroy(self): """ Remove signal """ ProgressController.do_destroy(self) App().player.disconnect(self.__signal_id1) App().player.disconnect(self.__signal_id2)
def __init__(self, width): """ Init toolbar @param width as int """ self.__width = width self.__height = 0 Gtk.Bin.__init__(self) InformationController.__init__(self, True, ArtHelperEffect.BLUR) ProgressController.__init__(self) builder = Gtk.Builder() builder.add_from_resource("/org/gnome/Lollypop/MiniPlayer.ui") builder.connect_signals(self) self._progress = builder.get_object("progress_scale") self._progress.set_sensitive(False) self._progress.set_hexpand(True) self._timelabel = builder.get_object("playback") self._total_time_label = builder.get_object("duration") self.__grid = builder.get_object("grid") self._title_label = builder.get_object("title") self._artist_label = builder.get_object("artist") self._artwork = builder.get_object("cover") self.__signal_id1 = App().player.connect("current-changed", self.__on_current_changed) self.__signal_id2 = App().player.connect("status-changed", self.__on_status_changed) self.__on_current_changed(App().player) if App().player.current_track.id is not None: self.update_position() ProgressController.on_status_changed(self, App().player) self.add(builder.get_object("widget")) self.connect("size-allocate", self.__on_size_allocate)
def __on_current_changed(self, player): """ Update controllers @param player as Player """ if App().player.current_track.id is not None: self.show() InformationController.on_current_changed(self, self.__width, None) ProgressController.on_current_changed(self, player)
def __on_destroy(self, widget): """ Handle widget cleanup @param widget as Gtk.Widget """ ProgressController.on_destroy(self) PlaybackController.on_destroy(self) App().player.disconnect(self.__signal_id1) App().player.disconnect(self.__signal_id2) App().player.disconnect(self.__signal_id3)
def __init__(self): """ Init mini player """ self.__size = 0 self.__allocation_timeout_id = None self.__cover = None Gtk.Bin.__init__(self) InformationController.__init__( self, False, ArtBehaviour.BLUR_MAX | ArtBehaviour.DARKER) ProgressController.__init__(self) PlaybackController.__init__(self) builder = Gtk.Builder() builder.add_from_resource("/org/gnome/Lollypop/MiniPlayer.ui") builder.connect_signals(self) self.get_style_context().add_class("black") self.__grid = builder.get_object("grid") self.__revealer = builder.get_object("revealer") self.__revealer_box = builder.get_object("revealer_box") self.__eventbox = builder.get_object("eventbox") self.__eventbox.connect("realize", on_realize) self._progress = builder.get_object("progress_scale") self._progress.set_sensitive(False) self._progress.set_hexpand(True) self._timelabel = builder.get_object("playback") self._total_time_label = builder.get_object("duration") self._artist_label = builder.get_object("artist_label") self._title_label = builder.get_object("title_label") self._prev_button = builder.get_object("previous_button") self._play_button = builder.get_object("play_button") self._next_button = builder.get_object("next_button") self.__back_button = builder.get_object("back_button") self._play_image = builder.get_object("play_image") self._pause_image = builder.get_object("pause_image") self.__grid = builder.get_object("grid") self._artwork = builder.get_object("cover") self.__signal_id1 = App().player.connect("current-changed", self.__on_current_changed) self.__signal_id2 = App().player.connect("status-changed", self.__on_status_changed) self.__signal_id3 = App().player.connect("duration-changed", self.on_duration_changed) self.__on_current_changed(App().player) if App().player.current_track.id is not None: PlaybackController.on_status_changed(self, App().player) self.update_position() ProgressController.on_status_changed(self, App().player) self.add(builder.get_object("widget")) self.connect("size-allocate", self.__on_size_allocate) self.connect("destroy", self.__on_destroy)
def __on_current_changed(self, player): """ Update controllers @param player as Player """ if App().player.current_track.id is not None: self.show() InformationController.on_current_changed(self, self.__size, None) ProgressController.on_current_changed(self, player) PlaybackController.on_current_changed(self, player) if self.__cover is not None: self.__update_artwork()
def on_status_changed(self, player): """ Update controller @param player as Player """ ProgressController.on_status_changed(self, player) PlaybackController.on_status_changed(self, player) context = self._artwork.get_style_context() if not App().settings.get_value("rotate-fullscreen-album"): return if player.is_playing: context.add_class("image-rotate") else: context.remove_class("image-rotate")
def on_current_changed(self, player): """ Update controllers @param player as Player """ InformationController.on_current_changed(self, self.__artsize, self.__font_size) ProgressController.on_current_changed(self, player) if player.current_track.id is not None: album_name = player.current_track.album.name if player.current_track.year: album_name += " (%s)" % player.current_track.year self._album_label.set_markup( "<span font='%s'>%s</span>" % (self.__font_size - 1, GLib.markup_escape_text(album_name)))
def do_hide(self): """ Clean window """ Gtk.Window.do_hide(self) if self.__signal1_id is not None: App().player.disconnect(self.__signal1_id) self.__signal1_id = None if self.__signal2_id is not None: App().player.disconnect(self.__signal2_id) self.__signal2_id = None if self.__timeout_id is not None: GLib.source_remove(self.__timeout_id) self.__timeout_id = None App().inhibitor.manual_uninhibit() ProgressController.on_destroy(self)
def __init__(self): """ Init toolbar """ Gtk.Bin.__init__(self) ProgressController.__init__(self) builder = Gtk.Builder() builder.add_from_resource("/org/gnome/Lollypop/ToolbarTitle.ui") builder.connect_signals(self) self.add(builder.get_object("title")) self._progress = builder.get_object("progress_scale") self._progress.set_sensitive(False) self._progress.set_hexpand(True) self._timelabel = builder.get_object("playback") self._total_time_label = builder.get_object("duration")
def do_hide(self): """ Remove signals and unset color """ App().window.setup() App().window.show() self.__view.stop() Gtk.Window.do_hide(self) if self.__signal1_id is not None: App().player.disconnect(self.__signal1_id) self.__signal1_id = None if self.__signal2_id is not None: App().player.disconnect(self.__signal2_id) self.__signal2_id = None if self.__signal3_id is not None: App().player.disconnect(self.__signal3_id) self.__signal3_id = None if self.__timeout_id is not None: GLib.source_remove(self.__timeout_id) self.__timeout_id = None App().inhibitor.manual_uninhibit() ProgressController.do_destroy(self)
def __init__(self, app): """ Init window for app @param app as Gio.Application """ Gtk.Window.__init__(self) self.set_title("Lollypop") rotate_album = App().settings.get_value("rotate-fullscreen-album") PlaybackController.__init__(self) ProgressController.__init__(self) if rotate_album: InformationController.__init__(self, False, ArtHelperEffect.ROUNDED) else: InformationController.__init__(self, False, ArtHelperEffect.NONE) self.set_application(app) self.__timeout_id = None self.__signal1_id = self.__signal2_id = self.__signal3_id = None self.set_decorated(False) builder = Gtk.Builder() builder.add_from_resource("/org/gnome/Lollypop/FullScreen.ui") builder.connect_signals(self) # Calculate cover size screen = Gdk.Screen.get_default() monitor = screen.get_monitor_at_window(App().window.get_window()) geometry = screen.get_monitor_geometry(monitor) # We want 500 and 200 in full hd if geometry.width > geometry.height: self.__artsize = int(ArtSize.FULLSCREEN * geometry.height / 1080) else: self.__artsize = int(ArtSize.FULLSCREEN * geometry.width / 1920) self.__font_size = int(14 * geometry.height / 1080) widget = builder.get_object("widget") grid = builder.get_object("grid") self._play_button = builder.get_object("play_btn") self._next_button = builder.get_object("next_btn") self._prev_button = builder.get_object("prev_btn") self._play_image = builder.get_object("play_image") self._pause_image = builder.get_object("pause_image") close_btn = builder.get_object("close_btn") preferences = Gio.Settings.new("org.gnome.desktop.wm.preferences") layout = preferences.get_value("button-layout").get_string() if layout.split(":")[0] == "close": grid.attach(close_btn, 0, 0, 1, 1) close_btn.set_property("halign", Gtk.Align.START) else: grid.attach(close_btn, 2, 0, 1, 1) close_btn.set_property("halign", Gtk.Align.END) self._artwork = builder.get_object("cover") if rotate_album: self._artwork.get_style_context().add_class("image-rotate") else: self._artwork.get_style_context().add_class("cover-frame") self._title_label = builder.get_object("title") self._artist_label = builder.get_object("artist") self._album_label = builder.get_object("album") self.__revealer = builder.get_object("reveal") self._datetime = builder.get_object("datetime") self._progress = builder.get_object("progress_scale") self._timelabel = builder.get_object("playback") self._total_time_label = builder.get_object("duration") self.connect("key-release-event", self.__on_key_release_event) # Add an AlbumListView on the right self.__view = AlbumsListView(RowListType.DND) self.__view.get_style_context().add_class("background-opacity") self.__view.show() self.__revealer.add(self.__view) self.add(widget)
def __init__(self, app): """ Init window for app @param app as Gio.Application """ Gtk.Window.__init__(self) AdaptiveWindow.__init__(self) self.get_style_context().add_class("black") self.set_title("Lollypop") self.__allocation = Gdk.Rectangle() PlaybackController.__init__(self) ProgressController.__init__(self) self.set_application(app) self.__timeout_id = None self.__signal1_id = self.__signal2_id = None self.set_decorated(False) builder = Gtk.Builder() builder.add_from_resource("/org/gnome/Lollypop/FullScreen.ui") builder.connect_signals(self) # Calculate cover size screen = Gdk.Screen.get_default() monitor = screen.get_monitor_at_window(App().main_window.get_window()) geometry = screen.get_monitor_geometry(monitor) self.__overlay_grid = builder.get_object("overlay_grid") art_size_fs = ArtSize.FULLSCREEN / self.get_scale_factor() font_size_fs = 11 / self.get_scale_factor() if geometry.width > geometry.height: self.__art_size = int(art_size_fs * geometry.height / 1080) self.__font_size = int(font_size_fs * geometry.height / 1080) else: self.__art_size = int(art_size_fs * geometry.width / 1920) self.__font_size = int(font_size_fs * geometry.width / 1920) widget = builder.get_object("widget") self._play_button = builder.get_object("play_btn") self._next_button = builder.get_object("next_btn") self._prev_button = builder.get_object("prev_btn") if App().player.current_track.id == Type.RADIOS: self._next_button.hide() self._prev_button.hide() self._play_image = builder.get_object("play_image") self._pause_image = builder.get_object("pause_image") close_btn = builder.get_object("close_btn") preferences = Gio.Settings.new("org.gnome.desktop.wm.preferences") layout = preferences.get_value("button-layout").get_string() if layout.split(":")[0] == "close": self.__overlay_grid.attach(close_btn, 0, 0, 1, 1) close_btn.set_property("halign", Gtk.Align.START) else: self.__overlay_grid.attach(close_btn, 2, 0, 1, 1) close_btn.set_property("halign", Gtk.Align.END) self._artwork = builder.get_object("cover") self.__setup_controller() self._title_label = builder.get_object("title") self._artist_label = builder.get_object("artist") self._album_label = builder.get_object("album") self.__revealer = builder.get_object("revealer") self._datetime = builder.get_object("datetime") self._progress = builder.get_object("progress_scale") self._timelabel = builder.get_object("playback") self._total_time_label = builder.get_object("duration") self.connect("key-release-event", self.__on_key_release_event) # Add a navigation widget on the right self.__back_button = Gtk.Button.new_from_icon_name( "go-previous-symbolic", Gtk.IconSize.BUTTON) self.__back_button.set_sensitive(False) self.__back_button.set_relief(Gtk.ReliefStyle.NONE) self.__back_button.set_property("valign", Gtk.Align.START) self.__back_button.set_property("halign", Gtk.Align.START) self.__back_button.connect("clicked", self.__on_back_button_clicked) self.__back_button.set_margin_start(5) self.__back_button.set_margin_end(5) self.__back_button.set_margin_top(5) self.__back_button.set_margin_bottom(5) self.__back_button.show() self.__background_artwork = builder.get_object("background_artwork") self.__container = Container(ViewType.NOT_ADAPTIVE) self.set_stack(self.__container.stack) self.__container.show() self.__sidebar = Gtk.Grid() self.__sidebar.set_size_request(400, -1) self.__sidebar.set_orientation(Gtk.Orientation.VERTICAL) self.__sidebar.get_style_context().add_class("borders-left-top") self.__sidebar.show() self.__sidebar.add(self.__back_button) self.__sidebar.add(self.__container) self.__sidebar.set_size_request(450, -1) self.connect("can-go-back-changed", self.__on_can_go_back_changed) self.connect("show-can-go-back", self.__on_show_can_go_back) self.connect("size-allocate", self.__on_size_allocate) self.__sidebar.get_style_context().add_class("background-opacity") self.__revealer.add(self.__sidebar) self.add(widget)