/* Evolution calendar - Generic view object for calendar views * * Copyright (C) 2001 Ximian, Inc. * * Author: Federico Mena-Quintero * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H #include #endif #include "calendar-view.h" /* Private part of the CalendarView structure */ struct _CalendarViewPrivate { /* Type of the view */ GnomeCalendarViewType view_type; /* Title of the view */ char *title; }; static void calendar_view_class_init (CalendarViewClass *class); static void calendar_view_init (CalendarView *cview); static void calendar_view_destroy (GtkObject *object); static void calendar_view_edit (GalView *view); static void calendar_view_load (GalView *view, const char *filename); static void calendar_view_save (GalView *view, const char *filename); static const char *calendar_view_get_title (GalView *view); static void calendar_view_set_title (GalView *view, const char *title); static const char *calendar_view_get_type_code (GalView *view); static GalView *calendar_view_clone (GalView *view); static GalViewClass *parent_class = NULL; /** * calendar_view_get_type: * * Registers the #CalendarView class if necessary, and returns the type ID * associated to it. * * Return value: The type ID of the #CalendarView class. **/ GtkType calendar_view_get_type (void) { static GtkType calendar_view_type; if (!calendar_view_type) { static const GtkTypeInfo calendar_view_info = { "CalendarView", sizeof (CalendarView), sizeof (CalendarViewClass), (GtkClassInitFunc) calendar_view_class_init, (GtkObjectInitFunc) calendar_view_init, NULL, /* reserved_1 */ NULL, /* reserved_2 */ (GtkClassInitFunc) NULL }; calendar_view_type = gtk_type_unique (GAL_VIEW_TYPE, &calendar_view_info); } return calendar_view_type; } /* Class initialization function for the calendar view */ static void calendar_view_class_init (CalendarViewClass *class) { GalViewClass *gal_view_class; GtkObjectClass *object_class; parent_class = gtk_type_class (GAL_VIEW_TYPE); gal_view_class = (GalViewClass *) class; object_class = (GtkObjectClass *) class; gal_view_class->edit = calendar_view_edit; gal_view_class->load = calendar_view_load; gal_view_class->save = calendar_view_save; gal_view_class->get_title = calendar_view_get_title; gal_view_class->set_title = calendar_view_set_title; gal_view_class->get_type_code = calendar_view_get_type_code; gal_view_class->clone = calendar_view_clone; object_class->destroy = calendar_view_destroy; } /* Object initialization function for the calendar view */ static void calendar_view_init (CalendarView *cal_view) { CalendarViewPrivate *priv; priv = g_new0 (CalendarViewPrivate, 1); cal_view->priv = priv; priv->title = NULL; } /* Destroy method for the calendar view */ static void calendar_view_destroy (GtkObject *object) { CalendarView *cal_view; CalendarViewPrivate *priv; g_return_if_fail (object != NULL); g_return_if_fail (IS_CALENDAR_VIEW (object)); cal_view = CALENDAR_VIEW (object); priv = cal_view->priv; if (priv->title) { g_free (priv->title); priv->title = NULL; } g_free (priv); cal_view->priv = NULL; if (GTK_OBJECT_CLASS (parent_class)->destroy) (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); } /* edit method of the calendar view */ static void calendar_view_edit (GalView *view) { /* nothing */ } /* load method of the calendar view */ static void calendar_view_load (GalView *view, const char *filename) { /* nothing */ } /* save method of the calendar view */ static void calendar_view_save (GalView *view, const char *filename) { /* nothing */ } /* get_title method of the calendar view */ static const char * calendar_view_get_title (GalView *view) { CalendarView *cal_view; CalendarViewPrivate *priv; cal_view = CALENDAR_VIEW (view); priv = cal_view->priv; return priv->title; } /* set_title method of the calendar view */ static void calendar_view_set_title (GalView *view, const char *title) { CalendarView *cal_view; CalendarViewPrivate *priv; cal_view = CALENDAR_VIEW (view); priv = cal_view->priv; if (priv->title) g_free (priv->title); priv->title = g_strdup (title); } /* get_type_code method for the calendar view */ static const char * calendar_view_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_assert_not_reached (); return NULL; } } /* clone method for the calendar view */ static GalView * calendar_view_clone (GalView *view) { CalendarView *cal_view; CalendarViewPrivate *priv; CalendarView *new_view; CalendarViewPrivate *new_priv; cal_view = CALENDAR_VIEW (view); priv = cal_view->priv; new_view = gtk_type_new (TYPE_CALENDAR_VIEW); new_priv = new_view->priv; new_priv->view_type = priv->view_type; new_priv->title = g_strdup (priv->title); return GAL_VIEW (new_view); } /** * calendar_view_construct: * @cal_view: A calendar view. * @view_type: The type of calendar view that this object will represent. * @title: Title for the view. * * Constructs a calendar view by setting its view type and title. * * Return value: The same value as @cal_view. **/ CalendarView * calendar_view_construct (CalendarView *cal_view, GnomeCalendarViewType view_type, const char *title) { CalendarViewPrivate *priv; g_return_val_if_fail (cal_view != NULL, NULL); g_return_val_if_fail (IS_CALENDAR_VIEW (cal_view), NULL); g_return_val_if_fail (title != NULL, NULL); priv = cal_view->priv; priv->view_type = view_type; priv->title = g_strdup (title); return cal_view; } /** * 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 char *title) { CalendarView *cal_view; cal_view = gtk_type_new (TYPE_CALENDAR_VIEW); return calendar_view_construct (cal_view, view_type, title); } /** * 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) { CalendarViewPrivate *priv; 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); priv = cal_view->priv; return priv->view_type; }