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

		I3DShComponentOwner.h

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

		I3DShLightsourceGel definition

		Author:	Ray Dream
		Date:	09/08/99

		Revision History

		when		who			what & why
		==========	==========	======================================================
		09/08/99	Charles		Created
*****************************************************************************************/
#ifndef __I3DSHComponentOwner__
#define __I3DSHComponentOwner__

#if CP_PRAGMA_ONCE
#pragma once
#endif

#include "APITypes.h"
#include "MCCompObj.h"
#include "IComponentAnim.h"

/****** Globally Unique Ids **************************************************/
MCDEFINE_GUID(IID_I3DShComponentOwner,0xb27996bd, 0x6618, 0x11d3, 0xb7, 0x25, 0x0, 0x50, 0x4, 0x6f, 0xfd, 0xa);


struct IShParameterComponent;

/// \addtogroup ShellInterface
/// \{

/// This interface is supported by certain objects that have sub components (tree elements, scenes...)
/// It provides a generic way to access those sub components.
///
struct I3DShComponentOwner: public IMCUnknown
{
	// ****************************************************************************
	//								SetComponent
	// 
	/// Sets a sub component.
	/// 
	/// \param component  A pointer to the component.
	/// \param familyID   The family ID to which the component belongs.
	/// \param cloneMode  The clone mode (see ECloneMode)
	/// 
	virtual void MCCOMAPI SetComponent(IShParameterComponent*  component,IDType familyID,ECloneMode cloneMode)=0;
	
	// ****************************************************************************
	//								GetComponent
	// 
	/// Returns a pointer to a sub component.
	/// 
	/// \param component  A pointer to the component.
	/// \param familyID   The family ID to which the component belongs.
	/// \param classID    The clone mode (see ECloneMode)
	/// 
	virtual void MCCOMAPI GetComponent(IShParameterComponent** component,IDType familyID,IDType classID)=0;
};

/// \}

#endif