This is IKfunctions.m in view mode; [Download] [Up]
#import <Foundation/NSUtilities.h> #import <AppKit/AppKit.h> #ifdef WIN32 #import <ntunix.h> #else #import <libc.h> #import <sys/time.h> #endif #import "iconkit.h" #define WARNING(s) \ { \ NSLog(s, [(NSObject *)object description]); \ ok = NO; \ } BOOL IKCheckConformance (id object) { BOOL ok = YES; if (object != nil) { if (![object conformsToProtocol: @protocol(IKDependency)]) WARNING (@"%@ does not conform to IKDependency") if (![object conformsToProtocol: @protocol(IKSimpleObject)]) WARNING (@"%@ does not conform to IKSimpleObject") else { if ([object isEditable] && ![object conformsToProtocol: @protocol(IKEditableObject)]) WARNING (@"%@ should conform to IKEditableObject") if ([object isDraggable] && ![object conformsToProtocol: @protocol(IKDraggableObject)]) WARNING (@"%@ should conform to IKDraggableObject") if ([object isDragAccepting] && ![object conformsToProtocol: @protocol(IKDragAcceptingObject)]) WARNING (@"%@ should conform to IKDragAcceptingObject") } } return (ok); } NSString *MyIKidPboardType = NULL; NSString *IKidPboardType(void) { IKInitIDpboardType (); return MyIKidPboardType; } #ifdef WIN32 #define srandom srand #define random rand #endif void IKInitIDpboardType () { if (MyIKidPboardType == NULL) { struct timeval tp; struct timezone tzp; long randomString[3]; int i; gettimeofday(&tp, &tzp); srandom(tp.tv_usec); for (i = 0; i < 2; i++) randomString[i] = random(); randomString[2] = 0; MyIKidPboardType = [[NSString stringWithCString:(const char*)randomString] retain]; } } void IKCopyID (NSPasteboard * pboard, id object) { NSArray *pasteTypes = IKIDPasteTypes(); // <<HACK>> This is really dangerous since we !!must!! ensure that the object does not disappear // Before we "paste" it. // During dragging this is unlikely..but still ! [pboard declareTypes:pasteTypes owner:nil]; [pboard setString:[NSString stringWithFormat:@"%x", object] forType:IKidPboardType()]; } id IKReadID (NSPasteboard * pboard) { NSArray *pasteTypes = IKIDPasteTypes(); id object = nil; if ([pboard availableTypeFromArray:pasteTypes]) { NSString *string = [pboard stringForType:IKidPboardType()]; if(string && [string length]) sscanf([string cString], "%x", (unsigned int *)(&object)); } return object; } NSArray * IKIDPasteTypes (void) { static NSMutableArray *pasteTypes = nil; if(!pasteTypes) { pasteTypes = [[NSMutableArray array] retain]; IKInitIDpboardType(); [pasteTypes addObject:IKidPboardType()]; } return pasteTypes; } void IKShortenTitle (NSCell * text, float maxWidth) { NSMutableString *textBuffer = [NSMutableString stringWithString:[text stringValue]]; NSSize size; BOOL deleted = NO; int len = [textBuffer length]; size = [text cellSize]; while((size.width > maxWidth) && (len > 1)) { [textBuffer deleteCharactersInRange:NSMakeRange(--len, 1)]; [text setStringValue:textBuffer]; size = [text cellSize]; deleted = YES; } if(deleted) { if(len > 2) { [textBuffer deleteCharactersInRange:NSMakeRange(len-2, 2)]; } [text setStringValue:[textBuffer stringByAppendingString:@"..."]]; } }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.