/**************************************************************
 * 
 * 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_animations_EventTrigger_idl__ 
#define __com_sun_star_animations_EventTrigger_idl__ 

//============================================================================= 
 
 module com {  module sun {  module star {  module animations {  
 
//============================================================================= 

/**
*/
constants EventTrigger
{
	/** Nothing triggers this event.
	*/
	const short NONE = 0;

	const short ON_BEGIN = 1;
	const short ON_END = 2;

	/** This event is raised when the element local timeline begins to play.
		It will be raised each time the element begins the active duration
		(i.e. when it restarts, but not when it repeats).

		@see http://www.w3.org/TR/smil20/smil-timing.html#Timing-DOMEvents
	*/
	const short BEGIN_EVENT = 3;

	/** This event is raised at the active end of the element. Note that this
		event is not raised at the simple end of each repeat.

		@see http://www.w3.org/TR/smil20/smil-timing.html#Timing-DOMEvents
	*/
	const short END_EVENT = 4;

	const short ON_CLICK = 5;

	const short ON_DBL_CLICK = 6;
	const short ON_MOUSE_ENTER = 7;
	const short ON_MOUSE_LEAVE = 8;
	
	/** This event is raised when the user wants the presentation to go one step foreward.
	*/
	const short ON_NEXT = 9;

	/** This event is raised when the user wants the presentation to go one step backward.
	*/
	const short ON_PREV = 10;

	const short ON_STOP_AUDIO = 11;

	/**  This event is raised when the element local timeline repeats.
		It will be raised each time the element repeats, after the first iteration.

		@see http://www.w3.org/TR/smil20/smil-timing.html#Timing-DOMEvents
	*/
	const short REPEAT = 12;
};


//============================================================================= 
 
}; }; }; };  

#endif
