Cleanup.
[jamendo] / src / home_screen.c
1 /*
2  * home_screen.c
3  *
4  *  Created on: 2009-10-02
5  *      Author: marcin
6  */
7
8 #include <hildon/hildon.h>
9 #include "jamendo_api.h"
10 #include "album_listview.h"
11 #include "album_screen.h"
12 #include "search_screen.h"
13 #include "playlist_screen.h"
14 #include "radioselector_screen.h"
15 #include "playlistselector_screen.h"
16 #include "player.h"
17 #include "resource_utils.h"
18
19 static void show_search_screen(GtkWidget* button, gpointer data);
20 static void show_top_100_screen(GtkWidget* button, gpointer data);
21 static void show_radioselector_screen(GtkWidget* button, gpointer data);
22 static void show_playlistselector_screen(GtkWidget* button, gpointer data);
23
24 /****************************************************************************
25  * button menu functions
26  *
27  * creates buttons for main menu
28  ****************************************************************************/
29
30 typedef struct {
31         const gchar* image;
32         const gchar* label;
33         GCallback on_click;
34 } MenuItem;
35
36 static MenuItem button_menu_data[] = {
37                 { "list_search.png", "Search", G_CALLBACK(show_search_screen) },
38 //              { "list_star.png", "Favorites", NULL },
39                 { "list_radio.png", "Radio", G_CALLBACK(show_radioselector_screen) },
40 //              { "list_playlist.png", "Playlists", G_CALLBACK(show_playlistselector_screen) },
41                 { "list_top.png", "Most listened", G_CALLBACK(show_top_100_screen) }
42 };
43
44 static GtkWidget* button_menu() {
45         GtkWidget* menu_box;
46         gint i = 0;
47
48         menu_box = gtk_vbox_new(TRUE, 0);
49
50         GtkWidget* logo = resource_get_image("logo.png");
51
52         gtk_box_pack_start(GTK_BOX(menu_box), logo, TRUE, FALSE, 0);
53
54         for (i = 0; i < G_N_ELEMENTS(button_menu_data); i++) {
55                 GtkWidget* image = resource_get_image(button_menu_data[i].image);
56
57                 HildonButton* button = HILDON_BUTTON(hildon_button_new(
58                                                 HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT,
59                                                 HILDON_BUTTON_ARRANGEMENT_VERTICAL));
60
61                 hildon_button_set_alignment(button, 0, 0.5, 0, 0);
62                 hildon_button_set_image(button, image);
63                 hildon_button_set_title(button, button_menu_data[i].label);
64
65                 gtk_box_pack_start(GTK_BOX(menu_box), GTK_WIDGET(button), TRUE, FALSE, 0);
66                 if (button_menu_data[i].on_click)
67                         g_signal_connect(button, "clicked", button_menu_data[i].on_click, NULL);
68         }
69
70         return menu_box;
71 }
72
73 typedef struct {
74         GtkWidget *win;
75         GtkWidget *listview;
76 } PopulateAlbumListParam;
77
78 static guint populate_album_list(PopulateAlbumListParam *param) {
79         GList* album_list;
80
81         album_list = jamendo_get_popular_albums_week();
82         album_listview_update_model(param->listview, album_list);
83         album_list_free(album_list);
84
85         hildon_gtk_window_set_progress_indicator(GTK_WINDOW(param->win),0);
86         gtk_widget_show_all(param->win);
87
88         g_free(param);
89         return FALSE;
90 }
91
92 /****************************************************************************
93  *
94  */
95 GtkWidget* home_screen_new() {
96         GtkWidget* win;
97         GtkWidget *table;
98         GtkWidget* pannable_area;
99         GtkWidget *menu;
100         GtkWidget *treeview;
101
102         win = hildon_stackable_window_new();
103
104         table = gtk_table_new(1, 2, TRUE);
105         gtk_container_add(GTK_CONTAINER(win), table);
106
107         menu = button_menu();
108         gtk_table_attach_defaults(GTK_TABLE(table), menu, 0, 1, 0, 1);
109
110         pannable_area = hildon_pannable_area_new();
111         treeview = album_listview_create(NULL);
112
113         hildon_pannable_area_add_with_viewport(HILDON_PANNABLE_AREA(pannable_area), treeview);
114         gtk_table_attach_defaults(GTK_TABLE(table), pannable_area, 1, 2, 0, 1);
115
116         hildon_gtk_window_set_progress_indicator(GTK_WINDOW(win),1);
117         hildon_banner_show_information(win,NULL,"Downloading");
118
119         PopulateAlbumListParam* param = g_new0(PopulateAlbumListParam,1);
120         param->win = win;
121         param->listview = treeview;
122         gdk_threads_add_idle((GSourceFunc)populate_album_list, param);
123
124         hildon_program_add_window(hildon_program_get_instance(), HILDON_WINDOW(win));
125
126         gtk_widget_hide(player_toolbar_create());
127
128         return win;
129 }
130
131 static void show_search_screen(GtkWidget* button, gpointer data) {
132         GtkWidget* win = search_screen_new();
133         gtk_widget_show_all(win);
134 }
135
136 static void show_top_100_screen(GtkWidget* button, gpointer data) {
137         GList* track_list = jamendo_get_top_100();
138         GtkWidget* win = playlist_screen_new(track_list,"Top 100 Most Listened");
139         gtk_widget_show_all(win);
140 }
141
142 static void show_radioselector_screen(GtkWidget* button, gpointer data) {
143         GtkWidget* win = radioselector_screen_new();
144         gtk_widget_show_all(win);
145 }
146
147 static void show_playlistselector_screen(GtkWidget* button, gpointer data) {
148         GtkWidget* win = playlistselector_screen_new();
149         gtk_widget_show_all(win);
150 }