summaryrefslogtreecommitdiffstats
path: root/Liaison/CopyController.m
diff options
context:
space:
mode:
Diffstat (limited to 'Liaison/CopyController.m')
-rw-r--r--Liaison/CopyController.m133
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