示例#1
0
 def __on_status_changed(self, player):
     """
         Update controllers
         @param player as Player
     """
     ProgressController.on_status_changed(self, player)
     PlaybackController.on_status_changed(self, player)
示例#2
0
 def do_destroy(self):
     """
         Remove signal
     """
     ProgressController.do_destroy(self)
     App().player.disconnect(self.__signal_id1)
     App().player.disconnect(self.__signal_id2)
示例#3
0
    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)
示例#4
0
 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)
示例#5
0
 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)
示例#6
0
    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)
示例#7
0
 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()
示例#8
0
 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")
示例#9
0
 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)))
示例#10
0
 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)
示例#11
0
    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")
示例#12
0
 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)
示例#13
0
    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)
示例#14
0
    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)