This is GdbBrowserCell.m in view mode; [Download] [Up]
/* GdbBrowserCell.m created by ovidiu on Sat 05-Apr-1997 */ #import <AppKit/AppKit.h> #import "GdbBrowserCell.h" @implementation GdbBrowserCell static NSImage* squareImage = nil; static NSImage* squareHImage = nil; static NSImage* dotImage = nil; static NSImage* dotHImage = nil; static NSCell* titleCell = nil; static NSCell* valueCell = nil; static NSCell* imageCell = nil; + (void)initialize { NSBundle* bundle = [NSBundle bundleForClass:self]; NSString* path; path = [bundle pathForResource:@"square" ofType:@"tiff"]; squareImage = [[NSImage alloc] initWithContentsOfFile:path]; path = [bundle pathForResource:@"squareH" ofType:@"tiff"]; squareHImage = [[NSImage alloc] initWithContentsOfFile:path]; path = [bundle pathForResource:@"dotImage" ofType:@"tiff"]; dotImage = [[NSImage alloc] initWithContentsOfFile:path]; path = [bundle pathForResource:@"dotImageH" ofType:@"tiff"]; dotHImage = [[NSImage alloc] initWithContentsOfFile:path]; titleCell = [[NSCell alloc] initTextCell:@""]; [titleCell setAlignment:NSLeftTextAlignment]; valueCell = [[NSCell alloc] initTextCell:@""]; [valueCell setAlignment:NSLeftTextAlignment]; imageCell = [[NSCell alloc] initImageCell:nil]; } - (void)setObjectToDisplay:(id<GdbDisplayValue,NSObject>)anObject { Value* value; Type* type; tTypeKind typeKind; [anObject retain]; [displayableObject release]; displayableObject = anObject; value = [displayableObject value]; type = [value type]; typeKind = [type typeKind]; if (typeKind == kVoid || typeKind == kScalar || typeKind == kEnum || typeKind == kCString) [self setLeaf:YES]; else [self setLeaf:NO]; } - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView*)view backgroundGray:(float)backgroundGray { Value* value = [displayableObject value]; Type* type = [value type]; NSRect valueFrame, imageRect; NSString* title = [displayableObject title]; float titleWidth = 0, valueWidth = 0; NSString* valueString = nil; if (!title) title = @""; if ([title isEqual:@""] && objectIsArrayComponent) { int row, column; [(NSMatrix*)view getRow:&row column:&column ofCell:self]; title = [NSString stringWithFormat:@"[%d]", row]; } [titleCell setStringValue:title]; [valueCell setStringValue:@""]; [imageCell setImage:nil]; switch ([type typeKind]) { case kVoid: break; case kScalar: case kEnum: if (!(valueString = [value additionalDescription])) valueString = [value stringValue]; [valueCell setStringValue:valueString ? valueString : @""]; break; case kStructure: [imageCell setImage:backgroundGray == NSWhite ? dotHImage : dotImage]; break; case kClass: [imageCell setImage:backgroundGray == NSWhite ? dotHImage : dotImage]; if (!(valueString = [value additionalDescription])) valueString = [value stringValue]; [valueCell setStringValue:valueString ? valueString : @""]; break; case kUnion: [imageCell setImage:backgroundGray == NSWhite ? dotHImage : dotImage]; break; case kArray: [imageCell setImage:backgroundGray == NSWhite ? squareHImage : squareImage]; break; case kPointer: case kVoidPointer: [imageCell setImage:backgroundGray == NSWhite ? [isa highlightedBranchImage] : [isa branchImage]]; /* Fall through */ case kCString: /* If the value has a description associated with it then display it rather than the address. Also make the cell a leaf cell. */ if (!(valueString = [value additionalDescription])) valueString = [value stringValue]; else [self setLeaf:YES]; [valueCell setStringValue:valueString ? valueString : @""]; break; } if (title && ![title isEqual:@""]) titleWidth = [[titleCell font] widthOfString:title]; if (valueString && ![valueString isEqual:@""]) valueWidth = [[valueCell font] widthOfString:valueString]; [titleCell drawInteriorWithFrame:cellFrame inView:view]; if (![self isLeaf]) { imageRect.size.width = 16; imageRect.size.height = cellFrame.size.height; imageRect.origin.x = cellFrame.origin.x + cellFrame.size.width - imageRect.size.width; imageRect.origin.y = cellFrame.origin.y; [imageCell drawInteriorWithFrame:imageRect inView:view]; } if (valueString) { valueFrame.size.width = valueWidth + 8; valueFrame.size.height = cellFrame.size.height; valueFrame.origin.x = cellFrame.origin.x + cellFrame.size.width - valueFrame.size.width - ([self isLeaf] ? 0 : imageRect.size.width); valueFrame.origin.y = cellFrame.origin.y; [valueCell drawInteriorWithFrame:valueFrame inView:view]; } } - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { float backgroundGray = NSLightGray; PSgsave(); if (state) backgroundGray = NSWhite; if (isHighlighted) { if (backgroundGray == NSLightGray) backgroundGray = NSWhite; } /* Clear the cell frame */ PSsetgray (backgroundGray); PSrectfill (cellFrame.origin.x, cellFrame.origin.y, cellFrame.size.width, cellFrame.size.height); [self drawInteriorWithFrame:cellFrame inView:controlView backgroundGray:backgroundGray]; PSgrestore(); } - (void)highlight:(BOOL)flag withFrame:(NSRect)cellFrame inView:(NSView*)controlView { isHighlighted = flag; } - (void)setState:(int)_state { state = _state; } /* Implement stringValue to return a useful string to be shown as title of a column in the stack browser. */ - (NSString*)stringValue { return [displayableObject title]; } - (void)setObjectIsArrayComponent:(BOOL)flag { objectIsArrayComponent = flag; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.