Milán Major

netscape-revival

1 branch
Code

lib/mac/VText/V_PowerPlant_Mods/LDataDragEventHandler.h

//	===========================================================================
//	LDataDragEventHandler.h			©1994 Metrowerks Inc. All rights reserved.
//	===========================================================================

#pragma	once

#include	<LEventHandler.h>
#include	<LDragAndDrop.h>
#include	<LDataDragTask.h>

class	LDataTube;

class	LDataDragEventHandler
			:	public LEventHandler
			,	public LDropArea
{
private:
	typedef	LEventHandler	inheritEventHandler;
public:
	enum {class_ID = kPPCID_DataDragEventHandler};

				//	Maintenance
						LDataDragEventHandler();
	virtual				~LDataDragEventHandler();
	virtual ClassIDT	GetClassID() const {return class_ID;}
#ifndef	PP_No_ObjectStreaming
	virtual void		WriteObject(LStream &inStream) const;
	virtual void		ReadObject(LStream &inStream);
#endif
	virtual	void		Reset(void);
	virtual LDataDragTask *	MakeDragTask(LDataDragEventHandler *inHandler, Boolean inHandlerIsSource = false);
	
	virtual Boolean		GetStartsDataDrags(void);
	virtual void		SetStartsDataDrags(Boolean inStartsDataDrags);
	virtual Boolean		GetReceivesDataDrags(void);
	virtual void		SetReceivesDataDrags(Boolean inReceivesDataDrags);
												
				//	New features -- data dragging
	virtual	void		DataDragDo(void);
	virtual	DataDragT	FindDragSemantic(void);
						//	Receiving handlers
	virtual void		DataDragMoveIn(void);
	virtual void		DataDragMoveOut(void);
	virtual void		DataDragTrackMove(void);
	
				//	Drag action creation
	virtual	LAction *	MakeCreateTask(void);
	virtual	LAction *	MakeCopyTask(void);
	virtual	LAction *	MakeMoveTask(void);
	virtual	LAction *	MakeLinkTask(void);
	virtual	LAction *	MakeOSpecTask(void);
protected:
				//	Implementation
	virtual void		NoteOverNewThingSelf(LManipulator *inThing);
	virtual LSelectableItem *	OverReceiverSelf(Point inWhere);
	virtual void		SetMouseBounds(const Rect &inBounds);
	virtual Boolean		DoCondition(EventConditionT inCondition);
	virtual DragTypeT	GetDragType(void);
	virtual Boolean		PtInBoundaryArea(Point inWhere);
	virtual void		PreScroll(Point inVector);
	virtual void		PostScroll(Point inVector);

				//	Implementation/linkage -- LDropArea
	virtual Boolean		PointInDropArea(Point inGlobalPt);
	virtual void		CheckDragRef(DragReference inDragRef);
	virtual void		DoDragSendData(FlavorType inFlavor,
								ItemReference inItemRef,
								DragReference inDragRef);
	virtual void		DoDragReceive(DragReference inDragRef);
	virtual Boolean		DragIsAcceptable(DragReference inDragRef);
	virtual void		EnterDropArea(DragReference inDragRef,
								Boolean inDragHasLeftSender);
	virtual void		LeaveDropArea(DragReference inDragRef);
	virtual void		InsideDropArea(DragReference inDragRef);
	virtual void		FocusDropArea(void);
	virtual void		HiliteDropArea(DragReference inDragRef);

	static	DragSendDataUPP			sDragSendDataUPP;
	static	Boolean					sPreScrollWasHilited;
	static	LDataDragEventHandler	*sReceiveHandler;
	
				//	Perhaps more of these could be static.
	LSelectableItem			*mReceiver;
	LSelectableItem			*mPossibleReceiver;
	EventStateT				mPreDragState;
	Boolean					mStartsDataDrags,
							mReceivesDataDrags;
};

enum {
	evs_DataDragEventHandler_Count = evs_EventHandler_Count
};