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:
parent
77225d4d9f
commit
01b5eeb10f
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue