From 9da7e71eed9175bb7077b8cc5c315d934a64bbe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erick=20P=C3=A9rez=20Castellanos?= Date: Wed, 19 Jun 2013 15:12:28 -0400 Subject: [PATCH] gcal-window: initial support for navigation Handled nav buttons actions Reorganized gcal-window source a little --- src/gcal-window.c | 157 ++++++++++++++++++++++++++-------------------- 1 file changed, 90 insertions(+), 67 deletions(-) diff --git a/src/gcal-window.c b/src/gcal-window.c index b14cf73a..083fd451 100644 --- a/src/gcal-window.c +++ b/src/gcal-window.c @@ -84,6 +84,11 @@ enum PROP_ACTIVE_DATE }; +static void date_updated (GtkButton *buttton, + gpointer user_data); + +static void update_view (GcalWindow *window); + static void gcal_window_constructed (GObject *object); static void gcal_window_finalize (GObject *object); @@ -114,9 +119,6 @@ static void gcal_window_search_toggled (GObject *o static void gcal_window_search_changed (GtkEditable *editable, gpointer user_data); -static void gcal_window_view_updated (GtkButton *buttton, - gpointer user_data); - static GcalManager* gcal_window_get_manager (GcalWindow *window); static void gcal_window_init_edit_dialog (GcalWindow *window); @@ -171,6 +173,86 @@ static void gcal_window_update_event_widget (GcalManager *m G_DEFINE_TYPE(GcalWindow, gcal_window, GTK_TYPE_APPLICATION_WINDOW) +static void +date_updated (GtkButton *button, + gpointer user_data) +{ + GcalWindowPrivate *priv; + + gboolean move_back; + + priv = GCAL_WINDOW (user_data)->priv; + + move_back = gcal_nav_bar_get_prev_button (GCAL_NAV_BAR (priv->nav_bar)) == (GtkWidget*) button; + + switch (priv->active_view) + { + case GCAL_WINDOW_VIEW_DAY: + priv->active_date->day += 1 * (move_back ? -1 : 1); + break; + case GCAL_WINDOW_VIEW_WEEK: + priv->active_date->day += 7 * (move_back ? -1 : 1); + break; + case GCAL_WINDOW_VIEW_MONTH: + priv->active_date->month += 1 * (move_back ? -1 : 1); + break; + case GCAL_WINDOW_VIEW_YEAR: + priv->active_date->year += 1 * (move_back ? -1 : 1); + break; + case GCAL_WINDOW_VIEW_LIST: + break; + } + *(priv->active_date) = icaltime_normalize (*(priv->active_date)); + g_object_notify (user_data, "active-date"); + + update_view (GCAL_WINDOW (user_data)); +} + +/** + * update_view: + * @window: + * + * Calling update view on the active view + **/ +static void +update_view (GcalWindow *window) +{ + GcalWindowPrivate *priv; + + GtkWidget *widget; + + icaltimetype *first_day; + icaltimetype *last_day; + gchar* header; + + priv = window->priv; + + widget = priv->views[priv->active_view]; + + /* destroying old children */ + /* gtk_container_foreach (GTK_CONTAINER (widget), */ + /* (GtkCallback) gtk_widget_destroy, NULL); */ + + first_day = gcal_view_get_initial_date (GCAL_VIEW (widget)); + last_day = gcal_view_get_final_date (GCAL_VIEW (widget)); + + gcal_manager_set_new_range ( + gcal_window_get_manager (window), + first_day, + last_day); + + g_free (first_day); + g_free (last_day); + + header = gcal_view_get_left_header (GCAL_VIEW (widget)); + g_object_set (priv->nav_bar, "left-header", header, NULL); + g_free (header); + + header = gcal_view_get_right_header (GCAL_VIEW (widget)); + g_object_set (priv->nav_bar, "right-header", header, NULL); + g_free (header); +} + static void gcal_window_class_init(GcalWindowClass *klass) { @@ -375,9 +457,9 @@ gcal_window_constructed (GObject *object) G_CALLBACK (gcal_window_search_changed), object); g_signal_connect (gcal_nav_bar_get_prev_button (GCAL_NAV_BAR (priv->nav_bar)), - "clicked", G_CALLBACK (gcal_window_view_updated), object); + "clicked", G_CALLBACK (date_updated), object); g_signal_connect (gcal_nav_bar_get_next_button (GCAL_NAV_BAR (priv->nav_bar)), - "clicked", G_CALLBACK (gcal_window_view_updated), object); + "clicked", G_CALLBACK (date_updated), object); gtk_container_add (GTK_CONTAINER (object), priv->main_box); gtk_widget_show_all (priv->main_box); @@ -509,12 +591,6 @@ gcal_window_view_changed (GObject *object, GEnumValue *eval; GcalWindowViewType view_type; - GtkWidget *widget; - icaltimetype *first_day; - icaltimetype *last_day; - - gchar *header; - priv = GCAL_WINDOW (user_data)->priv; window = GCAL_WINDOW (user_data); @@ -532,24 +608,7 @@ gcal_window_view_changed (GObject *object, priv->active_view = view_type; g_object_notify (G_OBJECT (window), "active-view"); - widget = priv->views[view_type]; - - first_day = gcal_view_get_initial_date (GCAL_VIEW (widget)); - last_day = gcal_view_get_final_date (GCAL_VIEW (widget)); - - gcal_manager_set_new_range (gcal_window_get_manager (window), - first_day, - last_day); - g_free (first_day); - g_free (last_day); - - header = gcal_view_get_left_header (GCAL_VIEW (widget)); - g_object_set (priv->nav_bar, "left-header", header, NULL); - g_free (header); - - header = gcal_view_get_right_header (GCAL_VIEW (widget)); - g_object_set (priv->nav_bar, "right-header", header, NULL); - g_free (header); + update_view (GCAL_WINDOW (user_data)); } static void @@ -611,43 +670,6 @@ gcal_window_search_changed (GtkEditable *editable, } } -static void -gcal_window_view_updated (GtkButton *button, - gpointer user_data) -{ - GcalWindowPrivate *priv; - priv = GCAL_WINDOW (user_data)->priv; - - if (gcal_nav_bar_get_prev_button (GCAL_NAV_BAR (priv->nav_bar)) == - (GtkWidget*) button) - { - g_debug ("Moved back"); - } - else - { - g_debug ("Moved forward"); - } - - /* FIXME: reenable views updating */ - /* priv = GCAL_WINDOW (user_data)->priv; */ - - /* gcal_view_set_date (GCAL_VIEW (priv->views[priv->active_view]), */ - /* date); */ - - /* first_day = gcal_view_get_initial_date ( */ - /* GCAL_VIEW (priv->views[priv->active_view])); */ - /* last_day = gcal_view_get_final_date ( */ - /* GCAL_VIEW (priv->views[priv->active_view])); */ - - /* gcal_manager_set_new_range ( */ - /* gcal_window_get_manager (GCAL_WINDOW (user_data)), */ - /* first_day, */ - /* last_day); */ - - /* g_free (first_day); */ - /* g_free (last_day); */ -} - static GcalManager* gcal_window_get_manager (GcalWindow *window) { @@ -813,7 +835,8 @@ gcal_window_events_modified (GcalManager *manager, source_uid, event_uid); - if (gcal_view_draw_event (priv->views[i], start_date, end_date)) + if (gcal_view_draw_event (GCAL_VIEW (priv->views[i]), + start_date, end_date)) { gcal_window_update_event_widget (manager, source_uid,