/**************************************************************
 * 
 * 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_AnimationEndSync_idl__ 
#define __com_sun_star_animations_AnimationEndSync_idl__ 

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

/** @see http://www.w3.org/TR/smil20/smil-timing.html#adef-endsync
*/
constants AnimationEndSync
{
	/** The par, excl, or media element's implicit duration ends with the earliest
		active end of all the child elements. This does not refer to the lexical
		first child, or to the first child to start, but rather refers to the first
		child to end its (first) active duration.
	*/
	const short FIRST = 0;

	/** The par, excl, or media element's implicit duration ends with the last active
		end of the child elements. This does not refer to the lexical last child, or
		to the last child to start, but rather refers to the last active end of all
		children that have a resolved, definite begin time. If the time container
		has no children with a resolved begin time, the time container ends
		immediately. If child elements have multiple begin times, or otherwise
		restart, the child elements must complete all instances of active durations
		for resolved begin times.
		This is the default value for par and excl elements.
	*/
	const short LAST = 1;

	/** The par, excl, or media element's implicit duration ends when all of the
		child elements have ended their respective active durations. Elements with
		indefinite or unresolved begin times will keep the simple duration of the
		time container from ending.
		When all elements have completed the active duration one or more times,
		the parent time container can end.
	*/
	const short ALL = 2;

	/** The time container element's implicit duration ends when the intrinsic
		media duration of the element ends. This must be defined by a host language.
		If the time container element does not define an intrinsic media duration,
		the host language must define the simple duration for the element.
		This is the default value for media time container elements.
	*/
	const short MEDIA = 3;
};

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

#endif
