ocarina: Make "add to playlist" menu items

These menu items add tracks to a specific playlist instead of creating a
new one.

Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
Bryan Schumaker 2012-05-19 18:35:05 -04:00
parent 77225d4d9f
commit 01b5eeb10f
1 changed files with 51 additions and 2 deletions

View File

@ -11,6 +11,13 @@ using namespace std;
#define BUTTON_RIGHT 3
struct PlaylistData {
libsaria::Playlist *playlist;
ocarina::Playlist *renderer;
};
static PlaylistData plist_data[MAX_PLAYLISTS];
static void new_playlist(ocarina::Playlist *plist, PlaylistType type, bool front)
{
list<libsaria::Track *> tracks;
@ -48,11 +55,25 @@ static void new_set_back(GtkMenuItem *menu, gpointer data)
new_playlist((ocarina::Playlist *)data, PLIST_SET, false);
}
static void add_to_plist(GtkMenuItem *menu, gpointer data)
{
list<libsaria::Track *> tracks;
struct PlaylistData *plist = (struct PlaylistData *)data;
plist->renderer->list_selected_tracks(tracks);
if (tracks.size() == 0)
return;
plist->renderer->select_none();
plist->playlist->add_tracks(tracks);
}
static GtkWidget *menu_item(const char *text, void (*func)(GtkMenuItem *, gpointer),
ocarina::Playlist *plist)
gpointer data)
{
GtkWidget *widget = gtk_menu_item_new_with_label(text);
g_signal_connect(widget, "activate", G_CALLBACK(func), plist);
g_signal_connect(widget, "activate", G_CALLBACK(func), data);
return widget;
}
@ -109,6 +130,31 @@ gboolean key_pressed(GtkWidget *widget, GdkEvent *event, gpointer data)
return TRUE;
}
void make_playlist_items(GtkWidget *menu, ocarina::Playlist *renderer)
{
GtkWidget *plist_menu, *sep;
unsigned int i = 0;
libsaria::Playlist *plist = libsaria::deck::get_playlist(i);
while (plist != NULL) {
stringstream s;
s << "Add to " << plist->get_name() << " " << i;
plist_data[i].playlist = plist;
plist_data[i].renderer = renderer;
plist_menu = menu_item(s.str().c_str(), add_to_plist, &plist_data[i]);
gtk_menu_append(GTK_MENU(menu), plist_menu);
i++;
plist = libsaria::deck::get_playlist(i);
}
if (i != 0) {
sep = gtk_separator_menu_item_new();
gtk_menu_append(GTK_MENU(menu), sep);;
}
}
namespace ocarina
{
@ -124,6 +170,9 @@ namespace ocarina
gtk_menu_append(GTK_MENU(menu), queue1);
gtk_menu_append(GTK_MENU(menu), set1);
gtk_menu_append(GTK_MENU(menu), sep);
make_playlist_items(menu, this);
gtk_menu_append(GTK_MENU(menu), queue2);
gtk_menu_append(GTK_MENU(menu), set2);