[evolution/kill-bonobo] Add EMonthView, a simple subclass of EWeekView.



commit 7fc5566885801798839c94288fdff2d3c3ffe0d2
Author: Matthew Barnes <mbarnes redhat com>
Date:   Fri Jul 24 01:38:43 2009 -0400

    Add EMonthView, a simple subclass of EWeekView.

 calendar/gui/Makefile.am    |   10 +-
 calendar/gui/e-month-view.c |  211 ++++++++++++++++++++++++++++++
 calendar/gui/e-month-view.h |   66 ++++++++++
 calendar/gui/e-week-view.c  |  300 +++++++++++++-----------------------------
 calendar/gui/e-week-view.h  |  156 ++++++++++++----------
 5 files changed, 462 insertions(+), 281 deletions(-)
---
diff --git a/calendar/gui/Makefile.am b/calendar/gui/Makefile.am
index e460d3d..0cf9c99 100644
--- a/calendar/gui/Makefile.am
+++ b/calendar/gui/Makefile.am
@@ -54,10 +54,10 @@ noinst_LTLIBRARIES = libcal-gui.la
 libcal_gui_la_SOURCES =		\
 	e-attachment-handler-calendar.c		\
 	e-attachment-handler-calendar.h		\
- 	e-calendar-view.c			\
- 	e-calendar-view.h			\
- 	e-calendar-table.c			\
- 	e-calendar-table.h			\
+	e-calendar-view.c			\
+	e-calendar-view.h			\
+	e-calendar-table.c			\
+	e-calendar-table.h			\
 	calendar-config.c			\
 	calendar-config.h			\
 	calendar-config-keys.h			\
@@ -141,6 +141,8 @@ libcal_gui_la_SOURCES =		\
 	e-memo-table-config.h			\
 	e-mini-calendar-config.c		\
 	e-mini-calendar-config.h		\
+	e-month-view.c				\
+	e-month-view.h				\
 	e-select-names-editable.c		\
 	e-select-names-editable.h		\
 	e-select-names-renderer.c		\
