#ifndef __MMYTH_EPG_GRID_WIDGET_H__
#define __MMYTH_EPG_GRID_WIDGET_H__

#include <glib-object.h>
#include <gdk/gdk.h>
#include <gtk/gtkvbox.h>
#include <gtk/gtkeventbox.h>

#include <gmyth/gmyth_common.h>
#include <gmyth/gmyth_backendinfo.h>
#define MAX_DISPLAY_CHANS 4

G_BEGIN_DECLS
#define MMYTH_EPG_GRID_WIDGET_TYPE               (mmyth_epg_grid_widget_get_type ())
#define MMYTH_EPG_GRID_WIDGET(obj)               (GTK_CHECK_CAST ((obj), MMYTH_EPG_GRID_WIDGET_TYPE, MMythEpgGridWidget))
#define MMYTH_EPG_GRID_WIDGET_CLASS(klass)       (GTK_CHECK_CLASS_CAST ((klass), MMYTH_EPG_GRID_WIDGET_TYPE, MMythEpgGridWidgetClass))
#define IS_MMYTH_EPG_GRID_WIDGET(obj)            (GTK_CHECK_TYPE ((obj), MMYTH_EPG_GRID_WIDGET_TYPE))
#define IS_MMYTH_EPG_GRID_WIDGET_CLASS(klass)    (GTK_CHECK_CLASS_TYPE ((klass), MMYTH_EPG_GRID_WIDGET_TYPE))
#define MMYTH_EPG_GRID_WIDGET_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS ((obj), MMYTH_EPG_GRID_WIDGET_TYPE, MMythEpgGridWidgetClass))
#define MMYTH_EPG_GRID_WIDGET_GET_PRIVATE(obj)   (G_TYPE_INSTANCE_GET_PRIVATE ((obj), MMYTH_EPG_GRID_WIDGET_TYPE, MMythEpgGridWidgetPrivate))
typedef struct _MMythEpgGridWidget MMythEpgGridWidget;
typedef struct _MMythEpgGridWidgetClass MMythEpgGridWidgetClass;
typedef struct _MMythEpgGridWidgetPrivate MMythEpgGridWidgetPrivate;

struct _MMythEpgGridWidgetClass {
    GtkEventBoxClass parent_class;

    /*
     * callbacks 
     */
    /*
     * no one for now 
     */
};

struct _MMythEpgGridWidget {
    GtkEventBox     event_box;

    /*
     * Selected Widgets Logic
     */
    /*
     * List os Service Model in the current view the data of this list are 
     * GList for the programs of each service 
     */
    GList          *epg_view_model;

    /*
     * Selected Schedule Item
     */
    GList          *selected_grid_item;

};


GType           mmyth_epg_grid_widget_get_type(void);
GtkWidget      *mmyth_epg_grid_widget_new(void);
/*
 * DVBHScheduleEvent* mmyth_epg_grid_get_selected_schedule
 * (MMythEpgGridWidget * object);
 */
void            mmyth_epg_grid_widget_update_service(MMythEpgGridWidget *
                                                     object,
                                                     GList *
                                                     epg_grid_item_node);
gboolean        mmyth_epg_grid_widget_key_press(MMythEpgGridWidget *
                                                object, GtkWidget * widget,
                                                GdkEventKey * event);

typedef struct _EpgGridItem EpgGridItem;

/*
 * FIXME: auxiliary struct 
 */
struct _EpgGridItem {

    GMythProgramInfo *proginfo;
    GtkWidget      *event_box;

    /*
     * for callback purposes 
     */
    MMythEpgGridWidget *object;
};

G_END_DECLS
#endif                          /* __MMYTH_EPG_GRID_WIDGET_H__ */