1/* 2 * BrowserController.m created by phr on 2000-10-21 09:35:35 +0000 3 * 4 * Project ImageViewer 5 * 6 * Created with ProjectCenter - http://www.gnustep.org 7 * 8 * $Id: BrowserController.m,v 1.9.2.1 2003/08/01 15:30:49 probert Exp $ 9 */ 10 11#include "BrowserController.h" 12#include "ImageCache.h" 13#include "ImageHolder.h" 14 15@implementation BrowserController 16 17- (id)initWithBrowser:(NSBrowser *)browser 18{ 19 NSAssert(browser, _(@"No browser provided!")); 20 21 if ((self = [super init])) 22 { 23 _browser = [browser retain]; 24 [_browser setDelegate:self]; 25 26 _files = [[NSMutableArray alloc] init]; 27 _imageCache = [ImageCache sharedCache]; 28 } 29 return self; 30} 31 32- (void)dealloc 33{ 34 RELEASE(_browser); 35 RELEASE(_files); 36 RELEASE(_path); 37 RELEASE(_imageView); 38 39 RELEASE(currentPath); 40 RELEASE(currentImgRep); 41 RELEASE(currentAttribs); 42 43 [super dealloc]; 44} 45 46- (id)delegate 47{ 48 return delegate; 49} 50 51- (void)setDelegate:(id)aDelegate 52{ 53 delegate = aDelegate; 54} 55 56- (void)setPath:(NSString *)path 57{ 58 NSFileManager *fm = [NSFileManager defaultManager]; 59 NSString *file; 60 NSArray *directoryContent = [fm directoryContentsAtPath:path]; 61 NSArray *fileTypes = [NSImage imageFileTypes]; 62 NSEnumerator *enumerator; 63 NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; 64 65 AUTORELEASE(_path); 66 _path = [path copy]; 67 68 [_files removeAllObjects]; 69 70 if( [[ud objectForKey:@"OpenRec"] isEqualToString:@"YES"] ) 71 { 72 enumerator = [fm enumeratorAtPath:path]; 73 } 74 else 75 { 76 enumerator = [directoryContent objectEnumerator]; 77 } 78 79 while(file = [enumerator nextObject]) 80 { 81 if ([fileTypes containsObject:[file pathExtension]]) 82 { 83 [_files addObject:file]; 84 } 85 } 86 87 [_files sortUsingSelector:@selector(compare:)]; 88} 89 90- (void)setImageView:(NSImageView *)imageView 91{ 92 AUTORELEASE(_imageView); 93 _imageView = RETAIN(imageView); 94} 95 96- (int)browser:(NSBrowser *)sender numberOfRowsInColumn:(int)column 97{ 98 if ( _files != nil ) 99 { 100 return [_files count]; 101 } 102 103 return 0; 104} 105 106- (void)browser:(NSBrowser *)sender willDisplayCell:(id)cell atRow:(int)row 107 column:(int)column 108{ 109 if ([sender isEqual:_browser]) 110 { 111 [cell setLeaf:YES]; 112 [cell setStringValue:[_files objectAtIndex:row]]; 113 } 114} 115 116- (BOOL)browser:(NSBrowser *)sender isColumnValid:(int)column 117{ 118} 119 120- (void)showImage:(NSBrowser *)sender 121{ 122 NSString *pth = [_path stringByAppendingPathComponent: 123 [[sender selectedCell] stringValue]]; 124 125 NSImage *image; 126 ImageHolder *holder; 127 NSRect vframe; 128 NSRect frame = NSMakeRect(0,0,10,10); 129 NSArray *array; 130 131 if (![[NSFileManager defaultManager] isReadableFileAtPath:pth]) 132 { 133 // Substitute 134 pth = [[NSBundle mainBundle] pathForResource:@"genericImage" 135 ofType:@"tiff"]; 136 } 137 138 AUTORELEASE(currentPath); 139 currentPath = [pth copy]; 140 141 AUTORELEASE(currentAttribs); 142 AUTORELEASE(currentImgRep); 143 144 if (!(holder = [_imageCache imageHolderForKey:pth])) 145 { 146 NSFileManager *fm = [NSFileManager defaultManager]; 147 148 image = [[NSImage alloc] initWithContentsOfFile:pth]; 149 150 // array = [NSImageRep imageRepsWithContentsOfFile:currentPath]; 151 if( image == nil ) 152 { 153 NSRunAlertPanel(_(@"Attention!"), 154 _(@"Couldn't load image at %@"), 155 _(@"Abort!"),nil,nil,pth); 156 157 currentPath = nil; 158 currentAttribs = nil; 159 currentImgRep = nil; 160 return; 161 } 162 else 163 { 164 [image setBackgroundColor: [NSColor darkGrayColor]]; 165 array = [image representations]; 166 currentAttribs = [fm fileAttributesAtPath:currentPath traverseLink:NO]; 167 168 holder = [[ImageHolder alloc] initWithImage:image 169 reps:array 170 attributes:currentAttribs]; 171 172 [_imageCache cacheImageHolder:holder forKey:pth]; 173 RELEASE(holder); 174 RELEASE(image); 175 } 176 177 } 178 else 179 { 180 array = [holder imageReps]; 181 image = [holder image]; 182 currentAttribs = [holder attributes]; 183 } 184 185 reps = [array count]; 186 currentImgRep = [array objectAtIndex:0]; 187 188 RETAIN(currentImgRep); 189 RETAIN(currentAttribs); 190 191 currentImgSize = [image size]; 192 frame.size = [image size]; 193 194 [_imageView setImage:image]; 195 [_imageView setFrame:frame]; 196 197 /* 198 vframe = [[_imageView superview] frame]; 199 if (frame.size.width < vframe.size.width) { 200 int wd = (vframe.size.width - frame.size.width)/2; 201 202 frame.origin.x += wd; 203 frame.size.width += wd; 204 } 205 206 if (frame.size.height < vframe.size.height) { 207 int wd = (vframe.size.height - frame.size.height)/2; 208 209 frame.origin.y += wd; 210 frame.size.height += wd; 211 } 212 */ 213 214 if(delegate && 215 [delegate respondsToSelector:@selector(browserSelectionDidChange:)]) 216 { 217 [delegate browserSelectionDidChange:self]; 218 } 219 220} 221 222- (NSString *)currentPath 223{ 224 return currentPath; 225} 226 227- (NSImageRep *)currentImgRep 228{ 229 return currentImgRep; 230} 231 232- (NSDictionary *)currentAttribs 233{ 234 return currentAttribs; 235} 236 237- (int)currentImgRepCount 238{ 239 return reps; 240} 241 242- (NSSize)currentImgSize 243{ 244 return currentImgSize; 245} 246 247@end 248 249