diff --git a/calendar/gui/e-month-view.c b/calendar/gui/e-month-view.c
new file mode 100644
index 0000000..6f00e1d
--- /dev/null
+++ b/calendar/gui/e-month-view.c
@@ -0,0 +1,211 @@
+/*
+ * e-month-view.c
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ *
+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
+ *
+ */
+
+#include "e-month-view.h"
+
+#define E_MONTH_VIEW_GET_PRIVATE(obj) \
+	(G_TYPE_INSTANCE_GET_PRIVATE \
+	((obj), E_TYPE_MONTH_VIEW, EMonthViewPrivate))
+
+struct _EMonthViewPrivate {
+	gint placeholder;
+};
+
+static gpointer parent_class;
+
+static void
+month_view_cursor_key_up (EWeekView *week_view)
+{
+	if (week_view->selection_start_day == -1)
+		return;
+
+	if (week_view->selection_start_day < 7) {
+		/* No easy way to calculate new selection_start_day, so
+		 * calculate a time_t value and set_selected_time_range. */
+		time_t current;
+
+		if (e_calendar_view_get_selected_time_range (
+			E_CALENDAR_VIEW (week_view), &current, NULL)) {
+
+			current = time_add_week (current, -1);
+			e_week_view_scroll_a_step (
+				week_view, E_CAL_VIEW_MOVE_PAGE_UP);
+			e_week_view_set_selected_time_range_visible (
+				week_view, current, current);
+		}
+	} else {
+		week_view->selection_start_day -= 7;
+		week_view->selection_end_day = week_view->selection_start_day;
+	}
+
+	g_signal_emit_by_name (week_view, "selected-time-changed");
+	gtk_widget_queue_draw (week_view->main_canvas);
+}
+
+static void
+month_view_cursor_key_down (EWeekView *week_view)
+{
+	gint weeks_shown;
+
+	if (week_view->selection_start_day == -1)
+		return;
+
+	weeks_shown = e_week_view_get_weeks_shown (week_view);
+
+	if (week_view->selection_start_day >= (weeks_shown - 1) * 7) {
+		/* No easy way to calculate new selection_start_day, so
+		 * calculate a time_t value and set_selected_time_range. */
+		time_t current;
+
+		if (e_calendar_view_get_selected_time_range (
+			E_CALENDAR_VIEW (week_view), &current, NULL)) {
+
+			current = time_add_week (current, -1);
+			e_week_view_scroll_a_step (
+				week_view, E_CAL_VIEW_MOVE_PAGE_DOWN);
+			e_week_view_set_selected_time_range_visible (
+				week_view, current, current);
+		}
+	} else {
+		week_view->selection_start_day += 7;
+		week_view->selection_end_day = week_view->selection_start_day;
+	}
+
+	g_signal_emit_by_name (week_view, "selected-time-changed");
+	gtk_widget_queue_draw (week_view->main_canvas);
+}
+
+static void
+month_view_cursor_key_left (EWeekView *week_view)
+{
+	if (week_view->selection_start_day == -1)
+		return;
+
+	if (week_view->selection_start_day == 0) {
+		/* No easy way to calculate new selection_start_day, so
+		 * calculate a time_t value and set_selected_time_range. */
+		time_t current;
+
+		if (e_calendar_view_get_selected_time_range (
+			E_CALENDAR_VIEW (week_view), &current, NULL)) {
+
+			current = time_add_day (current, -1);
+			e_week_view_scroll_a_step (
+				week_view, E_CAL_VIEW_MOVE_PAGE_UP);
+			e_week_view_set_selected_time_range_visible (
+				week_view, current, current);
+		}
+	} else {
+		week_view->selection_start_day--;
+		week_view->selection_end_day = week_view->selection_start_day;
+	}
+
+	g_signal_emit_by_name (week_view, "selected-time-changed");
+	gtk_widget_queue_draw (week_view->main_canvas);
+}
+
+static void
+month_view_cursor_key_right (EWeekView *week_view)
+{
+	gint weeks_shown;
+
+	if (week_view->selection_start_day == -1)
+		return;
+
+	weeks_shown = e_week_view_get_weeks_shown (week_view);
+
+	if (week_view->selection_start_day == weeks_shown * 7 - 1) {
+		/* No easy way to calculate new selection_start_day, so
+		 * calculate a time_t value and set_selected_time_range. */
+		time_t current;
+
+		if (e_calendar_view_get_selected_time_range (
+			E_CALENDAR_VIEW (week_view), &current, NULL)) {
+
+			current = time_add_day (current, 1);
+			e_week_view_scroll_a_step (
+				week_view, E_CAL_VIEW_MOVE_PAGE_DOWN);
+			e_week_view_set_selected_time_range_visible (
+				week_view, current, current);
+		}
+	} else {
+		week_view->selection_start_day++;
+		week_view->selection_end_day = week_view->selection_start_day;
+	}
+
+	g_signal_emit_by_name (week_view, "selected-time-changed");
+	gtk_widget_queue_draw (week_view->main_canvas);
+}
+
+static void
+month_view_class_init (EMonthViewClass *class)
+{
+	EWeekViewClass *week_view_class;
+
+	parent_class = g_type_class_peek_parent (class);
+	g_type_class_add_private (class, sizeof (EMonthViewPrivate));
+
+	week_view_class = E_WEEK_VIEW_CLASS (class);
+	week_view_class->cursor_key_up = month_view_cursor_key_up;
+	week_view_class->cursor_key_down = month_view_cursor_key_down;
+	week_view_class->cursor_key_left = month_view_cursor_key_left;
+	week_view_class->cursor_key_right = month_view_cursor_key_right;
+}
+
+static void
+month_view_init (EMonthView *month_view)
+{
+	month_view->priv = E_MONTH_VIEW_GET_PRIVATE (month_view);
+}
+
+GType
+e_month_view_get_type (void)
+{
+	static GType type = 0;
+
+	if (G_UNLIKELY (type == 0)) {
+		const GTypeInfo type_info = {
+			sizeof (EMonthViewClass),
+			(GBaseInitFunc) NULL,
+			(GBaseFinalizeFunc) NULL,
+			(GClassInitFunc) month_view_class_init,
+			(GClassFinalizeFunc) NULL,
+			NULL,  /* class_data */
+			sizeof (EMonthView),
+			0,     /* n_preallocs */
+			(GInstanceInitFunc) month_view_init,
+			NULL   /* value_table */
+		};
+
+		type = g_type_register_static (
+			E_TYPE_WEEK_VIEW, "EMonthView", &type_info, 0);
+	}
+
+	return type;
+}
+
+GtkWidget *
+e_month_view_new (ECalModel *model)
+{
+	g_return_val_if_fail (E_IS_CAL_MODEL (model), NULL);
+
+	return g_object_new (E_TYPE_MONTH_VIEW, "model", model, NULL);
+}
diff --git a/calendar/gui/e-month-view.h b/calendar/gui/e-month-view.h
new file mode 100644
index 0000000..c68346b
--- /dev/null
+++ b/calendar/gui/e-month-view.h
@@ -0,0 +1,66 @@
+/*
+ * e-month-view.h
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ *
+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
+ *
+ */
+
+#ifndef E_MONTH_VIEW_H
+#define E_MONTH_VIEW_H
+
+#include "e-week-view.h"
+
+/* Standard GObject macros */
+#define E_TYPE_MONTH_VIEW \
+	(e_month_view_get_type ())
+#define E_MONTH_VIEW(obj) \
+	(G_TYPE_CHECK_INSTANCE_CAST \
+	((obj), E_TYPE_MONTH_VIEW, EMonthView))
+#define E_MONTH_VIEW_CLASS(cls) \
+	(G_TYPE_CHECK_CLASS_CAST \
+	((obj), E_TYPE_MONTH_VIEW, EMonthViewClass))
+#define E_IS_MONTH_VIEW(obj) \
+	(G_TYPE_CHECK_INSTANCE_TYPE \
+	((obj), E_TYPE_MONTH_VIEW))
+#define E_IS_MONTH_VIEW_CLASS(cls) \
+	(G_TYPE_CHECK_CLASS_TYPE \
+	((cls), E_TYPE_MONTH_VIEW))
+#define E_MONTH_VIEW_GET_CLASS(obj) \
+	(G_TYPE_CHECK_INSTANCE_TYPE \
+	((obj), E_TYPE_MONTH_VIEW, EMonthViewClass))
+
+G_BEGIN_DECLS
+
+typedef struct _EMonthView EMonthView;
+typedef struct _EMonthViewClass EMonthViewClass;
+typedef struct _EMonthViewPrivate EMonthViewPrivate;
+
+struct _EMonthView {
+	EWeekView parent;
+	EMonthViewPrivate *priv;
+};
+
+struct _EMonthViewClass {
+	EWeekViewClass parent_class;
+};
+
+GType		e_month_view_get_type		(void);
+GtkWidget *	e_month_view_new		(ECalModel *model);
+
+G_END_DECLS
+
+#endif /* E_MONTH_VIEW_H */
diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c
index dbdb42c..bfa2ad7 100644
--- a/calendar/gui/e-week-view.c
+++ b/calendar/gui/e-week-view.c
@@ -168,7 +168,6 @@ static gboolean e_week_view_on_text_item_event (GnomeCanvasItem *item,
 						EWeekView *week_view);
 static gboolean e_week_view_event_move (ECalendarView *cal_view, ECalViewMoveDirection direction);
 static gint e_week_view_get_day_offset_of_event (EWeekView *week_view, time_t event_time);
