Changeset 906
- Timestamp:
- 12/03/04 15:57:25 (4 years ago)
- Files:
-
- Footagehead/trunk/FHController.m (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
Footagehead/trunk/FHController.m
r902 r906 1 /* $Id: FHController.m,v 1.1 8 2004/12/03 12:35:51morris Exp $ */1 /* $Id: FHController.m,v 1.19 2004/12/03 14:57:25 morris Exp $ */ 2 2 3 3 /* … … 87 87 // --- set up table view 88 88 [_tableView setDoubleAction:@selector(openFile:)]; 89 [_tableView setForwardAction:@selector( nextImage:)];90 [_tableView setBackAction:@selector( previousImage:)];89 [_tableView setForwardAction:@selector(openFile:)]; 90 [_tableView setBackAction:@selector(openParent:)]; 91 91 [_tableView setDeleteAction:@selector(openParent:)]; 92 92 … … 637 637 638 638 - (void)loadURL:(NSURL *)url withHint:(FHHandlerHint)hint selectRow:(unsigned int)row { 639 BOOL select;640 641 639 [self startSpinning]; 642 640 … … 651 649 [self updateButtons]; 652 650 [self reloadPathMenu]; 653 654 select = ((int) row != [_tableView selectedRow]);655 651 [_tableView reloadData]; 656 657 if(select) 658 [_tableView selectRow:row byExtendingSelection:NO]; 659 else 660 [self updateImage]; 661 652 [_tableView selectRow:row byExtendingSelection:NO]; 662 653 [_tableView scrollRowToVisible:row]; 663 654 655 // --- start loading images 656 [NSThread detachNewThreadSelector:@selector(loadFileThread:) toTarget:self withObject:[_handler images]]; 657 664 658 [self stopSpinning]; 665 659 } … … 668 662 669 663 - (void)loadFile:(FHFile *)file { 670 NSImage *image; 671 672 [self startSpinning]; 673 674 image = [[FHCache cache] imageForURL:[file URL]]; 675 676 if(image) 677 [self performSelector:@selector(file:didLoadImage:) withObject:file withObject:[image retain]]; 678 else 679 [NSThread detachNewThreadSelector:@selector(loadFileThread:) toTarget:self withObject:file]; 664 if([file image]) { 665 [self performSelector:@selector(fileDidLoadImage:) withObject:file]; 666 } else { 667 [_imageView setImage:NULL]; 668 [self updateRightStatus]; 669 } 680 670 } 681 671 … … 684 674 - (void)loadFileThread:(id)arg { 685 675 NSAutoreleasePool *pool; 676 NSArray *images; 686 677 NSImage *image; 687 678 FHFile *file; 679 int i, count; 688 680 689 681 pool = [[NSAutoreleasePool alloc] init]; 690 file = arg; 691 692 // --- load image, put in cache, notify main thread 693 image = [[NSImage alloc] initWithContentsOfURL:[file URL]]; 694 [[FHCache cache] setImage:image forURL:[file URL]]; 695 [self performSelectorOnMainThread:@selector(file:didLoadImage:) withObject:file withObject:image]; 682 images = arg; 683 count = [images count]; 684 685 for(i = 0; i < count; i++) { 686 file = [images objectAtIndex:i]; 687 image = [[NSImage alloc] initWithContentsOfURL:[file URL]]; 688 [file setImage:image]; 689 [image release]; 690 691 [self performSelectorOnMainThread:@selector(fileDidLoadImage:) withObject:file]; 692 693 if(i % 10 == 0) { 694 [pool release]; 695 pool = [[NSAutoreleasePool alloc] init]; 696 } 697 } 696 698 697 699 [pool release]; … … 725 727 726 728 727 - (void)file:(FHFile *)file didLoadImage:(NSImage *)image { 728 NSArray *images; 729 unsigned int index; 730 BOOL next = NO; 731 732 if(image && [image size].width > 0.0) { 733 [NSCursor setHiddenUntilMouseMoves:YES]; 734 735 if([file isEqual:[self selectedFile]]) { 736 if([[self window] isKeyWindow]) { 737 // --- display image 729 - (void)fileDidLoadImage:(FHFile *)file { 730 NSImage *image; 731 NSRect frame; 732 BOOL success; 733 734 image = [file image]; 735 success = (image && [image size].width > 0.0); 736 737 if([file isEqual:[self selectedFile]]) { 738 if([[self window] isKeyWindow]) { 739 if(success) { 740 // --- display image in window mode 741 [NSCursor setHiddenUntilMouseMoves:YES]; 738 742 [_imageView setImage:image]; 739 743 [self updateRightStatus]; 740 741 next = YES; 744 } else { 745 // --- display error in window mode 746 [_imageView setImage:[NSImage imageNamed:@"Error"]]; 747 [_rightStatusTextField setStringValue:[NSSWF:NSLS(@"error opening image", @"")]]; 742 748 } 743 else if([_fullscreenWindow isKeyWindow]) { 744 // --- display image 749 750 } 751 else if([_fullscreenWindow isKeyWindow]) { 752 if(success) { 753 // --- display image in fullscreen 745 754 [_fullscreenImageView setImage:image]; 746 755 [self updateFullscreenStatus]; 747 756 [_timer setFireDate:[NSDate dateWithTimeIntervalSinceNow: 748 757 [FHSettings intForKey:FHAutoSwitchTime]]]; 749 750 next = YES; 758 } else { 759 // --- display error in fullscreen 760 [_fullscreenImageView setImage:[NSImage imageNamed:@"Error"]]; 761 [self updateFullscreenStatus]; 751 762 } 752 763 } 753 754 // --- load next image? 755 if(next) { 756 images = [_handler images]; 757 index = [images indexOfObject:file]; 758 759 if(index != NSNotFound) { 760 index++; 761 762 if(index < [images count]) 763 [self loadFile:[images objectAtIndex:index]]; 764 } 765 } 766 } else { 767 // --- couldn't open image, clear image view 768 if([[self window] isKeyWindow]) { 769 [_imageView setImage:[NSImage imageNamed:@"Error"]]; 770 [_rightStatusTextField setStringValue:[NSSWF:NSLS(@"error opening image", @"")]]; 771 } 772 else if([_fullscreenWindow isKeyWindow]) { 773 [_fullscreenImageView setImage:[NSImage imageNamed:@"Error"]]; 774 } 775 } 776 777 [image release]; 778 [self stopSpinning]; 764 } 765 766 // --- display thumbnail 767 frame = [_tableView frameOfCellAtColumn:0 row:[file index]]; 768 [_tableView setNeedsDisplayInRect:frame]; 779 769 } 780 770 … … 935 925 936 926 - (void)updateImage { 937 FHFile *file; 938 939 file = [self selectedFile]; 940 941 if(!file || [file isDirectory]) { 942 [_imageView setImage:NULL]; 943 [self updateRightStatus]; 944 } else { 945 [self loadFile:file]; 946 } 927 [self loadFile:[self selectedFile]]; 947 928 } 948 929 … … 1026 1007 [file name], 1027 1008 0x2014, 1028 [ [_handler images] indexOfObject:file] + 1,1009 [file index] + 1, 1029 1010 [_handler numberOfImages]]]; 1030 1011 }
