4 * Created on: 2009-10-22
8 #include <hildon/hildon.h>
9 #include "track_listview.h"
10 #include "data_structs.h"
11 #include "jamendo_api.h"
15 /****************************************************************************
20 COLUMN_NAME, COLUMN_DURATION, COLUMN_RATING, COLUMN_TRACK_PTR, NUM_COLUMNS
23 /****************************************************************************
26 static void track_row_tapped(GtkTreeView* treeview, GtkTreePath* path, gpointer data) {
31 model = gtk_tree_view_get_model(treeview);
32 if (gtk_tree_model_get_iter(model, &iter, path)) {
33 gtk_tree_model_get(model,&iter,COLUMN_TRACK_PTR,&track,-1);
39 /*****************************************************************************
42 GtkTreeModel* track_listview_create_model(GList* track_list, gint flags) {
47 gchar* stars[]={"","*","**","***","****","*****"};
49 store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
52 return GTK_TREE_MODEL(store);
54 for (track_iter = g_list_first(track_list); track_iter; track_iter = track_iter->next) {
55 Track* track = (Track*) track_iter->data;
57 gchar* duration = g_strdup_printf("%02d:%02d",track->duration/60,track->duration%60);
58 gchar* rating = g_strdup_printf("<span color='orange' size='medium' weight='bold'>%s</span>", stars[(int)(track->rating * 5.0 + 0.5)]);
59 if (flags & TRACK_LISTVIEW_ARTIST) {
60 name = g_strdup_printf("%s - %s", track->artist_name, track->name);
62 name = g_strdup_printf("%s", track->name);
64 gtk_list_store_append(store, &iter);
65 gtk_list_store_set(store, &iter,
67 COLUMN_DURATION, duration,
68 COLUMN_RATING, rating,
69 COLUMN_TRACK_PTR, track,
76 return GTK_TREE_MODEL( store );
79 static void track_listview_add_columns(GtkTreeView *treeview) {
80 GtkCellRenderer *renderer;
81 GtkTreeViewColumn *column;
83 renderer = gtk_cell_renderer_text_new();
84 column = gtk_tree_view_column_new_with_attributes("Name", renderer, "text", COLUMN_NAME, NULL);
85 gtk_tree_view_column_set_expand(column,TRUE);
86 gtk_tree_view_column_set_sizing(column,GTK_TREE_VIEW_COLUMN_FIXED);
87 gtk_tree_view_append_column(treeview, column);
89 renderer = gtk_cell_renderer_text_new();
90 column = gtk_tree_view_column_new_with_attributes("Duration", renderer, "text", COLUMN_DURATION, NULL);
91 // TODO: width should be calculated runtime
92 gtk_tree_view_column_set_fixed_width(column,70);
93 gtk_tree_view_append_column(treeview, column);
95 renderer = gtk_cell_renderer_text_new();
96 column = gtk_tree_view_column_new_with_attributes("Rating", renderer, "markup", COLUMN_RATING, NULL);
97 // TODO: width should be calculated runtime
98 gtk_tree_view_column_set_fixed_width(column,60);
99 gtk_tree_view_append_column(treeview, column);
102 GtkWidget* track_listview_create(GList* track_list, gint flags) {
107 model = track_listview_create_model(track_list, flags);
108 treeview = gtk_tree_view_new_with_model(model);
109 g_object_unref(model);
112 treeview = gtk_tree_view_new();
115 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)), GTK_SELECTION_NONE);
116 track_listview_add_columns(GTK_TREE_VIEW(treeview));
118 g_signal_connect(treeview, "hildon-row-tapped", G_CALLBACK(track_row_tapped), NULL);