def _on_title_release_event(self, widget, event): """ Show track information popover On long press/right click: show current track menu @param widget as Gtk.Widget @param event as Gdk.Event """ if self._timeout_id is not None: GLib.source_remove(self._timeout_id) self._timeout_id = None if Lp().player.current_track.id == Type.EXTERNALS: expopover = ExternalsPopover() expopover.set_relative_to(widget) expopover.populate() expopover.show() elif Lp().player.current_track.id is not None: if event.button == 1: if Lp().player.current_track.id == Type.RADIOS: if self._pop_tunein is None: self._pop_tunein = TuneinPopover() self._pop_tunein.populate() self._pop_tunein.set_relative_to(widget) self._pop_tunein.show() else: if self._pop_info is None: self._pop_info = InfoPopover() self._pop_info.set_relative_to(widget) self._pop_info.show() else: self._show_track_menu() return True
def __on_button_press_event(self, widget, event): """ Show current track menu @param widget as Gtk.Widget @param event as Gdk.Event """ if event.button == 1: if App().player.current_track.id == Type.RADIOS: from lollypop.pop_tunein import TuneinPopover popover = TuneinPopover() popover.populate() elif App().player.current_track.id is not None: from lollypop.pop_information import InformationPopover popover = InformationPopover() popover.populate() popover.set_relative_to(self._infobox) popover.popup() else: from lollypop.pop_menu import ToolbarMenu menu = ToolbarMenu(App().player.current_track) if App().player.current_track.id >= 0: from lollypop.pop_menu import TrackMenuPopover popover = TrackMenuPopover(App().player.current_track, menu) popover.set_relative_to(self._infobox) elif App().player.current_track.id == Type.RADIOS: popover = Popover.new_from_model(self._infobox, menu) popover.popup() return True
def _on_infobox_clicked(self, eventbox, event): """ Pop albums from current artistleft click Show playlist menu on right @param eventbox as Gtk.EventBox @param event as Gdk.Event """ if Lp().player.current_track.id == Type.EXTERNALS: expopover = ExternalsPopover() expopover.set_relative_to(eventbox) expopover.populate() expopover.show() elif Lp().player.current_track.id is not None: if event.button == 1: if Lp().player.current_track.id == Type.RADIOS: if self._pop_tunein is None: self._pop_tunein = TuneinPopover() self._pop_tunein.populate() self._pop_tunein.set_relative_to(self._infobox) self._pop_tunein.show() else: if self._pop_infos is None: self._pop_infos = InfosPopover() self._pop_infos.set_relative_to(self._infobox) self._pop_infos.show() elif Lp().player.current_track.id >= 0: popover = TrackMenuPopover( Lp().player.current_track.id, PopToolbarMenu(Lp().player.current_track.id)) popover.set_relative_to(self._infobox) popover.show() return True
def __on_info_short(self, args): """ Show track information popover @param args as [] """ if Lp().player.current_track.id == Type.EXTERNALS: from lollypop.pop_externals import ExternalsPopover expopover = ExternalsPopover() expopover.set_relative_to(self._infobox) expopover.populate() expopover.show() elif Lp().player.current_track.id is not None: if Lp().player.current_track.id == Type.RADIOS: if self.__pop_tunein is None: from lollypop.pop_tunein import TuneinPopover self.__pop_tunein = TuneinPopover() self.__pop_tunein.populate() self.__pop_tunein.set_relative_to(self._infobox) self.__pop_tunein.show() else: if self.__pop_info is None: from lollypop.pop_info import InfoPopover self.__pop_info = InfoPopover() self.__pop_info.set_relative_to(self._infobox) self.__pop_info.show()
def _on_search_clicked(self, widget): """ Show popover for searching radios @param widget as Gtk.Widget """ if self.__pop_tunein is None: self.__pop_tunein = TuneinPopover(self.__radios) self.__pop_tunein.populate() self.__pop_tunein.set_relative_to(widget) self.__pop_tunein.popup()
def __init__(self): """ Init view """ FlowBoxView.__init__(self) ViewController.__init__(self, ViewControllerType.RADIO) self._widget_class = RadioWidget self.__radios = Radios() builder = Gtk.Builder() builder.add_from_resource("/org/gnome/Lollypop/RadiosView.ui") builder.connect_signals(self) self.insert_row(0) self.attach(builder.get_object("widget"), 0, 0, 1, 1) self.__pop_tunein = TuneinPopover(self.__radios) self.__pop_tunein.set_relative_to(builder.get_object("search_btn"))
def __init__(self): """ Init view """ View.__init__(self) self._signal = None self._radios_manager = RadiosManager() self._radios_manager.connect('playlists-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._sizegroup = Gtk.SizeGroup(mode=Gtk.SizeGroupMode.BOTH) self._radiobox = Gtk.FlowBox() self._radiobox.set_sort_func(self._sort_radios) self._radiobox.set_selection_mode(Gtk.SelectionMode.NONE) self._radiobox.connect("child-activated", self._on_album_activated) 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._scrolledWindow) self._stack.add(self._empty) self._stack.show() self._viewport.set_property("valign", Gtk.Align.START) self._viewport.set_property('margin', 5) self._viewport.add(self._radiobox) self._scrolledWindow.set_property('expand', True) self.add(widget) self.add(self._stack)
def __on_button_release_event(self, widget, event): """ Handle buttons @param widget as Gtk.Widget @param event as Gdk.Event """ if App().window.is_adaptive or not self._artwork.get_visible(): return if App().player.current_track.id == Type.RADIOS: from lollypop.pop_tunein import TuneinPopover popover = TuneinPopover() popover.populate() elif App().player.current_track.id is not None: from lollypop.pop_information import InformationPopover popover = InformationPopover() popover.populate() popover.set_relative_to(self._infobox) popover.popup() return True
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)
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)
def __init__(self): """ Init toolbar """ Gtk.Bin.__init__(self) builder = Gtk.Builder() builder.add_from_resource('/org/gnome/Lollypop/ToolbarInfos.ui') builder.connect_signals(self) infobox = builder.get_object('infos') infobox.set_property('has-tooltip', True) self.add(infobox) self._title_label = builder.get_object('title') self._artist_label = builder.get_object('artist') self._cover = builder.get_object('cover') self._pop_albums = AlbumsPopover() self._pop_albums.set_relative_to(infobox) self._pop_tunein = TuneinPopover(RadiosManager()) self._pop_tunein.set_relative_to(infobox) Lp.art.connect('cover-changed', self._update_cover) Lp.art.connect('logo-changed', self._update_logo)
def _on_infobox_clicked(self, eventbox, event): """ Pop albums from current artistleft click Show playlist menu on right @param eventbox as Gtk.EventBox @param event as Gdk.Event """ if Lp().player.current_track.id == Type.EXTERNALS: expopover = ExternalsPopover() expopover.set_relative_to(eventbox) expopover.populate() expopover.show() elif Lp().player.current_track.id is not None: if event.button == 1: if Lp().player.current_track.id == Type.RADIOS: if self._pop_tunein is None: self._pop_tunein = TuneinPopover() self._pop_tunein.populate() self._pop_tunein.set_relative_to(self._infobox) self._pop_tunein.show() else: if self._pop_infos is None: self._pop_infos = InfosPopover() self._pop_infos.set_relative_to(self._infobox) self._pop_infos.show() elif Lp().player.current_track.id >= 0: menu = PopToolbarMenu(Lp().player.current_track.id, None) popover = Gtk.Popover.new_from_model(eventbox, menu) rating = RatingWidget(Lp().player.current_track) rating.set_margin_top(5) rating.set_margin_bottom(5) rating.set_property('halign', Gtk.Align.START) rating.set_property('hexpand', True) rating.show() loved = LovedWidget(Lp().player.current_track.id) loved.set_margin_end(5) loved.set_margin_top(5) loved.set_margin_bottom(5) loved.set_property('halign', Gtk.Align.END) loved.set_property('hexpand', True) loved.show() # Hack to add two widgets in popover # Use a Gtk.PopoverMenu later # (GTK>3.16 available on Debian stable) stack = Gtk.Stack() grid = Gtk.Grid() grid.set_orientation(Gtk.Orientation.VERTICAL) stack.add_named(grid, 'main') stack.show_all() menu_widget = popover.get_child() menu_widget.reparent(grid) separator = Gtk.Separator() separator.show() grid.add(separator) hgrid = Gtk.Grid() hgrid.add(rating) hgrid.add(loved) hgrid.show() grid.add(hgrid) popover.add(stack) popover.show() return True