/****************************************************************************************

		IComponentAnim.h

		Copyright: (c) 2001 Eovia Corp. All rights reserved.

		IComponentAnim definition                                          

		Author:	Joshua
		Date:	3/4/99

		Revision History

		when		who			what & why
		==========	==========	======================================================
		05/19/99	Jerome		Included APITypes.h for the ECloneMode
		5/6/99		Yann		New API call : IComponentAnim::CopyComponentAnimData()
								New API call : IComponentAnim::ModifyOneData()

*****************************************************************************************/

#ifndef __IComponentAnim__
#define __IComponentAnim__

#if CP_PRAGMA_ONCE
#pragma once
#endif

#include "ComTypes.h"
#include "APITypes.h"
#include "WireFrameState.h"


//************************* Globally Unique Ids ******************************

MCDEFINE_GUID(IID_IComponentAnim, 0xbfc6e890, 0xd29f, 0x11d2, 0x88, 0x80, 0x0, 0x60, 0x97, 0x14, 0x85, 0x21);

//****************************************************************************

/// \addtogroup ShellInterface
/// \{


// ****************************************************************************
//								IComponentAnim
// 
/// IComponentAnim is used to manipulate the animated part of a Component.
/// (see IShComponent and IShParameterComponent)
///
struct IComponentAnim : public IMCUnknown
{
	// ****************************************************************************
	//								Clone
	// 
	/// Makes a copy of the component with or without its animation data
	/// 
	/// \param res   The copy of the component.
	/// \param mode  The clone mode (see ECloneMode).
	/// 
	virtual void	MCCOMAPI Clone					(IComponentAnim** res, ECloneMode mode) const = 0;

	// ****************************************************************************
	//								CopyComponentAnimData
	// 
	/// Copy the Component data into 'destination'.
	/// 
	/// \param mode         The clone mode (see ECloneMode).
	/// \param destination  The destination component
	/// \param partID		If partID != 0, then only the animated data with this ID will be copied.
	/// 
	virtual void	MCCOMAPI CopyComponentAnimData	(ECloneMode mode, IComponentAnim* destination, IDType partID=0) = 0;

	// ****************************************************************************
	//								ModifyData
	// 
	/// ModifyData will generate keyframes by comparing the old component to the 
	/// current one. Keyframes are generated only when data is different for the 
	/// current time
	/// 
	/// \param oldIComponentAnim  The component anim that is compared.
	/// 
	virtual void	MCCOMAPI ModifyData			(const IComponentAnim* oldIComponentAnim) = 0;

	// ****************************************************************************
	//								ModifyOneData
	// 
	/// Same as ModifyData() but you can specify the data that should be compared by giving
	/// its animated part ID. Giving 0 gives the same result as calling ModifyData().
	/// 
	/// \param oldIComponentAnim  
	/// \param partID             
	/// 
	virtual void	MCCOMAPI ModifyOneData			(const IComponentAnim* oldIComponentAnim, IDType partID) = 0;

	// ****************************************************************************
	//								SetWireFrameState
	// 
	/// Set whether the manipulation wireframes of this component should be displayed]
	/// or not
	/// 
	/// \param wfState  see EWireFrameState
	/// 
	virtual void	MCCOMAPI SetWireFrameState			(EWireFrameState wfState)=0;	
	
	// ****************************************************************************
	//								GetWireFrameState
	// 
	/// Returns the display state of the wireframes.
	/// 
	virtual EWireFrameState	MCCOMAPI GetWireFrameState	() const =0;
};


/// \}


#endif