예제 #1
0
    def __init__(self, genre_ids, artist_ids):
        """
            Init album view
            @param genre ids as [int]
            @param artist ids as [int]
        """
        LazyLoadingView.__init__(self)
        self._signal = None
        self._context_album_id = None
        self._genre_ids = genre_ids
        self._artist_ids = artist_ids
        self._press_rect = None

        self._albumbox = Gtk.FlowBox()
        self._albumbox.set_selection_mode(Gtk.SelectionMode.NONE)
        self._albumbox.connect('child-activated', self._on_album_activated)
        self._albumbox.connect('button-press-event', self._on_button_press)
        self._albumbox.set_homogeneous(True)
        self._albumbox.set_max_children_per_line(1000)
        self._albumbox.show()

        self._viewport.set_property('valign', Gtk.Align.START)
        self._viewport.set_property('margin', 5)
        self._scrolled.set_property('expand', True)
        self._scrolled.set_property('height-request', 10)
        self.add(self._scrolled)
 def __init__(self, genre_ids, artist_ids, view_type):
     """
         Init widget
         @param genre_ids as int
         @param artist_ids as int
         @param view_type as ViewType
     """
     LazyLoadingView.__init__(self, view_type | ViewType.FILTERED)
     ViewController.__init__(self, ViewControllerType.ALBUM)
     self.__genre_ids = genre_ids
     self.__artist_ids = artist_ids
     if genre_ids and genre_ids[0] < 0:
         if genre_ids[0] == Type.WEB and\
                 GLib.find_program_in_path("youtube-dl") is None:
             self._empty_message = _("Missing youtube-dl command")
         self._empty_icon_name = get_icon_name(genre_ids[0])
     self.__autoscroll_timeout_id = None
     self.__reveals = []
     self.__prev_animated_rows = []
     # Calculate default album height based on current pango context
     # We may need to listen to screen changes
     self.__height = AlbumRow.get_best_height(self)
     self._box = Gtk.ListBox()
     self._box.set_margin_end(MARGIN)
     self._box.get_style_context().add_class("trackswidget")
     self._box.set_vexpand(True)
     self._box.set_selection_mode(Gtk.SelectionMode.NONE)
     self._box.set_activate_on_single_click(True)
     self._box.set_filter_func(self._filter_func)
     self._box.show()
     self._scrolled.set_property("expand", True)
     self.add(self._scrolled)
예제 #3
0
 def stop(self):
     """
         Stop current loading widget
     """
     LazyLoadingView.stop(self)
     for child in self.children:
         child.stop()
    def __init__(self, artist_ids, genre_ids, show_cover=True):
        """
            Init ArtistAlbumsView
            @param artist ids as [int]
            @param genre ids as [int]
            @param show cover as bool
        """
        LazyLoadingView.__init__(self, True)
        self._artist_ids = artist_ids
        self._genre_ids = genre_ids
        self.__show_cover = show_cover

        self.__spinner = Gtk.Spinner()
        self.__spinner.set_hexpand(True)
        self.__spinner.set_vexpand(True)
        spinner_size = int(ArtSize.BIG / 3)
        self.__spinner.set_size_request(spinner_size, spinner_size)
        self.__spinner.set_property('halign', Gtk.Align.CENTER)
        self.__spinner.set_property('valign', Gtk.Align.CENTER)
        self.__spinner.show()

        self._albumbox = Gtk.Grid()
        self._albumbox.set_row_spacing(5)
        self._albumbox.set_property("orientation", Gtk.Orientation.VERTICAL)
        self._albumbox.show()
        self._viewport.add(self._albumbox)

        self._albumbox.set_property("valign", Gtk.Align.START)
        self._overlay = Gtk.Overlay.new()
        self._overlay.add(self._scrolled)
        self._overlay.add_overlay(self.__spinner)
        self._overlay.show()
        self.add(self._overlay)
 def __init__(self, list_type, artist_ids=[], genre_ids=[]):
     """
         Init widget
         @param list_type as RowListType
         @param artist_ids as int
         @param genre_ids as int
     """
     LazyLoadingView.__init__(self, True)
     ViewController.__init__(self, ViewControllerType.ALBUM)
     self.__list_type = list_type
     self.__genre_ids = genre_ids
     self.__artist_ids = artist_ids
     self.__autoscroll_timeout_id = None
     self.__reveals = []
     self.__prev_animated_rows = []
     # Calculate default album height based on current pango context
     # We may need to listen to screen changes
     self.__height = AlbumRow.get_best_height(self)
     self._box = Gtk.ListBox()
     self._box.get_style_context().add_class("trackswidget")
     self._box.set_vexpand(True)
     self._box.set_selection_mode(Gtk.SelectionMode.NONE)
     self._box.set_activate_on_single_click(True)
     self._box.set_filter_func(self._filter_func)
     self._box.show()
     self._scrolled.set_property("expand", True)
     self.add(self._scrolled)
