gcal-window: initial support for navigation

Handled nav buttons actions
Reorganized gcal-window source a little
This commit is contained in:
Erick Pérez Castellanos
2014-12-04 17:10:27 -05:00
parent 3c038ac3c3
commit 9da7e71eed
+90 -67
View File
@@ -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,