/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * The contents of this file are subject to the Mozilla Public
 * License Version 1.1 (the "License"); you may not use this file
 * except in compliance with the License. You may obtain a copy of
 * the License at http://www.mozilla.org/MPL/
 * 
 * Software distributed under the License is distributed on an "AS
 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * rights and limitations under the License.
 * 
 * The Original Code is the Mozilla browser.
 * 
 * The Initial Developer of the Original Code is Netscape
 * Communications, Inc.  Portions created by Netscape are
 * Copyright (C) 1999, Mozilla.  All Rights Reserved.
 * 
 * Contributor(s):
 *   Travis Bogard <travis@netscape.com>
 */

#include "nsISupports.idl"
#include "nsIEventLoop.idl"

/**
 * The nsINativeAppService provides necessary services to build a native
 * application.    
 */

 /*
 {2EFB5000-4508-11d3-AEDA-00A024FFC08C} -
 {2EFB5100-4508-11d3-AEDA-00A024FFC08C} have been reserved for Native App 
													Service Interfaces.

 Currently Used:
 {2EFB5000-4508-11d3-AEDA-00A024FFC08C} -	nsINativeApp
 {2EFB5001-4508-11d3-AEDA-00A024FFC08C} -	nsIEventLoop
 {2EFB5002-4508-11d3-AEDA-00A024FFC08C} -	nsEventLoopTypes
 {2EFB5003-4508-11d3-AEDA-00A024FFC08C} -	nsIEventFilter
 {2EFB5004-4508-11d3-AEDA-00A024FFC08C} -	nsIEvent
 {2EFB5005-4508-11d3-AEDA-00A024FFC08C} -	nsIWinEvent
 {2EFB5006-4508-11d3-AEDA-00A024FFC08C} -	nsIWinEventFilter
 {2EFB5007-4508-11d3-AEDA-00A024FFC08C} -	nsIDispatchListener
 {2EFB5008-4508-11d3-AEDA-00A024FFC08C} -	nsITranslateListener
 {2EFB5009-4508-11d3-AEDA-00A024FFC08C} -	nsPIEventLoop
 {2EFB5010-4508-11d3-AEDA-00A024FFC08C} -	nsPIEventLoopListener
 {2EFB5011-4508-11d3-AEDA-00A024FFC08C} -	nsNativeEventDataTypes
 {2EFB5012-4508-11d3-AEDA-00A024FFC08C} -	nsNativeFilterDataTypes
 */

[scriptable, uuid(2EFB5000-4508-11d3-AEDA-00A024FFC08C)]
interface nsINativeApp : nsISupports
{
	/* Used to Create an Event Loop of a specified Event Loop type.
		There can only be one event loop per App of the MainAppLoop type.
		There can only be one event loop per thread of the ThreadLoop type.
		There can be any number of AppBreathLoop type threads.

	@param EventLoopName This is the name to associate with an event loop. 
		This allows you to later find the event loop using the FineEventLoop 
		mechanism.  This may be null, but is usually helpful to associate a 
		name with the loop.
		
	@param type This is the event Loop type.  Look at the various types
		described in nsEventLoopType const definitions.
		
	@param eventLoop This is the return created event loop.  
	
	@return NS_OK - Event Loop was created successfully.
				NS_ERROR_INVALID_ARG - There is already an event loop for the 
					requested type and there can not be more than one.
				NS_ERROR_INVALID_POINTER - eventLoop was null.
				NS_ERROR_FAILURE - Internal error and event loop couldn't be
					created.	
	*/
	void CreateEventLoop(in wstring EventLoopName, in nsEventLoopType type,
								out nsIEventLoop eventLoop);

	/*	Used to find a previously created event loop.
	
	@return NS_OK - Event loop found and returned.
			  NS_ERROR_INVALID_ARG - Event loop could not be found. 

	*/
	void FindEventLoop(in wstring EventLoopName, out nsIEventLoop eventLoop);
};