This is MiscDragView.h in view mode; [Download] [Up]
/************************************************************************** CLASS: MiscDragView INHERITS FROM: View PROGRAMMERS: Todd Thomas (todd@avocado.supernet.ab.ca) Bill Shirley (Bill_Shirley@pcp.ca) Bruce McKenzie (spuds@netcom.com) Steve Hayman (shayman@Objectario.com) BEGAN: February 14, 1994 LAST CHANGED: November 26, 1994 VERSION: 1.4 CHANGES: See the end of MiscDragView.m MiscDragView is an abstract class (cannot be used as is) designed to be easily extensible. Please refer to the docs for a more indepth description. To make any subclass useable for both source and destination dragging: -override initDragTypes to register the draggingTypes that your view will accept. -override setupForSourceDrag to put the data (representing the dragged icon) on the pasteboard of your choice, and choose the image you would like to be dragged. *Don't call the [super setupForSourceDrag]. -override performDragOperation: to get the data from the pasteboard (used for a destination drag view) The above is the minimum needed, but you'll likely want to override other methods to check whether incoming drags are acceptable, etc. Finally, the delegate (if there is one) will be sent messages like: didInitiateSourceDrag:, didFinishSourceDrag:, didInitiateDestinationDrag:, and didFinishDestinationDrag:. (The delegate methods have changed to be more like NeXT's will/did methods. The old ones are still sent for backward compatability though). The skeleton of this code came from the NW_DragLab example by Greg Burd and Randy Nelson...thanks for sharing your code. This object is included in the MiscKit by permission from the author and its use is governed by the MiscKit license, found in the file "LICENSE.rtf" in the MiscKit distribution. Please refer to that file for a list of all applicable permissions and restrictions. ***************************************************************************/ #import <appkit/View.h> @interface MiscDragView : View { id theImage; // the image to display the well NXSize imageSize; // the original size just in case you shrink it int border; // border type (same as Box) BOOL allowSourceDragging; BOOL allowDestinationDragging; BOOL freeWhenDragDone; id delegate; id target; // For control-style target/action stuff. ..shayman SEL action; } //-------------------- Methods to get things set up + initialize; - initFrame:(const NXRect *)frameRect; - initDragTypes; - free; //--------------------- Image Manipulation Stuff - setImage: (NXImage *)anImage; - setImageByFilename: (const char *)aFilename; - (NXImage *)image; - setDragImage: (NXImage *)anImage; - setDragImage: (NXImage *)anImage freeWhenDone: (BOOL)freeIt; - (NXImage *)dragImage; //-------------------- Dragging Options - setAllowSourceDragging: (BOOL)aBool; - (BOOL)allowSourceDragging; - setAllowDestinationDragging: (BOOL)aBool; - (BOOL)allowDestinationDragging; - (BOOL)acceptForeignDrag; - (BOOL)acceptLocalDrag; - (BOOL)acceptSelfDrag; - (BOOL)retainData; - (BOOL)shadowIncoming; - (NXColor)shadowColor; //-------------------- Methods for source dragging - mouseDown:(NXEvent *)theEvent; - cleanupAfterSourceDrag; - (BOOL)setupForSourceDrag; - (BOOL)slideback; - draggingPasteboard; - calculateDragPoint: (NXPoint *)dragPoint andOffset: (NXPoint *)offset; - (NXDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag; - draggedImage:(NXImage *)image endedAt:(NXPoint *)screenPoint deposited:(BOOL)flag; //-------------------- Methods for destination dragging */ - (NXDragOperation)draggingEntered:sender; - (NXDragOperation)draggingUpdated:sender; - draggingExited:sender; - (BOOL)prepareForDragOperation:sender; - (BOOL)performDragOperation:sender; - concludeDragOperation:sender; - cleanupAfterDestinationDrag; //-------------------- Basic useful methods - (BOOL)acceptsFirstMouse; - (BOOL)shouldDelayWindowOrderingForEvent:(NXEvent *)theEvent; //-------------------- Display - setBorderType: (int)aType; - (int)borderType; - drawSelf: (const NXRect *)rects :(int)rectCount; //-------------------- Archiving methods - read: (NXTypedStream *)stream; - write: (NXTypedStream *)stream; - awake; //-------------------- Control-style Target-action stuff (shayman) - target; - setTarget:aTarget; - (SEL)action; - setAction:(SEL)anAction; - (const char *)stringValue; - setStringValue:(const char *)aValue; - takeStringValueFrom:sender; @end @interface Object (MiscDragViewDelegate) - didInitiateSourceDrag: sender; - didFinishSourceDrag: (BOOL)successful; - didInitiateDestinationDrag: sender; - didFinishDestinationDrag: (BOOL)successful; @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.