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

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

		Author:	Arnaud
		Date:	4/14/2005

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

#ifndef __IMFDockablePart__
#define __IMFDockablePart__

#if CP_PRAGMA_ONCE
#pragma once
#endif


#include "MCCompObj.h"


struct IMFPart;
struct IMFDockAreaPart;
struct IMFDockableManager;

MCDEFINE_GUID(IID_IMFDockablePart, 0x479e5b9, 0x16f4, 0x429b, 0xbf, 0x32, 0x2e, 0x7, 0xf1, 0xa1, 0x7a, 0xbb);


/// \addtogroup MCF
/// \{

// ****************************************************************************
//								IMFDockablePart
// 
/// IMFDockablePart is the interface of a part that can be kept docked or inside a floating window
/// Instead of calling the part's SetShown method, you should use its DockableManager
/// 
struct IMFDockablePart: public IMCUnknown
{
	///IMFDockablePart is always a part
	virtual IMFPart*		MCCOMAPI GetThisPart			() = 0;

	virtual boolean			MCCOMAPI CanDockInto			(IMFDockAreaPart* inDockArea) = 0;

	virtual void			MCCOMAPI SetDockableManager		(IMFDockableManager* inDockableManager) = 0;

	virtual IMFDockableManager* MCCOMAPI GetDockableManager	() = 0;
};

/// \}

#endif