예제 #6
0
    def __init__(self, artist_ids, genre_ids, art_size):
        """
            Init ArtistAlbumsView
            @param artist ids as [int]
            @param genre ids as [int]
            @param art size as ArtSize
        """
        LazyLoadingView.__init__(self, True)
        self._artist_ids = artist_ids
        self._genre_ids = genre_ids
        self.__art_size = art_size
        self.__spinner = Gtk.Spinner()
        self.__spinner.set_hexpand(True)
        self.__spinner.set_vexpand(True)
        spinner_size = int(ArtSize.BIG / 3)
        self.__spinner.set_size_request(spinner_size, spinner_size)
        self.__spinner.set_property("halign", Gtk.Align.CENTER)
        self.__spinner.set_property("valign", Gtk.Align.CENTER)
        self.__spinner.show()

        self._albumbox = Gtk.Grid()
        self._albumbox.set_row_spacing(5)
        self._albumbox.set_property("orientation", Gtk.Orientation.VERTICAL)
        self._albumbox.show()
        self._viewport.add(self._albumbox)

        self._albumbox.set_property("valign", Gtk.Align.START)
        self._overlay = Gtk.Overlay.new()
        self._overlay.add(self._scrolled)
        self._overlay.add_overlay(self.__spinner)
        self._overlay.show()
        self.add(self._overlay)
 def _on_value_changed(self, adj):
     """
         Adapt widget to current scroll value
         @param adj as Gtk.Adjustment
     """
     LazyLoadingView._on_value_changed(self, adj)
     if not self.__view_type & (ViewType.POPOVER | ViewType.FULLSCREEN):
         title_style_context = self.__title_label.get_style_context()
         if adj.get_value() == adj.get_lower():
             height = self.__banner.default_height
             self.__duration_label.show()
             self.__title_label.set_property("valign", Gtk.Align.END)
             if not App().window.is_adaptive:
                 title_style_context.remove_class("text-x-large")
                 title_style_context.add_class("text-xx-large")
         else:
             self.__duration_label.hide()
             title_style_context.remove_class("text-xx-large")
             title_style_context.add_class("text-x-large")
             self.__title_label.set_property("valign", Gtk.Align.CENTER)
             height = self.__banner.default_height // 3
         # Make grid cover artwork
         # No idea why...
         self.__banner.set_height(height)
         self.__widget.set_size_request(-1, height + 1)
예제 #8
0
    def __init__(self, genre_ids, artist_ids):
        """
            Init album view
            @param genre ids as [int]
            @param artist ids as [int]
        """
        LazyLoadingView.__init__(self, True)
        self.__signal = None
        self.__current = None
        self.__context_album_id = None
        self.__genre_ids = genre_ids
        self.__artist_ids = artist_ids
        self.__press_rect = None

        self._box = Gtk.FlowBox()
        self._box.set_filter_func(self._filter_func)
        self._box.set_selection_mode(Gtk.SelectionMode.NONE)
        self._box.connect('child-activated', self.__on_album_activated)
        # Allow lazy loading to not jump up and down
        self._box.set_homogeneous(True)
        self._box.set_max_children_per_line(1000)
        self._box.show()

        self._viewport.set_property('valign', Gtk.Align.START)
        self._viewport.set_property('margin', 5)
        self._scrolled.set_property('expand', True)

        self.add(self._scrolled)
예제 #9
0
 def _on_destroy(self, widget):
     """
         Disconnect signals
         @param widget as Gtk.Widget
     """
     LazyLoadingView._on_destroy(self, widget)
     if self.__signal is not None:
         Lp().art.disconnect(self.__signal)
예제 #10
0
 def _on_destroy(self, widget):
     """
         Disconnect signals
         @param widget as Gtk.Widget
     """
     LazyLoadingView._on_destroy(self, widget)
     if self.__signal is not None:
         Lp().art.disconnect(self.__signal)
예제 #11
0
 def populate(self, items):
     """
         Populate items
         @param items
     """
     if items and self._box.get_visible():
         GLib.idle_add(self._add_items, items)
     else:
         LazyLoadingView.populate(self)
예제 #12
0
 def _on_populated(self, widget, idle_id):
     """
         Add another album/disc
         @param widget as AlbumWidget/TracksView
         @param idle_id as int
     """
     LazyLoadingView._on_populated(self, widget, idle_id)
     if widget.is_populated:
         widget.set_filter_func(self._filter_func)
         widget.set_opacity(1)
예제 #13
0
 def _on_populated(self, widget):
     """
         Add another album/disc
         @param widget as AlbumWidget/TracksView
     """
     LazyLoadingView._on_populated(self, widget)
     if widget.is_populated:
         widget.set_filter_func(self._filter_func)
         widget.connect("overlayed", self.on_overlayed)
         widget.set_opacity(1)
