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

		ShellDragDrop.h

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

		Author: Greg
		Date:	03/18/99

		Revision History

		when		who			what & why
		==========	==========	======================================================
		9/14/99		Thierry		TMCPtrArray<I3DShMasterShader> is the type for kDragFlavor_MasterShaderList
		09/09/99	Guillaume	Changed the name of I3DShMotionLink to I3DShConstraint
		9/3/99		cph			added T3DViewObjectDropData; renamed file; added nested include protection

*****************************************************************************************/
#ifndef __ShellDragDrop__
#define __ShellDragDrop__

#include "InterfaceIDs.h"
#include "MCPtrArray.h"
#include "MCCountedPtr.h"

struct I3DShTreeElement;
struct I3DShScene;

/// \addtogroup Data 
/// \{

/// This is the drag and drop data associated with kDragFlavor_NewObject.
/// It is proposed when inserting a new object in the scene via drag and drop from the objects toolbar.
///
/// Here is how to retreive the data in ReceiveDrop (when acceptedType is kDragFlavor_NewObject):
/// \code
///	T3DViewObjectDropData dropData;
///	dropCandidate->GetData(kDragFlavor_NewObject,moveOrCopy,(void**)&dropData);
/// \endcode
///
struct T3DViewObjectDropData
{
	IDType		fKind;	// e.g., 'prim', or 'help'
	IDType		fID;	// e.g., 'cube', or 'spot'		
};

/// \}

/// Drag and drop data associated with kDragFlavor_TreeElementList
///
struct TTreeElementListDropData
{
	TMCCountedPtrArray<I3DShTreeElement>*	fTreeList;
	TMCCountedPtr<I3DShScene>				fScene;
};


/// Drag and drop data associated with kDragFlavor_ImportFile
struct TImportFileDropData
{
	boolean						fFromBrowser;
	MCFileTypeID				fFileTypeID;
	TMCCountedPtr<IMCFile>		fFile;

	TImportFileDropData			()		{ fFileTypeID= 0; fFromBrowser= false; }
};


#define kDragFlavor_NewObject			'newO'							// T3DViewObjectDropData

#define kDragFlavor_TreeElementList		'treL'							// TTreeElementListDropData

#define kDragFlavor_ImportFile			'iFil'							// TImportFileDropData

//kDragFlavor_TreeElementNoChangeParent: 
//	like TTreeElementListDropData except that the trees do not want to change of parent 
//	(but putting them in the browser is ok)
#define kDragFlavor_TreeElementNoChangeParent 'TNCP'					

#define kDragFlavor_MasterObjectList	'objL'							// TMCCountedPtrArray<I3DShObject>
#define kDragFlavor_MasterShader		'shaM'							// I3DShMasterShader
#define kDragFlavor_MasterShaderList	'shaL'							// TMCCountedPtrArray<I3DShMasterShader>
#define kDragFlavor_MasterSoundList		'sndL'							// TMCCountedPtrArray<IShMasterSound>
#define kDragFlavor_MasterClipList		'cliL'							// TMCCountedPtrArray<IShMasterClip>

// component drag flavors
#define kDragFlavor_AmbientLight		kRID_AmbientLightFamilyID		// IMCUnknown (I3DShAmbientLight)
#define kDragFlavor_AnimationMethod		kRID_AnimationMethodFamilyID	// IMCUnknown (I3DShAnimationMethod)
#define kDragFlavor_Atmosphere			kRID_AtmosphericShaderFamilyID	// IMCUnknown (I3DShAtmosphericShader)
#define kDragFlavor_Backdrop			kRID_BackdropFamilyID			// IMCUnknown (I3DShBackdrop)
#define kDragFlavor_Background			kRID_BackgroundFamilyID			// IMCUnknown (I3DShBackground)
#define kDragFlavor_CameraComponent		kRID_CameraFamilyID				// IMCUnknown (IShComponent)
#define kDragFlavor_Constraint			kRID_ConstraintFamilyID			// IMCUnknown (I3DShConstraint)
#define kDragFlavor_DataComponent		kRID_DataComponentFamilyID		// IMCUnknown (I3DShDataComponent)
#define kDragFlavor_Gel					kRID_LightsourceGelFamilyID		// IMCUnknown (I3DShLightsourceGel)
#define kDragFlavor_LightComponent		kRID_LightsourceFamilyID		// IMCUnknown (IShComponent)
#define kDragFlavor_ModifierList		kRID_ModifierFamilyID			// IMCUnknown (I3DShModifier)
#define kDragFlavor_PostRendererList	kRID_PostRendererFamilyID		// IMCUnknown (I3DShPostRenderer)
#define kDragFlavor_ReflectionFeature	kRID_ReflectionFeatureFamilyID	// IMCUnknown (I3DShReflectionFeature)
#define kDragFlavor_RefractionFeature 	kRID_RefractionFeatureFamilyID	// IMCUnknown (I3DShRefractionFeature)
#define kDragFlavor_ShaderComponent		kRID_ShaderFamilyID				// IMCUnknown (I3DShShader)
#define kDragFlavor_ShadowFeature 		kRID_ShadowFeatureFamilyID		// IMCUnknown (I3DShShadowFeature)
#define kDragFlavor_Tweener				kRID_TweenerFamilyID			// IMCUnknown (I3DShTweener)
#define kDragFlavor_MasterSound			kRID_SoundFamilyID				// IShMasterSound
#define kDragFlavor_MasterClip			kRID_ClipFamilyID				// IShMasterClip

#endif //__ShellDragDrop__