From 812ef3e20c06e1975f30c2ad9445218457e813da Mon Sep 17 00:00:00 2001 From: Qball Cow Date: Thu, 25 Oct 2007 22:22:37 +0200 Subject: [PATCH] Making it up 2 par with the old plugin again. --- src/plugin.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 91 insertions(+), 1 deletion(-) diff --git a/src/plugin.c b/src/plugin.c index 65e65e7..7714004 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -27,11 +27,13 @@ static int magnatune_fetch_get_image(mpd_Song *song,MetaDataType type, char **pa static int magnatune_cat_menu_popup(GtkWidget *menu, int type, GtkWidget *tree, GdkEventButton *event); static int magnatune_button_release_event(GtkWidget *tree, GdkEventButton *event,gpointer data); +static int magnatune_button_handle_release_event_tag(GtkWidget *tree, GdkEventButton *event,gpointer data); static void magnatune_cat_key_press(GtkWidget *tree, GdkEventKey *event, int selected_type); static int magnatune_key_press(GtkWidget *tree, GdkEventKey *event); static void magnatune_show_album_list(GtkTreeSelection *selection, gpointer user_data); static void magnatune_show_song_list(GtkTreeSelection *selection, gpointer user_data); +static int magnatune_button_handle_release_event_tag_add(GtkWidget *button, gpointer user_data); /** * Get set enabled @@ -297,6 +299,8 @@ static void magnatune_init() gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_ETCHED_IN); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); treeviews[0] = gtk_tree_view_new_with_model(model); + + g_signal_connect(G_OBJECT(treeviews[0]), "button-press-event", G_CALLBACK(magnatune_button_handle_release_event_tag), GINT_TO_POINTER(0)); /* Add column */ column = gtk_tree_view_column_new(); gtk_tree_view_column_set_title(column, "Genre"); @@ -322,7 +326,7 @@ static void magnatune_init() gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_ETCHED_IN); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); treeviews[1] = gtk_tree_view_new_with_model(model); - + g_signal_connect(G_OBJECT(treeviews[1]), "button-press-event", G_CALLBACK(magnatune_button_handle_release_event_tag), GINT_TO_POINTER(1)); /* Add column */ column = gtk_tree_view_column_new(); gtk_tree_view_column_set_title(column, "Artist"); @@ -348,6 +352,7 @@ static void magnatune_init() gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_ETCHED_IN); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); treeviews[2] = gtk_tree_view_new_with_model(model); + g_signal_connect(G_OBJECT(treeviews[2]), "button-press-event", G_CALLBACK(magnatune_button_handle_release_event_tag), GINT_TO_POINTER(2)); /* Add column */ column = gtk_tree_view_column_new(); gtk_tree_view_column_set_title(column, "Album"); @@ -728,9 +733,94 @@ static void magnatune_list_edit_columns(GtkMenuItem *item, GtkWidget *widget) { gmpc_mpddata_treeview_edit_columns(GMPC_MPDDATA_TREEVIEW(widget)); } +static int magnatune_button_handle_release_event_tag_add(GtkWidget *button, gpointer userdata) +{ + GList *list; + MpdData *data; + int position = GPOINTER_TO_INT(userdata); + gchar *genre=NULL, *artist=NULL, *album=NULL; + GtkTreeSelection *select = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeviews[0])); + GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeviews[0])); + GtkTreeIter piter; + if(gtk_tree_selection_get_selected(select, &model, &piter)) + { + gtk_tree_model_get(model, &piter, MPDDATA_MODEL_COL_SONG_TITLE,&genre,-1); + } + if(position >= 1) + { + select = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeviews[1])); + model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeviews[1])); + if(gtk_tree_selection_get_selected(select, &model, &piter)) + { + gtk_tree_model_get(model, &piter, MPDDATA_MODEL_COL_SONG_TITLE,&artist,-1); + } + } + if(position >= 2) + { + select = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeviews[2])); + model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeviews[2])); + if(gtk_tree_selection_get_selected(select, &model, &piter)) + { + gtk_tree_model_get(model, &piter, MPDDATA_MODEL_COL_SONG_TITLE,&album,-1); + } + } + list = magnatune_db_get_url_list(genre, artist, album); + for(;list; list = list->next) + { + mpd_playlist_queue_add(connection, list->data); + } + mpd_playlist_queue_commit(connection); + if(list) + { + g_list_foreach(list, g_free, NULL); + g_list_free(list); + } + if(genre) + g_free(genre); + if(artist) + g_free(artist); + if(album) + g_free(album); + +} + +static int magnatune_button_handle_release_event_tag_replace(GtkWidget *button, gpointer userdata) +{ + mpd_playlist_clear(connection); + magnatune_button_handle_release_event_tag_add(button,userdata); + mpd_player_play(connection); + +} +static int magnatune_button_handle_release_event_tag(GtkWidget *tree, GdkEventButton *event,gpointer data) +{ + int i; + int position = GPOINTER_TO_INT(data); + if(event->button != 3) return FALSE; + GtkWidget *item; + + GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)); + if(gtk_tree_selection_count_selected_rows(sel)> 0) + { + GtkWidget *menu = gtk_menu_new(); + /* Add */ + item = gtk_image_menu_item_new_from_stock(GTK_STOCK_ADD,NULL); + gtk_menu_shell_prepend(GTK_MENU_SHELL(menu), item); + g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK( magnatune_button_handle_release_event_tag_add), data); + /* Replace */ + item = gtk_image_menu_item_new_with_label("Replace"); + gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), + gtk_image_new_from_stock(GTK_STOCK_REDO, GTK_ICON_SIZE_MENU)); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); + g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK( magnatune_button_handle_release_event_tag_replace), data); + gtk_widget_show_all(menu); + gtk_menu_popup(GTK_MENU(menu), NULL, NULL,NULL, NULL, event->button, event->time); + return TRUE; + } + return FALSE; +} static int magnatune_button_release_event(GtkWidget *tree, GdkEventButton *event,gpointer data) { -- 2.11.4.GIT