예제 #14
0
 def _on_value_changed(self, adj):
     """
         Update scroll value and check for lazy queue
         @param adj as Gtk.Adjustment
     """
     LazyLoadingView._on_value_changed(self, adj)
     if adj.get_value() == adj.get_lower():
         height = self.__banner.default_height
     else:
         height = self.__banner.default_height // 3
     self.__banner.set_height(height)
     self._scrolled.get_vscrollbar().set_margin_top(height)
 def populate(self, albums):
     """
         Populate widget with album rows
         @param albums as [Album]
     """
     if albums:
         self._lazy_queue = []
         for child in self._box.get_children():
             GLib.idle_add(child.destroy)
         self.__add_albums(list(albums))
     else:
         LazyLoadingView.populate(self)
 def _on_destroy(self, widget):
     """
         Disconnect signals
         @param widget as Gtk.Widget
     """
     LazyLoadingView._on_destroy(self, widget)
     if self.__signal_id1:
         App().playlists.disconnect(self.__signal_id1)
         self.__signal_id1 = None
     if self.__signal_id2:
         App().playlists.disconnect(self.__signal_id2)
         self.__signal_id2 = None
예제 #17
0
 def __init__(self):
     """
         Init Popover
     """
     LazyLoadingView.__init__(self)
     # Calculate default album height based on current pango context
     # We may need to listen to screen changes
     self._height = AlbumRow.get_best_height(self)
     self.connect('map', self._on_map)
     self.connect('unmap', self._on_unmap)
     self._clear_button = Gtk.Button.new_from_icon_name(
                                                 'edit-clear-all-symbolic',
                                                 Gtk.IconSize.MENU)
     self._clear_button.set_relief(Gtk.ReliefStyle.NONE)
     self._clear_button.set_tooltip_text(_("Clear albums"))
     self._clear_button.set_sensitive(False)
     self._clear_button.connect('clicked', self._on_clear_clicked)
     self._jump_button = Gtk.Button.new_from_icon_name(
                                                 'go-jump-symbolic',
                                                 Gtk.IconSize.MENU)
     self._jump_button.set_relief(Gtk.ReliefStyle.NONE)
     self._jump_button.connect('clicked', self._on_jump_clicked)
     self._jump_button.set_tooltip_text(_("Go to current track"))
     label = Gtk.Label.new("<b>"+_("Playing albums")+"</b>")
     label.set_use_markup(True)
     label.set_hexpand(True)
     label.set_margin_start(2)
     label.get_style_context().add_class('dim-label')
     label.set_property('halign', Gtk.Align.START)
     self.set_row_spacing(2)
     grid = Gtk.Grid()
     grid.set_column_spacing(5)
     grid.add(label)
     grid.add(self._jump_button)
     grid.add(self._clear_button)
     grid.show_all()
     self._view = Gtk.ListBox()
     self._view.get_style_context().add_class('trackswidget')
     self._view.set_vexpand(True)
     self._view.set_selection_mode(Gtk.SelectionMode.NONE)
     self._view.set_activate_on_single_click(True)
     self._view.connect("row-activated", self._on_row_activated)
     self._view.show()
     self.add(grid)
     self._scrolled.set_property('expand', True)
     self.add(self._scrolled)
     self.drag_dest_set(Gtk.DestDefaults.DROP | Gtk.DestDefaults.MOTION,
                        [], Gdk.DragAction.MOVE)
     self.drag_dest_add_text_targets()
     self.connect('drag-data-received', self._on_drag_data_received)
예제 #18
0
 def __init__(self):
     """
         Init Popover
     """
     LazyLoadingView.__init__(self)
     # Calculate default album height based on current pango context
     # We may need to listen to screen changes
     self.__height = AlbumRow.get_best_height(self)
     self.connect("map", self.__on_map)
     self.connect("unmap", self.__on_unmap)
     self.__clear_button = Gtk.Button.new_from_icon_name(
         "edit-clear-all-symbolic", Gtk.IconSize.MENU)
     self.__clear_button.set_relief(Gtk.ReliefStyle.NONE)
     self.__clear_button.set_tooltip_text(_("Clear albums"))
     self.__clear_button.set_sensitive(False)
     self.__clear_button.connect("clicked", self.__on_clear_clicked)
     self.__jump_button = Gtk.Button.new_from_icon_name(
         "go-jump-symbolic", Gtk.IconSize.MENU)
     self.__jump_button.set_relief(Gtk.ReliefStyle.NONE)
     self.__jump_button.connect("clicked", self.__on_jump_clicked)
     self.__jump_button.set_tooltip_text(_("Go to current track"))
     label = Gtk.Label.new("<b>" + _("Playing albums") + "</b>")
     label.set_use_markup(True)
     label.set_hexpand(True)
     label.set_margin_start(2)
     label.get_style_context().add_class("dim-label")
     label.set_property("halign", Gtk.Align.START)
     self.set_row_spacing(2)
     grid = Gtk.Grid()
     grid.set_column_spacing(5)
     grid.add(label)
     grid.add(self.__jump_button)
     grid.add(self.__clear_button)
     grid.show_all()
     self.__view = Gtk.ListBox()
     self.__view.get_style_context().add_class("trackswidget")
     self.__view.set_vexpand(True)
     self.__view.set_selection_mode(Gtk.SelectionMode.NONE)
     self.__view.set_activate_on_single_click(True)
     self.__view.connect("row-activated", self.__on_row_activated)
     self.__view.show()
     self.add(grid)
     self._scrolled.set_property("expand", True)
     self.add(self._scrolled)
     self.drag_dest_set(Gtk.DestDefaults.DROP | Gtk.DestDefaults.MOTION, [],
                        Gdk.DragAction.MOVE)
     self.drag_dest_add_text_targets()
     self.connect("drag-data-received", self.__on_drag_data_received)
