def _on_view_updated(self, view):
     """
         @param view as AlbumsListView
     """
     if self.__view.children:
         self.__duration_task = True
         App().task_helper.run(self.__calculate_duration)
     else:
         self.__duration_task = False
         self.__duration_label.set_text(get_human_duration(0))
 def _on_view_updated(self, *ignore):
     """
         Update duration
     """
     if self.__view.children:
         self.__duration_task = True
         App().task_helper.run(self.__calculate_duration)
     else:
         self.__duration_task = False
         self.__duration_label.set_text(get_human_duration(0))
 def __calculate_duration(self):
     """
         Calculate playback duration
     """
     duration = 0
     for child in self.__view.children:
         if not self.__duration_task:
             return
         duration += child.album.duration
     GLib.idle_add(self.__duration_label.set_text,
                   get_human_duration(duration))
 def __set_duration(self, duration):
     """
         Set playlist duration
         @param duration as int (seconds)
     """
     self.__duration_label.set_text(get_human_duration(duration))
 def __on_get_duration(self, duration):
     """
         Update label
         @param duration as int
     """
     self.__duration_label.set_text(get_human_duration(duration))
Beispiel #6
0
 def __init__(self, album, storage_type, view_type):
     """
         Init cover widget
         @param album
         @param storage_type as int
         @param view_type as ViewType
     """
     BannerWidget.__init__(self, view_type)
     self.__album = album
     self.__storage_type = storage_type
     builder = Gtk.Builder()
     builder.add_from_resource("/org/gnome/Lollypop/AlbumBannerWidget.ui")
     builder.connect_signals(self)
     self.__labels = builder.get_object("labels")
     self.__title_label = builder.get_object("title_label")
     self.__title_label.connect("query-tooltip", on_query_tooltip)
     self.__artist_label = builder.get_object("artist_label")
     self.__artist_label.connect("query-tooltip", on_query_tooltip)
     self.__year_label = builder.get_object("year_label")
     self.__duration_label = builder.get_object("duration_label")
     self.__play_button = builder.get_object("play_button")
     self.__add_button = builder.get_object("add_button")
     self.__menu_button = builder.get_object("menu_button")
     self.__widget = builder.get_object("widget")
     if view_type & ViewType.OVERLAY:
         style = "banner-button"
     else:
         style = "menu-button"
     self.__play_button.get_style_context().add_class(style)
     self.__add_button.get_style_context().add_class(style)
     self.__menu_button.get_style_context().add_class(style)
     self.__cover_widget = CoverWidget(album, view_type)
     self.__cover_widget.show()
     self.__title_label.set_label(album.name)
     if view_type & ViewType.ALBUM:
         self.__artist_label.show()
         self.__artist_label.set_label(", ".join(album.artists))
     else:
         self.__title_label.set_opacity(0.8)
         self.__year_label.set_opacity(0.7)
         self.__duration_label.set_opacity(0.6)
         self.__widget.get_style_context().add_class("album-banner")
     if album.year is not None:
         self.__year_label.set_label(str(album.year))
         self.__year_label.show()
     human_duration = get_human_duration(album.duration)
     self.__duration_label.set_text(human_duration)
     artist_eventbox = builder.get_object("artist_eventbox")
     artist_eventbox.connect("realize", set_cursor_type)
     self.__gesture1 = GesturesHelper(
         artist_eventbox, primary_press_callback=self._on_artist_press)
     year_eventbox = builder.get_object("year_eventbox")
     year_eventbox.connect("realize", set_cursor_type)
     self.__gesture2 = GesturesHelper(
         year_eventbox, primary_press_callback=self._on_year_press)
     self.__widget.attach(self.__cover_widget, 0, 0, 1, 3)
     self.__bottom_box = builder.get_object("bottom_box")
     self.__loved_widget = LovedWidget(album, Gtk.IconSize.INVALID)
     self.__loved_widget.show()
     self.__bottom_box.pack_start(self.__loved_widget, 0, False, False)
     self.__rating_widget = RatingWidget(album, Gtk.IconSize.INVALID)
     self.__rating_widget.show()
     self.__bottom_box.pack_start(self.__rating_widget, 0, True, True)
     if view_type & ViewType.OVERLAY:
         self._overlay.add_overlay(self.__widget)
         self._overlay.set_overlay_pass_through(self.__widget, True)
     else:
         self.add(self.__widget)
     self.__update_add_button()
     self.__set_internal_size()
     return [(App().window.container.widget, "notify::folded",
              "_on_container_folded"),
             (App().art, "album-artwork-changed",
              "_on_album_artwork_changed"),
             (App().player, "playback-added", "_on_playback_changed"),
             (App().player, "playback-updated", "_on_playback_changed"),
             (App().player, "playback-removed", "_on_playback_changed")]
