home *** CD-ROM | disk | FTP | other *** search
/ Big Green CD 8 / BGCD_8_Dev.iso / Rhapsody / Graphics / Morph-2.0a / XMovieDocument.m < prev   
Encoding:
Text File  |  1998-01-10  |  2.7 KB  |  106 lines

  1. #import "XMovieDocument.h"
  2. #import "MovieView.h"
  3. #import "AppController.h"
  4.  
  5. int ImageSort(id num1, id num2, void *context)
  6. {
  7.     NSRange    r0, r1;
  8.     NSString *s1, *s2;
  9.     float v1, v2;
  10.  
  11.     r0 = [num1 rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]];
  12.     r1 = [num1 rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet] options:NSBackwardsSearch];
  13.     if (r0.length == 0)
  14.         return [(NSString *)num1 compare:num2];
  15.  
  16.     r0.length += r1.location - r0.location;
  17.     s1 = [num1 substringWithRange:r0];
  18.  
  19.     r0 = [num2 rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]];
  20.     r1 = [num2 rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet] options:NSBackwardsSearch];
  21.     if (r0.length == 0)
  22.         return [(NSString *)num1 compare:num2];
  23.  
  24.     r0.length += r1.location - r0.location;
  25.     s2 = [num2 substringWithRange:r0];
  26.  
  27.     v1 = [s1 floatValue];
  28.     v2 = [s2 floatValue];
  29.     
  30.     if (v1 < v2)
  31.         return NSOrderedAscending;
  32.     else if (v1 > v2)
  33.         return NSOrderedDescending;
  34.     else
  35.         return NSOrderedSame;
  36. }
  37.  
  38. @implementation XMovieDocument
  39.  
  40. + (NSSet *) readableFileTypes;
  41. {
  42.     return [NSSet setWithObject:@"xmovie"];
  43. }
  44.  
  45. + (void) load
  46. {
  47.     [[NSApp delegate] registerDocumentClass:[self class]];
  48. }
  49.  
  50. - initWithContentsOfFile:(NSString *)path
  51. {
  52.     BOOL isDir=NO;
  53.     NSArray *fileNames = nil;
  54.     int         i;
  55.     NSString *imagePath;
  56.     NSImage     *image;
  57.     NSSize    size;
  58.     NSMutableArray *images;
  59.     NSFileManager *manager = [NSFileManager defaultManager];
  60.  
  61.     [super initWithContentsOfFile:path];
  62.     
  63.     if (![NSBundle loadNibNamed:@"XMovieDocument.nib" owner: self])
  64.     {
  65.             [self autorelease];
  66.             return nil;
  67.     }
  68.  
  69.     if ([manager fileExistsAtPath:path isDirectory:&isDir] && isDir)
  70.         fileNames = [[manager directoryContentsAtPath:path] sortedArrayUsingFunction:ImageSort context:NULL];
  71.  
  72.     if ([fileNames count] == 0)
  73.     {
  74.         [self autorelease];
  75.         return nil;
  76.     }
  77.  
  78.     images = [NSMutableArray arrayWithCapacity:[fileNames count]];
  79.     
  80.     for (i = 0; i < [fileNames count]; ++i)
  81.     {
  82.         imagePath = [path stringByAppendingPathComponent:[fileNames objectAtIndex:i]];
  83.         NS_DURING
  84.             image = [[NSImage allocWithZone:[self zone]] initWithContentsOfFile:imagePath];
  85.         NS_HANDLER
  86.             NSLog (@"'%@' does not appear to be an image", imagePath);
  87.             image = nil;
  88.         NS_ENDHANDLER
  89.  
  90.         if (image != nil)
  91.             [images addObject:image];
  92.         [image release];
  93.     }
  94.     [display setFrames:images];
  95.     image = [images lastObject];
  96.  
  97.     size = [image size];
  98.     size.height += 20;
  99.     [window setContentSize:size];
  100.     [window makeKeyAndOrderFront:nil];
  101.     
  102.     return self;
  103. }
  104.  
  105. @end
  106.