예제 #19
0
 def _on_map(self, widget):
     """
         Set initial state and connect signals
         @param widget as Gtk.Widget
     """
     LazyLoadingView._on_map(self, widget)
     self._responsive_widget.set_margin_top(self.__banner.default_height +
                                            15)
     App().window.emit("show-can-go-back", True)
     App().window.emit("can-go-back-changed", True)
     App().settings.set_value("state-one-ids",
                              GLib.Variant("ai", self.__genre_ids))
     App().settings.set_value("state-two-ids",
                              GLib.Variant("ai", self.__artist_ids))
     App().settings.set_value("state-three-ids",
                              GLib.Variant("ai", [self._album.id]))
예제 #20
0
 def __init__(self):
     """
         Init Popover
     """
     LazyLoadingView.__init__(self)
     # Calculate default album height based on current pango context
     # We may need to listen to screen changes
     self._height = AlbumRow.get_best_height(self)
     self.connect('map', self._on_map)
     self.connect('unmap', self._on_unmap)
     self._clear_button = Gtk.Button.new_from_icon_name(
         'edit-clear-all-symbolic', Gtk.IconSize.MENU)
     self._clear_button.set_relief(Gtk.ReliefStyle.NONE)
     self._clear_button.set_tooltip_text(_("Clear albums"))
     self._clear_button.set_sensitive(False)
     self._clear_button.connect('clicked', self._on_clear_clicked)
     self._jump_button = Gtk.Button.new_from_icon_name(
         'go-jump-symbolic', Gtk.IconSize.MENU)
     self._jump_button.set_relief(Gtk.ReliefStyle.NONE)
     self._jump_button.connect('clicked', self._on_jump_clicked)
     self._jump_button.set_tooltip_text(_("Go to current track"))
     label = Gtk.Label.new("<b>" + _("Playing albums") + "</b>")
     label.set_use_markup(True)
     label.set_hexpand(True)
     label.set_margin_start(2)
     label.get_style_context().add_class('dim-label')
     label.set_property('halign', Gtk.Align.START)
     self.set_row_spacing(2)
     grid = Gtk.Grid()
     grid.set_column_spacing(5)
     grid.add(label)
     grid.add(self._jump_button)
     grid.add(self._clear_button)
     grid.show_all()
     self._view = Gtk.ListBox()
     self._view.get_style_context().add_class('trackswidget')
     self._view.set_vexpand(True)
     self._view.set_selection_mode(Gtk.SelectionMode.NONE)
     self._view.set_activate_on_single_click(True)
     self._view.connect("row-activated", self._on_row_activated)
     self._view.show()
     self.add(grid)
     self._scrolled.set_property('expand', True)
     self.add(self._scrolled)
예제 #21
0
    def __init__(self, artist_ids, genre_ids):
        """
            Init ArtistAlbumsView
            @param artist ids as [int]
            @param genre ids as [int]
        """
        LazyLoadingView.__init__(self)
        self._artist_ids = artist_ids
        self._genre_ids = genre_ids
        self._albums_count = 0

        self._albumbox = Gtk.Grid()
        self._albumbox.set_row_spacing(20)
        self._albumbox.set_property("orientation", Gtk.Orientation.VERTICAL)
        self._albumbox.show()

        self._scrolled.set_property('expand', True)
        self._viewport.set_property("valign", Gtk.Align.START)
        self.attach(self._scrolled, 0, 1, 1, 1)
예제 #22
0
    def __init__(self, artist_ids, genre_ids):
        """
            Init ArtistAlbumsView
            @param artist ids as [int]
            @param genre ids as [int]
        """
        LazyLoadingView.__init__(self)
        self._artist_ids = artist_ids
        self._genre_ids = genre_ids
        self._albums_count = 0

        self._albumbox = Gtk.Grid()
        self._albumbox.set_row_spacing(20)
        self._albumbox.set_property("orientation", Gtk.Orientation.VERTICAL)
        self._albumbox.show()

        self._scrolled.set_property('expand', True)
        self._viewport.set_property("valign", Gtk.Align.START)
        self.attach(self._scrolled, 0, 1, 1, 1)
 def _on_map(self, widget):
     """
         Connect signals and set active ids
         @param widget as Gtk.Widget
     """
     LazyLoadingView._on_map(self, widget)
     if not self.__genre_ids and not self.__artist_ids:
         return
     if self.__genre_ids:
         App().settings.set_value("state-one-ids",
                                  GLib.Variant("ai", self.__genre_ids))
         App().settings.set_value("state-two-ids",
                                  GLib.Variant("ai", self.__artist_ids))
     else:
         App().settings.set_value("state-one-ids",
                                  GLib.Variant("ai", self.__artist_ids))
         App().settings.set_value("state-two-ids",
                                  GLib.Variant("ai", []))
     App().settings.set_value("state-three-ids",
                              GLib.Variant("ai", []))
