def update_queue_positions(self): model = self.__treeview.get_model() # Update the position labels for our own treeview. for idx, row in enumerate(model): model[row.path][1] = idx+1 # Invalidate the visible rows of the current playlists so the # position labels also get updated in playlists. playlist = playlist_manager.get_current_playlist() playlist.invalidate_visible_rows() # Calculate size and length of the queue and update the statusbar. size = length = 0 for row in model: track = row[0].track size += track[FILESIZE] length += track[LENGTH] self.__size, self.__length = size, length self.emit("count_changed", blaconst.VIEW_QUEUE, self.n_items) self.update_statusbar()
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)