Beispiel #7
0
 def populate(self):
     """
         Populate the view
     """
     if self.__widget is not None:
         return
     self.__widget = Gtk.Grid.new()
     self.__widget.set_margin_start(MARGIN)
     self.__widget.set_margin_end(MARGIN_MEDIUM)
     self.__widget.set_margin_top(MARGIN_SMALL)
     self.__widget.set_margin_bottom(MARGIN_SMALL)
     self.__widget.set_row_spacing(MARGIN_SMALL)
     self.__widget.set_column_spacing(MARGIN_MEDIUM)
     self.__top_box = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 0)
     self.__middle_box = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 0)
     self.__bottom_box = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 0)
     self.__labels_box = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
     self.__top_box.set_vexpand(True)
     self.__middle_box.set_halign(Gtk.Align.END)
     self.__middle_box.set_valign(Gtk.Align.CENTER)
     self.__middle_box.set_hexpand(True)
     self.__bottom_box.set_vexpand(True)
     self.__year_eventbox = Gtk.EventBox.new()
     self.__year_eventbox.set_hexpand(True)
     self.__year_eventbox.set_halign(Gtk.Align.END)
     self.__year_label = Gtk.Label.new()
     self.__year_label.get_style_context().add_class("dim-label")
     self.__year_eventbox.add(self.__year_label)
     self.__year_eventbox.connect("realize", set_cursor_type)
     self.__gesture_year = GesturesHelper(
         self.__year_eventbox, primary_press_callback=self._on_year_press)
     self.__play_button = Gtk.Button.new_from_icon_name(
         "media-playback-start-symbolic", Gtk.IconSize.BUTTON)
     self.__add_button = Gtk.Button.new_from_icon_name(
         "list-add-symbolic", Gtk.IconSize.BUTTON)
     self.__menu_button = Gtk.Button.new_from_icon_name(
         "view-more-symbolic", Gtk.IconSize.BUTTON)
     self.__play_button.connect("clicked", self.__on_play_button_clicked)
     self.__add_button.connect("clicked", self.__on_add_button_clicked)
     self.__menu_button.connect("clicked", self.__on_menu_button_clicked)
     self.__title_label = Gtk.Label.new()
     self.__title_label.set_valign(Gtk.Align.END)
     self.__title_label.set_vexpand(True)
     self.__title_label.connect("query-tooltip", on_query_tooltip)
     self.__title_label.set_ellipsize(Pango.EllipsizeMode.END)
     self.__title_label.set_halign(Gtk.Align.START)
     self.__title_label.set_xalign(0)
     self.__artist_label = Gtk.Label.new()
     self.__artist_eventbox = Gtk.EventBox.new()
     self.__artist_eventbox.set_valign(Gtk.Align.START)
     self.__artist_eventbox.add(self.__artist_label)
     self.__artist_eventbox.connect("realize", set_cursor_type)
     self.__artist_label.connect("query-tooltip", on_query_tooltip)
     self.__artist_label.set_ellipsize(Pango.EllipsizeMode.END)
     self.__artist_label.set_halign(Gtk.Align.START)
     self.__artist_label.set_xalign(0)
     self.__gesture_artist = GesturesHelper(
         self.__artist_eventbox,
         primary_press_callback=self._on_artist_press)
     self.__duration_label = Gtk.Label.new()
     self.__duration_label.get_style_context().add_class("dim-label")
     self.__top_box.pack_end(self.__year_eventbox, False, True, 0)
     self.__middle_box.add(self.__play_button)
     self.__middle_box.add(self.__add_button)
     self.__middle_box.add(self.__menu_button)
     self.__middle_box.get_style_context().add_class("linked")
     self.__bottom_box.pack_end(self.__duration_label, False, True, 0)
     self.__labels_box.add(self.__title_label)
     self.__labels_box.add(self.__artist_eventbox)
     self.__widget.attach(self.__top_box, 2, 0, 1, 1)
     self.__widget.attach(self.__middle_box, 2, 1, 1, 1)
     self.__widget.attach(self.__bottom_box, 1, 2, 2, 1)
     self.__widget.attach(self.__labels_box, 1, 0, 1, 2)
     self.__widget.show_all()
     if self.view_type & ViewType.OVERLAY:
         style = "banner-button"
     else:
         style = "menu-button"
     self.__play_button.get_style_context().add_class(style)
     self.__add_button.get_style_context().add_class(style)
     self.__menu_button.get_style_context().add_class(style)
     self.__title_label.set_label(self.__album.name)
     if self.view_type & ViewType.ALBUM:
         self.__cover_widget = EditCoverWidget(self.__album, self.view_type)
         self.__artist_label.get_style_context().add_class("dim-label")
         self.__artist_label.set_label(", ".join(self.__album.artists))
     else:
         self.__artist_label.hide()
         self.__cover_widget = CoverWidget(self.__album, self.view_type)
         self.__cover_widget.set_margin_top(MARGIN_MEDIUM)
         self.__cover_widget.set_margin_bottom(MARGIN_MEDIUM)
         self.__cover_widget.connect("populated",
                                     self.__on_cover_populated)
     self.__cover_widget.show()
     if self.__album.year is not None:
         self.__year_label.set_label(str(self.__album.year))
         self.__year_label.show()
     human_duration = get_human_duration(self.__album.duration)
     self.__duration_label.set_text(human_duration)
     self.__widget.attach(self.__cover_widget, 0, 0, 1, 3)
     self.__loved_widget = LovedWidget(self.__album, Gtk.IconSize.INVALID)
     self.__loved_widget.show()
     self.__bottom_box.pack_start(self.__loved_widget, 0, False, False)
     self.__rating_widget = RatingWidget(self.__album, Gtk.IconSize.INVALID)
     self.__rating_widget.show()
     self.__bottom_box.pack_start(self.__rating_widget, 0, True, True)
     if self.view_type & ViewType.OVERLAY:
         self._overlay.add_overlay(self.__widget)
         self._overlay.set_overlay_pass_through(self.__widget, True)
     else:
         self.add(self.__widget)
     self.__update_add_button()
     self.__set_internal_size()
 def __init__(self, album, view_type=ViewType.DEFAULT):
     """
         Init cover widget
         @param album
         @param view_type as ViewType
     """
     Gtk.Bin.__init__(self)
     self.__view_type = view_type
     self.__height = None
     self.__width = 0
     self.__cloud_image = None
     self.__allocation_timeout_id = None
     self.__album = album
     self.set_property("valign", Gtk.Align.START)
     builder = Gtk.Builder()
     builder.add_from_resource("/org/gnome/Lollypop/AlbumBannerWidget.ui")
     builder.connect_signals(self)
     self.__title_label = builder.get_object("name_label")
     self.__title_label.connect("query-tooltip", on_query_tooltip)
     self.__year_label = builder.get_object("year_label")
     self.__duration_label = builder.get_object("duration_label")
     self.__menu_button = builder.get_object("menu_button")
     self.__cover_widget = CoverWidget(album, view_type)
     self.__cover_widget.set_vexpand(True)
     self.__cover_widget.show()
     album_name = GLib.markup_escape_text(album.name)
     markup = "<b>%s</b>" % album_name
     if view_type & ViewType.ALBUM:
         artist_name = GLib.markup_escape_text(", ".join(album.artists))
         if view_type & ViewType.SMALL:
             markup += "\n<span alpha='40000'>%s</span>" % artist_name
         else:
             markup += "\n<span size='x-small' alpha='40000'>%s</span>" %\
                                                               artist_name
     self.__title_label.set_markup(markup)
     if album.year is not None:
         self.__year_label.set_text(str(album.year))
     else:
         self.__year_label.hide()
     year_eventbox = builder.get_object("year_eventbox")
     year_eventbox.connect("realize", on_realize)
     year_eventbox.connect("button-release-event",
                           self.__on_year_button_release_event)
     duration = App().albums.get_duration(self.__album.id,
                                          self.__album.genre_ids)
     self.__duration_label.set_text(get_human_duration(duration))
     self.__artwork = builder.get_object("artwork")
     self.__grid = builder.get_object("grid")
     self.__widget = builder.get_object("widget")
     if view_type & ViewType.ALBUM:
         self.__menu_button.get_style_context().add_class(
             "black-transparent")
         self.get_style_context().add_class("black")
         self.__artwork.get_style_context().add_class("black")
         self.connect("size-allocate", self.__on_size_allocate)
         self.connect("destroy", self.__on_destroy)
         self.__art_signal_id = App().art.connect(
                                            "album-artwork-changed",
                                            self.__on_album_artwork_changed)
     else:
         self.__grid.get_style_context().add_class("banner-frame")
     self.__grid.attach(self.__cover_widget, 0, 0, 1, 3)
     self.__rating_grid = builder.get_object("rating_grid")
     if album.mtime <= 0:
         self.__cloud_image = Gtk.Image.new()
         self.__cloud_image.show()
         self.__cloud_image.set_margin_start(MARGIN)
         self.__rating_grid.attach(self.__cloud_image, 1, 0, 1, 1)
     self.__rating_widget = RatingWidget(album, Gtk.IconSize.INVALID)
     self.__rating_widget.set_property("halign", Gtk.Align.START)
     self.__rating_widget.set_property("valign", Gtk.Align.CENTER)
     self.__rating_widget.show()
     self.__rating_grid.attach(self.__rating_widget, 2, 0, 1, 1)
     self.__loved_widget = LovedWidget(album, Gtk.IconSize.INVALID)
     self.__loved_widget.set_margin_start(10)
     self.__loved_widget.set_property("halign", Gtk.Align.START)
     self.__loved_widget.set_property("valign", Gtk.Align.CENTER)
     self.__loved_widget.show()
     self.__rating_grid.attach(self.__loved_widget, 3, 0, 1, 1)
     self.add(self.__widget)
     self.__cover_widget.set_margin_start(MARGIN)
     self.__year_label.set_margin_end(MARGIN)
     self.__duration_label.set_margin_start(MARGIN)
     self.__rating_grid.set_margin_end(MARGIN)
     self.set_view_type(view_type)