From a873e0b73fa64a492c4939088d17b4670a5f7ba8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erick=20P=C3=A9rez=20Castellanos?= Date: Tue, 15 May 2012 23:32:29 -0400 Subject: [PATCH] Added a bunch of changes. Fixed some minors align issues Added method to GcalManager to get dtstart from events Added method to GcalManager to sync COLUMN_ACTIVE with GcalManagerUnit::enabled attribute Added method for receiving button press events of view in GcalWindow --- src/gcal-floating-container.c | 14 +----- src/gcal-manager.c | 81 ++++++++++++++++++++++++++++------- src/gcal-manager.h | 11 ++--- src/gcal-window.c | 60 +++++++++++++++++++++----- 4 files changed, 121 insertions(+), 45 deletions(-) diff --git a/src/gcal-floating-container.c b/src/gcal-floating-container.c index f4ee4d08..1446dcac 100644 --- a/src/gcal-floating-container.c +++ b/src/gcal-floating-container.c @@ -50,8 +50,6 @@ static gboolean gcal_floating_container_draw (GtkWidge static void gcal_floating_container_realize (GtkWidget *widget); -static void gcal_floating_container_unrealize (GtkWidget *widget); - static void gcal_floating_container_style_updated (GtkWidget *widget); static void gcal_floating_container_add (GtkContainer *container, @@ -82,7 +80,6 @@ gcal_floating_container_class_init (GcalFloatingContainerClass *klass) widget_class->size_allocate = gcal_floating_container_size_allocate; widget_class->draw = gcal_floating_container_draw; widget_class->realize = gcal_floating_container_realize; - widget_class->unrealize = gcal_floating_container_unrealize; widget_class->style_updated = gcal_floating_container_style_updated; container_class->add = gcal_floating_container_add; @@ -100,7 +97,6 @@ gcal_floating_container_init (GcalFloatingContainer *self) self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GCAL_TYPE_FLOATING_CONTAINER, GcalFloatingContainerPrivate); - } static void @@ -289,11 +285,9 @@ gcal_floating_container_draw (GtkWidget *widget, cairo_t *cr) { GtkStyleContext *context; - GdkRectangle rect; guint border_width; context = gtk_widget_get_style_context (widget); - gtk_widget_get_allocation (widget, &rect); border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); gtk_render_background (context, cr, @@ -305,7 +299,7 @@ gcal_floating_container_draw (GtkWidget *widget, gtk_widget_get_allocated_width (widget) - 2 * border_width, gtk_widget_get_allocated_height (widget) - 2 * border_width); if (GTK_WIDGET_CLASS (gcal_floating_container_parent_class)->draw != NULL) - GTK_WIDGET_CLASS (gcal_floating_container_parent_class)->draw(widget, cr); + GTK_WIDGET_CLASS (gcal_floating_container_parent_class)->draw (widget, cr); return FALSE; } @@ -327,12 +321,6 @@ gcal_floating_container_realize (GtkWidget *widget) gtk_widget_set_parent_window (child, window); } -static void -gcal_floating_container_unrealize (GtkWidget *widget) -{ - GTK_WIDGET_CLASS (gcal_floating_container_parent_class)->unrealize (widget); -} - static void gcal_floating_container_style_updated (GtkWidget *widget) { diff --git a/src/gcal-manager.c b/src/gcal-manager.c index 98e4e267..964e18de 100644 --- a/src/gcal-manager.c +++ b/src/gcal-manager.c @@ -69,7 +69,7 @@ struct _GcalManagerPrivate /** * The list of clients we are managing. * Each value is of type GCalStoreUnit - * And is key is uid of the source + * And each key is the source uid */ GHashTable *clients; @@ -90,6 +90,7 @@ struct _GcalManagerPrivate GCancellable *loading_clients; }; + /* Signal IDs */ enum { @@ -138,6 +139,11 @@ static void _gcal_manager_on_view_objects_modified (ECalClientView *view gpointer objects, gpointer user_data); +static void _gcal_manager_on_sources_row_changed (GtkTreeModel *store, + GtkTreePath *path, + GtkTreeIter *iter, + gpointer user_data); + G_DEFINE_TYPE(GcalManager, gcal_manager, G_TYPE_OBJECT) static void @@ -197,6 +203,11 @@ gcal_manager_init (GcalManager *self) GDK_TYPE_COLOR); g_object_ref_sink (priv->sources_model); + g_signal_connect (priv->sources_model, + "row-changed", + G_CALLBACK (_gcal_manager_on_sources_row_changed), + self); + priv->initial_date = g_new(icaltimetype, 1); *(priv->initial_date) = icaltime_from_timet (time (NULL), 0); @@ -553,7 +564,7 @@ _gcal_manager_on_view_objects_added (ECalClientView *view, ECalClient *client; const gchar *source_uid; - GcalManagerEventData *data; + gchar *event_uid; priv = GCAL_MANAGER (user_data)->priv; events_data = NULL; @@ -579,22 +590,15 @@ _gcal_manager_on_view_objects_added (ECalClientView *view, component); } - data = g_new0 (GcalManagerEventData, 1); - data->source_uid = g_strdup (source_uid); - data->event_uid = g_strdup (icalcomponent_get_uid (l->data)); - events_data = g_slist_append (events_data, data); + event_uid = g_strdup_printf ("%s:%s", + source_uid, + icalcomponent_get_uid (l->data)); + events_data = g_slist_append (events_data, event_uid); } } g_signal_emit (GCAL_MANAGER (user_data), signals[EVENTS_ADDED], 0, events_data); - for (l = events_data; l != NULL; l = l->next) - { - GcalManagerEventData *data; - data = l->data; - g_free (data->source_uid); - g_free (data->event_uid); - } g_slist_free_full (events_data, g_free); } @@ -624,6 +628,31 @@ _gcal_manager_on_view_objects_modified (ECalClientView *view, { } +static void +_gcal_manager_on_sources_row_changed (GtkTreeModel *store, + GtkTreePath *path, + GtkTreeIter *iter, + gpointer user_data) +{ + GcalManagerPrivate *priv; + GcalManagerUnit *unit; + gchar *source_uid; + gboolean active; + + priv = GCAL_MANAGER (user_data)->priv; + gtk_tree_model_get (store, + iter, + COLUMN_UID, + &source_uid, + COLUMN_ACTIVE, + &active, + -1); + unit = g_hash_table_lookup (priv->clients, source_uid); + unit->enabled = active; + + g_free (source_uid); +} + /** * gcal_manager_new: * @@ -681,7 +710,7 @@ gcal_manager_add_source (GcalManager *manager, for (groups = e_source_list_peek_groups (priv->system_sources); groups != NULL; groups = groups->next) - { + { if (g_strcmp0 ( base_uri, e_source_group_peek_base_uri (E_SOURCE_GROUP (groups->data))) == 0) @@ -701,7 +730,7 @@ gcal_manager_add_source (GcalManager *manager, } break; } - } + } if (selected_group == NULL) { @@ -789,3 +818,25 @@ gcal_manager_set_new_range (GcalManager *manager, _gcal_manager_reload_events (manager); } } + +icaltimetype* +gcal_manager_get_start_date (GcalManager *manager, + const gchar *source_uid, + const gchar *event_uid) +{ + GcalManagerPrivate *priv; + GcalManagerUnit *unit; + ECalComponent *event; + ECalComponentDateTime dt; + icaltimetype *dtstart; + + priv = manager->priv; + + unit = g_hash_table_lookup (priv->clients, source_uid); + event = g_hash_table_lookup (unit->events, event_uid); + e_cal_component_get_dtstart (event, &dt); + dtstart = gcal_dup_icaltime (dt.value); + + e_cal_component_free_datetime (&dt); + return dtstart; +} diff --git a/src/gcal-manager.h b/src/gcal-manager.h index 935c725b..607e167a 100644 --- a/src/gcal-manager.h +++ b/src/gcal-manager.h @@ -37,13 +37,6 @@ G_BEGIN_DECLS typedef struct _GcalManager GcalManager; typedef struct _GcalManagerClass GcalManagerClass; typedef struct _GcalManagerPrivate GcalManagerPrivate; -typedef struct _GcalManagerEventData GcalManagerEventData; - -struct _GcalManagerEventData -{ - gchar *source_uid; - gchar *event_uid; -}; struct _GcalManager { @@ -80,6 +73,10 @@ void gcal_manager_set_new_range (GcalManager *manager, const icaltimetype *initial_date, const icaltimetype *final_date); +icaltimetype* gcal_manager_get_start_date (GcalManager *manager, + const gchar *source_uid, + const gchar *event_uid); + G_END_DECLS #endif /* __GCAL_MANAGER_H__ */ diff --git a/src/gcal-window.c b/src/gcal-window.c index 0c53622e..abaae9b6 100644 --- a/src/gcal-window.c +++ b/src/gcal-window.c @@ -33,13 +33,15 @@ struct _GcalWindowPrivate { - ClutterActor *main_toolbar; - ClutterActor *notebook_actor; - ClutterActor *sources_actor; + ClutterActor *main_toolbar; + ClutterActor *notebook_actor; + ClutterActor *sources_actor; - GtkWidget *notebook; - GtkWidget *sources_view; - GtkWidget *views [5]; + GtkWidget *notebook; + GtkWidget *sources_view; + GtkWidget *views [5]; + + GcalViewType active_view; }; static void gcal_window_constructed (GObject *object); @@ -61,6 +63,10 @@ static void _gcal_window_sources_row_activated (GtkTreeView *tree_view, GtkTreeViewColumn *column, gpointer user_data); +static void _gcal_window_view_clicked (GtkWidget *widget, + GdkEventButton *event, + gpointer user_data); + static void _gcal_window_events_added (GcalManager *manager, gpointer events_list, gpointer user_data); @@ -208,6 +214,10 @@ gcal_window_constructed (GObject *object) "sources-shown", G_CALLBACK (_gcal_window_sources_shown), object); + g_signal_connect (priv->views[GCAL_VIEW_TYPE_MONTHLY], + "button-press-event", + G_CALLBACK (_gcal_window_view_clicked), + object); gtk_widget_show (embed); } @@ -294,9 +304,12 @@ _gcal_window_view_changed (GcalMainToolbar *main_toolbar, GcalViewType view_type, gpointer user_data) { - GcalWindow *window; + GcalWindowPrivate *priv; GcalManager *manager; + priv = GCAL_WINDOW (user_data)->priv; + priv->active_view = view_type; + /* FIXME: demo code */ icaltimetype *first_day; icaltimetype *last_day; @@ -307,10 +320,9 @@ _gcal_window_view_changed (GcalMainToolbar *main_toolbar, *last_day = *first_day; last_day->day = 28; - window = GCAL_WINDOW (user_data); - manager = _gcal_window_get_manager (window); + manager = _gcal_window_get_manager (GCAL_WINDOW (user_data)); gcal_manager_set_new_range (manager, first_day, last_day); - g_debug ("GcalViewType in GcalWindow %d", view_type); + g_debug ("GcalViewType in GcalWindow %d", priv->active_view); g_free (first_day); g_free (last_day); } @@ -369,12 +381,40 @@ _gcal_window_sources_row_activated (GtkTreeView *tree_view, -1); } +static void +_gcal_window_view_clicked (GtkWidget *widget, + GdkEventButton *event, + gpointer user_data) +{ + g_debug ("View Clicked"); +} + static void _gcal_window_events_added (GcalManager *manager, gpointer events_list, gpointer user_data) { + GSList *l; + icaltimetype *starting_date; + gchar **tokens; + gchar *source_uid; + gchar *event_uid; + g_debug ("[IWEA]: obtained %d events", g_slist_length (events_list)); + for (l = events_list; l != NULL; l = l->next) + { + g_debug ("event %s", (gchar*) l->data); + tokens = g_strsplit ((gchar*) l->data, ":", -1); + source_uid = tokens[0]; + event_uid = tokens[1]; + starting_date = gcal_manager_get_start_date (manager, + source_uid, + event_uid); + g_debug ("starts on %s", icaltime_as_ical_string (*starting_date)); + + g_free (starting_date); + g_strfreev (tokens); + } } GtkWidget*