/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/


#ifndef __com_sun_star_installation_XProtocolHandlerCheck_idl__ 
#define __com_sun_star_installation_XProtocolHandlerCheck_idl__ 
 
#ifndef __com_sun_star_uno_XInterface_idl__ 
#include <com/sun/star/uno/XInterface.idl> 
#endif 
 
#ifndef __com_sun_star_installation_ProtDlgRes_idl__ 
#include <com/sun/star/installation/ProtDlgRes.idl> 
#endif 
 
 
//============================================================================= 
 
module com {  module sun {  module star {  module installation {  
 
//============================================================================= 
 
/// @deprecated
published interface XProtocolHandlerCheck: com::sun::star::uno::XInterface
{ 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: method com::sun::star::installation::XProtocolHandlerCheck::isSingleSettingAvailable
	/** checks if it is possible to set particular protocols.
	 */
	boolean isSingleSettingAvailable(); 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: method com::sun::star::installation::XProtocolHandlerCheck::isProtocolHandler
	/** checks if StarOffice is the protocol-handler, for the particular protocol
	 */
	boolean isProtocolHandler( [in] short nWhich ); 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: method com::sun::star::installation::XProtocolHandlerCheck::setProtocolHandler
	/** Make StarOffice the protocol-handler.@see isProtocolHandler
	 */
	boolean setProtocolHandler( [in] short nWhich ); 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: method com::sun::star::installation::XProtocolHandlerCheck::checkProtocolHandler
	/** First, the method checks if StarOffice is
		already the protocol-handler. If yes, simply
		return NOCHANGE; otherwise, show a dialog which asks the user 
		if he wants StarOffice to be the standard protocol-handler.
		The dialog has "Yes" and "No" buttons, and a checkbox
		with "Always display this message". The checkbox
		is initially checked. If the "Yes" button was pressed,
		it performs all necessary action to make StarOffice the
		protocol-handler. If the "No" button was pressed,
		don't perform any action. Both buttons closes the dialog.@see isProtocolHandler
	 */
	com::sun::star::installation::ProtDlgRes checkProtocolHandler( [in] short nWhich ); 
 
}; 
 
//============================================================================= 
 
}; }; }; };  
 
#endif 