예제 #24
0
    def __init__(self):
        """
            Init view
        """
        LazyLoadingView.__init__(self)
        self._signal = Lp().art.connect('radio-artwork-changed',
                                        self._on_logo_changed)

        self._radios_manager = Radios()
        self._radios_manager.connect('radios-changed',
                                     self._on_radios_changed)
        builder = Gtk.Builder()
        builder.add_from_resource('/org/gnome/Lollypop/RadiosView.ui')
        builder.connect_signals(self)
        widget = builder.get_object('widget')
        self._empty = builder.get_object('empty')

        self._pop_tunein = TuneinPopover(self._radios_manager)
        self._pop_tunein.set_relative_to(builder.get_object('search_btn'))

        self._radiobox = Gtk.FlowBox()
        self._radiobox.set_selection_mode(Gtk.SelectionMode.NONE)
        self._radiobox.set_property('column-spacing', 5)
        self._radiobox.set_property('row-spacing', 5)
        self._radiobox.set_homogeneous(True)
        self._radiobox.set_max_children_per_line(1000)
        self._radiobox.show()

        self._stack = Gtk.Stack()
        self._stack.set_transition_duration(500)
        self._stack.set_transition_type(Gtk.StackTransitionType.CROSSFADE)
        self._stack.add(self._scrolled)
        self._stack.add(self._empty)
        self._stack.show()

        self._viewport.set_property("valign", Gtk.Align.START)
        self._viewport.set_property('margin', 5)
        self._scrolled.set_property('expand', True)

        self.add(widget)
        self.add(self._stack)
예제 #25
0
    def __init__(self):
        """
            Init view
        """
        LazyLoadingView.__init__(self, True)
        self.__signal = Lp().art.connect("radio-artwork-changed",
                                         self.__on_logo_changed)

        self.__radios_manager = Radios()
        self.__radios_manager.connect("radios-changed",
                                      self.__on_radios_changed)
        builder = Gtk.Builder()
        builder.add_from_resource("/org/gnome/Lollypop/RadiosView.ui")
        builder.connect_signals(self)
        widget = builder.get_object("widget")
        self.__empty = builder.get_object("empty")

        self.__pop_tunein = TuneinPopover(self.__radios_manager)
        self.__pop_tunein.set_relative_to(builder.get_object("search_btn"))

        self._box = Gtk.FlowBox()
        self._box.set_selection_mode(Gtk.SelectionMode.NONE)
        # Allow lazy loading to not jump up and down
        self._box.set_homogeneous(True)
        self._box.set_max_children_per_line(1000)
        self._box.set_filter_func(self._filter_func)
        self._box.show()

        self.__stack = Gtk.Stack()
        self.__stack.set_transition_duration(500)
        self.__stack.set_transition_type(Gtk.StackTransitionType.CROSSFADE)
        self.__stack.add(self._scrolled)
        self.__stack.add(self.__empty)
        self.__stack.show()

        self._viewport.set_property("valign", Gtk.Align.START)
        self._viewport.set_property("margin", 5)
        self._scrolled.set_property("expand", True)

        self.add(widget)
        self.add(self.__stack)
예제 #26
0
    def __init__(self):
        """
            Init decade view
        """
        LazyLoadingView.__init__(self, True)
        self._widget_class = None
        self._items = []
        self._box = Gtk.FlowBox()
        self._box.set_filter_func(self._filter_func)
        self._box.set_selection_mode(Gtk.SelectionMode.NONE)
        # Allow lazy loading to not jump up and down
        self._box.set_homogeneous(True)
        self._box.set_max_children_per_line(1000)
        self._box.connect("child-activated", self._on_item_activated)
        self._box.show()

        self._viewport.set_property("valign", Gtk.Align.START)
        self._viewport.set_property("margin", 5)
        self._scrolled.set_property("expand", True)

        self.add(self._scrolled)
예제 #27
0
 def __init__(self, artist_ids, genre_ids, view_type):
     """
         Init ArtistAlbumsView
         @param artist_ids as [int]
         @param genre_ids as [int]
         @param view_type as ViewType
     """
     LazyLoadingView.__init__(self, view_type | ViewType.FILTERED)
     ViewController.__init__(self, ViewControllerType.ALBUM)
     self._artist_ids = artist_ids
     self._genre_ids = genre_ids
     self._album_box = Gtk.Grid()
     self._album_box.set_row_spacing(50)
     self._album_box.set_orientation(Gtk.Orientation.VERTICAL)
     self._album_box.set_property("valign", Gtk.Align.START)
     self._album_box.show()
     self._viewport.add(self._album_box)
     self._overlay = Gtk.Overlay.new()
     self._overlay.add(self._scrolled)
     self._overlay.show()
     self.add(self._overlay)
