[evolution] Split CalendarViewFactory into separate classes by view type.



commit 033d5013d365fb6bb00aeec6fd8442b38ac80e04
Author: Matthew Barnes <mbarnes redhat com>
Date:   Tue Jul 2 16:39:19 2013 -0400

    Split CalendarViewFactory into separate classes by view type.
    
    I suspect this will enable us to ditch GalViewFactory entirely once I
    rework a few more things.  We'll see though; one step at a time here.

 calendar/gui/calendar-view-factory.c        |  215 ++++++++++++---------------
 calendar/gui/calendar-view-factory.h        |   64 ++++-----
 modules/calendar/e-cal-shell-view-private.c |    8 +-
 3 files changed, 132 insertions(+), 155 deletions(-)
---
diff --git a/calendar/gui/calendar-view-factory.c b/calendar/gui/calendar-view-factory.c
index d975e49..f23c997 100644
--- a/calendar/gui/calendar-view-factory.c
+++ b/calendar/gui/calendar-view-factory.c
@@ -1,5 +1,5 @@
 /*
- * Evolution calendar - Generic view factory for calendar views
+ * calendar-view-factory.c
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -14,159 +14,140 @@
  * 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-factory.h"
 
+#include <config.h>
 #include <glib/gi18n.h>
-#include "calendar-view-factory.h"
+
 #include "calendar-view.h"
 
-#define CALENDAR_VIEW_FACTORY_GET_PRIVATE(obj) \
-       (G_TYPE_INSTANCE_GET_PRIVATE \
-       ((obj), TYPE_CALENDAR_VIEW_FACTORY, CalendarViewFactoryPrivate))
+G_DEFINE_TYPE (
+       GalViewFactoryCalendarDay,
+       gal_view_factory_calendar_day,
+       GAL_TYPE_VIEW_FACTORY)
 
-struct _CalendarViewFactoryPrivate {
-       /* Type of views created by this factory */
-       GnomeCalendarViewType view_type;
-};
+G_DEFINE_TYPE (
+       GalViewFactoryCalendarWorkWeek,
+       gal_view_factory_calendar_work_week,
+       GAL_TYPE_VIEW_FACTORY)
 
-static const gchar *
-               calendar_view_factory_get_type_code
-                                               (GalViewFactory *factory);
-static GalView *
-               calendar_view_factory_new_view  (GalViewFactory *factory,
-                                                const gchar *name);
+G_DEFINE_TYPE (
+       GalViewFactoryCalendarWeek,
+       gal_view_factory_calendar_week,
+       GAL_TYPE_VIEW_FACTORY)
 
 G_DEFINE_TYPE (
-       CalendarViewFactory,
-       calendar_view_factory,
+       GalViewFactoryCalendarMonth,
+       gal_view_factory_calendar_month,
        GAL_TYPE_VIEW_FACTORY)
 
-static void
-calendar_view_factory_class_init (CalendarViewFactoryClass *class)
+static const gchar *
+gal_view_factory_calendar_day_get_type_code (GalViewFactory *factory)
 {
-       GalViewFactoryClass *gal_view_factory_class;
+       return "day_view";
+}
 
-       g_type_class_add_private (class, sizeof (CalendarViewFactoryPrivate));
+static GalView *
+gal_view_factory_calendar_day_new_view (GalViewFactory *factory,
+                                        const gchar *title)
+{
+       return g_object_new (
+               GAL_TYPE_VIEW_CALENDAR_DAY,
+               "title", title, NULL);
+}
 
-       gal_view_factory_class = GAL_VIEW_FACTORY_CLASS (class);
-       gal_view_factory_class->get_type_code = calendar_view_factory_get_type_code;
-       gal_view_factory_class->new_view = calendar_view_factory_new_view;
+static void
+gal_view_factory_calendar_day_class_init (GalViewFactoryClass *class)
+{
+       class->get_type_code = gal_view_factory_calendar_day_get_type_code;
+       class->new_view = gal_view_factory_calendar_day_new_view;
 }
 
 static void
-calendar_view_factory_init (CalendarViewFactory *cal_view_factory)
+gal_view_factory_calendar_day_init (GalViewFactory *factory)
 {
-       cal_view_factory->priv =
-               CALENDAR_VIEW_FACTORY_GET_PRIVATE (cal_view_factory);
 }
 
-/* get_type_code method for the calendar view factory */
 static const gchar *
