Cleanup.
[jamendo] / src / playlistselector_screen.c
1 /*
2  * playlistselector_screen.c
3  *
4  *  Created on: 2010-01-26
5  *      Author: jaroslaw.jaryszew@teleca.com
6  */
7
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"
15
16 GList* user_playlists_local;
17 GList* user_playlists_server;
18 static GtkWidget* main_win;
19
20 typedef struct _special_items{
21         gpointer plstsel_local_list;
22         gpointer plstsel_add_item;
23 } special_items;
24
25 static special_items spec_items;
26 void playlistselector_listview_update_model(GtkWidget* listview, GList* playlists_list);
27
28 enum{
29         COLUMN_PLST_TITLE, PLST_PTR, NUM_COLUMNS
30 };
31
32
33 static void playlist_selected(GtkTreeView* treeview, GtkTreePath* path, gpointer data) {
34         //GtkWidget *win;
35         GtkTreeModel *model;
36         GtkTreeIter iter;
37
38         model = gtk_tree_view_get_model(treeview);
39         if (!gtk_tree_model_get_iter(model, &iter, path)) return;
40
41         if (iter.user_data == spec_items.plstsel_local_list) return;
42
43         if (iter.user_data == spec_items.plstsel_add_item){
44
45                    GtkWidget *dialog, *entry, *content_area;
46                    /* Create the widgets */
47                    dialog = gtk_dialog_new_with_buttons ("Message",
48                                                          main_win,
49                                                          GTK_DIALOG_DESTROY_WITH_PARENT,
50                                                          GTK_STOCK_OK,
51                                                          GTK_RESPONSE_NONE,
52                                                          NULL);
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,
57                                              "response",
58                                              G_CALLBACK (gtk_widget_destroy),
59                                              dialog);
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);
63
64
65
66
67
68                 user_playlists_local = g_list_append(user_playlists_local, "Nowa Lista");
69                 playlistselector_listview_update_model((GtkWidget*)treeview, NULL);
70         }
71
72 //      if (radio) {
73 //              GList* track_list = jamendo_get_radio_playlist(radio);
74 //              win = playlist_screen_new(track_list,radio->name);
75 //              gtk_widget_show_all(win);
76 //      }
77
78 }
79
80 void playlistselector_listview_update_model(GtkWidget* listview, GList* playlists_list) {
81         GtkListStore *store;
82         GtkTreeIter iter;
83         //GList* radio_iter;
84
85         //if(!playlists_list) return;
86
87         store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(listview)));
88
89         gtk_list_store_clear(store);
90
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,
95                         -1);
96         g_free(local_playlists);
97         spec_items.plstsel_local_list = iter.user_data;
98
99         GList* iter_list = user_playlists_local;
100
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,
107                                 -1);
108                 g_free(local_playlists);
109         }
110
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,
115                         -1);
116         g_free(add_playlist);
117         spec_items.plstsel_add_item = iter.user_data;
118
119
120
121
122
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);
127 //
128 //      /* when listview is destroyed, destroy also radio_list */
129 //      g_signal_connect(G_OBJECT(listview), "destroy", G_CALLBACK(radio_listview_destroyed), data);
130 }
131
132 static void playlistselector_listview_add_columns(GtkTreeView *treeview) {
133         GtkCellRenderer *renderer;
134         GtkTreeViewColumn *column;
135
136 //      renderer = gtk_cell_renderer_pixbuf_new();
137 //      g_object_set(G_OBJECT (renderer), "follow-state", FALSE, NULL);
138 //
139 //      column = gtk_tree_view_column_new_with_attributes("Image", renderer, "pixbuf", COLUMN_PLST_TITLE, NULL);
140 //      gtk_tree_view_append_column(treeview, column);
141
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);
145
146 }
147
148
149 GtkWidget* playlistselector_listview_create(GList* playlistselector_list) {
150         GtkWidget *listview;
151         GtkTreeModel *model;
152
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);
157
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));
160
161         g_signal_connect(listview, "hildon-row-tapped", G_CALLBACK(playlist_selected),NULL);
162
163         return listview;
164 }
165
166
167 GtkWidget* playlistselector_screen_new() {
168         GtkWidget* win;
169         GtkWidget *treeview;
170         GtkWidget* playlistselector_box;
171         user_playlists_local = NULL;
172
173         /* Create the main window */
174         win = hildon_stackable_window_new();
175         gtk_window_set_title(GTK_WINDOW(win), "Playlists");
176
177         //player_set_radio_list(radio_list);
178         treeview = playlistselector_listview_create(NULL);
179
180         playlistselector_box = hildon_pannable_area_new();
181         hildon_pannable_area_add_with_viewport(HILDON_PANNABLE_AREA(playlistselector_box), treeview);
182
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);
186
187         hildon_gtk_window_set_progress_indicator(GTK_WINDOW(win),1);
188         hildon_banner_show_information(win,NULL,"Loading");
189
190         playlistselector_listview_update_model(treeview, user_playlists_local);
191
192         hildon_gtk_window_set_progress_indicator(GTK_WINDOW(win),0);
193         gtk_widget_show_all(win);
194
195         main_win = win;
196         return win;
197 }