예제 #28
0
 def __init__(self, album, artist_ids, genre_ids, view_type):
     """
         Init ArtistView
         @param album as Album
         @param artist_ids as [int]
         @param genre_ids as [int]
         @param view_type as ViewType
     """
     LazyLoadingView.__init__(self, view_type)
     TracksView.__init__(self, view_type)
     ViewController.__init__(self, ViewControllerType.ALBUM)
     self._album = album
     self.__genre_ids = genre_ids
     self.__artist_ids = artist_ids
     self.__grid = Gtk.Grid()
     self.__grid.set_property("vexpand", True)
     self.__grid.set_row_spacing(10)
     self.__grid.set_margin_start(MARGIN)
     self.__grid.set_margin_end(MARGIN)
     self.__grid.set_orientation(Gtk.Orientation.VERTICAL)
     self.__grid.show()
예제 #29
0
    def __init__(self):
        """
            Init view
        """
        LazyLoadingView.__init__(self)
        self._signal = Lp().art.connect('radio-artwork-changed',
                                        self._on_logo_changed)

        self._radios_manager = Radios()
        self._radios_manager.connect('radios-changed', self._on_radios_changed)
        builder = Gtk.Builder()
        builder.add_from_resource('/org/gnome/Lollypop/RadiosView.ui')
        builder.connect_signals(self)
        widget = builder.get_object('widget')
        self._empty = builder.get_object('empty')

        self._pop_tunein = TuneinPopover(self._radios_manager)
        self._pop_tunein.set_relative_to(builder.get_object('search_btn'))

        self._radiobox = Gtk.FlowBox()
        self._radiobox.set_selection_mode(Gtk.SelectionMode.NONE)
        self._radiobox.set_property('column-spacing', 5)
        self._radiobox.set_property('row-spacing', 5)
        self._radiobox.set_homogeneous(True)
        self._radiobox.set_max_children_per_line(1000)
        self._radiobox.show()

        self._stack = Gtk.Stack()
        self._stack.set_transition_duration(500)
        self._stack.set_transition_type(Gtk.StackTransitionType.CROSSFADE)
        self._stack.add(self._scrolled)
        self._stack.add(self._empty)
        self._stack.show()

        self._viewport.set_property("valign", Gtk.Align.START)
        self._viewport.set_property('margin', 5)
        self._scrolled.set_property('expand', True)

        self.add(widget)
        self.add(self._stack)
예제 #30
0
    def __init__(self, genre_ids, artist_ids):
        """
            Init album view
            @param genre ids as [int]
            @param artist ids as [int]
        """
        LazyLoadingView.__init__(self)
        self._signal = None
        self._context_album_id = None
        self._genre_ids = genre_ids
        self._artist_ids = artist_ids
        self._albumsongs = None
        self._context_widget = None
        self._press_rect = None

        self._albumbox = Gtk.FlowBox()
        self._albumbox.set_selection_mode(Gtk.SelectionMode.NONE)
        self._albumbox.connect('child-activated', self._on_album_activated)
        self._albumbox.connect('button-press-event', self._on_button_press)
        self._albumbox.set_property('column-spacing', 5)
        self._albumbox.set_property('row-spacing', 5)
        self._albumbox.set_homogeneous(True)
        self._albumbox.set_max_children_per_line(1000)
        self._albumbox.show()

        self._viewport.set_property('valign', Gtk.Align.START)
        self._viewport.set_property('margin', 5)
        self._scrolled.set_property('expand', True)
        self._scrolled.set_property('height-request', 10)
        self._context = ViewContainer(500)

        separator = Gtk.Separator()
        separator.show()

        self._paned = Gtk.Paned.new(Gtk.Orientation.VERTICAL)
        self._paned.pack1(self._scrolled, True, False)
        self._paned.pack2(self._context, False, False)
        self._paned.connect('notify::position', self._on_position_notify)
        self._paned.show()
        self.add(self._paned)
예제 #31
0
    def __init__(self, genre_ids, artist_ids):
        """
            Init album view
            @param genre ids as [int]
            @param artist ids as [int]
        """
        LazyLoadingView.__init__(self)
        self._signal = None
        self._context_album_id = None
        self._genre_ids = genre_ids
        self._artist_ids = artist_ids
        self._albumsongs = None
        self._context_widget = None
        self._press_rect = None

        self._albumbox = Gtk.FlowBox()
        self._albumbox.set_selection_mode(Gtk.SelectionMode.NONE)
        self._albumbox.connect('child-activated', self._on_album_activated)
        self._albumbox.connect('button-press-event', self._on_button_press)
        self._albumbox.set_property('column-spacing', 5)
        self._albumbox.set_property('row-spacing', 5)
        self._albumbox.set_homogeneous(True)
        self._albumbox.set_max_children_per_line(1000)
        self._albumbox.show()

        self._viewport.set_property('valign', Gtk.Align.START)
        self._viewport.set_property('margin', 5)
        self._scrolled.set_property('expand', True)
        self._scrolled.set_property('height-request', 10)
        self._context = ViewContainer(500)

        separator = Gtk.Separator()
        separator.show()

        self._paned = Gtk.Paned.new(Gtk.Orientation.VERTICAL)
        self._paned.pack1(self._scrolled, True, False)
        self._paned.pack2(self._context, False, False)
        self._paned.connect('notify::position', self._on_position_notify)
        self._paned.show()
        self.add(self._paned)
