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

		I3DExSelectableObject.h
		Copyright: (c) 2002 Eovia Corp. All rights reserved.

		Author:	Pierre
		Date:	8/23/2006

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

#ifndef __I3DExSelectableObject__
#define __I3DExSelectableObject__

#if CP_PRAGMA_ONCE
#pragma once
#endif


//****** Globally Unique Ids *************************************************
MCDEFINE_GUID_H(IID_I3DExSelectableObject);


struct ISelectableObject;
class  TSelectionNode;


struct I3DExSelectableObject : public IMCUnknown
{
	// ****************************************************************************
	//								GetSelectableParent
	// 
	/// Returns the parent of this selectable to build the selection path.
	/// 
	/// 
	virtual ISelectableObject*	MCCOMAPI GetSelectableParent() = 0;
	
	// ****************************************************************************
	//								GetChildSelectionNode
	// 
	/// Returns the selection node for a child of this selectable object.
	/// 
	/// \param inChild		The children.
	/// \param outNode		The selection node.
	/// 
	virtual void				MCCOMAPI GetChildSelectionNode(ISelectableObject* inChild, TSelectionNode& outNode) = 0;
	
	// ****************************************************************************
	//								GetSelectedSubObject
	// 
	/// Returns the sub selected object corresponding to the given selection node
	/// or NULL if such an object does not exist.
	/// 
	/// \param inSubNode	The selection node.
	/// 
	virtual	ISelectableObject*	MCCOMAPI GetSelectedSubObject(const TSelectionNode& inSubNode) = 0;
};


#endif
