4 * Created on: 2009-10-02
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"
17 #include "resource_utils.h"
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);
24 /****************************************************************************
25 * button menu functions
27 * creates buttons for main menu
28 ****************************************************************************/
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) }
44 static GtkWidget* button_menu() {
48 menu_box = gtk_vbox_new(TRUE, 0);
50 GtkWidget* logo = resource_get_image("logo.png");
52 gtk_box_pack_start(GTK_BOX(menu_box), logo, TRUE, FALSE, 0);
54 for (i = 0; i < G_N_ELEMENTS(button_menu_data); i++) {
55 GtkWidget* image = resource_get_image(button_menu_data[i].image);
57 HildonButton* button = HILDON_BUTTON(hildon_button_new(
58 HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT,
59 HILDON_BUTTON_ARRANGEMENT_VERTICAL));
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);
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);
76 } PopulateAlbumListParam;
78 static guint populate_album_list(PopulateAlbumListParam *param) {
81 album_list = jamendo_get_popular_albums_week();
82 album_listview_update_model(param->listview, album_list);
83 album_list_free(album_list);
85 hildon_gtk_window_set_progress_indicator(GTK_WINDOW(param->win),0);
86 gtk_widget_show_all(param->win);
92 /****************************************************************************
95 GtkWidget* home_screen_new() {
98 GtkWidget* pannable_area;
102 win = hildon_stackable_window_new();
104 table = gtk_table_new(1, 2, TRUE);
105 gtk_container_add(GTK_CONTAINER(win), table);
107 menu = button_menu();
108 gtk_table_attach_defaults(GTK_TABLE(table), menu, 0, 1, 0, 1);
110 pannable_area = hildon_pannable_area_new();
111 treeview = album_listview_create(NULL);
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);
116 hildon_gtk_window_set_progress_indicator(GTK_WINDOW(win),1);
117 hildon_banner_show_information(win,NULL,"Downloading");
119 PopulateAlbumListParam* param = g_new0(PopulateAlbumListParam,1);
121 param->listview = treeview;
122 gdk_threads_add_idle((GSourceFunc)populate_album_list, param);
124 hildon_program_add_window(hildon_program_get_instance(), HILDON_WINDOW(win));
126 gtk_widget_hide(player_toolbar_create());
131 static void show_search_screen(GtkWidget* button, gpointer data) {
132 GtkWidget* win = search_screen_new();
133 gtk_widget_show_all(win);
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);
142 static void show_radioselector_screen(GtkWidget* button, gpointer data) {
143 GtkWidget* win = radioselector_screen_new();
144 gtk_widget_show_all(win);
147 static void show_playlistselector_screen(GtkWidget* button, gpointer data) {
148 GtkWidget* win = playlistselector_screen_new();
149 gtk_widget_show_all(win);