예제 #32
0
 def __init__(self, base_type):
     """
         Init Selection list ui
         @param base_type as SelectionListMask
     """
     LazyLoadingView.__init__(self, ViewType.NOT_ADAPTIVE)
     self.__base_type = base_type
     self.__sort = False
     self.__mask = 0
     self.__height = SelectionListRow.get_best_height(self)
     self._listbox = Gtk.ListBox()
     self._listbox.connect("button-release-event",
                           self.__on_button_release_event)
     self._listbox.connect("key-press-event",
                           self.__on_key_press_event)
     self._listbox.set_sort_func(self.__sort_func)
     self._listbox.set_selection_mode(Gtk.SelectionMode.MULTIPLE)
     self._listbox.set_filter_func(self._filter_func)
     self._listbox.show()
     self._viewport.add(self._listbox)
     overlay = Gtk.Overlay.new()
     overlay.set_hexpand(True)
     overlay.set_vexpand(True)
     overlay.show()
     overlay.add(self._scrolled)
     self.__fastscroll = FastScroll(self._listbox,
                                    self._scrolled)
     overlay.add_overlay(self.__fastscroll)
     self.add(overlay)
     self.get_style_context().add_class("sidebar")
     App().art.connect("artist-artwork-changed",
                       self.__on_artist_artwork_changed)
     self.__type_ahead_popover = TypeAheadPopover()
     self.__type_ahead_popover.set_relative_to(self._scrolled)
     self.__type_ahead_popover.entry.connect("activate",
                                             self.__on_type_ahead_activate)
     self.__type_ahead_popover.entry.connect("changed",
                                             self.__on_type_ahead_changed)
예제 #33
0
    def __init__(self, artist_ids, genre_ids, show_covers):
        """
            Init ArtistAlbumsView
            @param artist ids as [int]
            @param genre ids as [int]
            @param show_covers as bool
        """
        LazyLoadingView.__init__(self, True)
        ViewController.__init__(self, ViewControllerType.ALBUM)
        self._artist_ids = artist_ids
        self._genre_ids = genre_ids
        self.__show_covers = show_covers
        self._album_box = Gtk.Grid()
        self._album_box.set_row_spacing(5)
        self._album_box.set_property("orientation", Gtk.Orientation.VERTICAL)
        self._album_box.show()
        self._viewport.add(self._album_box)

        self._album_box.set_property("valign", Gtk.Align.START)
        self._overlay = Gtk.Overlay.new()
        self._overlay.add(self._scrolled)
        self._overlay.show()
        self.add(self._overlay)
예제 #34
0
    def __init__(self, view_type=ViewType.SCROLLED):
        """
            Init flowbox view
            @param view_type as ViewType
        """
        LazyLoadingView.__init__(self, view_type | ViewType.FILTERED)
        self.__adaptive_signal_id = None
        self._widget_class = None
        self.__font_height = get_font_height()
        self._box = Gtk.FlowBox()
        self._box.set_filter_func(self._filter_func)
        self._box.set_selection_mode(Gtk.SelectionMode.NONE)
        # Allow lazy loading to not jump up and down
        self._box.set_homogeneous(True)
        self._box.set_max_children_per_line(1000)
        self._box.connect("child-activated", self._on_item_activated)
        self._box.show()

        if view_type & ViewType.SCROLLED:
            self._viewport.set_property("valign", Gtk.Align.START)
            self._viewport.set_property("margin", 5)
            self._scrolled.set_property("expand", True)
            self.add(self._scrolled)