-static void e_week_view_scroll_a_step (EWeekView *week_view, ECalViewMoveDirection direction);
 static void e_week_view_change_event_time (EWeekView *week_view, time_t start_dt, time_t end_dt, gboolean is_all_day);
 static gboolean e_week_view_on_jump_button_event (GnomeCanvasItem *item,
 						  GdkEvent *event,
@@ -194,6 +193,69 @@ static gboolean e_week_view_layout_timeout_cb (gpointer data);
 
 G_DEFINE_TYPE (EWeekView, e_week_view, E_TYPE_CALENDAR_VIEW)
 
+static gint map_left[] = {0, 1, 2, 0, 1, 2, 2};
+static gint map_right[] = {3, 4, 5, 3, 4, 5, 6};
+
+static void
+week_view_cursor_key_up (EWeekView *week_view)
+{
+	if (week_view->selection_start_day == -1)
+		return;
+
+	week_view->selection_start_day--;
+
+	if (week_view->selection_start_day < 0) {
+		e_week_view_scroll_a_step (week_view, E_CAL_VIEW_MOVE_UP);
+		week_view->selection_start_day = 6;
+	}
+
+	week_view->selection_end_day = week_view->selection_start_day;
+	g_signal_emit_by_name (week_view, "selected_time_changed");
+	gtk_widget_queue_draw (week_view->main_canvas);
+}
+
+static void
+week_view_cursor_key_down (EWeekView *week_view)
+{
+	if (week_view->selection_start_day == -1)
+		return;
+
+	week_view->selection_start_day++;
+
+	if (week_view->selection_start_day > 6) {
+		e_week_view_scroll_a_step (week_view, E_CAL_VIEW_MOVE_DOWN);
+		week_view->selection_start_day = 0;
+	}
+
+	week_view->selection_end_day = week_view->selection_start_day;
+	g_signal_emit_by_name (week_view, "selected_time_changed");
+	gtk_widget_queue_draw (week_view->main_canvas);
+}
+
+static void
+week_view_cursor_key_left (EWeekView *week_view)
+{
+	if (week_view->selection_start_day == -1)
+		return;
+
+	week_view->selection_start_day = map_left[week_view->selection_start_day];
+	week_view->selection_end_day = week_view->selection_start_day;
+	g_signal_emit_by_name (week_view, "selected_time_changed");
+	gtk_widget_queue_draw (week_view->main_canvas);
+}
+
+static void
+week_view_cursor_key_right (EWeekView *week_view)
+{
+	if (week_view->selection_start_day == -1)
+		return;
+
+	week_view->selection_start_day = map_right[week_view->selection_start_day];
+	week_view->selection_end_day = week_view->selection_start_day;
+	g_signal_emit_by_name (week_view, "selected_time_changed");
+	gtk_widget_queue_draw (week_view->main_canvas);
+}
+
 static void
 e_week_view_class_init (EWeekViewClass *class)
 {
@@ -225,6 +287,11 @@ e_week_view_class_init (EWeekViewClass *class)
 	view_class->get_visible_time_range = e_week_view_get_visible_time_range;
 	view_class->paste_text = e_week_view_paste_text;
 
+	class->cursor_key_up = week_view_cursor_key_up;
+	class->cursor_key_down = week_view_cursor_key_down;
+	class->cursor_key_left = week_view_cursor_key_left;
+	class->cursor_key_right = week_view_cursor_key_right;
+
 #if 0  /* KILL-BONOBO */
 	/* init the accessibility support for e_week_view */
 	e_week_view_a11y_init ();
@@ -3395,7 +3462,7 @@ e_week_view_get_day_offset_of_event (EWeekView *week_view, time_t event_time)
 		return (event_time - first_day) / (24 * 60 * 60);
 }
 
-static void
+void
 e_week_view_scroll_a_step (EWeekView *week_view, ECalViewMoveDirection direction)
 {
 	GtkAdjustment *adj = GTK_RANGE (week_view->vscrollbar)->adjustment;
@@ -3787,227 +3854,48 @@ e_week_view_is_one_day_event	(EWeekView	*week_view,
 	return FALSE;
 }
 
-static gint map_left[] = {0, 1, 2, 0, 1, 2, 2};
-static gint map_right[] = {3, 4, 5, 3, 4, 5, 6};
-
 static void
-e_week_view_do_cursor_key_up (EWeekView *week_view)
+e_week_view_cursor_key_up (EWeekView *week_view)
 {
-	if (week_view->selection_start_day == -1)
-		return;
+	EWeekViewClass *week_view_class;
 
-	week_view->selection_start_day--;
+	week_view_class = E_WEEK_VIEW_GET_CLASS (week_view);
+	g_return_if_fail (week_view_class->cursor_key_up != NULL);
 
-	if (week_view->selection_start_day < 0) {
-		e_week_view_scroll_a_step (week_view, E_CAL_VIEW_MOVE_UP);
-		week_view->selection_start_day = 6;
-	}
-
-	week_view->selection_end_day = week_view->selection_start_day;
-	g_signal_emit_by_name (week_view, "selected_time_changed");
-	gtk_widget_queue_draw (week_view->main_canvas);
+	week_view_class->cursor_key_up (week_view);
 }
 
 static void
-e_week_view_do_cursor_key_down (EWeekView *week_view)
+e_week_view_cursor_key_down (EWeekView *week_view)
 {
-	if (week_view->selection_start_day == -1)
-		return;
+	EWeekViewClass *week_view_class;
 
-	week_view->selection_start_day++;
+	week_view_class = E_WEEK_VIEW_GET_CLASS (week_view);
+	g_return_if_fail (week_view_class->cursor_key_down != NULL);
 
-	if (week_view->selection_start_day > 6) {
-		e_week_view_scroll_a_step (week_view, E_CAL_VIEW_MOVE_DOWN);
-		week_view->selection_start_day = 0;
-	}
-
-	week_view->selection_end_day = week_view->selection_start_day;
-	g_signal_emit_by_name (week_view, "selected_time_changed");
-	gtk_widget_queue_draw (week_view->main_canvas);
+	week_view_class->cursor_key_down (week_view);
 }
 
 static void
-e_week_view_do_cursor_key_left (EWeekView *week_view)
+e_week_view_cursor_key_left (EWeekView *week_view)
 {
-	if (week_view->selection_start_day == -1)
-		return;
+	EWeekViewClass *week_view_class;
 
-	week_view->selection_start_day = map_left[week_view->selection_start_day];
-	week_view->selection_end_day = week_view->selection_start_day;
-	g_signal_emit_by_name (week_view, "selected_time_changed");
-	gtk_widget_queue_draw (week_view->main_canvas);
-}
+	week_view_class = E_WEEK_VIEW_GET_CLASS (week_view);
+	g_return_if_fail (week_view_class->cursor_key_left != NULL);
 
-static void
-e_week_view_do_cursor_key_right (EWeekView *week_view)
-{
-	if (week_view->selection_start_day == -1)
-		return;
-
-	week_view->selection_start_day = map_right[week_view->selection_start_day];
-	week_view->selection_end_day = week_view->selection_start_day;
-	g_signal_emit_by_name (week_view, "selected_time_changed");
-	gtk_widget_queue_draw (week_view->main_canvas);
+	week_view_class->cursor_key_left (week_view);
 }
 
 static void
-e_month_view_do_cursor_key_up (EWeekView *week_view)
+e_week_view_cursor_key_right (EWeekView *week_view)
 {
-	if (week_view->selection_start_day == -1)
-		return;
-
-	if (week_view->selection_start_day < 7) {
-		/* no easy way to calculate new selection_start_day, therefore
-		 * calculate a time_t value and set_selected_time_range */
-		time_t current;
-		if (e_calendar_view_get_selected_time_range(&week_view->cal_view, &current, NULL)) {
-			current = time_add_week(current,-1);
-			e_week_view_scroll_a_step(week_view, E_CAL_VIEW_MOVE_PAGE_UP);
-			e_week_view_set_selected_time_range_visible(week_view,current,current);
-		}
-	} else {
-		week_view->selection_start_day -= 7;
-		week_view->selection_end_day = week_view->selection_start_day;
-	}
-
-	g_signal_emit_by_name (week_view, "selected_time_changed");
-	gtk_widget_queue_draw (week_view->main_canvas);
-}
+	EWeekViewClass *week_view_class;
 
-static void
-e_month_view_do_cursor_key_down (EWeekView *week_view)
-{
-	gint weeks_shown = e_week_view_get_weeks_shown (week_view);
+	week_view_class = E_WEEK_VIEW_GET_CLASS (week_view);
+	g_return_if_fail (week_view_class->cursor_key_right != NULL);
 
-	if (week_view->selection_start_day == -1)
-		return;
-
-	if (week_view->selection_start_day >= (weeks_shown - 1) * 7) {
-		/* no easy way to calculate new selection_start_day, therefore
-		 * calculate a time_t value and set_selected_time_range */
-		time_t current;
-		if (e_calendar_view_get_selected_time_range(&week_view->cal_view, &current, NULL)) {
-			current = time_add_week(current,1);
-			e_week_view_scroll_a_step(week_view, E_CAL_VIEW_MOVE_PAGE_DOWN);
-			e_week_view_set_selected_time_range_visible(week_view,current,current);
-		}
-	} else {
-		week_view->selection_start_day += 7;
-		week_view->selection_end_day = week_view->selection_start_day;
-	}
-
-	g_signal_emit_by_name (week_view, "selected_time_changed");
-	gtk_widget_queue_draw (week_view->main_canvas);
-}
-
-static void
-e_month_view_do_cursor_key_left (EWeekView *week_view)
-{
-	if (week_view->selection_start_day == -1)
-		return;
-
-	if (week_view->selection_start_day == 0) {
-		/* no easy way to calculate new selection_start_day, therefore
-		 * calculate a time_t value and set_selected_time_range */
-		time_t current;
-		if (e_calendar_view_get_selected_time_range(&week_view->cal_view, &current, NULL)) {
-			current = time_add_day(current,-1);
-			e_week_view_scroll_a_step(week_view, E_CAL_VIEW_MOVE_PAGE_UP);
-			e_week_view_set_selected_time_range_visible(week_view,current,current);
-		}
-	} else {
-		week_view->selection_start_day--;
-		week_view->selection_end_day = week_view->selection_start_day;
-	}
-
-	g_signal_emit_by_name (week_view, "selected_time_changed");
-	gtk_widget_queue_draw (week_view->main_canvas);
-}
-
-static void
-e_month_view_do_cursor_key_right (EWeekView *week_view)
-{
-	gint weeks_shown = e_week_view_get_weeks_shown (week_view);
-
-	if (week_view->selection_start_day == -1)
-		return;
-
-	if (week_view->selection_start_day == weeks_shown * 7 - 1) {
-		/* no easy way to calculate new selection_start_day, therefore
-		 * calculate a time_t value and set_selected_time_range */
-		time_t current;
-		if (e_calendar_view_get_selected_time_range(&week_view->cal_view, &current, NULL)) {
-			current = time_add_day(current,1);
-			e_week_view_scroll_a_step(week_view, E_CAL_VIEW_MOVE_PAGE_DOWN);
-			e_week_view_set_selected_time_range_visible(week_view,current,current);
-		}
-	} else {
-		week_view->selection_start_day++;
-		week_view->selection_end_day = week_view->selection_start_day;
-	}
-
-	g_signal_emit_by_name (week_view, "selected_time_changed");
-	gtk_widget_queue_draw (week_view->main_canvas);
-}
-
-static void
-e_week_view_cursor_key_up (EWeekView *week_view, GnomeCalendarViewType view_type)
-{
-	switch (view_type) {
-	case GNOME_CAL_WEEK_VIEW:
-		e_week_view_do_cursor_key_up (week_view);
-		break;
-	case GNOME_CAL_MONTH_VIEW:
-		e_month_view_do_cursor_key_up (week_view);
-		break;
-	default:
-		g_return_if_reached ();
-	}
-}
-
-static void
-e_week_view_cursor_key_down (EWeekView *week_view, GnomeCalendarViewType view_type)
-{
-	switch (view_type) {
-	case GNOME_CAL_WEEK_VIEW:
-		e_week_view_do_cursor_key_down (week_view);
-		break;
-	case GNOME_CAL_MONTH_VIEW:
-		e_month_view_do_cursor_key_down (week_view);
-		break;
-	default:
-		g_return_if_reached ();
-	}
-}
-
-static void
-e_week_view_cursor_key_left (EWeekView *week_view, GnomeCalendarViewType view_type)
-{
-	switch (view_type) {
-	case GNOME_CAL_WEEK_VIEW:
-		e_week_view_do_cursor_key_left (week_view);
-		break;
-	case GNOME_CAL_MONTH_VIEW:
-		e_month_view_do_cursor_key_left (week_view);
-		break;
-	default:
-		g_return_if_reached ();
-	}
-}
-
-static void
-e_week_view_cursor_key_right (EWeekView *week_view, GnomeCalendarViewType view_type)
-{
-	switch (view_type) {
-	case GNOME_CAL_WEEK_VIEW:
-		e_week_view_do_cursor_key_right (week_view);
-		break;
-	case GNOME_CAL_MONTH_VIEW:
-		e_month_view_do_cursor_key_right (week_view);
-		break;
-	default:
-		g_return_if_reached ();
-	}
+	week_view_class->cursor_key_right (week_view);
 }
 
 static gboolean
@@ -4110,7 +3998,6 @@ e_week_view_do_key_press (GtkWidget *widget, GdkEventKey *event)
 	guint keyval;
 	gboolean stop_emission;
 	gboolean ret_val;
-	GnomeCalendarViewType view_type;
 
 	g_return_val_if_fail (widget != NULL, FALSE);
 	g_return_val_if_fail (E_IS_WEEK_VIEW (widget), FALSE);
@@ -4130,7 +4017,6 @@ e_week_view_do_key_press (GtkWidget *widget, GdkEventKey *event)
 #endif
 
 	/* Handle the cursor keys for moving the selection */
-	view_type = gnome_calendar_get_view (e_calendar_view_get_calendar (E_CALENDAR_VIEW (week_view)));
 	stop_emission = FALSE;
 	if (!(event->state & GDK_SHIFT_MASK)
 		&& !(event->state & GDK_MOD1_MASK)) {
@@ -4149,16 +4035,16 @@ e_week_view_do_key_press (GtkWidget *widget, GdkEventKey *event)
 				e_week_view_scroll_a_step (week_view, E_CAL_VIEW_MOVE_PAGE_DOWN);
 			break;
 		case GDK_Up:
-			e_week_view_cursor_key_up (week_view, view_type);
+			e_week_view_cursor_key_up (week_view);
 			break;
 		case GDK_Down:
-			e_week_view_cursor_key_down (week_view, view_type);
+			e_week_view_cursor_key_down (week_view);
 			break;
 		case GDK_Left:
-			e_week_view_cursor_key_left (week_view, view_type);
+			e_week_view_cursor_key_left (week_view);
 			break;
 		case GDK_Right:
-			e_week_view_cursor_key_right (week_view, view_type);
+			e_week_view_cursor_key_right (week_view);
 			break;
 		default:
 			stop_emission = FALSE;
diff --git a/calendar/gui/e-week-view.h b/calendar/gui/e-week-view.h
index b3a9ca7..10b4c27 100644
--- a/calendar/gui/e-week-view.h
+++ b/calendar/gui/e-week-view.h
@@ -48,7 +48,7 @@
 #define E_IS_WEEK_VIEW_CLASS(cls) \
 	(G_TYPE_CHECK_CLASS_TYPE \
 	((cls), E_TYPE_WEEK_VIEW))
-#define E_IS_WEEK_VIEW_GET_CLASS(obj) \
+#define E_WEEK_VIEW_GET_CLASS(obj) \
 	(G_TYPE_INSTANCE_GET_CLASS \
 	((obj), E_TYPE_WEEK_VIEW, EWeekViewClass))
 
@@ -358,106 +358,122 @@ struct _EWeekView {
 
 struct _EWeekViewClass {
 	ECalendarViewClass parent_class;
+
+	void	(*cursor_key_up)		(EWeekView *week_view);
+	void	(*cursor_key_down)		(EWeekView *week_view);
+	void	(*cursor_key_left)		(EWeekView *week_view);
+	void	(*cursor_key_right)		(EWeekView *week_view);
 };
 
-GType		   e_week_view_get_type			(void);
-GtkWidget* e_week_view_new			(ECalModel *model);
+GType		e_week_view_get_type		(void);
+GtkWidget *	e_week_view_new			(ECalModel *model);
 
 /* The first day shown. Note that it will be rounded down to the start of a
    week when set. The returned value will be invalid if no date has been set
    yet. */
-void	   e_week_view_get_first_day_shown	(EWeekView	*week_view,
-						 GDate		*date);
-void	   e_week_view_set_first_day_shown	(EWeekView	*week_view,
-						 GDate		*date);
+void		e_week_view_get_first_day_shown	(EWeekView *week_view,
+						 GDate *date);
+void		e_week_view_set_first_day_shown	(EWeekView *week_view,
+						 GDate *date);
 
 /* The selected time range. The EWeekView will show the corresponding
    month and the days between start_time and end_time will be selected.
    To select a single day, use the same value for start_time & end_time. */
-void       e_week_view_set_selected_time_range_visible	(EWeekView	*week_view,
-							 time_t		 start_time,
-							 time_t		 end_time);
+void		e_week_view_set_selected_time_range_visible
+						(EWeekView *week_view,
+						 time_t start_time,
+						 time_t end_time);
 
 /* Whether to display 1 week or 1 month (5 weeks). It defaults to 1 week. */
-gboolean   e_week_view_get_multi_week_view	(EWeekView	*week_view);
-void       e_week_view_set_multi_week_view	(EWeekView	*week_view,
-						 gboolean	 multi_week_view);
+gboolean	e_week_view_get_multi_week_view	(EWeekView *week_view);
+void		e_week_view_set_multi_week_view	(EWeekView *week_view,
+						 gboolean multi_week_view);
 
 /* Whether to update the base date when the time range changes */
-gboolean e_week_view_get_update_base_date (EWeekView *week_view);
-void e_week_view_set_update_base_date (EWeekView *week_view, gboolean update_base_date);
+gboolean	e_week_view_get_update_base_date(EWeekView *week_view);
+void		e_week_view_set_update_base_date(EWeekView *week_view,
+						 gboolean update_base_date);
 
 /* The number of weeks shown in the multi-week view. */
-gint	   e_week_view_get_weeks_shown		(EWeekView	*week_view);
-void	   e_week_view_set_weeks_shown		(EWeekView	*week_view,
-						 gint		 weeks_shown);
+gint e_week_view_get_weeks_shown	(EWeekView *week_view);
+void		e_week_view_set_weeks_shown	(EWeekView *week_view,
+						 gint weeks_shown);
 
 /* Whether the weekend (Sat/Sun) should be compressed into 1 cell in the Month
    view. In the Week view they are always compressed. */
-gboolean   e_week_view_get_compress_weekend	(EWeekView	*week_view);
-void       e_week_view_set_compress_weekend	(EWeekView	*week_view,
-						 gboolean	 compress);
+gboolean	e_week_view_get_compress_weekend(EWeekView *week_view);
+void		e_week_view_set_compress_weekend(EWeekView *week_view,
+						 gboolean compress);
 
 /* Whether we display event end times. */
-gboolean   e_week_view_get_show_event_end_times	(EWeekView	*week_view);
-void	   e_week_view_set_show_event_end_times	(EWeekView	*week_view,
-						 gboolean	 show);
+gboolean	e_week_view_get_show_event_end_times
+						(EWeekView *week_view);
+void		e_week_view_set_show_event_end_times
+						(EWeekView *week_view,
+						 gboolean show);
 
 /* The first day of the week, 0 (Monday) to 6 (Sunday). */
-gint	   e_week_view_get_week_start_day	(EWeekView	*week_view);
-void	   e_week_view_set_week_start_day	(EWeekView	*week_view,
-						 gint		 week_start_day);
+gint e_week_view_get_week_start_day	(EWeekView *week_view);
+void		e_week_view_set_week_start_day	(EWeekView *week_view,
+						 gint week_start_day);
 
-void       e_week_view_delete_occurrence        (EWeekView      *week_view);
+void		e_week_view_delete_occurrence	(EWeekView *week_view);
 
 /* Returns the number of selected events (0 or 1 at present). */
-gint	   e_week_view_get_num_events_selected	(EWeekView	*week_view);
+gint e_week_view_get_num_events_selected
+						(EWeekView *week_view);
 
 /*
  * Internal functions called by the associated canvas items.
  */
-void       e_week_view_get_day_position		(EWeekView	*week_view,
-						 gint		 day,
-						 gint		*day_x,
-						 gint		*day_y,
-						 gint		*day_w,
-						 gint		*day_h);
-gboolean   e_week_view_get_span_position	(EWeekView	*week_view,
-						 gint		 event_num,
-						 gint		 span_num,
-						 gint		*span_x,
-						 gint		*span_y,
-						 gint		*span_w);
-gboolean   e_week_view_is_one_day_event		(EWeekView	*week_view,
-						 gint		 event_num);
-gboolean   e_week_view_start_editing_event	(EWeekView	*week_view,
-						 gint		 event_num,
-						 gint		 span_num,
-						 gchar		*initial_text);
-void	   e_week_view_stop_editing_event	(EWeekView	*week_view);
-
-void	   e_week_view_show_popup_menu		(EWeekView	*week_view,
+void		e_week_view_get_day_position	(EWeekView *week_view,
+						 gint day,
+						 gint *day_x,
+						 gint *day_y,
+						 gint *day_w,
+						 gint *day_h);
+gboolean	e_week_view_get_span_position	(EWeekView *week_view,
+						 gint event_num,
+						 gint span_num,
+						 gint *span_x,
+						 gint *span_y,
+						 gint *span_w);
+gboolean	e_week_view_is_one_day_event	(EWeekView *week_view,
+						 gint event_num);
+gboolean	e_week_view_start_editing_event	(EWeekView *week_view,
+						 gint event_num,
+						 gint span_num,
+						 gchar *initial_text);
+void		e_week_view_stop_editing_event	(EWeekView *week_view);
+
+void		e_week_view_show_popup_menu	(EWeekView *week_view,
 						 GdkEventButton *event,
-						 gint		 event_num);
-
-void	   e_week_view_convert_time_to_display	(EWeekView	*week_view,
-						 gint		 hour,
-						 gint		*display_hour,
-						 const gchar	**suffix,
-						 gint		*suffix_width);
-gint	   e_week_view_get_time_string_width	(EWeekView	*week_view);
-
-gint	   e_week_view_event_sort_func		(const void	*arg1,
-						 const void	*arg2);
-
-gboolean e_week_view_find_event_from_item (EWeekView	  *week_view,
-					   GnomeCanvasItem *item,
-					   gint		  *event_num_return,
-					   gint		  *span_num_return);
-
-gboolean e_week_view_is_jump_button_visible (EWeekView *week_view,
-					     gint day);
-void e_week_view_jump_to_button_item (EWeekView *week_view, GnomeCanvasItem *item);
+						 gint event_num);
+
+void		e_week_view_convert_time_to_display
+						(EWeekView *week_view,
+						 gint hour,
+						 gint *display_hour,
+						 const gchar **suffix,
+						 gint *suffix_width);
+gint		e_week_view_get_time_string_width
+						(EWeekView *week_view);
+
+gint		e_week_view_event_sort_func	(gconstpointer arg1,
+						 gconstpointer arg2);
+
+gboolean	e_week_view_find_event_from_item (EWeekView *week_view,
+						 GnomeCanvasItem *item,
+						 gint *event_num_return,
+						 gint *span_num_return);
+
+gboolean	e_week_view_is_jump_button_visible
+						(EWeekView *week_view,
+						 gint day);
+void		e_week_view_jump_to_button_item	(EWeekView *week_view,
+						 GnomeCanvasItem *item);
+void		e_week_view_scroll_a_step	(EWeekView *week_view,
+						 ECalViewMoveDirection direction);
 
 G_END_DECLS
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]