2 * playlistselector_screen.c
4 * Created on: 2010-01-26
5 * Author: jaroslaw.jaryszew@teleca.com
8 #include <hildon/hildon.h>
9 #include "playlistselector_screen.h"
10 #include "data_structs.h"
11 #include "jamendo_api.h"
12 #include "http_utils.h"
13 #include "resource_utils.h"
14 #include "playlist_screen.h"
16 GList* user_playlists_local;
17 GList* user_playlists_server;
18 static GtkWidget* main_win;
20 typedef struct _special_items{
21 gpointer plstsel_local_list;
22 gpointer plstsel_add_item;
25 static special_items spec_items;
26 void playlistselector_listview_update_model(GtkWidget* listview, GList* playlists_list);
29 COLUMN_PLST_TITLE, PLST_PTR, NUM_COLUMNS
33 static void playlist_selected(GtkTreeView* treeview, GtkTreePath* path, gpointer data) {
38 model = gtk_tree_view_get_model(treeview);
39 if (!gtk_tree_model_get_iter(model, &iter, path)) return;
41 if (iter.user_data == spec_items.plstsel_local_list) return;
43 if (iter.user_data == spec_items.plstsel_add_item){
45 GtkWidget *dialog, *entry, *content_area;
46 /* Create the widgets */
47 dialog = gtk_dialog_new_with_buttons ("Message",
49 GTK_DIALOG_DESTROY_WITH_PARENT,
53 content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
54 entry = gtk_entry_new ();
55 /* Ensure that the dialog box is destroyed when the user responds. */
56 g_signal_connect_swapped (dialog,
58 G_CALLBACK (gtk_widget_destroy),
60 /* Add the label, and show everything we've added to the dialog. */
61 gtk_container_add (GTK_CONTAINER (content_area), entry);
62 gtk_widget_show_all (dialog);
68 user_playlists_local = g_list_append(user_playlists_local, "Nowa Lista");
69 playlistselector_listview_update_model((GtkWidget*)treeview, NULL);
73 // GList* track_list = jamendo_get_radio_playlist(radio);
74 // win = playlist_screen_new(track_list,radio->name);
75 // gtk_widget_show_all(win);
80 void playlistselector_listview_update_model(GtkWidget* listview, GList* playlists_list) {
85 //if(!playlists_list) return;
87 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(listview)));
89 gtk_list_store_clear(store);
91 gchar* local_playlists = g_markup_printf_escaped("<span size='medium'><u>Localy stored playlists:</u></span>");
92 gtk_list_store_append(store, &iter);
93 gtk_list_store_set(store, &iter,
94 COLUMN_PLST_TITLE, local_playlists,
96 g_free(local_playlists);
97 spec_items.plstsel_local_list = iter.user_data;
99 GList* iter_list = user_playlists_local;
101 for (iter_list = g_list_first(iter_list);
102 iter_list; iter_list = iter_list->next){
103 gchar* playlist_title = g_markup_printf_escaped("<span size='small'>%s</span>", (gchar*)user_playlists_local->data);
104 gtk_list_store_append(store, &iter);
105 gtk_list_store_set(store, &iter,
106 COLUMN_PLST_TITLE, playlist_title,
108 g_free(local_playlists);
111 gchar* add_playlist = g_markup_printf_escaped("<span size='large' color='yellow'><b>+</b></span><span size='large'>Add playlist</span>");
112 gtk_list_store_append(store, &iter);
113 gtk_list_store_set(store, &iter,
114 COLUMN_PLST_TITLE, add_playlist,
116 g_free(add_playlist);
117 spec_items.plstsel_add_item = iter.user_data;
123 /** images downloaded in background */
124 // LoadImagesData* data = g_new0(LoadImagesData,1);
125 // data->model = GTK_TREE_MODEL(store);
126 // data->thread = g_thread_create((GThreadFunc)load_images, data, TRUE, NULL);
128 // /* when listview is destroyed, destroy also radio_list */
129 // g_signal_connect(G_OBJECT(listview), "destroy", G_CALLBACK(radio_listview_destroyed), data);
132 static void playlistselector_listview_add_columns(GtkTreeView *treeview) {
133 GtkCellRenderer *renderer;
134 GtkTreeViewColumn *column;
136 // renderer = gtk_cell_renderer_pixbuf_new();
137 // g_object_set(G_OBJECT (renderer), "follow-state", FALSE, NULL);
139 // column = gtk_tree_view_column_new_with_attributes("Image", renderer, "pixbuf", COLUMN_PLST_TITLE, NULL);
140 // gtk_tree_view_append_column(treeview, column);
142 renderer = gtk_cell_renderer_text_new();
143 column = gtk_tree_view_column_new_with_attributes("Radio", renderer, "markup", COLUMN_PLST_TITLE, NULL);
144 gtk_tree_view_append_column(treeview, column);
149 GtkWidget* playlistselector_listview_create(GList* playlistselector_list) {
153 model = GTK_TREE_MODEL( gtk_list_store_new(NUM_COLUMNS, G_TYPE_STRING, G_TYPE_RADIO) );
154 listview = gtk_tree_view_new_with_model(model);
155 playlistselector_listview_update_model(listview ,playlistselector_list);
156 g_object_unref(model);
158 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(listview)), GTK_SELECTION_NONE);
159 playlistselector_listview_add_columns(GTK_TREE_VIEW(listview));
161 g_signal_connect(listview, "hildon-row-tapped", G_CALLBACK(playlist_selected),NULL);
167 GtkWidget* playlistselector_screen_new() {
170 GtkWidget* playlistselector_box;
171 user_playlists_local = NULL;
173 /* Create the main window */
174 win = hildon_stackable_window_new();
175 gtk_window_set_title(GTK_WINDOW(win), "Playlists");
177 //player_set_radio_list(radio_list);
178 treeview = playlistselector_listview_create(NULL);
180 playlistselector_box = hildon_pannable_area_new();
181 hildon_pannable_area_add_with_viewport(HILDON_PANNABLE_AREA(playlistselector_box), treeview);
183 GtkWidget* main_box = gtk_hbox_new(TRUE,0);
184 gtk_box_pack_start(GTK_BOX(main_box), playlistselector_box, TRUE,TRUE,0);
185 gtk_container_add(GTK_CONTAINER(win), main_box);
187 hildon_gtk_window_set_progress_indicator(GTK_WINDOW(win),1);
188 hildon_banner_show_information(win,NULL,"Loading");
190 playlistselector_listview_update_model(treeview, user_playlists_local);
192 hildon_gtk_window_set_progress_indicator(GTK_WINDOW(win),0);
193 gtk_widget_show_all(win);