/* Evolution calendar client interface object
 *
 * Copyright (C) 2000 Ximian, Inc.
 * Copyright (C) 2000 Ximian, Inc.
 *
 * Authors: Federico Mena-Quintero <federico@ximian.com>
 *          Rodrigo Moya <rodrigo@ximian.com>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of version 2 of the GNU General Public
 * License as published by the Free Software Foundation.
 *
 * 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.
 */

#ifndef CAL_H
#define CAL_H

#include <bonobo/bonobo-object.h>
#include "pcs/evolution-calendar.h"
#include "pcs/cal-common.h"
#include "pcs/query.h"

G_BEGIN_DECLS



#define CAL_TYPE            (cal_get_type ())
#define CAL(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), CAL_TYPE, Cal))
#define CAL_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), CAL_TYPE, CalClass))
#define IS_CAL(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CAL_TYPE))
#define IS_CAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CAL_TYPE))

typedef struct _CalPrivate CalPrivate;

struct _Cal {
	BonoboObject object;

	/* Private data */
	CalPrivate *priv;
};

struct _CalClass {
	BonoboObjectClass parent_class;

	POA_GNOME_Evolution_Calendar_Cal__epv epv;
};

GType cal_get_type (void);

Cal *cal_construct (Cal *cal,
		    CalBackend *backend,
		    GNOME_Evolution_Calendar_Listener listener);

Cal *cal_new (CalBackend *backend, const char *uri, GNOME_Evolution_Calendar_Listener listener);

CalBackend *cal_get_backend (Cal *cal);
GNOME_Evolution_Calendar_Listener cal_get_listener (Cal *cal);

void cal_notify_read_only (Cal *cal, GNOME_Evolution_Calendar_CallStatus status, gboolean read_only);
void cal_notify_cal_address (Cal *cal, GNOME_Evolution_Calendar_CallStatus status, const char *address);
void cal_notify_alarm_email_address (Cal *cal, GNOME_Evolution_Calendar_CallStatus status, const char *address);
void cal_notify_ldap_attribute (Cal *cal, GNOME_Evolution_Calendar_CallStatus status, const char *attribute);
void cal_notify_static_capabilities (Cal *cal, GNOME_Evolution_Calendar_CallStatus status, const char *capabilities);

void cal_notify_open (Cal *cal, GNOME_Evolution_Calendar_CallStatus status);
void cal_notify_remove (Cal *cal, GNOME_Evolution_Calendar_CallStatus status);

void cal_notify_object_created (Cal *cal, GNOME_Evolution_Calendar_CallStatus status,
				const char *uid, const char *object);
void cal_notify_object_modified (Cal *cal, GNOME_Evolution_Calendar_CallStatus status, 
				 const char *old_object, const char *object);
void cal_notify_object_removed (Cal *cal, GNOME_Evolution_Calendar_CallStatus status, 
				const char *uid, const char *object);
void cal_notify_alarm_discarded (Cal *cal, GNOME_Evolution_Calendar_CallStatus status);

void cal_notify_objects_received (Cal *cal, GNOME_Evolution_Calendar_CallStatus status, 
				  GList *created, GList *modified, GList *removed);
void cal_notify_objects_sent (Cal *cal, GNOME_Evolution_Calendar_CallStatus status);

void cal_notify_default_object (Cal *cal, GNOME_Evolution_Calendar_CallStatus status, char *object);
void cal_notify_object (Cal *cal, GNOME_Evolution_Calendar_CallStatus status, char *object);
void cal_notify_object_list (Cal *cal, GNOME_Evolution_Calendar_CallStatus status, GList *objects);

void cal_notify_query (Cal *cal, GNOME_Evolution_Calendar_CallStatus status, Query *query);

void cal_notify_timezone_requested (Cal *cal, GNOME_Evolution_Calendar_CallStatus status, const char *object);
void cal_notify_timezone_added (Cal *cal, GNOME_Evolution_Calendar_CallStatus status, const char *tzid);
void cal_notify_default_timezone_set (Cal *cal, GNOME_Evolution_Calendar_CallStatus status);

void cal_notify_changes (Cal *cal, GNOME_Evolution_Calendar_CallStatus status, GList *adds, GList *modifies, GList *deletes);
void cal_notify_free_busy (Cal *cal, GNOME_Evolution_Calendar_CallStatus status, GList *freebusy);

void cal_notify_mode (Cal *cal, 
		      GNOME_Evolution_Calendar_Listener_SetModeStatus status, 
		      GNOME_Evolution_Calendar_CalMode mode);
void cal_notify_error (Cal *cal, const char *message);

void cal_notify_categories_changed (Cal *cal, GNOME_Evolution_Calendar_StringSeq *categories);



G_END_DECLS

#endif
