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

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

		Author:	Arnaud
		Date:	4/14/2005

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

#ifndef __IMFDockAreaPart__
#define __IMFDockAreaPart__

#if CP_PRAGMA_ONCE
#pragma once
#endif


#include "MCCompObj.h"


struct IMFDockablePart;
struct IMFPart;
	
MCDEFINE_GUID(IID_IMFDockAreaPart, 0x38881f86, 0xd803, 0x468b, 0xa8, 0x78, 0x27, 0x6, 0xa6, 0x44, 0x5c, 0xc);


/// \addtogroup MCF
/// \{

// ****************************************************************************
//								IMFDockAreaPart
// 
/// IMFDockAreaPart is the interface of part that can contain docked parts
/// 
struct IMFDockAreaPart: public IMCUnknown
{
	virtual IMFPart*		MCCOMAPI GetThisPart		() = 0;

	virtual boolean			MCCOMAPI CanDockPart		(IMFDockablePart* inDockCandidate) = 0;


	///inScreenAnchor : anchor (mouse) point in screen coordinates
	///inDockLocalAnchor  : anchor (mouse) point in local coordinates of the dockPart
	///After docking, the DockLocalAnchor will be at (or near) inScreenAnchor pos
	virtual void			MCCOMAPI DockPart			(	IMFDockablePart*	inDockPart,
															const TMCPoint&		inScreenAnchor,
															const TMCPoint&		inDockLocalAnchor,
															boolean				inCreateDragAction) = 0;

	virtual void			MCCOMAPI UnDockPart			(	IMFDockablePart*	inDockPart,
															TMCPoint*			ioDockLocalAnchor) = 0;


	virtual void 			MCCOMAPI ReDockPart			(	IMFDockablePart*	inDockPart,
															const TMCPoint&		inPosInfo) = 0;

	//returns the dock area's unique ID
	virtual IDType			MCCOMAPI GetDockAreaID		() = 0;

	virtual void			MCCOMAPI SetDockAreaID		(IDType inDockAreaID) = 0;
};

/// \}

#endif