/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
 * Interface for the Evolution components.
 *
 * Authors:
 *   Ettore Perazzoli <ettore@ximian.com>
 *
 * Copyright (C) 2003 Ximian, Inc.
 */

#include <Bonobo.idl>

module GNOME {
module Evolution {
	/* A type of item that the component can create when asked by the user,
	   e.g. a mail message or an appointment.  */
	struct CreatableItemType {
		string id;
		string description;
		string menuDescription;
		string tooltip;
		char menuShortcut;
		string iconName;
	};
	typedef sequence <CreatableItemType> CreatableItemTypeList;

	interface Component : Bonobo::Unknown {
		exception Failed {};
		exception UnknownType {};

		/*** Upgrade path.  ***/

		boolean upgradeFromVersion (in short major, in short minor, in short revision);


		/*** Basic functionality.  ***/

		/* Create the controls for embedding in the shell.  */
		void createControls (out Bonobo::Control sidebar_control,
				     out Bonobo::Control view_control,
				     out Bonobo::Control statusbar_control)
			raises (Failed);

		/* Check if the component can quit.
		   Do not perform any quit-related tasks however.
		   May be called multiple times, depending on user interaction. */
		boolean requestQuit ();

		/* Ask the component to quit.  Returns TRUE when the
		   component has completed any closing-down tasks, and
		   is ready to exit().  This will be called repeatedly
		   at intervals until it returns TRUE. */
		boolean quit ();

		/* Notify the component of whether the shell is currently
		   running in interactive mode or not.  (I.e. basically,
		   whether there are any Evolution windows on the screen.)
		   @new_view_xid is an X Window ID ("None" if @now_interactive
		   is FALSE) */
		void interactive (in boolean now_interactive,
				  in unsigned long new_view_xid);


		/*** The following stuff is needed to build the "New" toolbar
                     item as well as the "File -> New" submenu.  ***/

		/* List of creatable items. */
		readonly attribute CreatableItemTypeList userCreatableItems;

		/* Pop up a new editing dialog for the item with the specified
		   @item_type_name.  */
		void requestCreateItem (in string item_type_name)
			raises (UnknownType, Failed);


		/*** URI handling (e.g. for the command-line, "evolution
		     mailto:foo@bar.org")  ***/
		void handleURI (in string uri);


		/*** Send/receive.  ***/

		void sendAndReceive ();
	};

};
};
