Exemple #1
0
    def restore(self, items):
        print_i("Restoring the play queue")

        if not items:
            return

        playlists = playlist_manager.get_playlists()

        for idx, item in enumerate(items):
            try:
                playlist_idx, path = item
            except ValueError:
                # Library tracks that are not part of a playlist.
                item = BlaTrackListItem(item)
            else:
                item = playlists[playlist_idx].get_item_from_path(path)
            items[idx] = item

        self.queue_items(items)
Exemple #2
0
    def get_queue(self):
        queue = []
        playlists = playlist_manager.get_playlists()

        for row in self.__treeview.get_model():
            item = row[0]
            playlist = item.playlist

            try:
                playlist_idx = playlists.index(playlist)
            except ValueError:
                item = (item.uri,)
            else:
                item = (playlist_idx,
                        playlist.get_path_from_item(item, all_=True))

            queue.append(item)

        return queue
Exemple #3
0
def popup(treeview, event, view_id, target):
    from blaplaylist import playlist_manager
    from blaqueue import queue

    if view_id == blaconst.VIEW_PLAYLISTS:
        element = playlist_manager
    elif view_id == blaconst.VIEW_QUEUE:
        element = queue

    accel_group = ui_manager.get_accel_group()

    try:
        path = treeview.get_path_at_pos(*map(int, [event.x, event.y]))[0]
    except TypeError:
        menu = gtk.Menu()
        m = gtk.MenuItem("Paste")
        mod, key = gtk.accelerator_parse("<Ctrl>V")
        m.add_accelerator("activate", accel_group, mod, key, gtk.ACCEL_VISIBLE)
        m.connect("activate", element.paste)
        m.set_sensitive(bool(element.clipboard))
        menu.append(m)

        if view_id == blaconst.VIEW_QUEUE:
            m = gtk.MenuItem("Clear queue")
            m.connect("activate", lambda *x: element.clear())
            menu.append(m)

        menu.show_all()
        menu.popup(None, None, None, event.button, event.time)
        return

    model, paths = treeview.get_selection().get_selected_rows()
    item = model[path][0]

    menu = gtk.Menu()

    m = gtk.MenuItem("Play")
    m.connect("activate", lambda *x: target.play_item(treeview, path))
    menu.append(m)

    menu.append(gtk.SeparatorMenuItem())

    items = [
        ("Cut", element.cut, "<Ctrl>X", True),
        ("Copy",  element.copy, "<Ctrl>C", True),
        ("Paste", element.paste, "<Ctrl>V", bool(element.clipboard)),
        ("Remove", element.remove, None, True)
    ]
    for label, callback, accelerator, visibility in items:
        m = gtk.MenuItem(label)
        if accelerator:
            mod, key = gtk.accelerator_parse(accelerator)
            m.add_accelerator("activate", accel_group, mod, key,
                              gtk.ACCEL_VISIBLE)
        m.connect("activate", callback)
        m.set_sensitive(visibility)
        menu.append(m)

    menu.append(gtk.SeparatorMenuItem())

    submenu = gtk.Menu()
    items = [
        ("All", blaconst.SELECT_ALL),
        ("Complement", blaconst.SELECT_COMPLEMENT),
        ("By artist(s)", blaconst.SELECT_BY_ARTISTS),
        ("By album(s)", blaconst.SELECT_BY_ALBUMS),
        ("By album artist(s)", blaconst.SELECT_BY_ALBUM_ARTISTS),
        ("By genre(s)", blaconst.SELECT_BY_GENRES)
    ]

    for label, type_ in items:
        m = gtk.MenuItem(label)
        m.connect("activate", lambda x, t=type_: element.select(t))
        submenu.append(m)

    m = gtk.MenuItem("Select")
    m.set_submenu(submenu)
    menu.append(m)

    if view_id == blaconst.VIEW_PLAYLISTS:
        # New playlist from...
        submenu = gtk.Menu()
        items = [
            ("Selection", blaconst.PLAYLIST_FROM_SELECTION),
            ("Selected artist(s)", blaconst.PLAYLIST_FROM_ARTISTS),
            ("Selected album(s)", blaconst.PLAYLIST_FROM_ALBUMS),
            ("Selected album artist(s)", blaconst.PLAYLIST_FROM_ALBUM_ARTISTS),
            ("Selected genre(s)", blaconst.PLAYLIST_FROM_GENRE)
        ]
        for label, type_ in items:
            m = gtk.MenuItem(label)
            m.connect(
                "activate",
                lambda x, t=type_: playlist_manager.new_playlist_from_type(t))
            submenu.append(m)

        m = gtk.MenuItem("New playlist from")
        m.set_submenu(submenu)
        menu.append(m)

        playlists = playlist_manager.get_playlists()
        if len(playlists) > 1:
            # Move to playlist
            submenu = gtk.Menu()
            current_playlist = playlist_manager.get_current_playlist()
            for playlist in playlists:
                if playlist == current_playlist:
                    continue
                m = gtk.MenuItem(playlist.get_name())
                m.connect("activate", lambda x, p=playlist:
                          target.add_selection_to_playlist(p, move=True))
                submenu.append(m)

            m = gtk.MenuItem("Move to playlist")
            m.set_submenu(submenu)
            menu.append(m)

            # Add to playlist
            submenu = gtk.Menu()
            current_playlist = playlist_manager.get_current_playlist()
            for playlist in playlists:
                if playlist == current_playlist:
                    continue
                m = gtk.MenuItem(playlist.get_name())
                m.connect("activate", lambda x, p=playlist:
                          target.add_selection_to_playlist(p, move=False))
                submenu.append(m)

            m = gtk.MenuItem("Add to playlist")
            m.set_submenu(submenu)
            menu.append(m)

        menu.append(gtk.SeparatorMenuItem())

        # Remaining options
        items = [
            ("Add to queue", "Q", lambda *x: target.send_to_queue()),
            ("Remove from queue", "R",
             lambda *x: target.remove_from_queue(treeview)),
        ]
        for label, accel, callback in items:
            m = gtk.MenuItem(label)
            mod, key = gtk.accelerator_parse(accel)
            m.add_accelerator("activate", accel_group, mod, key,
                              gtk.ACCEL_VISIBLE)
            m.connect("activate", callback)
            menu.append(m)

    menu.append(gtk.SeparatorMenuItem())

    item = treeview.get_model()[path][0]
    submenu = blafm.create_popup_menu(item.track)
    if submenu:
        m = gtk.MenuItem("last.fm")
        m.set_submenu(submenu)
        menu.append(m)

    m = gtk.MenuItem("Open containing directory")
    m.connect("activate",
              lambda *x: blautil.open_directory(os.path.dirname(item.uri)))
    menu.append(m)

    menu.show_all()
    menu.popup(None, None, None, event.button, event.time)