/**************************************************************
 * 
 * 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_document_MacroExecMode_idl__
#define __com_sun_star_document_MacroExecMode_idl__

//=============================================================================

module com { module sun { module star { module document {

//=============================================================================
/** Specify whether a macro can be executed.

    @since OOo 1.1.2
*/
published constants MacroExecMode
{
	//-------------------------------------------------------------------------
	/** A macro should not be executed at all.
	*/

	const short NEVER_EXECUTE = 0;
	
	//-------------------------------------------------------------------------
	/** Execute macros from secure list quietly.
		
		<p>
		If a macro is not in the list a conformation for it executing will
		appear.
		</p>
	*/

	const short FROM_LIST = 1;

	//-------------------------------------------------------------------------
	/** Execute any macro, macros signed with trusted sertificates and macros
		from secure list are executed quietly.

		<p>
			If the macro is neither in secure list nor signed a conformation
			will be requested.
		</p>
	*/

	const short ALWAYS_EXECUTE = 2;

	//-------------------------------------------------------------------------
	/** Use configuration to retrieve macro settings. In case a user
		confirmation is required a dialog is output.
	*/

	const short USE_CONFIG = 3;

	
	//-------------------------------------------------------------------------
	/** A macro should be executed always no conformation should be provided.
	*/

	const short ALWAYS_EXECUTE_NO_WARN = 4;

	//-------------------------------------------------------------------------
	/** Use configuration to retrieve macro settings. Treat cases when user
		confirmation required as rejected.
	*/

	const short USE_CONFIG_REJECT_CONFIRMATION = 5;

	//-------------------------------------------------------------------------
	/** Use configuration to retrieve macro settings. Treat cases when user
		confirmation required as approved.
	*/

	const short USE_CONFIG_APPROVE_CONFIRMATION = 6;

	//-------------------------------------------------------------------------
	/** Execute only macros from secure list. Macros that are not from the list
		are not executed.
	*/
	const short FROM_LIST_NO_WARN = 7;

	//-------------------------------------------------------------------------
	/** Execute only macros from secure list or macros that are signed by
		trusted certificates.

		<p> If the macro is neither in secure list nor signed it will not be
			executed.
		</p>

		<p> If the macro is signed with unknown certificate a warning will
			appear. The macro either will not be executed or if the warning
			allows conformation, it will be executed after user agrees.
		</p>
	*/
	const short FROM_LIST_AND_SIGNED_WARN = 8;

	//-------------------------------------------------------------------------
	/** Execute only macros from secure list or macros that are signed by
		trusted certificates. No warning/conformation should be shown.
	*/
	const short FROM_LIST_AND_SIGNED_NO_WARN = 9;

};

//=============================================================================

}; }; }; };

#endif
