This is XMovieDocument.m in view mode; [Download] [Up]
#import "XMovieDocument.h"
#import "MovieView.h"
#import "AppController.h"
int ImageSort(id num1, id num2, void *context)
{
NSRange r0, r1;
NSString *s1, *s2;
float v1, v2;
r0 = [num1 rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]];
r1 = [num1 rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet] options:NSBackwardsSearch];
if (r0.length == 0)
return [(NSString *)num1 compare:num2];
r0.length += r1.location - r0.location;
s1 = [num1 substringWithRange:r0];
r0 = [num2 rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]];
r1 = [num2 rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet] options:NSBackwardsSearch];
if (r0.length == 0)
return [(NSString *)num1 compare:num2];
r0.length += r1.location - r0.location;
s2 = [num2 substringWithRange:r0];
v1 = [s1 floatValue];
v2 = [s2 floatValue];
if (v1 < v2)
return NSOrderedAscending;
else if (v1 > v2)
return NSOrderedDescending;
else
return NSOrderedSame;
}
@implementation XMovieDocument
+ (NSSet *) readableFileTypes;
{
return [NSSet setWithObject:@"xmovie"];
}
+ (void) load
{
[[NSApp delegate] registerDocumentClass:[self class]];
}
- initWithContentsOfFile:(NSString *)path
{
BOOL isDir=NO;
NSArray *fileNames = nil;
int i;
NSString *imagePath;
NSImage *image;
NSSize size;
NSMutableArray *images;
NSFileManager *manager = [NSFileManager defaultManager];
[super initWithContentsOfFile:path];
if (![NSBundle loadNibNamed:@"XMovieDocument.nib" owner: self])
{
[self autorelease];
return nil;
}
if ([manager fileExistsAtPath:path isDirectory:&isDir] && isDir)
fileNames = [[manager directoryContentsAtPath:path] sortedArrayUsingFunction:ImageSort context:NULL];
if ([fileNames count] == 0)
{
[self autorelease];
return nil;
}
images = [NSMutableArray arrayWithCapacity:[fileNames count]];
for (i = 0; i < [fileNames count]; ++i)
{
imagePath = [path stringByAppendingPathComponent:[fileNames objectAtIndex:i]];
NS_DURING
image = [[NSImage allocWithZone:[self zone]] initWithContentsOfFile:imagePath];
NS_HANDLER
NSLog (@"'%@' does not appear to be an image", imagePath);
image = nil;
NS_ENDHANDLER
if (image != nil)
[images addObject:image];
[image release];
}
[display setFrames:images];
image = [images lastObject];
size = [image size];
size.height += 20;
[window setContentSize:size];
[window makeKeyAndOrderFront:nil];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.