예제 #35
0
    def __init__(self, artist_ids, genre_ids, show_cover=True):
        """
            Init ArtistAlbumsView
            @param artist ids as [int]
            @param genre ids as [int]
            @param show cover as bool
        """
        LazyLoadingView.__init__(self)
        self._artist_ids = artist_ids
        self._genre_ids = genre_ids
        self._show_cover = show_cover
        self._albums_count = 0

        self._albumbox = Gtk.Grid()
        self._albumbox.set_row_spacing(20)
        self._albumbox.set_property("orientation", Gtk.Orientation.VERTICAL)
        self._albumbox.show()

        self._scrolled.set_property('expand', True)
        self._viewport.set_property("valign", Gtk.Align.START)
        self._overlay = Gtk.Overlay.new()
        self._overlay.add(self._scrolled)
        self._overlay.show()
        self.add(self._overlay)
    def __init__(self, playlist_ids, view_type):
        """
            Init PlaylistView
            @parma playlist ids as [int]
            @param view_type as ViewType
        """
        LazyLoadingView.__init__(self)
        ViewController.__init__(self, ViewControllerType.ALBUM)
        self.__view_type = view_type
        self.__playlist_ids = playlist_ids
        self.__signal_id1 = App().playlists.connect(
            "playlist-track-added", self.__on_playlist_track_added)
        self.__signal_id2 = App().playlists.connect(
            "playlist-track-removed", self.__on_playlist_track_removed)
        self.__signal_id3 = App().settings.connect(
            "changed::split-view", self.__on_split_view_changed)

        builder = Gtk.Builder()
        builder.add_from_resource("/org/gnome/Lollypop/PlaylistView.ui")
        self.__title_label = builder.get_object("title")
        self.__duration_label = builder.get_object("duration")
        self.__play_button = builder.get_object("play_button")
        self.__shuffle_button = builder.get_object("shuffle_button")
        self.__jump_button = builder.get_object("jump_button")
        self.__menu_button = builder.get_object("menu_button")
        self.__buttons = builder.get_object("box-buttons")
        self.__widget = builder.get_object("widget")
        self.__playlists_widget = PlaylistsWidget(playlist_ids, view_type)
        self.__playlists_widget.set_filter_func(self._filter_func)
        self.__playlists_widget.connect("populated", self.__on_populated)
        self.__playlists_widget.show()
        self._viewport.add(self.__playlists_widget)
        self.__title_label.set_margin_start(MARGIN)
        self.__buttons.set_margin_end(MARGIN)
        if self.__view_type & (ViewType.POPOVER | ViewType.FULLSCREEN):
            self.__title_label.get_style_context().add_class("dim-label")
            self.__duration_label.get_style_context().add_class("dim-label")
            self.__widget.add(self.__title_label)
            self.__jump_button = Gtk.Button.new_from_icon_name(
                "go-jump-symbolic", Gtk.IconSize.BUTTON)
            self.__jump_button.connect("clicked", self._on_jump_button_clicked)
            self.__jump_button.set_relief(Gtk.ReliefStyle.NONE)
            self.__jump_button.show()
            self.__jump_button.set_margin_end(MARGIN_SMALL)
            self.__widget.add(self.__duration_label)
            self.__widget.add(self.__jump_button)
            self.__widget.set_margin_bottom(MARGIN_SMALL)
            self.add(self.__widget)
            self.add(self._scrolled)
        else:
            self.__duration_label.set_margin_start(MARGIN)
            self._overlay = Gtk.Overlay.new()
            self._overlay.add(self._scrolled)
            self._overlay.show()
            self.__widget.attach(self.__title_label, 0, 0, 1, 1)
            self.__widget.attach(self.__duration_label, 0, 1, 1, 1)
            self.__widget.attach(self.__buttons, 1, 0, 1, 2)
            self.__widget.set_vexpand(True)
            self.__title_label.set_vexpand(True)
            self.__duration_label.set_vexpand(True)
            if App().window.is_adaptive:
                self.__title_label.get_style_context().add_class(
                    "text-x-large")
                self.__duration_label.get_style_context().add_class(
                    "text-large")
            else:
                self.__title_label.get_style_context().add_class(
                    "text-xx-large")
                self.__duration_label.get_style_context().add_class(
                    "text-x-large")
            self.__title_label.set_property("valign", Gtk.Align.END)
            self.__duration_label.set_property("valign", Gtk.Align.START)
            self.__banner = PlaylistBannerWidget(playlist_ids[0])
            self.__banner.show()
            self._overlay.add_overlay(self.__banner)
            self.__banner.add_overlay(self.__widget)
            self.__playlists_widget.set_margin_top(
                self.__banner.default_height + 15)
            self.add(self._overlay)
        self.__title_label.set_label(", ".join(
            App().playlists.get_names(playlist_ids)))
        self._scrolled.set_property("expand", True)
        builder.connect_signals(self)

        if len(playlist_ids) > 1:
            self.__menu_button.hide()

        # In DB duration calculation
        if playlist_ids[0] > 0 and\
                not App().playlists.get_smart(playlist_ids[0]):
            duration = 0
            for playlist_id in self.__playlist_ids:
                duration += App().playlists.get_duration(playlist_id)
            self.__set_duration(duration)
        # Ask widget after populated
        else:
            self.__playlists_widget.connect("populated",
                                            self.__on_playlist_populated)
예제 #37
0
 def _on_unmap(self, widget):
     """
         Disconnect signals
         @param widget as Gtk.Widget
     """
     LazyLoadingView._on_unmap(self, widget)
예제 #38
0
 def stop(self):
     """
         Stop loading
     """
     self._lazy_queue = []
     LazyLoadingView.stop(self)
예제 #39
0
 def stop(self):
     """
         Stop loading
     """
     self._lazy_queue = []
     LazyLoadingView.stop(self)