/////////////////////////////////////////////////////////////
// CINEMA 4D SDK                                           //
/////////////////////////////////////////////////////////////
// (c) MAXON Computer GmbH, all rights reserved            //
/////////////////////////////////////////////////////////////

#ifndef __C4D_SCENEHOOKDATA_H
#define __C4D_SCENEHOOKDATA_H

#include "c4d_nodedata.h"
#include "operatingsystem.h"

class String;
class BaseContainer;
class BaseBitmap;
class BaseDocument;
class BaseObject;
class BaseDraw;
class BaseDrawHelp;
class BaseThread;
class CDialog;
class PriorityList;
class EditorWindow;
class BaseSceneHook;
struct ControlDisplayStruct;

#define PLUGINFLAG_SCENEHOOK_NOTDRAGGABLE									(1<<0)
#define PLUGINFLAG_SCENEHOOK_SUPPORT_DOCUMENT_DESCRIPTION	(1<<1)
#define PLUGINFLAG_SCENEHOOK_SUPPORT_ANIMATION						(1<<2)

class SceneHookData : public NodeData
{
	public:
		////inherited from NodeData////
		//virtual Bool Init(GeListNode *node);
		//virtual void Free(GeListNode *node);
		//virtual Bool Read(GeListNode *node, HyperFile *hf, LONG level);
		//virtual Bool Write(GeListNode *node, HyperFile *hf);
		//virtual Bool Message(GeListNode *node, LONG type, void *data);
		//virtual Bool CopyTo(NodeData *dest, GeListNode *snode, GeListNode *dnode, COPYFLAGS flags, AliasTrans *trn);
		//virtual void GetBubbleHelp(GeListNode *node, String &str);
		//virtual BaseDocument* GetDocument(GeListNode *node);
		//virtual LONG GetBranchInfo(GeListNode *node, BranchInfo *info, LONG max, GETBRANCHINFO flags);
		//virtual Bool GetDDescription(GeListNode *node, Description *description, DESCFLAGS_DESC &flags);
		//virtual Bool GetDParameter(GeListNode *node, const DescID &id,GeData &t_data,DESCFLAGS_GET &flags);
		//virtual Bool GetDEnabling(GeListNode *node, const DescID &id,const GeData &t_data,DESCFLAGS_ENABLE flags,const BaseContainer *itemdesc);
		//virtual Bool SetDParameter(GeListNode *node, const DescID &id,const GeData &t_data,DESCFLAGS_SET &flags);
		//static NodeData *Alloc(void) { return gNew MyNodeData; }
		////inherited from NodeData////

		virtual Bool MouseInput			(BaseSceneHook *node, BaseDocument *doc, BaseDraw *bd, EditorWindow *win, const BaseContainer &msg);
		virtual Bool KeyboardInput	(BaseSceneHook *node, BaseDocument *doc, BaseDraw *bd, EditorWindow *win, const BaseContainer &msg);
		virtual Bool GetCursorInfo	(BaseSceneHook *node, BaseDocument *doc, BaseDraw *bd, Real x, Real y, BaseContainer &bc);
		virtual Bool Draw						(BaseSceneHook *node, BaseDocument *doc, BaseDraw *bd, BaseDrawHelp *bh, BaseThread *bt, SCENEHOOKDRAW flags);
		virtual Bool DisplayControl (BaseDocument *doc, BaseObject *op, BaseObject *chainstart, BaseDraw *bd, BaseDrawHelp *bh, ControlDisplayStruct &cds);
		virtual Bool InitDisplayControl(BaseSceneHook *node, BaseDocument* doc, BaseDraw* bd, const AtomArray* active);
		virtual void FreeDisplayControl(void);

		virtual Bool AddToExecution (BaseSceneHook *node, PriorityList *list);
		virtual EXECUTIONRESULT InitSceneHook	(BaseSceneHook *node, BaseDocument *doc, BaseThread *bt);
		virtual void FreeSceneHook	(BaseSceneHook *node, BaseDocument *doc);
		virtual EXECUTIONRESULT Execute(BaseSceneHook *node, BaseDocument *doc, BaseThread *bt, LONG priority, EXECUTIONFLAGS flags);
};

Bool RegisterSceneHookPlugin(LONG id, const String &str, LONG info, DataAllocator *g, LONG priority, LONG disklevel, void *emulation=NULL);

#endif