-calendar_view_factory_get_type_code (GalViewFactory *factory)
+gal_view_factory_calendar_work_week_get_type_code (GalViewFactory *factory)
 {
-       CalendarViewFactory *cal_view_factory;
-       CalendarViewFactoryPrivate *priv;
-
-       cal_view_factory = CALENDAR_VIEW_FACTORY (factory);
-       priv = cal_view_factory->priv;
-
-       switch (priv->view_type) {
-       case GNOME_CAL_DAY_VIEW:
-               return "day_view";
+       return "work_week_view";
+}
 
-       case GNOME_CAL_WORK_WEEK_VIEW:
-               return "work_week_view";
+static GalView *
+gal_view_factory_calendar_work_week_new_view (GalViewFactory *factory,
+                                              const gchar *title)
+{
+       return g_object_new (
+               GAL_TYPE_VIEW_CALENDAR_WORK_WEEK,
+               "title", title, NULL);
+}
 
-       case GNOME_CAL_WEEK_VIEW:
-               return "week_view";
+static void
+gal_view_factory_calendar_work_week_class_init (GalViewFactoryClass *class)
+{
+       class->get_type_code = gal_view_factory_calendar_work_week_get_type_code;
+       class->new_view = gal_view_factory_calendar_work_week_new_view;
+}
 
-       case GNOME_CAL_MONTH_VIEW:
-               return "month_view";
+static void
+gal_view_factory_calendar_work_week_init (GalViewFactory *factory)
+{
+}
 
-       default:
-               g_return_val_if_reached (NULL);
-       }
+static const gchar *
+gal_view_factory_calendar_week_get_type_code (GalViewFactory *factory)
+{
+       return "week_view";
 }
 
-/* new_view method for the calendar view factory */
 static GalView *
-calendar_view_factory_new_view (GalViewFactory *factory,
-                                const gchar *title)
-{
-       CalendarViewFactory *cal_view_factory;
-       GType type;
-
-       cal_view_factory = CALENDAR_VIEW_FACTORY (factory);
-
-       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);
-}
-
-/**
- * calendar_view_factory_construct:
- * @cal_view_factory: A calendar view factory.
- * @view_type: Type of calendar views that the factory will create.
- *
- * Constructs a calendar view factory by setting the type of views it will
- * create.
- *
- * Return value: The same value as @cal_view_factory.
- **/
-GalViewFactory *
-calendar_view_factory_construct (CalendarViewFactory *cal_view_factory,
-                                 GnomeCalendarViewType view_type)
+gal_view_factory_calendar_week_new_view (GalViewFactory *factory,
+                                         const gchar *title)
 {
-       CalendarViewFactoryPrivate *priv;
+       return g_object_new (
+               GAL_TYPE_VIEW_CALENDAR_WEEK,
+               "title", title, NULL);
+}
 
-       g_return_val_if_fail (cal_view_factory != NULL, NULL);
-       g_return_val_if_fail (IS_CALENDAR_VIEW_FACTORY (cal_view_factory), NULL);
+static void
+gal_view_factory_calendar_week_class_init (GalViewFactoryClass *class)
+{
+       class->get_type_code = gal_view_factory_calendar_week_get_type_code;
+       class->new_view = gal_view_factory_calendar_week_new_view;
+}
 
-       priv = cal_view_factory->priv;
+static void
+gal_view_factory_calendar_week_init (GalViewFactory *factory)
+{
+}
 
-       priv->view_type = view_type;
+static const gchar *
+gal_view_factory_calendar_month_get_type_code (GalViewFactory *factory)
+{
+       return "month_view";
+}
 
-       return GAL_VIEW_FACTORY (cal_view_factory);
+static GalView *
+gal_view_factory_calendar_month_new_view (GalViewFactory *factory,
+                                          const gchar *title)
+{
+       return g_object_new (
+               GAL_TYPE_VIEW_CALENDAR_MONTH,
+               "title", title, NULL);
 }
 
-/**
- * calendar_view_factory_new:
- * @view_type: Type of calendar views that the factory will create.
- *
- * Creates a new factory for calendar views.
- *
- * Return value: A newly-created calendar view factory.
- **/
-GalViewFactory *
-calendar_view_factory_new (GnomeCalendarViewType view_type)
+static void
+gal_view_factory_calendar_month_class_init (GalViewFactoryClass *class)
 {
-       CalendarViewFactory *cal_view_factory;
+       class->get_type_code = gal_view_factory_calendar_month_get_type_code;
+       class->new_view = gal_view_factory_calendar_month_new_view;
+}
 
-       cal_view_factory = g_object_new (TYPE_CALENDAR_VIEW_FACTORY, NULL);
-       return calendar_view_factory_construct (cal_view_factory, view_type);
+static void
+gal_view_factory_calendar_month_init (GalViewFactory *factory)
+{
 }
+
diff --git a/calendar/gui/calendar-view-factory.h b/calendar/gui/calendar-view-factory.h
index 833c4bd..ff4f8ee 100644
--- a/calendar/gui/calendar-view-factory.h
+++ b/calendar/gui/calendar-view-factory.h
@@ -1,6 +1,5 @@
 /*
- *
- * Evolution calendar - Generic view factory for calendar views
+ * calendar-view-factory.h
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -15,50 +14,47 @@
  * 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_FACTORY_H
 #define CALENDAR_VIEW_FACTORY_H
 
-#include "gnome-cal.h"
+#include <e-util/e-util.h>
 
-G_BEGIN_DECLS
+/* Standard GObject macros */
+#define GAL_TYPE_VIEW_FACTORY_CALENDAR_DAY \
+       (gal_view_factory_calendar_day_get_type ())
+#define GAL_TYPE_VIEW_FACTORY_CALENDAR_WORK_WEEK \
+       (gal_view_factory_calendar_work_week_get_type ())
+#define GAL_TYPE_VIEW_FACTORY_CALENDAR_WEEK \
+       (gal_view_factory_calendar_week_get_type ())
+#define GAL_TYPE_VIEW_FACTORY_CALENDAR_MONTH \
+       (gal_view_factory_calendar_month_get_type ())
 
