#ifndef _CUSTOMGUI_DESCRIPTION_H_
#define _CUSTOMGUI_DESCRIPTION_H_

#include "customgui_base.h"
#include "c4d_basecontainer.h"



#define CUSTOMGUI_DESCRIPTION		1000469 // user gadget



class AtomArray;
struct DescriptionGuiLib;

// resourceflags
#define DESCRIPTION_ALLOWFOLDING		'fldg'		// bool: "ALLOWFOLDING"
#define DESCRIPTION_SHOWTITLE				'titl'		// bool: "SHOWTITLE"
#define DESCRIPTION_NOUNDO					'noun'		// bool: "DESCRIPTION_NOUNDO"
#define DESCRIPTION_OBJECTSNOTINDOC	'onid'		// bool: Object are not localted in document (smartpointer thing)
#define DESCRIPTION_SHOWLOCK				'lock'		// bool: ShowLock Symbol (handled through mastermessage)
#define DESCRIPTION_MODALMODE				'modl'		// bool: mode for modal dialogs

typedef GeData MasterCallBackFunc(GeDialog *master, const BaseContainer &msg);
#define MCB_NAVIGATIONCHANGED				'navc'
#define MCB_LOCKCHANGED							'lock'
#define MCB_OPENLOCKED							'olck'
#define MCB_AMLEFT									'amlf'
#define MCB_AMRIGHT									'amrg'
#define MCB_AMUP										'amup'

#define MM_NAVIGATION								'mnav'
#define MM_EASYNAVIGATION_GET				'gesy'
#define MM_EASYNAVIGATION_SET				'sesy'
#define MM_LOCKSET									'lcks'
#define MM_LOCKFREE									'lckf'

class DescriptionCustomGui : public BaseCustomGui<CUSTOMGUI_DESCRIPTION>
{
		DescriptionCustomGui();

	public:

		void SetMaster(GeDialog *dlg,MasterCallBackFunc *func);
		GeData MasterMessage(const BaseContainer &msg);

		void SetObjectList(const AtomArray &list);
		void SetObject(Atom *op);

		Bool GetObjectList(AtomArray &list);
};





// INTERNAL STUFF -- INTERNAL STUFF -- INTERNAL STUFF -- INTERNAL STUFF -- INTERNAL STUFF
// INTERNAL STUFF -- INTERNAL STUFF -- INTERNAL STUFF -- INTERNAL STUFF -- INTERNAL STUFF
// INTERNAL STUFF -- INTERNAL STUFF -- INTERNAL STUFF -- INTERNAL STUFF -- INTERNAL STUFF

#ifndef _INTERNAL_DEF_
	class iDescriptionCustomGui
	{
	};
#else
	class iDescriptionCustomGui;
#endif

struct DescriptionGuiLib : public BaseCustomGuiLib
{
	void			(iDescriptionCustomGui::*SetObjectList)(const AtomArray &list);
	void			(iDescriptionCustomGui::*SetObject)(Atom *op);
	Bool			(iDescriptionCustomGui::*GetObjectList)(AtomArray &list);
	void			(iDescriptionCustomGui::*SetMaster)(GeDialog *dlg,MasterCallBackFunc *func);
	GeData		(iDescriptionCustomGui::*MasterMessage)(const BaseContainer &msg);
};

// INTERNAL STUFF -- INTERNAL STUFF -- INTERNAL STUFF -- INTERNAL STUFF -- INTERNAL STUFF
// INTERNAL STUFF -- INTERNAL STUFF -- INTERNAL STUFF -- INTERNAL STUFF -- INTERNAL STUFF
// INTERNAL STUFF -- INTERNAL STUFF -- INTERNAL STUFF -- INTERNAL STUFF -- INTERNAL STUFF

#endif
