This is Info.m in view mode; [Download] [Up]
/* -*-C-*- ******************************************************************************* * * File: Info.m * RCS: /usr/local/sources/CVS/EnhanceMail/Info.m,v 1.7 1998/07/01 21:58:06 tom Exp * Description: * Author: Carl Edman * Created: Fri Oct 13 11:48:05 1995 * Modified: 14-Jun-98 (Tom Hageman) -- incorporate Don Yacktman's EasterEgg. * Language: C * Package: N/A * Status: Experimental (Do Not Distribute) * * (C) Copyright 1995, but otherwise this file is perfect freeware. * ******************************************************************************* */ #import "EnhanceMail.h" #import "Info.h" #import "Info.subproj/Spewer.h" static id mod=nil; @implementation EnhanceInfo + finishLoading:(struct mach_header *)header { [self poseAs:[self superclass]]; return self; } - (void)enhanceSetupEasterEgg:(Button *)startButton { char path[MAXPATHLEN+1]; // Kludge: load image needed by easter egg from bundle. if ([EnhanceBundle getPath:path forResource:"minienvelope" ofType:"tiff"]) { NXZone *z = [self zone]; EnhanceSpewer *spewer; NXImage *image = [[NXImage allocFromZone:z] initFromFile:path]; if (image == nil) return; [image setName:"minienvelope.tiff"]; spewer = [[EnhanceSpewer allocFromZone:z] init]; [startButton setTarget:spewer]; [startButton setAction:@selector(start:)]; [[startButton window] setDelegate:spewer]; } } - (Button *)_enhanceLogo { /* create a(n almost) ready-to-insert button containing our enhance logo. Caller should still set frame origin. */ char path[MAXPATHLEN+1]; Button *button = nil; if ([EnhanceBundle getPath:path forResource:"e" ofType:"tiff"]) { NXZone *z = [self zone]; NXImage *image = [[NXImage allocFromZone:z] initFromFile:path]; NXRect frame = {0}; [image getSize:&frame.size]; if (NX_WIDTH(&frame) && NX_HEIGHT(&frame)) { button = [[Button allocFromZone:z] init]; [button setBordered:NO]; [button setType:NX_MOMENTARYCHANGE]; [button setIconPosition:NX_ICONONLY]; [button setImage:image]; [button sizeToFit]; [button setSound:[Sound findSoundFor:"Basso"]]; } } return button; } - (View *)_enhanceFindTitleView { /* Heuristically find Mail title field: assume it's a subview of infoPanel's contentview with -icon named "Mail". */ List *views = [[infoPanel contentView] subviews]; int i = [views count]; while (--i >= 0) { id view = [views objectAt:i]; if ([view respondsTo:@selector(icon)]) { const char *icon = [view icon]; if (icon && strcmp(icon, "Mail")==0) return view; } } return nil; } - (void)enhanceInsinuateVersion { const char *old; char *new; NXRect or,nr; old=[versionField stringValue]; [versionField getFrame:&or]; new=alloca(strlen(old)+3+strlen(EnhanceVersion)+1+1); sprintf(new, "%s (e%s)", old, EnhanceVersion); [versionField setStringValue:new]; [versionField sizeToFit]; [versionField getFrame:&nr]; [versionField moveBy:(NX_MAXX(&or) - NX_MAXX(&nr)):0]; } - (void)enhanceInsinuateLogo { /* release field may be before or after Mail title, depending on localization. Insert our logo after the rightmost one. */ NXRect logoFrame, releaseFrame, titleFrame = {0}; Button *logo = [self _enhanceLogo]; if (logo == nil) return; [logo getFrame:&logoFrame]; [releaseField getFrame:&releaseFrame]; [[self _enhanceFindTitleView] getFrame:&titleFrame]; if (NX_X(&releaseFrame) > NX_X(&titleFrame)) { // XXX quick-n-dirty hard constants here. logoFrame.origin.x = NX_X(&releaseFrame) + 63; logoFrame.origin.y = NX_Y(&releaseFrame) + 11; } else { logoFrame.origin.x = NX_MAXX(&titleFrame) - 3; logoFrame.origin.y = NX_Y(&titleFrame) + 7; } [logo setFrame:&logoFrame]; [[infoPanel contentView] addSubview:logo]; [self enhanceSetupEasterEgg:logo]; } - enhance { [self enhanceInsinuateVersion]; [self enhanceInsinuateLogo]; return self; } + new { id ret=[super new]; if (mod!=ret) mod=[ret enhance]; return ret; } @end // EnhanceInfo
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.