166
170
sortDescriptorPrototype]]];
168
172
//set table header tool tips
169
if ([NSApp isOnLeopardOrBetter])
171
[[fPeerTable tableColumnWithIdentifier: @"Encryption"] setHeaderToolTip: NSLocalizedString(@"Encrypted Connection",
172
"inspector -> peer table -> header tool tip")];
173
[[fPeerTable tableColumnWithIdentifier: @"Progress"] setHeaderToolTip: NSLocalizedString(@"Available",
174
"inspector -> peer table -> header tool tip")];
175
[[fPeerTable tableColumnWithIdentifier: @"UL To"] setHeaderToolTip: NSLocalizedString(@"Uploading To Peer",
176
"inspector -> peer table -> header tool tip")];
177
[[fPeerTable tableColumnWithIdentifier: @"DL From"] setHeaderToolTip: NSLocalizedString(@"Downloading From Peer",
178
"inspector -> peer table -> header tool tip")];
180
[[fWebSeedTable tableColumnWithIdentifier: @"DL From"] setHeaderToolTip: NSLocalizedString(@"Downloading From Web Seed",
181
"inspector -> web seed table -> header tool tip")];
185
[fTrackerAddRemoveControl sizeToFit];
186
[fTrackerAddRemoveControl setLabel: @"+" forSegment: TRACKER_ADD_TAG];
187
[fTrackerAddRemoveControl setLabel: @"-" forSegment: TRACKER_REMOVE_TAG];
173
[[fPeerTable tableColumnWithIdentifier: @"Encryption"] setHeaderToolTip: NSLocalizedString(@"Encrypted Connection",
174
"inspector -> peer table -> header tool tip")];
175
[[fPeerTable tableColumnWithIdentifier: @"Progress"] setHeaderToolTip: NSLocalizedString(@"Available",
176
"inspector -> peer table -> header tool tip")];
177
[[fPeerTable tableColumnWithIdentifier: @"UL To"] setHeaderToolTip: NSLocalizedString(@"Uploading To Peer",
178
"inspector -> peer table -> header tool tip")];
179
[[fPeerTable tableColumnWithIdentifier: @"DL From"] setHeaderToolTip: NSLocalizedString(@"Downloading From Peer",
180
"inspector -> peer table -> header tool tip")];
182
[[fWebSeedTable tableColumnWithIdentifier: @"DL From"] setHeaderToolTip: NSLocalizedString(@"Downloading From Web Seed",
183
"inspector -> web seed table -> header tool tip")];
190
185
//prepare for animating peer table and web seed table
191
186
NSRect webSeedTableFrame = [[fWebSeedTable enclosingScrollView] frame];
286
278
[fRatioField setStringValue: @""];
289
[fUploadLimitPopUp setEnabled: NO];
290
[fUploadLimitPopUp selectItemAtIndex: -1];
291
[fUploadLimitField setHidden: YES];
292
[fUploadLimitLabel setHidden: YES];
281
[fUploadLimitCheck setEnabled: NO];
282
[fUploadLimitCheck setState: NSOffState];
283
[fUploadLimitField setEnabled: NO];
284
[fUploadLimitLabel setEnabled: NO];
293
285
[fUploadLimitField setStringValue: @""];
295
[fDownloadLimitPopUp setEnabled: NO];
296
[fDownloadLimitPopUp selectItemAtIndex: -1];
297
[fDownloadLimitField setHidden: YES];
298
[fDownloadLimitLabel setHidden: YES];
287
[fDownloadLimitCheck setEnabled: NO];
288
[fDownloadLimitCheck setState: NSOffState];
289
[fDownloadLimitField setEnabled: NO];
290
[fDownloadLimitLabel setEnabled: NO];
299
291
[fDownloadLimitField setStringValue: @""];
293
[fGlobalLimitCheck setEnabled: NO];
294
[fGlobalLimitCheck setState: NSOffState];
296
[fPriorityPopUp setEnabled: NO];
297
[fPriorityPopUp selectItemAtIndex: -1];
301
299
[fRatioPopUp setEnabled: NO];
302
300
[fRatioPopUp selectItemAtIndex: -1];
303
301
[fRatioLimitField setHidden: YES];
533
537
NSEnumerator * enumerator = [fTorrents objectEnumerator];
534
538
Torrent * torrent = [enumerator nextObject]; //first torrent
536
NSInteger uploadSpeedMode = [torrent speedMode: YES],
540
NSInteger uploadUseSpeedLimit = [torrent usesSpeedLimit: YES] ? NSOnState : NSOffState,
537
541
uploadSpeedLimit = [torrent speedLimit: YES],
538
downloadSpeedMode = [torrent speedMode: NO],
539
downloadSpeedLimit = [torrent speedLimit: NO];
542
downloadUseSpeedLimit = [torrent usesSpeedLimit: NO] ? NSOnState : NSOffState,
543
downloadSpeedLimit = [torrent speedLimit: NO],
544
globalUseSpeedLimit = [torrent usesGlobalSpeedLimit] ? NSOnState : NSOffState;
541
546
while ((torrent = [enumerator nextObject])
542
&& (uploadSpeedMode != INVALID || uploadSpeedLimit != INVALID
543
|| downloadSpeedMode != INVALID || downloadSpeedLimit != INVALID))
547
&& (uploadUseSpeedLimit != NSMixedState || uploadSpeedLimit != INVALID
548
|| downloadUseSpeedLimit != NSMixedState || downloadSpeedLimit != INVALID
549
|| globalUseSpeedLimit != NSMixedState))
545
if (uploadSpeedMode != INVALID && uploadSpeedMode != [torrent speedMode: YES])
546
uploadSpeedMode = INVALID;
551
if (uploadUseSpeedLimit != NSMixedState && uploadUseSpeedLimit != ([torrent usesSpeedLimit: YES] ? NSOnState : NSOffState))
552
uploadUseSpeedLimit = NSMixedState;
548
554
if (uploadSpeedLimit != INVALID && uploadSpeedLimit != [torrent speedLimit: YES])
549
555
uploadSpeedLimit = INVALID;
551
if (downloadSpeedMode != INVALID && downloadSpeedMode != [torrent speedMode: NO])
552
downloadSpeedMode = INVALID;
557
if (downloadUseSpeedLimit != NSMixedState && downloadUseSpeedLimit != ([torrent usesSpeedLimit: NO] ? NSOnState : NSOffState))
558
downloadUseSpeedLimit = NSMixedState;
554
560
if (downloadSpeedLimit != INVALID && downloadSpeedLimit != [torrent speedLimit: NO])
555
561
downloadSpeedLimit = INVALID;
563
if (globalUseSpeedLimit != NSMixedState && globalUseSpeedLimit != ([torrent usesGlobalSpeedLimit] ? NSOnState : NSOffState))
564
globalUseSpeedLimit = NSMixedState;
558
567
//set upload view
560
if (uploadSpeedMode == TR_SPEEDLIMIT_SINGLE)
561
index = OPTION_POPUP_LIMIT;
562
else if (uploadSpeedMode == TR_SPEEDLIMIT_UNLIMITED)
563
index = OPTION_POPUP_NO_LIMIT;
564
else if (uploadSpeedMode == TR_SPEEDLIMIT_GLOBAL)
565
index = OPTION_POPUP_GLOBAL;
568
[fUploadLimitPopUp selectItemAtIndex: index];
569
[fUploadLimitPopUp setEnabled: YES];
568
[fUploadLimitCheck setState: uploadUseSpeedLimit];
569
[fUploadLimitCheck setEnabled: YES];
571
[fUploadLimitLabel setHidden: uploadSpeedMode != TR_SPEEDLIMIT_SINGLE];
572
[fUploadLimitField setHidden: uploadSpeedMode != TR_SPEEDLIMIT_SINGLE];
571
[fUploadLimitLabel setEnabled: uploadUseSpeedLimit == NSOnState];
572
[fUploadLimitField setEnabled: uploadUseSpeedLimit == NSOnState];
573
573
if (uploadSpeedLimit != INVALID)
574
574
[fUploadLimitField setIntValue: uploadSpeedLimit];
576
576
[fUploadLimitField setStringValue: @""];
578
578
//set download view
579
if (downloadSpeedMode == TR_SPEEDLIMIT_SINGLE)
580
index = OPTION_POPUP_LIMIT;
581
else if (downloadSpeedMode == TR_SPEEDLIMIT_UNLIMITED)
582
index = OPTION_POPUP_NO_LIMIT;
583
else if (downloadSpeedMode == TR_SPEEDLIMIT_GLOBAL)
584
index = OPTION_POPUP_GLOBAL;
587
[fDownloadLimitPopUp selectItemAtIndex: index];
588
[fDownloadLimitPopUp setEnabled: YES];
579
[fDownloadLimitCheck setState: downloadUseSpeedLimit];
580
[fDownloadLimitCheck setEnabled: YES];
590
[fDownloadLimitLabel setHidden: downloadSpeedMode != TR_SPEEDLIMIT_SINGLE];
591
[fDownloadLimitField setHidden: downloadSpeedMode != TR_SPEEDLIMIT_SINGLE];
582
[fDownloadLimitLabel setEnabled: downloadUseSpeedLimit == NSOnState];
583
[fDownloadLimitField setEnabled: downloadUseSpeedLimit == NSOnState];
592
584
if (downloadSpeedLimit != INVALID)
593
585
[fDownloadLimitField setIntValue: downloadSpeedLimit];
595
587
[fDownloadLimitField setStringValue: @""];
590
[fGlobalLimitCheck setState: globalUseSpeedLimit];
591
[fGlobalLimitCheck setEnabled: YES];
598
594
enumerator = [fTorrents objectEnumerator];
599
595
torrent = [enumerator nextObject]; //first torrent
614
if (checkRatio == NSOnState)
611
if (checkRatio == TR_RATIOLIMIT_SINGLE)
615
612
index = OPTION_POPUP_LIMIT;
616
else if (checkRatio == NSOffState)
613
else if (checkRatio == TR_RATIOLIMIT_UNLIMITED)
617
614
index = OPTION_POPUP_NO_LIMIT;
618
else if (checkRatio == NSMixedState)
615
else if (checkRatio == TR_RATIOLIMIT_GLOBAL)
619
616
index = OPTION_POPUP_GLOBAL;
622
619
[fRatioPopUp selectItemAtIndex: index];
623
620
[fRatioPopUp setEnabled: YES];
625
[fRatioLimitField setHidden: checkRatio != NSOnState];
622
[fRatioLimitField setHidden: checkRatio != TR_RATIOLIMIT_SINGLE];
626
623
if (ratioLimit != INVALID)
627
624
[fRatioLimitField setFloatValue: ratioLimit];
629
626
[fRatioLimitField setStringValue: @""];
629
enumerator = [fTorrents objectEnumerator];
630
torrent = [enumerator nextObject]; //first torrent
632
NSInteger priority = [torrent priority];
634
while ((torrent = [enumerator nextObject]) && priority != INVALID)
636
if (priority != INVALID && priority != [torrent priority])
641
if (priority == TR_PRI_HIGH)
642
index = OPTION_POPUP_PRIORITY_HIGH;
643
else if (priority == TR_PRI_NORMAL)
644
index = OPTION_POPUP_PRIORITY_NORMAL;
645
else if (priority == TR_PRI_LOW)
646
index = OPTION_POPUP_PRIORITY_LOW;
649
[fPriorityPopUp selectItemAtIndex: index];
650
[fPriorityPopUp setEnabled: YES];
632
653
enumerator = [fTorrents objectEnumerator];
633
654
torrent = [enumerator nextObject]; //first torrent
964
1000
NSDictionary * peer = [fPeers objectAtIndex: row];
965
1001
NSMutableArray * components = [NSMutableArray arrayWithCapacity: 5];
967
[components addObject: [NSString localizedStringWithFormat: NSLocalizedString(@"Progress: %.1f%%",
968
"Inspector -> Peers tab -> table row tooltip"), [[peer objectForKey: @"Progress"] floatValue] * 100.0]];
1003
CGFloat progress = [[peer objectForKey: @"Progress"] floatValue];
1004
NSString * progressString = [NSString localizedStringWithFormat: NSLocalizedString(@"Progress: %.1f%%",
1005
"Inspector -> Peers tab -> table row tooltip"), progress * 100.0];
1006
if (progress < 1.0 && [[peer objectForKey: @"Seed"] boolValue])
1007
progressString = [progressString stringByAppendingFormat: @" (%@)", NSLocalizedString(@"Partial Seed",
1008
"Inspector -> Peers tab -> table row tooltip")];
1009
[components addObject: progressString];
970
1011
if ([[peer objectForKey: @"Encryption"] boolValue])
971
1012
[components addObject: NSLocalizedString(@"Encrypted Connection", "Inspector -> Peers tab -> table row tooltip")];
998
1039
//determing status strings from flags
999
NSMutableArray * statusArray = [NSMutableArray arrayWithCapacity: 3];
1040
NSMutableArray * statusArray = [NSMutableArray arrayWithCapacity: 6];
1000
1041
NSString * flags = [peer objectForKey: @"Flags"];
1002
1043
if ([flags rangeOfString: @"D"].location != NSNotFound)
1003
1044
[statusArray addObject: NSLocalizedString(@"Currently downloading (interested and not choked)",
1004
1045
"Inspector -> peer -> status")];
1005
else if ([flags rangeOfString: @"d"].location != NSNotFound)
1046
if ([flags rangeOfString: @"d"].location != NSNotFound)
1006
1047
[statusArray addObject: NSLocalizedString(@"You want to download, but peer does not want to send (interested and choked)",
1007
1048
"Inspector -> peer -> status")];
1010
1049
if ([flags rangeOfString: @"U"].location != NSNotFound)
1011
1050
[statusArray addObject: NSLocalizedString(@"Currently uploading (interested and not choked)",
1012
1051
"Inspector -> peer -> status")];
1013
else if ([flags rangeOfString: @"u"].location != NSNotFound)
1052
if ([flags rangeOfString: @"u"].location != NSNotFound)
1014
1053
[statusArray addObject: NSLocalizedString(@"Peer wants you to upload, but you do not want to (interested and choked)",
1015
1054
"Inspector -> peer -> status")];
1018
1055
if ([flags rangeOfString: @"K"].location != NSNotFound)
1019
1056
[statusArray addObject: NSLocalizedString(@"Peer is unchoking you, but you are not interested",
1020
1057
"Inspector -> peer -> status")];
1022
1058
if ([flags rangeOfString: @"?"].location != NSNotFound)
1023
1059
[statusArray addObject: NSLocalizedString(@"You unchoked the peer, but the peer is not interested",
1024
1060
"Inspector -> peer -> status")];
1026
1062
if ([statusArray count] > 0)
1027
[components addObject: [@"\n" stringByAppendingString: [statusArray componentsJoinedByString: @"\n\n"]]];
1064
NSString * statusStrings = [statusArray componentsJoinedByString: @"\n\n"];
1065
[components addObject: [@"\n" stringByAppendingString: statusStrings]];
1029
1068
return [components componentsJoinedByString: @"\n"];
1164
1203
[[fTorrents objectAtIndex: 0] revealData];
1167
- (void) setSpeedMode: (id) sender
1169
BOOL upload = sender == fUploadLimitPopUp;
1171
switch ([sender indexOfSelectedItem])
1173
case OPTION_POPUP_LIMIT:
1174
mode = TR_SPEEDLIMIT_SINGLE;
1176
case OPTION_POPUP_NO_LIMIT:
1177
mode = TR_SPEEDLIMIT_UNLIMITED;
1179
case OPTION_POPUP_GLOBAL:
1180
mode = TR_SPEEDLIMIT_GLOBAL;
1187
NSEnumerator * enumerator = [fTorrents objectEnumerator];
1188
while ((torrent = [enumerator nextObject]))
1189
[torrent setSpeedMode: mode upload: upload];
1206
- (void) setFileFilterText: (id) sender
1208
[fFileController setFilterText: [sender stringValue]];
1211
- (void) setUseSpeedLimit: (id) sender
1213
const BOOL upload = sender == fUploadLimitCheck;
1215
if ([sender state] == NSMixedState)
1216
[sender setState: NSOnState];
1217
const BOOL limit = [sender state] == NSOnState;
1219
for (Torrent * torrent in fTorrents)
1220
[torrent setUseSpeedLimit: limit upload: upload];
1191
1222
NSTextField * field = upload ? fUploadLimitField : fDownloadLimitField;
1193
BOOL single = mode == TR_SPEEDLIMIT_SINGLE;
1194
[field setHidden: !single];
1223
[field setEnabled: limit];
1197
1226
[field selectText: self];
1198
[[self window] makeKeyAndOrderFront:self];
1227
[[self window] makeKeyAndOrderFront: self];
1201
1230
NSTextField * label = upload ? fUploadLimitLabel : fDownloadLimitLabel;
1202
[label setHidden: !single];
1231
[label setEnabled: limit];
1234
- (void) setUseGlobalSpeedLimit: (id) sender
1236
if ([sender state] == NSMixedState)
1237
[sender setState: NSOnState];
1238
const BOOL limit = [sender state] == NSOnState;
1240
for (Torrent * torrent in fTorrents)
1241
[torrent setUseGlobalSpeedLimit: limit];
1205
1244
- (void) setSpeedLimit: (id) sender
1207
BOOL upload = sender == fUploadLimitField;
1208
NSInteger limit = [sender intValue];
1211
NSEnumerator * enumerator = [fTorrents objectEnumerator];
1213
while ((torrent = [enumerator nextObject]))
1246
const BOOL upload = sender == fUploadLimitField;
1247
const NSInteger limit = [sender intValue];
1249
for (Torrent * torrent in fTorrents)
1214
1250
[torrent setSpeedLimit: limit upload: upload];
1217
1253
- (void) setRatioSetting: (id) sender
1219
1255
NSInteger setting;
1220
1257
switch ([sender indexOfSelectedItem])
1222
1259
case OPTION_POPUP_LIMIT:
1223
setting = NSOnState;
1260
setting = TR_RATIOLIMIT_SINGLE;
1225
1263
case OPTION_POPUP_NO_LIMIT:
1226
setting = NSOffState;
1264
setting = TR_RATIOLIMIT_UNLIMITED;
1228
1266
case OPTION_POPUP_GLOBAL:
1229
setting = NSMixedState;
1267
setting = TR_RATIOLIMIT_GLOBAL;
1236
NSEnumerator * enumerator = [fTorrents objectEnumerator];
1237
while ((torrent = [enumerator nextObject]))
1273
for (Torrent * torrent in fTorrents)
1238
1274
[torrent setRatioSetting: setting];
1240
BOOL single = setting == NSOnState;
1241
1276
[fRatioLimitField setHidden: !single];
1244
1279
[fRatioLimitField selectText: self];
1245
[[self window] makeKeyAndOrderFront:self];
1280
[[self window] makeKeyAndOrderFront: self];
1248
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateUI" object: nil];
1251
1284
- (void) setRatioLimit: (id) sender
1253
1286
CGFloat limit = [sender floatValue];
1256
NSEnumerator * enumerator = [fTorrents objectEnumerator];
1257
while ((torrent = [enumerator nextObject]))
1288
for (Torrent * torrent in fTorrents)
1258
1289
[torrent setRatioLimit: limit];
1292
- (void) setPriority: (id) sender
1294
tr_priority_t priority;
1295
switch ([sender indexOfSelectedItem])
1297
case OPTION_POPUP_PRIORITY_HIGH:
1298
priority = TR_PRI_HIGH;
1300
case OPTION_POPUP_PRIORITY_NORMAL:
1301
priority = TR_PRI_NORMAL;
1303
case OPTION_POPUP_PRIORITY_LOW:
1304
priority = TR_PRI_LOW;
1310
for (Torrent * torrent in fTorrents)
1311
[torrent setPriority: priority];
1313
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateUI" object: nil];
1261
1316
- (void) setPeersConnectLimit: (id) sender
1263
1318
NSInteger limit = [sender intValue];
1266
NSEnumerator * enumerator = [fTorrents objectEnumerator];
1267
while ((torrent = [enumerator nextObject]))
1320
for (Torrent * torrent in fTorrents)
1268
1321
[torrent setMaxPeerConnect: limit];
1272
1324
- (BOOL) control: (NSControl *) control textShouldBeginEditing: (NSText *) fieldEditor
1274
1326
[fInitialString release];