diff options
Diffstat (limited to 'Liaison/CopyController.m')
-rw-r--r-- | Liaison/CopyController.m | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/Liaison/CopyController.m b/Liaison/CopyController.m new file mode 100644 index 0000000..079e65a --- /dev/null +++ b/Liaison/CopyController.m @@ -0,0 +1,133 @@ +#import "CopyController.h" + +#import "DownloadStatusView.h" + +@implementation CopyController +- (id)init +{ + self = [super init]; + + theDownloads = [[NSMutableDictionary alloc] init]; + theWindowIsShowing = NO; + + return self; +} + +- (void)dealloc +{ + [theDownloads release]; + + [super dealloc]; +} + +- (void)awakeFromNib +{ + [theContentBox setFrame: NSMakeRect(0.0, 0.0, 0.0, 0.0)]; +} + +- (BOOL)windowShouldClose:(id)sender +{ + theWindowIsShowing = NO; + + return YES; +} + +- (NSRect)windowWillUseStandardFrame: (NSWindow *)aWindow + defaultFrame: (NSRect)defaultFrame +{ + NSRect stdFrame; + NSSize smallSize, boxSize; + + defaultFrame.origin.y += 64; + defaultFrame.size.height -= 64; + + stdFrame = [NSWindow contentRectForFrameRect: [aWindow frame] + styleMask: [aWindow styleMask]]; + + boxSize = [theContentBox bounds].size; + smallSize.width = MIN(defaultFrame.size.width, boxSize.width); + smallSize.height = MIN(defaultFrame.size.height, boxSize.height); + + // XXX + stdFrame.size.height = MAX(smallSize.height, 100.0); + stdFrame.size.width = MAX(smallSize.width, 220.0); + stdFrame = [NSWindow frameRectForContentRect: stdFrame + styleMask: [aWindow styleMask]]; + + return stdFrame; +} + +- (void)showWindow +{ + if (theWindowIsShowing == NO) { + [theWindow makeKeyAndOrderFront: self]; + theWindowIsShowing = YES; + } +} + +- (void)hideWindow +{ + if (theWindowIsShowing) { + [theWindow close]; + theWindowIsShowing = NO; + } +} + +- (void)addDownloadView: (NSView *)aView +{ + NSRect viewFrame; + NSSize contentSize, viewSize, boxSize; + + viewSize = [aView bounds].size; + boxSize = [theContentBox bounds].size; + contentSize.width = MAX(viewSize.width, boxSize.width); + contentSize.height = boxSize.height + viewSize.height; + [theContentBox setFrameSize: contentSize]; + + viewFrame.size = viewSize; + viewFrame.origin = NSMakePoint(0.0, boxSize.height); + [aView setFrame: viewFrame]; + + [[theScrollView contentView] addSubview: aView]; + //viewFrame.origin.y *= -1; + [aView scrollRectToVisible: viewFrame]; +} + +- (DownloadStatusView *)newDownloadView +{ + DownloadStatusView *tmpView; + NSData *viewData; + + viewData = [NSKeyedArchiver archivedDataWithRootObject: theTemplate]; + tmpView = [NSKeyedUnarchiver unarchiveObjectWithData: viewData]; + + return tmpView; +} + +- (DownloadStatusView *)statusViewForFileHandle: (LiFileHandle *)aFile; +{ + NSString *viewKey; + DownloadStatusView *downloadView; + + viewKey = [NSString stringWithFormat: @"%@:%@", [aFile storeID], [aFile fileID]]; + + downloadView = [theDownloads objectForKey: viewKey]; + if (downloadView == nil) { + downloadView = [self newDownloadView]; + [downloadView setFileHandle: aFile]; + + [theDownloads setObject: downloadView forKey: viewKey]; + + [self addDownloadView: downloadView]; + } + + [self showWindow]; + return downloadView; +} +@synthesize theTemplate; +@synthesize theWindowIsShowing; +@synthesize theScrollView; +@synthesize theContentBox; +@synthesize theWindow; +@synthesize theDownloads; +@end |