1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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
|