X-Git-Url: http://git.maemo.org/git/?p=jamendo;a=blobdiff_plain;f=src%2Ftrack_listview.c;fp=src%2Ftrack_listview.c;h=ef323dcfabac99b3017c9b24b4d5d2b3e923fb16;hp=0000000000000000000000000000000000000000;hb=71eece00473c745dbe74c7dd9abd6a5fa52ea3ab;hpb=496d310181c50d216bf2f44e9a970a791aa2aba0 diff --git a/src/track_listview.c b/src/track_listview.c new file mode 100644 index 0000000..ef323dc --- /dev/null +++ b/src/track_listview.c @@ -0,0 +1,121 @@ +/* + * track_listview.c + * + * Created on: 2009-10-22 + * Author: marcin + */ + +#include +#include "track_listview.h" +#include "data_structs.h" +#include "jamendo_api.h" +#include "player.h" + + +/**************************************************************************** + * + */ + +enum { + COLUMN_NAME, COLUMN_DURATION, COLUMN_RATING, COLUMN_TRACK_PTR, NUM_COLUMNS +}; + +/**************************************************************************** + * + */ +static void track_row_tapped(GtkTreeView* treeview, GtkTreePath* path, gpointer data) { + GtkTreeModel *model; + GtkTreeIter iter; + Track* track = NULL; + + model = gtk_tree_view_get_model(treeview); + if (gtk_tree_model_get_iter(model, &iter, path)) { + gtk_tree_model_get(model,&iter,COLUMN_TRACK_PTR,&track,-1); + } + + play_track(track); +} + +/***************************************************************************** + * + */ +GtkTreeModel* track_listview_create_model(GList* track_list, gint flags) { + GtkListStore *store; + GtkTreeIter iter; + + GList* track_iter; + gchar* stars[]={"","*","**","***","****","*****"}; + + store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); + + if (!track_list) + return GTK_TREE_MODEL(store); + + for (track_iter = g_list_first(track_list); track_iter; track_iter = track_iter->next) { + Track* track = (Track*) track_iter->data; + gchar* name; + gchar* duration = g_strdup_printf("%02d:%02d",track->duration/60,track->duration%60); + gchar* rating = g_strdup_printf("%s", stars[(int)(track->rating * 5.0 + 0.5)]); + if (flags & TRACK_LISTVIEW_ARTIST) { + name = g_strdup_printf("%s - %s", track->artist_name, track->name); + } else { + name = g_strdup_printf("%s", track->name); + } + gtk_list_store_append(store, &iter); + gtk_list_store_set(store, &iter, + COLUMN_NAME, name, + COLUMN_DURATION, duration, + COLUMN_RATING, rating, + COLUMN_TRACK_PTR, track, + -1); + g_free(name); + g_free(duration); + g_free(rating); + } + + return GTK_TREE_MODEL( store ); +} + +static void track_listview_add_columns(GtkTreeView *treeview) { + GtkCellRenderer *renderer; + GtkTreeViewColumn *column; + + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Name", renderer, "text", COLUMN_NAME, NULL); + gtk_tree_view_column_set_expand(column,TRUE); + gtk_tree_view_column_set_sizing(column,GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_append_column(treeview, column); + + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Duration", renderer, "text", COLUMN_DURATION, NULL); + // TODO: width should be calculated runtime + gtk_tree_view_column_set_fixed_width(column,70); + gtk_tree_view_append_column(treeview, column); + + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Rating", renderer, "markup", COLUMN_RATING, NULL); + // TODO: width should be calculated runtime + gtk_tree_view_column_set_fixed_width(column,60); + gtk_tree_view_append_column(treeview, column); +} + +GtkWidget* track_listview_create(GList* track_list, gint flags) { + GtkWidget* treeview; + GtkTreeModel* model; + + if(track_list) { + model = track_listview_create_model(track_list, flags); + treeview = gtk_tree_view_new_with_model(model); + g_object_unref(model); + } + else { + treeview = gtk_tree_view_new(); + } + + gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)), GTK_SELECTION_NONE); + track_listview_add_columns(GTK_TREE_VIEW(treeview)); + + g_signal_connect(treeview, "hildon-row-tapped", G_CALLBACK(track_row_tapped), NULL); + + return treeview; +}