Changeset 4717
- Timestamp:
- 04/24/07 16:50:54 (1 year ago)
- Files:
-
- Footagehead/trunk/FHBrowserController.h (modified) (2 diffs)
- Footagehead/trunk/FHBrowserController.m (modified) (6 diffs)
- Footagehead/trunk/FHImageLoader.h (modified) (2 diffs)
- Footagehead/trunk/FHImageLoader.m (modified) (6 diffs)
- Footagehead/trunk/FHSlideshowController.h (modified) (1 diff)
- Footagehead/trunk/FHSlideshowController.m (modified) (9 diffs)
- Footagehead/trunk/FHWindowController.h (modified) (2 diffs)
- Footagehead/trunk/FHWindowController.m (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
Footagehead/trunk/FHBrowserController.h
r4716 r4717 30 30 31 31 @class FHTableView; 32 @class FHHandler; 32 33 33 34 @interface FHBrowserController : FHWindowController { … … 60 61 IBOutlet NSTextField *_screenAutoSwitchTextField; 61 62 63 FHHandler *_handler; 64 62 65 NSMutableDictionary *_toolbarItems; 63 66 Footagehead/trunk/FHBrowserController.m
r4716 r4717 419 419 self = [super initWithWindowNibName:@"Browser"]; 420 420 421 _imageLoader = [[FHImageLoader alloc] init]; 422 423 [[_imageLoader notificationCenter] 424 addObserver:self 425 selector:@selector(imageLoaderDidLoadImage:) 426 name:FHImageLoaderDidLoadImage]; 427 428 [[_imageLoader notificationCenter] 429 addObserver:self 430 selector:@selector(imageLoaderDidLoadThumbnail:) 431 name:FHImageLoaderDidLoadThumbnail]; 432 421 433 [self window]; 422 434 … … 427 439 428 440 - (void)dealloc { 441 [_handler release]; 442 443 [_imageLoader stopLoading]; 444 429 445 [_toolbarItems release]; 430 446 … … 550 566 551 567 552 - (void)imageLoaderDidLoadImageForFile:(FHFile *)file { 568 - (void)imageLoaderDidLoadImage:(NSNotification *)notification { 569 FHFile *file; 570 571 file = [notification object]; 572 553 573 if(file == [self selectedFile]) 554 574 [self showFile:file]; … … 557 577 558 578 559 - (void)imageLoaderDidLoadThumbnail ForFile:(FHFile *)file{579 - (void)imageLoaderDidLoadThumbnail:(NSNotification *)notification { 560 580 [_tableView reloadData]; 561 581 } … … 699 719 #pragma mark - 700 720 721 - (NSArray *)files { 722 return [_handler files]; 723 } 724 725 726 701 727 - (NSUInteger)selectedIndex { 702 728 NSInteger row; … … 1005 1031 [FHSettings setInt:[_screenAutoSwitchTextField intValue] forKey:FHFullscreenAutoSwitchTime]; 1006 1032 1007 controller = [[FHSlideshowController alloc] initWithHandler:_handler index:[self selectedIndex]]; 1033 controller = [[FHSlideshowController alloc] initWithImageLoader:_imageLoader 1034 index:[self selectedIndex] 1035 images:[_handler numberOfImages]]; 1008 1036 [controller showSlideshowWindow:self]; 1009 1037 [controller release]; Footagehead/trunk/FHImageLoader.h
r4716 r4717 29 29 @class FHFile; 30 30 31 @interface FHImageLoader : NSObject {32 id _delegate;31 @interface FHImageLoader : WIObject { 32 NSNotificationCenter *_notificationCenter; 33 33 34 NSConditionLock *_imageLock;35 NSConditionLock *_thumbnailLock;34 NSConditionLock *_imageLock; 35 NSConditionLock *_thumbnailLock; 36 36 37 NSUInteger _imageCounter;38 NSUInteger _thumbnailCounter;37 NSUInteger _imageCounter; 38 NSUInteger _thumbnailCounter; 39 39 40 BOOL _imageStop;41 BOOL _thumbnailStop;40 BOOL _imageStop; 41 BOOL _thumbnailStop; 42 42 43 NSArray *_files;44 NSUInteger _index;45 NSUInteger _pixels, _maxPixels;43 NSArray *_files; 44 NSUInteger _index; 45 NSUInteger _pixels, _maxPixels; 46 46 } 47 47 48 - (void)setDelegate:(id)delegate; 49 - (id)delegate; 48 49 #define FHImageLoaderDidLoadImage @"FHImageLoaderDidLoadImage" 50 #define FHImageLoaderDidLoadThumbnail @"FHImageLoaderDidLoadThumbnail" 51 52 53 - (NSNotificationCenter *)notificationCenter; 54 50 55 - (void)setFiles:(NSArray *)files; 51 56 - (NSArray *)files; … … 57 62 58 63 @end 59 60 61 @interface NSObject(FHImageLoaderDelegate)62 63 - (void)imageLoaderDidLoadImageForFile:(FHFile *)file;64 - (void)imageLoaderDidLoadThumbnailForFile:(FHFile *)file;65 66 @endFootagehead/trunk/FHImageLoader.m
r4716 r4717 39 39 self = [super init]; 40 40 41 _notificationCenter = [[NSNotificationCenter alloc] init]; 42 41 43 _imageLock = [[NSConditionLock alloc] initWithCondition:0]; 42 44 _thumbnailLock = [[NSConditionLock alloc] initWithCondition:0]; … … 55 57 56 58 - (void)dealloc { 59 [_notificationCenter release]; 60 57 61 [_imageLock release]; 58 62 [_thumbnailLock release]; … … 130 134 [image release]; 131 135 132 [_delegate performSelectorOnMainThread:@selector(imageLoaderDidLoadImageForFile:) 133 withObject:file 134 waitUntilDone:YES]; 136 [_notificationCenter mainThreadPostNotificationName:FHImageLoaderDidLoadImage object:file]; 135 137 136 138 next: … … 196 198 goto next; 197 199 198 image = [[ FHCache cache] thumbnailForURL:url];200 image = [[[FHCache cache] thumbnailForURL:url] retain]; 199 201 200 202 if(!image) { … … 209 211 [image release]; 210 212 211 [_delegate performSelectorOnMainThread:@selector(imageLoaderDidLoadThumbnailForFile:) 212 withObject:file 213 waitUntilDone:YES]; 213 [_notificationCenter mainThreadPostNotificationName:FHImageLoaderDidLoadThumbnail object:file]; 214 214 } 215 215 … … 241 241 #pragma mark - 242 242 243 - (void)setDelegate:(id)delegate { 244 _delegate = delegate; 245 } 246 247 248 249 - (id)delegate { 250 return _delegate; 243 - (NSNotificationCenter *)notificationCenter { 244 return _notificationCenter; 251 245 } 252 246 Footagehead/trunk/FHSlideshowController.h
r4716 r4717 34 34 FHSlideshowWindow *_slideshowWindow; 35 35 36 NSTimer *_timer; 37 36 38 NSUInteger _index; 39 NSUInteger _images; 37 40 } 38 41 39 42 40 - (id)initWith Handler:(FHHandler *)handler index:(NSUInteger)index;43 - (id)initWithImageLoader:(FHImageLoader *)imageLoader index:(NSUInteger)index images:(NSUInteger)images; 41 44 42 45 - (void)showSlideshowWindow:(id)sender; Footagehead/trunk/FHSlideshowController.m
r4716 r4717 34 34 #import "FHSettings.h" 35 35 36 @interface FHSlideshowController(Private)37 38 39 @end40 41 42 @implementation FHSlideshowController(Private)43 44 /*45 - (void)_loadFileTimer:(NSTimer *)timer {46 NSArray *files;47 int i, count;48 BOOL next = NO;49 50 // [self nextImage:self];51 52 i = [_tableView selectedRow];53 files = [_handler files];54 count = [files count];55 56 while(i < count - 1) {57 if(![[files objectAtIndex:i] isDirectory]) {58 next = YES;59 60 break;61 }62 }63 64 if(!next)65 [timer invalidate];66 }67 */68 69 @end70 71 72 73 36 @implementation FHSlideshowController 74 37 75 - (id)initWith Handler:(FHHandler *)handler index:(NSUInteger)index{38 - (id)initWithImageLoader:(FHImageLoader *)imageLoader index:(NSUInteger)index images:(NSUInteger)images { 76 39 self = [super initWithWindowNibName:@"Slideshow"]; 77 40 78 _ handler = [handler retain];41 _imageLoader = [imageLoader retain]; 79 42 _index = index; 80 81 [_imageLoader setFiles:[_handler files]]; 82 43 _images = images; 44 45 [[_imageLoader notificationCenter] 46 addObserver:self 47 selector:@selector(imageLoaderDidLoadImage:) 48 name:FHImageLoaderDidLoadImage]; 49 83 50 [self retain]; 84 51 [self window]; … … 91 58 - (void)dealloc { 92 59 [_slideshowWindow release]; 60 [_timer release]; 93 61 94 62 [super dealloc]; … … 99 67 #pragma mark - 100 68 101 - (void)imageLoaderDidLoadImageForFile:(FHFile *)file { 69 - (void)imageLoaderDidLoadImage:(NSNotification *)notification { 70 FHFile *file; 71 72 file = [notification object]; 73 102 74 if(file == [self selectedFile]) 103 75 [self showFile:file]; … … 145 117 [_imageView setBackgroundColor:color]; 146 118 147 [_imageLoader startLoadingImages]; 148 149 /* 150 // --- get screen 151 screenNumber = [FHSettings intForKey:FHFullscreenScreen]; 152 153 if((unsigned int) screenNumber > [[NSScreen screens] count]) 154 screenNumber = 0; 155 156 screen = [[NSScreen screens] objectAtIndex:screenNumber]; 157 screenRect = [screen frame]; 158 screenRect.origin.x = screenRect.origin.y = 0; 159 160 // --- create fullscreen window 161 _fullscreenWindow = [[FHSlideshowWindow alloc] 162 initWithContentRect:screenRect 163 styleMask:NSBorderlessWindowMask 164 backing:NSBackingStoreBuffered 165 defer:YES 166 screen:screen]; 167 168 [_fullscreenWindow setLevel:NSScreenSaverWindowLevel]; 169 [_fullscreenWindow setDelegate:self]; 170 [_fullscreenWindow setReleasedWhenClosed:YES]; 171 [_fullscreenWindow setTitle:[[self window] title]]; 172 173 [_fullscreenImageView setBackgroundColor:[_screenBackgroundPopUpButton representedObjectOfSelectedItem]]; 174 [_fullscreenImageView setImageScaling:[FHSettings intForKey:FHFullscreenImageScalingMethod]]; 175 [_fullscreenImageView setImageRotation:[_imageView imageRotation]]; 176 177 [_fullscreenPanel setFrame:screenRect display:NO]; 178 [_fullscreenWindow setContentView:[[_fullscreenPanel contentView] retain]]; 179 [[self window] orderOut:self]; 180 [_fullscreenWindow makeKeyAndOrderFront:self]; 181 [self _updateImage]; 182 183 if([FHSettings boolForKey:FHFullscreenAutoSwitch]) { 184 _loadImageTimer = [[NSTimer scheduledTimerWithTimeInterval:[FHSettings intForKey:FHFullscreenAutoSwitchTime] 185 target:self 186 selector:@selector(_loadFileTimer:) 187 userInfo:NULL 188 repeats:YES] retain]; 189 */ 119 [_imageLoader startLoadingImageAtIndex:[self selectedIndex]]; 120 121 if([FHSettings boolForKey:FHFullscreenAutoSwitch]) { 122 _timer = [[NSTimer scheduledTimerWithTimeInterval:[FHSettings intForKey:FHFullscreenAutoSwitchTime] 123 target:self 124 selector:@selector(switchTimer:) 125 userInfo:NULL 126 repeats:YES] retain]; 127 } 190 128 191 129 [self showFile:[self selectedFile]]; … … 195 133 196 134 - (void)windowWillClose:(NSNotification *)notification { 135 [_timer invalidate]; 136 197 137 [self autorelease]; 198 138 } … … 210 150 #pragma mark - 211 151 152 - (NSArray *)files { 153 return [_imageLoader files]; 154 } 155 156 157 212 158 - (NSUInteger)selectedIndex { 213 159 return _index; … … 219 165 _index = index; 220 166 167 [_timer setFireDate:[NSDate distantFuture]]; 168 221 169 [self showFile:[self selectedFile]]; 170 171 [_imageLoader startLoadingImageAtIndex:_index]; 172 } 173 174 175 176 - (void)showFile:(FHFile *)file { 177 [super showFile:file]; 178 179 [_timer setFireDate:[NSDate dateWithTimeIntervalSinceNow: 180 [FHSettings intForKey:FHFullscreenAutoSwitchTime]]]; 222 181 } 223 182 … … 230 189 231 190 file = [self selectedFile]; 232 files = [ _handlerfiles];191 files = [self files]; 233 192 count = [files count]; 234 193 … … 245 204 0x2014, 246 205 index, 247 [_handler numberOfImages]]]; 206 _images]]; 207 } 208 209 210 211 #pragma mark - 212 213 - (void)switchTimer:(NSTimer *)timer { 214 NSArray *files; 215 NSUInteger i, count; 216 BOOL next = NO; 217 218 [self nextImage:self]; 219 220 i = [self selectedIndex]; 221 files = [self files]; 222 count = [files count]; 223 224 while(i < count - 1) { 225 if(![[files objectAtIndex:i] isDirectory]) { 226 next = YES; 227 228 break; 229 } 230 } 231 232 if(!next) 233 [timer invalidate]; 248 234 } 249 235 Footagehead/trunk/FHWindowController.h
r4716 r4717 28 28 29 29 @class FHImageView; 30 @class FHImageLoader, FH Handler, FHFile;30 @class FHImageLoader, FHFile; 31 31 32 32 @interface FHWindowController : WIWindowController { … … 34 34 35 35 FHImageLoader *_imageLoader; 36 FHHandler *_handler;37 36 } 38 37 39 38 39 - (NSArray *)files; 40 40 - (FHFile *)fileAtIndex:(NSUInteger)index; 41 41 - (FHFile *)selectedFile; Footagehead/trunk/FHWindowController.m
r4716 r4717 35 35 @implementation FHWindowController 36 36 37 - (id)initWithWindowNibName:(NSString *)nibName {38 self = [super initWithWindowNibName:nibName];39 40 _imageLoader = [[FHImageLoader alloc] init];41 [_imageLoader setDelegate:self];42 43 return self;44 }45 46 47 48 37 - (void)dealloc { 49 [_imageLoader stopLoading]; 50 [_imageLoader release]; 51 52 [_handler release]; 53 38 [[_imageLoader notificationCenter] removeObserver:self]; 39 54 40 [super dealloc]; 55 41 } … … 59 45 #pragma mark - 60 46 47 - (NSArray *)files { 48 return NULL; 49 } 50 51 52 61 53 - (FHFile *)fileAtIndex:(NSUInteger)index { 62 return [[ _handlerfiles] objectAtIndex:index];54 return [[self files] objectAtIndex:index]; 63 55 } 64 56 … … 118 110 119 111 - (void)firstFile:(id)sender { 120 if([[ _handlerfiles] count] == 0)112 if([[self files] count] == 0) 121 113 return; 122 114 … … 129 121 NSUInteger count; 130 122 131 count = [[ _handlerfiles] count];123 count = [[self files] count]; 132 124 133 125 if(count == 0) … … 148 140 return; 149 141 150 files = [ _handlerfiles];142 files = [self files]; 151 143 count = [files count]; 152 144 newIndex = NSNotFound; … … 177 169 return; 178 170 179 files = [ _handlerfiles];171 files = [self files]; 180 172 count = [files count]; 181 173 … … 210 202 return; 211 203 212 files = [ _handlerfiles];204 files = [self files]; 213 205 count = [files count]; 214 206 newIndex = 0; … … 242 234 return; 243 235 244 files = [ _handlerfiles];236 files = [self files]; 245 237 count = [files count]; 246 238
