[evolution] Split CalendarView into separate classes by view type.
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Split CalendarView into separate classes by view type.
- Date: Fri, 5 Jul 2013 20:41:49 +0000 (UTC)
commit 3f5f362e0df717f2aaca8d21c3b3e180904a6897
Author: Matthew Barnes <mbarnes redhat com>
Date: Tue Jul 2 14:44:14 2013 -0400
Split CalendarView into separate classes by view type.
It's better to have separate classes each with a fixed type code, than
one class with a variable type code. You'll see why in the next commit.
calendar/gui/calendar-view-factory.c | 26 ++++-
calendar/gui/calendar-view.c | 162 ++++++++++++--------------------
calendar/gui/calendar-view.h | 57 +++++------
modules/calendar/e-cal-shell-content.c | 25 ++++--
4 files changed, 122 insertions(+), 148 deletions(-)
---
diff --git a/calendar/gui/calendar-view-factory.c b/calendar/gui/calendar-view-factory.c
index d84f770..d975e49 100644
--- a/calendar/gui/calendar-view-factory.c
+++ b/calendar/gui/calendar-view-factory.c
@@ -101,17 +101,31 @@ calendar_view_factory_get_type_code (GalViewFactory *factory)
/* new_view method for the calendar view factory */
static GalView *
calendar_view_factory_new_view (GalViewFactory *factory,
- const gchar *name)
+ const gchar *title)
{
CalendarViewFactory *cal_view_factory;
- CalendarViewFactoryPrivate *priv;
- CalendarView *cal_view;
+ GType type;
cal_view_factory = CALENDAR_VIEW_FACTORY (factory);
- priv = cal_view_factory->priv;
- cal_view = calendar_view_new (priv->view_type, name);
- return GAL_VIEW (cal_view);
+ switch (cal_view_factory->priv->view_type) {
+ case GNOME_CAL_DAY_VIEW:
+ type = GAL_TYPE_VIEW_CALENDAR_DAY;
+ break;
+ case GNOME_CAL_WORK_WEEK_VIEW:
+ type = GAL_TYPE_VIEW_CALENDAR_WORK_WEEK;
+ break;
+ case GNOME_CAL_WEEK_VIEW:
+ type = GAL_TYPE_VIEW_CALENDAR_WEEK;
+ break;
+ case GNOME_CAL_MONTH_VIEW:
+ type = GAL_TYPE_VIEW_CALENDAR_MONTH;
+ break;
+ default:
+ g_return_val_if_reached (NULL);
+ }
+
+ return g_object_new (type, "title", title, NULL);
}
/**
diff --git a/calendar/gui/calendar-view.c b/calendar/gui/calendar-view.c
index 3639d3f..f373469 100644
--- a/calendar/gui/calendar-view.c
+++ b/calendar/gui/calendar-view.c
@@ -1,5 +1,5 @@
/*
- * Evolution calendar - Generic view object for calendar views
+ * calendar-view.c
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -14,137 +14,95 @@
* 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/>
*
- *
- * Authors:
- * Federico Mena-Quintero <federico ximian com>
- *
- * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
- *
*/
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
#include "calendar-view.h"
-#define CALENDAR_VIEW_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE \
- ((obj), TYPE_CALENDAR_VIEW, CalendarViewPrivate))
+G_DEFINE_TYPE (
+ GalViewCalendarDay,
+ gal_view_calendar_day,
+ GAL_TYPE_VIEW)
-struct _CalendarViewPrivate {
- /* Type of the view */
- GnomeCalendarViewType view_type;
-};
+G_DEFINE_TYPE (
+ GalViewCalendarWorkWeek,
+ gal_view_calendar_work_week,
+ GAL_TYPE_VIEW)
-static const gchar *calendar_view_get_type_code (GalView *view);
-static GalView *calendar_view_clone (GalView *view);
+G_DEFINE_TYPE (
+ GalViewCalendarWeek,
+ gal_view_calendar_week,
+ GAL_TYPE_VIEW)
-G_DEFINE_TYPE (CalendarView, calendar_view, GAL_TYPE_VIEW)
+G_DEFINE_TYPE (
+ GalViewCalendarMonth,
+ gal_view_calendar_month,
+ GAL_TYPE_VIEW)
-/* Class initialization function for the calendar view */
-static void
-calendar_view_class_init (CalendarViewClass *class)
+static const gchar *
+gal_view_calendar_day_get_type_code (GalView *view)
{
- GalViewClass *gal_view_class;
-
- g_type_class_add_private (class, sizeof (CalendarViewPrivate));
-
- gal_view_class = (GalViewClass *) class;
+ return "day_view";
+}
- gal_view_class->get_type_code = calendar_view_get_type_code;
- gal_view_class->clone = calendar_view_clone;
+static void
+gal_view_calendar_day_class_init (GalViewClass *class)
+{
+ class->get_type_code = gal_view_calendar_day_get_type_code;
}
-/* Object initialization function for the calendar view */
static void
-calendar_view_init (CalendarView *cal_view)
+gal_view_calendar_day_init (GalView *view)
{
- cal_view->priv = CALENDAR_VIEW_GET_PRIVATE (cal_view);
}
-/* get_type_code method for the calendar view */
static const gchar *
-calendar_view_get_type_code (GalView *view)
+gal_view_calendar_work_week_get_type_code (GalView *view)
{
- CalendarView *cal_view;
- CalendarViewPrivate *priv;
-
- cal_view = CALENDAR_VIEW (view);
- priv = cal_view->priv;
-
- switch (priv->view_type) {
- case GNOME_CAL_DAY_VIEW:
- return "day_view";
-
- case GNOME_CAL_WORK_WEEK_VIEW:
- return "work_week_view";
-
- case GNOME_CAL_WEEK_VIEW:
- return "week_view";
-
- case GNOME_CAL_MONTH_VIEW:
- return "month_view";
-
- default:
- g_return_val_if_reached (NULL);
- }
+ return "work_week_view";
}
-/* clone method for the calendar view */
-static GalView *
-calendar_view_clone (GalView *view)
+static void
+gal_view_calendar_work_week_class_init (GalViewClass *class)
{
- CalendarView *cal_view;
- GalView *clone;
-
- /* Chain up to parent's clone() method. */
- clone = GAL_VIEW_CLASS (calendar_view_parent_class)->clone (view);
-
- cal_view = CALENDAR_VIEW (view);
- CALENDAR_VIEW (clone)->priv->view_type = cal_view->priv->view_type;
-
- return clone;
+ class->get_type_code = gal_view_calendar_work_week_get_type_code;
}
-/**
- * calendar_view_new:
- * @view_type: The type of calendar view that this object will represent.
- * @title: Title for the view.
- *
- * Creates a new calendar view object.
- *
- * Return value: A newly-created calendar view.
- **/
-CalendarView *
-calendar_view_new (GnomeCalendarViewType view_type,
- const gchar *title)
+static void
+gal_view_calendar_work_week_init (GalView *view)
{
- CalendarView *cal_view;
+}
- cal_view = g_object_new (TYPE_CALENDAR_VIEW, "title", title, NULL);
+static const gchar *
+gal_view_calendar_week_get_type_code (GalView *view)
+{
+ return "week_view";
+}
- cal_view->priv->view_type = view_type;
+static void
+gal_view_calendar_week_class_init (GalViewClass *class)
+{
+ class->get_type_code = gal_view_calendar_week_get_type_code;
+}
- return cal_view;
+static void
+gal_view_calendar_week_init (GalView *view)
+{
}
-/**
- * calendar_view_get_view_type:
- * @cal_view: A calendar view.
- *
- * Queries the calendar view type of a calendar view.
- *
- * Return value: Type of calendar view.
- **/
-GnomeCalendarViewType
-calendar_view_get_view_type (CalendarView *cal_view)
+static const gchar *
+gal_view_calendar_month_get_type_code (GalView *view)
{
- CalendarViewPrivate *priv;
+ return "month_view";
+}
- g_return_val_if_fail (cal_view != NULL, GNOME_CAL_DAY_VIEW);
- g_return_val_if_fail (IS_CALENDAR_VIEW (cal_view), GNOME_CAL_DAY_VIEW);
+static void
+gal_view_calendar_month_class_init (GalViewClass *class)
+{
+ class->get_type_code = gal_view_calendar_month_get_type_code;
+}
- priv = cal_view->priv;
- return priv->view_type;
+static void
+gal_view_calendar_month_init (GalView *view)
+{
}
+
diff --git a/calendar/gui/calendar-view.h b/calendar/gui/calendar-view.h
index 00e1eb6..60b41ea 100644
--- a/calendar/gui/calendar-view.h
+++ b/calendar/gui/calendar-view.h
@@ -1,6 +1,5 @@
/*
- *
- * Evolution calendar - Generic view object for calendar views
+ * calendar-view.h
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -15,48 +14,42 @@
* 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/>
*
- *
- * Authors:
- * Federico Mena-Quintero <federico ximian com>
- *
- * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
- *
*/
#ifndef CALENDAR_VIEW_H
#define CALENDAR_VIEW_H
-#include "gnome-cal.h"
+#include <e-util/e-util.h>
-G_BEGIN_DECLS
-
-#define TYPE_CALENDAR_VIEW (calendar_view_get_type ())
-#define CALENDAR_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CALENDAR_VIEW, CalendarView))
-#define CALENDAR_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CALENDAR_VIEW, \
- CalendarViewClass))
-#define IS_CALENDAR_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CALENDAR_VIEW))
-#define IS_CALENDAR_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CALENDAR_VIEW))
+/* Standard GObject macros */
+#define GAL_TYPE_VIEW_CALENDAR_DAY \
+ (gal_view_calendar_day_get_type ())
+#define GAL_TYPE_VIEW_CALENDAR_WORK_WEEK \
+ (gal_view_calendar_work_week_get_type ())
+#define GAL_TYPE_VIEW_CALENDAR_WEEK \
+ (gal_view_calendar_week_get_type ())
+#define GAL_TYPE_VIEW_CALENDAR_MONTH \
+ (gal_view_calendar_month_get_type ())
-typedef struct _CalendarViewPrivate CalendarViewPrivate;
-
-typedef struct {
- GalView view;
+G_BEGIN_DECLS
- /* Private data */
- CalendarViewPrivate *priv;
-} CalendarView;
+typedef struct _GalView GalViewCalendarDay;
+typedef struct _GalViewClass GalViewCalendarDayClass;
-typedef struct {
- GalViewClass parent_class;
-} CalendarViewClass;
+typedef struct _GalView GalViewCalendarWorkWeek;
+typedef struct _GalViewClass GalViewCalendarWorkWeekClass;
-GType calendar_view_get_type (void);
+typedef struct _GalView GalViewCalendarWeek;
+typedef struct _GalViewClass GalViewCalendarWeekClass;
-CalendarView *calendar_view_new (GnomeCalendarViewType view_type,
- const gchar *title);
+typedef struct _GalView GalViewCalendarMonth;
+typedef struct _GalViewClass GalViewCalendarMonthClass;
-GnomeCalendarViewType calendar_view_get_view_type (CalendarView *cal_view);
+GType gal_view_calendar_day_get_type (void) G_GNUC_CONST;
+GType gal_view_calendar_work_week_get_type (void) G_GNUC_CONST;
+GType gal_view_calendar_week_get_type (void) G_GNUC_CONST;
+GType gal_view_calendar_month_get_type (void) G_GNUC_CONST;
G_END_DECLS
-#endif
+#endif /* CALENDAR_VIEW_H */
diff --git a/modules/calendar/e-cal-shell-content.c b/modules/calendar/e-cal-shell-content.c
index 5c91354..cccc999 100644
--- a/modules/calendar/e-cal-shell-content.c
+++ b/modules/calendar/e-cal-shell-content.c
@@ -78,15 +78,12 @@ cal_shell_content_display_view_cb (ECalShellContent *cal_shell_content,
{
GnomeCalendar *calendar;
GnomeCalendarViewType view_type;
+ GType gal_view_type;
- /* XXX This is confusing: we have CalendarView and ECalendarView.
- * ECalendarView is an abstract base class for calendar view
- * widgets (day view, week view, etc). CalendarView is a
- * simple GalView subclass that represents a calendar view. */
-
+ gal_view_type = G_OBJECT_TYPE (gal_view);
calendar = e_cal_shell_content_get_calendar (cal_shell_content);
- if (GAL_IS_VIEW_ETABLE (gal_view)) {
+ if (gal_view_type == GAL_TYPE_VIEW_ETABLE) {
ECalendarView *calendar_view;
view_type = GNOME_CAL_LIST_VIEW;
@@ -95,9 +92,21 @@ cal_shell_content_display_view_cb (ECalShellContent *cal_shell_content,
gal_view_etable_attach_table (
GAL_VIEW_ETABLE (gal_view),
E_CAL_LIST_VIEW (calendar_view)->table);
+
+ } else if (gal_view_type == GAL_TYPE_VIEW_CALENDAR_DAY) {
+ view_type = GNOME_CAL_DAY_VIEW;
+
+ } else if (gal_view_type == GAL_TYPE_VIEW_CALENDAR_WORK_WEEK) {
+ view_type = GNOME_CAL_WORK_WEEK_VIEW;
+
+ } else if (gal_view_type == GAL_TYPE_VIEW_CALENDAR_WEEK) {
+ view_type = GNOME_CAL_WEEK_VIEW;
+
+ } else if (gal_view_type == GAL_TYPE_VIEW_CALENDAR_MONTH) {
+ view_type = GNOME_CAL_MONTH_VIEW;
+
} else {
- view_type = calendar_view_get_view_type (
- CALENDAR_VIEW (gal_view));
+ g_return_if_reached ();
}
gnome_calendar_display_view (calendar, view_type);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]