-#define TYPE_CALENDAR_VIEW_FACTORY            (calendar_view_factory_get_type ())
-#define CALENDAR_VIEW_FACTORY(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
TYPE_CALENDAR_VIEW_FACTORY,  \
-                                              CalendarViewFactory))
-#define CALENDAR_VIEW_FACTORY_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),                          \
-                                              TYPE_CALENDAR_VIEW_FACTORY, CalendarViewClass))
-#define IS_CALENDAR_VIEW_FACTORY(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
TYPE_CALENDAR_VIEW_FACTORY))
-#define IS_CALENDAR_VIEW_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),                          \
-                                              TYPE_CALENDAR_VIEW_FACTORY))
-
-typedef struct _CalendarViewFactoryPrivate CalendarViewFactoryPrivate;
-
-typedef struct {
-       GalViewFactory factory;
+G_BEGIN_DECLS
 
-       /* Private data */
-       CalendarViewFactoryPrivate *priv;
-} CalendarViewFactory;
+typedef struct _GalViewFactory GalViewFactoryCalendarDay;
+typedef struct _GalViewFactoryClass GalViewFactoryCalendarDayClass;
 
-typedef struct {
-       GalViewFactoryClass parent_class;
-} CalendarViewFactoryClass;
+typedef struct _GalViewFactory GalViewFactoryCalendarWorkWeek;
+typedef struct _GalViewFactoryClass GalViewFactoryCalendarWorkWeekClass;
 
-GType calendar_view_factory_get_type (void);
+typedef struct _GalViewFactory GalViewFactoryCalendarWeek;
+typedef struct _GalViewFactoryClass GalViewFactoryCalendarWeekClass;
 
-GalViewFactory *calendar_view_factory_construct (CalendarViewFactory *cal_view_factory,
-                                                     GnomeCalendarViewType view_type);
+typedef struct _GalViewFactory GalViewFactoryCalendarMonth;
+typedef struct _GalViewFactoryClass GalViewFactoryCalendarMonthClass;
 
-GalViewFactory *calendar_view_factory_new (GnomeCalendarViewType view_type);
+GType          gal_view_factory_calendar_day_get_type
+                                               (void) G_GNUC_CONST;
+GType          gal_view_factory_calendar_work_week_get_type
+                                               (void) G_GNUC_CONST;
+GType          gal_view_factory_calendar_week_get_type
+                                               (void) G_GNUC_CONST;
+GType          gal_view_factory_calendar_month_get_type
+                                               (void) G_GNUC_CONST;
 
 G_END_DECLS
 
-#endif
+#endif /* CALENDAR_VIEW_FACTORY_H */
+
diff --git a/modules/calendar/e-cal-shell-view-private.c b/modules/calendar/e-cal-shell-view-private.c
index be6e67f..b4ed297 100644
--- a/modules/calendar/e-cal-shell-view-private.c
+++ b/modules/calendar/e-cal-shell-view-private.c
@@ -419,19 +419,19 @@ cal_shell_view_load_view_collection (EShellViewClass *shell_view_class)
 
        collection = shell_view_class->view_collection;
 
-       factory = calendar_view_factory_new (GNOME_CAL_DAY_VIEW);
+       factory = g_object_new (GAL_TYPE_VIEW_FACTORY_CALENDAR_DAY, NULL);
        gal_view_collection_add_factory (collection, factory);
        g_object_unref (factory);
 
-       factory = calendar_view_factory_new (GNOME_CAL_WORK_WEEK_VIEW);
+       factory = g_object_new (GAL_TYPE_VIEW_FACTORY_CALENDAR_WORK_WEEK, NULL);
        gal_view_collection_add_factory (collection, factory);
        g_object_unref (factory);
 
-       factory = calendar_view_factory_new (GNOME_CAL_WEEK_VIEW);
+       factory = g_object_new (GAL_TYPE_VIEW_FACTORY_CALENDAR_WEEK, NULL);
        gal_view_collection_add_factory (collection, factory);
        g_object_unref (factory);
 
-       factory = calendar_view_factory_new (GNOME_CAL_MONTH_VIEW);
+       factory = g_object_new (GAL_TYPE_VIEW_FACTORY_CALENDAR_MONTH, NULL);
        gal_view_collection_add_factory (collection, factory);
        g_object_unref (factory);
 


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