Annotation of Examples/EnterpriseObjects/SHLExamples/Querying/IconWell.m, revision 1.1.1.1

1.1       root        1: /*--------------------------------------------------------------------------
                      2:  *
                      3:  *     You may freely copy, distribute, and reuse the code in this example.
                      4:  *     SHL Systemhouse disclaims any warranty of any kind, expressed or  
                      5:  *     implied, as to its fitness for any particular use.
                      6:  *
                      7:  *
                      8:  *     IconWell
                      9:  *
                     10:  *     Inherits From:          View
                     11:  *
                     12:  *     Conforms To:            None
                     13:  *
                     14:  *     Declared In:            IconWell.h
                     15:  *
                     16:  *------------------------------------------------------------------------*/
                     17: #import "IconWell.h"
                     18: #import <appkit/appkit.h>
                     19: 
                     20: 
                     21: 
                     22: 
                     23: @implementation IconWell
                     24: 
                     25: /*--------------------------------------------------------------------------
                     26:  *     Private
                     27:  *------------------------------------------------------------------------*/
                     28: - (NXPoint) _centerPointForImage: anImage
                     29: {
                     30:        NXSize  imageSize;
                     31:        NXRect  boundsRect;
                     32:        
                     33:        [self getBounds: &boundsRect];
                     34:        [anImage getSize: &imageSize];
                     35:        
                     36:        if  (imageSize.width < NX_WIDTH (&boundsRect)) 
                     37:                NX_X (&boundsRect) += (NX_WIDTH (&boundsRect) 
                     38:                        - imageSize.width ) / 2.0;
                     39:        
                     40:        if  (imageSize.height < NX_HEIGHT (&boundsRect)) 
                     41:                NX_Y (&boundsRect) += (NX_HEIGHT (&boundsRect) 
                     42:                        - imageSize.height ) / 2.0;
                     43: 
                     44:        return boundsRect.origin;
                     45: }
                     46: 
                     47: 
                     48: - _dragOperationFor: (NXEvent*) originalEvent  nextEvent: (NXEvent*) nextEvent
                     49: {
                     50:        id              pasteboard;
                     51:        NXPoint offset = { 0.0, 0.0 };
                     52:        NXRect  iconRect;
                     53:        
                     54:        if (path == NULL)  return self;
                     55:        iconRect.origin = [self _centerPointForImage:icon];
                     56:        pasteboard = [Pasteboard newName: NXDragPboard];
                     57:     [pasteboard declareTypes:&NXFilenamePboardType num:1 owner:self];
                     58:        [pasteboard writeType:NXFilenamePboardType data:path 
                     59:                length:strlen(path)+1];
                     60:        
                     61:        [self dragImage:icon at:&iconRect.origin offset:&offset event:originalEvent 
                     62:                pasteboard:pasteboard source:self slideBack:YES];
                     63:                
                     64:        if (pasteboard) [pasteboard free];
                     65: //     [self notifyDelegateDidDrag];
                     66:        return self;
                     67: }
                     68: 
                     69: 
                     70: /*--------------------------------------------------------------------------
                     71:  *     Initialization and Freeing
                     72:  *------------------------------------------------------------------------*/
                     73: - initFrame:(const NXRect *)frameRect 
                     74: {
                     75:        [super initFrame: frameRect];
                     76:        [self registerForDraggedTypes: &NXFilenamePboardType count: 1];
                     77:        return self;
                     78: }
                     79: 
                     80: 
                     81: - free
                     82: {
                     83:        if (icon) [icon free];
                     84:        if (path) NX_FREE (path);
                     85:        return [super free];
                     86: }
                     87: 
                     88: 
                     89: /*--------------------------------------------------------------------------
                     90:  *     Accessors
                     91:  *------------------------------------------------------------------------*/
                     92: - icon 
                     93: {
                     94:        return icon;
                     95: }
                     96: 
                     97: 
                     98: - setIcon:anIcon
                     99: {
                    100:        if (icon  &&  icon != anIcon)  [icon free];
                    101:        icon = anIcon;
                    102:        [self update];
                    103:        return self;
                    104: }
                    105:        
                    106: 
                    107: - (const char *)path 
                    108: {
                    109:        return path;
                    110: }
                    111: 
                    112: 
                    113: - setPath:(const char *)aPath 
                    114: {
                    115:        if (path  &&  path != aPath)  NX_FREE (path);
                    116:        path = aPath ? NXCopyStringBuffer(aPath) : NULL;
                    117:        return self;
                    118: }
                    119:  
                    120: 
                    121: /*--------------------------------------------------------------------------
                    122:  *     Event Handling
                    123:  *------------------------------------------------------------------------*/
                    124: - (BOOL)acceptsFirstMouse
                    125: {
                    126:        return YES;
                    127: }
                    128: 
                    129: 
                    130: - mouseDown: (NXEvent*) theEvent
                    131: {
                    132:        int             originalEventMask, newEventMask;
                    133:        NXEvent originalEvent = *theEvent, nextEvent;
                    134: 
                    135:        if (path == NULL) return self;
                    136:        
                    137:     [NXApp preventWindowOrdering];
                    138:        originalEventMask = [window addToEventMask: NX_MOUSEDRAGGEDMASK];
                    139:        newEventMask = (NX_MOUSEUPMASK | NX_MOUSEDRAGGEDMASK);
                    140:        nextEvent = *([NXApp getNextEvent: newEventMask]);
                    141: 
                    142:        switch (nextEvent.type)
                    143:                {
                    144:                case NX_MOUSEDRAGGED:
                    145: //                     if ([self notifyDelegateWillDrag] == YES)
                    146:                        [self _dragOperationFor: &originalEvent  nextEvent: &nextEvent];
                    147:                        break;
                    148:                        
                    149:                case NX_MOUSEUP:
                    150:                default:
                    151:                        break;
                    152:                }
                    153:        
                    154:        [window setEventMask: originalEventMask];
                    155:        return self;
                    156: }
                    157: 
                    158: 
                    159: /*--------------------------------------------------------------------------
                    160:  *     Delegate
                    161:  *------------------------------------------------------------------------*/
                    162: - delegate
                    163: {
                    164:        return delegate;
                    165: }
                    166: 
                    167: 
                    168: - setDelegate: anObject 
                    169: {
                    170:        delegate = anObject;
                    171:        return self;
                    172: }
                    173: 
                    174: 
                    175: /*--------------------------------------------------------------------------
                    176:  *     Drawing
                    177:  *------------------------------------------------------------------------*/
                    178: - drawSelf:(const NXRect *)rects :(int)rectCount 
                    179: {
                    180:        NXPoint point = [self _centerPointForImage:icon];
                    181:        
                    182:        PSsetgray(NX_LTGRAY);
                    183:        PSrectfill(bounds.origin.x, bounds.origin.y, bounds.size.width, 
                    184:                bounds.size.height);
                    185: 
                    186:        [icon composite:NX_SOVER toPoint:&point];
                    187:        return self;
                    188: }
                    189: 
                    190: 
                    191: /*--------------------------------------------------------------------------
                    192:  *     Dragging
                    193:  *------------------------------------------------------------------------*/
                    194: - (NXDragOperation) draggingSourceOperationMaskForLocal: (BOOL)isLocal;
                    195: {      
                    196:        return NX_DragOperationCopy;
                    197: }
                    198: 
                    199: 
                    200: - (NXDragOperation) draggingEntered:dragSource
                    201: {
                    202:     return NX_DragOperationCopy;
                    203: }
                    204: 
                    205: 
                    206: - (NXDragOperation) draggingUpdated:dragSource
                    207: {
                    208:        if ([dragSource draggingSource] == self) 
                    209:                return NX_DragOperationNone; 
                    210: 
                    211:     return NX_DragOperationCopy;
                    212: }
                    213: 
                    214: 
                    215: - (BOOL) prepareForDragOperation:dragSource
                    216: {
                    217: //     return [self notifyDelegateWillDrag];
                    218:        return YES;
                    219: }
                    220: 
                    221: 
                    222: - (BOOL) performDragOperation:dragSource
                    223: {
                    224:        id              pasteboard;
                    225:        char*   data;
                    226:        int     length;
                    227: 
                    228:        pasteboard = [dragSource draggingPasteboard];
                    229:        [pasteboard readType:NXFilenamePboardType data:&data length:&length];
                    230:        if (strchr (data, '\t')) return NO;
                    231:        [self setPath: data];
                    232:        [self setIcon: [dragSource draggedImageCopy]];
                    233:        [pasteboard deallocatePasteboardData:data length:length];
                    234:        return YES;
                    235: }
                    236: 
                    237: 
                    238: - notifyDelegateDidDrop: aDragSource
                    239: {
                    240:        if ([delegate respondsTo: @selector (dragSource:didDropOnIconWell:)])
                    241:                [delegate dragSource: aDragSource didDropOnIconWell: self];
                    242: 
                    243:        return self;
                    244: }
                    245: 
                    246: 
                    247: - concludeDragOperation:dragSource
                    248: {
                    249:        [self notifyDelegateDidDrop: dragSource];
                    250:        [self update];
                    251:        return self;
                    252: }
                    253: 
                    254: 
                    255: @end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.