// ============================================================================ // CDragAndDrop.h ©1995 J. Rodden, DD/MF & Associates. All rights reserved // ============================================================================ // CDragAndDrop picks up drag manager handling where LDragAndDrop leaves off. // Everything necessary for a drag and droppable pane is encapsulated in this // class. // ============================================================================ #pragma once #include #include #include class LDragTask; class CDragAndDrop : public LDragAndDrop, public CDragItem { friend class CDragTask; public: CDragAndDrop(WindowPtr inMacWindow, LPane *inPane); protected: Rect mLocalFrame; FlavorType mFlavorAccepted; Boolean mUseDefaultRect; Boolean mHighlightDrag; // flag to highlight if dragged out and then back in virtual Boolean ClickIsDragEvent(const SMouseDownEvent &inMouseDown, Rect* inRect = nil); virtual void CreateDragEvent(const SMouseDownEvent &inMouseDown, Rect* inRect = nil); virtual void SetLocalFrame(); virtual Boolean ItemIsAcceptable( DragReference inDragRef, ItemReference inItemRef); virtual Boolean HFSItemIsAcceptable(HFSFlavor& inHFSFlavorData, Boolean& inTargetIsFolder); virtual void LeaveDropArea (DragReference inDragRef); virtual void InsideDropArea( DragReference inDragRef); virtual void InsideDropArea( DragReference inDragRef, Point& theMouseLocation, Point& thePinnedLocation); virtual void ReceiveDragItem( DragReference inDragRef, DragAttributes inDragAttrs, ItemReference inItemRef, Rect& inItemBounds); virtual void ReceiveDragItem( DragReference inDragRef, ItemReference inItemRef, Boolean inCopyData, Boolean inFromFinder, Rect& inItemBounds); virtual void CopyOrMoveDragData( void* inDragData, Size inDataSize, Boolean inCopyData, Boolean inFromFinder, Rect& inItemBounds); virtual void RemoveDragItem(const SMouseDownEvent &inMouseDown); // € Utility routines € Boolean DroppedInTrash(LDragTask* inDragTask); Boolean CheckForOptionKey( DragReference inDragRef); Boolean CheckIfViewIsAlsoSender( DragReference inDragRef); void FilterHFSDragItem(DragReference inDragRef, ItemReference inItemRef, HFSFlavor& outHFSFlavorData, Boolean& outTargetIsFolder); virtual Boolean ReceiveHFSDragItem( DragReference inDragRef, ItemReference inItemRef, Boolean inCopyData, Boolean inFromFinder, Rect& inItemBounds, short inFolderAction); }; // Flags for handling flavorTypeHFS folders const short kDontAcceptFolder = 0x00; const short kAcceptFolder = 0x01; const short kOpenFolder = 0x02; const short kRecurseDown = 0x04;