diff -r 000000000000 -r be7aba49c535 maemo-ui/src/mmyth_epg_grid_view.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/maemo-ui/src/mmyth_epg_grid_view.c Tue Oct 24 14:30:57 2006 +0100 @@ -0,0 +1,213 @@ +#include +#include +#include +#include +#include + +#include "mmyth_epg_grid_view.h" +#include "mmyth_epg_grid_widget.h" + +/* Service genre */ +#define GENRE_MIN 0 +#define GENRE_MAX 10 +#define GENRE_UNDEFINED 0 +#define GENRE_MOVIE 1 +#define GENRE_NEWS 2 +#define GENRE_SHOW 3 +#define GENRE_SPORTS 4 +#define GENRE_CHILDREN 5 +#define GENRE_MUSIC 6 +#define GENRE_CULTURE 7 +#define GENRE_SOCIAL 8 +#define GENRE_EDUCATION 9 +#define GENRE_LEISURE 10 + +#define NRO_HOURS 3 + +/* Function prototypes*/ +static void update_service_details(MMythEpgGridWidget *object, + gpointer arg1, gpointer user_data); +static gboolean key_press_epg_grid_view(GtkWidget * widget, + GdkEventKey * event, + gpointer user_data); + +static GtkWidget *mmyth_epg_grid_widget = NULL; + +/* is a GtkEventBox */ +static GtkWidget *program_details_area = NULL; +static GtkWidget *details_main_hbox = NULL; +static GtkWidget *details_vbox = NULL; +static GtkWidget *details_logo_vbox = NULL; + +/* update signal callback from MMythEpgGridWidget */ +static void +update_service_details(MMythEpgGridWidget *object, gpointer arg1, gpointer user_data) +{ + g_return_if_fail(arg1 != NULL); + + EpgGridItem *epg_grid_item = (EpgGridItem *) arg1; + + gchar sel_prog_desc[100] = ""; + gchar time_buffer[50]; + + /* FIXME: get first content from content_list*/ + GMythProgramInfo *proginfo = (GMythProgramInfo *) epg_grid_item->proginfo; + + if(proginfo) { + GString *prog_name = proginfo->title; + GString *service_name = proginfo->chanid; + + if(details_vbox != NULL) + gtk_container_remove (GTK_CONTAINER (details_main_hbox), details_vbox); + + /* update service description */ + strcat(sel_prog_desc, service_name->str); + strcat(sel_prog_desc, ""); + + GtkWidget *fst_line_lbl = gtk_label_new(NULL); + gtk_misc_set_alignment (GTK_MISC(fst_line_lbl), 0.0, 0.0); + gtk_label_set_markup(GTK_LABEL(fst_line_lbl), sel_prog_desc); + + /* freeing char[] */ + sel_prog_desc[0] = 0; + strcat(sel_prog_desc, "\t"); + strcat(sel_prog_desc, prog_name->str); + + struct tm loctime_start, loctime_end; + + // Convert it to local time representation. + /* FIXME: conversion from time to localtime is different + in different machines */ + long int schedule_start_time = proginfo->startts; + long int schedule_end_time = proginfo->endts; + + if (localtime_r(&schedule_start_time, &loctime_start) == NULL) { + g_warning ("localtime_r error in mmyth_epg_grid_view!\n"); + } + + #if 0 + fprintf (stderr, asctime (loctime_start)); + #endif + + strftime (time_buffer, 100, " %H:%M - ", &loctime_start); + strcat(sel_prog_desc, time_buffer ); + + if (localtime_r(&schedule_end_time, &loctime_end) == NULL) { + g_warning ("localtime_r error in mmyth_epg_grid_view!\n"); + } + + #if 0 + fprintf (stderr, asctime (loctime_end)); + #endif + + strftime (time_buffer, 100, "%H:%M\n", &loctime_end); + strcat(sel_prog_desc, time_buffer ); + + GtkWidget *snd_line_lbl = gtk_label_new(NULL); + gtk_misc_set_alignment (GTK_MISC(snd_line_lbl), 0.0, 0.0); + gtk_label_set_markup(GTK_LABEL(snd_line_lbl), sel_prog_desc); + + // add the current selected program description to the label + details_vbox = gtk_vbox_new(FALSE, 0); + GtkWidget *fst_line_hbox = gtk_hbox_new(FALSE, 0); + + gtk_box_pack_start (GTK_BOX (fst_line_hbox), + fst_line_lbl, FALSE, FALSE, 6); + gtk_box_pack_start (GTK_BOX (details_vbox), + fst_line_hbox, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (details_vbox), + snd_line_lbl, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (details_main_hbox), + details_vbox, FALSE, FALSE, 0); + + gtk_widget_show_all(details_main_hbox); + } +} + +/* Callback for hardware keys */ +static gboolean +key_press_epg_grid_view(GtkWidget * widget, + GdkEventKey * event, gpointer user_data) +{ + MMythEpgGridWidget *mmyth_epg_grid_widget = (MMythEpgGridWidget *) user_data; + + return mmyth_epg_grid_widget_key_press(mmyth_epg_grid_widget, widget, event); +} + +GtkWidget * +epg_grid_view_new (MMythUi* mmyth_ui) +{ + GtkWidget *scrolled_window; + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), + GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + + gtk_widget_modify_bg(scrolled_window, GTK_STATE_NORMAL, &main_bg_color); + + GtkWidget *main_vbox = gtk_vbox_new (FALSE, 0); + //gtk_container_set_border_width(main_vbox, 4); + + GtkWidget *details_event_box = gtk_event_box_new(); + gtk_widget_modify_bg(details_event_box, GTK_STATE_NORMAL, &main_bg_color); + + program_details_area = gtk_vbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (details_event_box), + program_details_area); + gtk_container_set_border_width(GTK_CONTAINER (program_details_area), 4); + + details_main_hbox = gtk_hbox_new (FALSE, 10); + + gtk_box_pack_start (GTK_BOX (program_details_area), + details_main_hbox, FALSE, FALSE, 0); + + details_logo_vbox = gtk_vbox_new (FALSE, 0); + + GtkWidget *details_desc_vbox = gtk_vbox_new (FALSE, 0); + + gtk_box_pack_start (GTK_BOX (details_main_hbox), + details_desc_vbox, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (details_main_hbox), + details_logo_vbox, FALSE, FALSE, 0); + + gtk_widget_set_size_request (program_details_area, -1, 120); + + mmyth_epg_grid_widget = mmyth_epg_grid_widget_new(); + g_signal_connect(mmyth_epg_grid_widget, "selection_updated", + G_CALLBACK (update_service_details), NULL); + + /* select by default the first service */ + /* depends on mount services */ + if (MMYTH_EPG_GRID_WIDGET(mmyth_epg_grid_widget)->epg_view_model) { + GList *fst_service = (GList *) + MMYTH_EPG_GRID_WIDGET(mmyth_epg_grid_widget)->epg_view_model->data; + mmyth_epg_grid_widget_update_service(MMYTH_EPG_GRID_WIDGET(mmyth_epg_grid_widget), + fst_service); + } + + gtk_box_pack_start (GTK_BOX (main_vbox), + details_event_box, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (main_vbox), + gtk_hseparator_new(), FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (main_vbox), + mmyth_epg_grid_widget, FALSE, FALSE, 0); + + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), + main_vbox); + + /* Add hardware button listener to application */ + g_signal_connect(mmyth_ui->main_window, "key_press_event", + G_CALLBACK (key_press_epg_grid_view), mmyth_epg_grid_widget); + + gtk_widget_show_all (scrolled_window); + + return scrolled_window; +} + +/* +DVBHScheduleEvent * +mmyth_epg_grid_view_get_selected_schedule() +{ + return mmyth_epg_grid_get_selected_schedule + (MMYTH_EPG_GRID_WIDGET(mmyth_epg_grid_widget)); +} +*/