this better work
This commit is contained in:
parent
a950a0afd8
commit
844341faef
|
@ -17,6 +17,7 @@ gtk/transmission-gtk
|
|||
libtransmission/*.a
|
||||
libtransmission/.depend
|
||||
libtransmission/version.h
|
||||
macosx/English.lproj/*~.nib
|
||||
macosx/Info.plist
|
||||
macosx/Transmission.app
|
||||
mk/config.mk
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@interface AboutWindowController : NSWindowController
|
||||
{
|
||||
IBOutlet NSTextView * fTextView, * fLicenseView;
|
||||
IBOutlet NSTextField * fVersionField, * fCopyrightField;
|
||||
IBOutlet NSPanel * fLicenseSheet;
|
||||
}
|
||||
|
||||
+ (AboutWindowController *) aboutController;
|
||||
|
||||
- (IBAction) showLicense: (id) sender;
|
||||
- (IBAction) hideLicense: (id) sender;
|
||||
|
||||
@end
|
|
@ -0,0 +1,72 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import "AboutWindowController.h"
|
||||
|
||||
@implementation AboutWindowController
|
||||
|
||||
AboutWindowController * fAboutBoxInstance = nil;
|
||||
+ (AboutWindowController *) aboutController
|
||||
{
|
||||
if (!fAboutBoxInstance)
|
||||
fAboutBoxInstance = [[self alloc] initWithWindowNibName: @"AboutWindow"];
|
||||
return fAboutBoxInstance;
|
||||
}
|
||||
|
||||
#warning make completely localized
|
||||
- (void) windowDidLoad
|
||||
{
|
||||
NSDictionary * info = [[NSBundle mainBundle] infoDictionary];
|
||||
[fVersionField setStringValue: [NSString stringWithFormat: @"%@ (%@)",
|
||||
[info objectForKey: @"CFBundleShortVersionString"], [info objectForKey: (NSString *)kCFBundleVersionKey]]];
|
||||
|
||||
[fCopyrightField setStringValue: [[NSBundle mainBundle] localizedStringForKey: @"NSHumanReadableCopyright"
|
||||
value: nil table: @"InfoPlist"]];
|
||||
|
||||
[[fTextView textStorage] setAttributedString: [[[NSAttributedString alloc] initWithPath:
|
||||
[[NSBundle mainBundle] pathForResource: @"Credits" ofType: @"rtf"] documentAttributes: nil] autorelease]];
|
||||
|
||||
[[self window] center];
|
||||
}
|
||||
|
||||
- (void) windowWillClose: (id)sender
|
||||
{
|
||||
[fAboutBoxInstance release];
|
||||
fAboutBoxInstance = nil;
|
||||
}
|
||||
|
||||
- (IBAction) showLicense: (id) sender
|
||||
{
|
||||
[fLicenseView setString: [NSString stringWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"LICENSE" ofType: nil]]];
|
||||
|
||||
[NSApp beginSheet: fLicenseSheet modalForWindow: [self window] modalDelegate: nil didEndSelector: nil contextInfo: nil];
|
||||
}
|
||||
|
||||
- (IBAction) hideLicense: (id) sender
|
||||
{
|
||||
[fLicenseSheet orderOut: nil];
|
||||
[NSApp endSheet: fLicenseSheet];
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,31 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface ActionMenuRatioToDisplayRatioTransformer : NSValueTransformer
|
||||
{
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,45 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import "ActionMenuRatioToDisplayRatioTransformer.h"
|
||||
|
||||
@implementation ActionMenuRatioToDisplayRatioTransformer
|
||||
|
||||
+ (Class) transformedValueClass
|
||||
{
|
||||
return [NSString class];
|
||||
}
|
||||
|
||||
+ (BOOL) allowsReverseTransformation
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (id) transformedValue: (id) value
|
||||
{
|
||||
return value == nil ? nil : [NSString stringWithFormat: NSLocalizedString(@"Stop at Ratio (%.2f)",
|
||||
"Action context menu -> ratio stop"), [value floatValue]];
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,31 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface ActionMenuSpeedToDisplayLimitTransformer : NSValueTransformer
|
||||
{
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,45 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import "ActionMenuSpeedToDisplayLimitTransformer.h"
|
||||
|
||||
@implementation ActionMenuSpeedToDisplayLimitTransformer
|
||||
|
||||
+ (Class) transformedValueClass
|
||||
{
|
||||
return [NSString class];
|
||||
}
|
||||
|
||||
+ (BOOL) allowsReverseTransformation
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (id) transformedValue: (id) value
|
||||
{
|
||||
return value == nil ? nil : [NSString stringWithFormat: NSLocalizedString(@"Limit (%d KB/s)",
|
||||
"Action context menu -> upload/download limit"), [value intValue]];
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,31 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@interface ActionPopUpButton : NSPopUpButton
|
||||
{
|
||||
NSImage * fImage, * fImagePressed;
|
||||
}
|
||||
@end
|
|
@ -0,0 +1,47 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import "ActionPopUpButton.h"
|
||||
|
||||
@implementation ActionPopUpButton
|
||||
|
||||
- (id) initWithCoder: (NSCoder *) coder
|
||||
{
|
||||
if ((self = [super initWithCoder: coder]))
|
||||
{
|
||||
fImage = [NSImage imageNamed: @"ActionButton.png"];
|
||||
[fImage setFlipped: YES];
|
||||
fImagePressed = [NSImage imageNamed: @"ActionButtonPressed.png"];
|
||||
[fImagePressed setFlipped: YES];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) drawRect: (NSRect) rect
|
||||
{
|
||||
NSImage * image = [[self cell] isHighlighted] ? fImagePressed : fImage;
|
||||
[image drawInRect: [self bounds] fromRect: NSZeroRect operation: NSCompositeSourceOver fraction: 1.0];
|
||||
}
|
||||
|
||||
@end
|
Binary file not shown.
|
@ -0,0 +1,50 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2006-2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef BADGER_H
|
||||
#define BADGER_H
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import <transmission.h>
|
||||
|
||||
@interface Badger : NSObject
|
||||
{
|
||||
tr_handle_t * fLib;
|
||||
|
||||
NSImage * fDockIcon, * fBadge, * fUploadBadge, * fDownloadBadge;
|
||||
NSDictionary * fAttributes;
|
||||
int fCompleted, fCompletedBadged;
|
||||
BOOL fSpeedBadge;
|
||||
}
|
||||
|
||||
- (id) initWithLib: (tr_handle_t *) lib;
|
||||
|
||||
- (void) updateBadge;
|
||||
- (void) incrementCompleted;
|
||||
- (void) clearCompleted;
|
||||
- (void) clearBadge;
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
|
@ -0,0 +1,239 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2006-2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import "Badger.h"
|
||||
#import "NSStringAdditions.h"
|
||||
|
||||
@interface Badger (Private)
|
||||
|
||||
- (void) badgeString: (NSString *) string forRect: (NSRect) rect;
|
||||
|
||||
@end
|
||||
|
||||
@implementation Badger
|
||||
|
||||
- (id) initWithLib: (tr_handle_t *) lib
|
||||
{
|
||||
if ((self = [super init]))
|
||||
{
|
||||
fLib = lib;
|
||||
|
||||
fCompleted = 0;
|
||||
fCompletedBadged = 0;
|
||||
fSpeedBadge = NO;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[fDockIcon release];
|
||||
[fAttributes release];
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void) updateBadge
|
||||
{
|
||||
//set completed badge to top right
|
||||
BOOL baseChange;
|
||||
if (baseChange = (fCompleted != fCompletedBadged))
|
||||
{
|
||||
fCompletedBadged = fCompleted;
|
||||
|
||||
//force image to reload - copy does not work
|
||||
NSImage * icon = [[NSImage imageNamed: @"NSApplicationIcon"] copy];
|
||||
NSSize iconSize = [icon size];
|
||||
|
||||
if (fDockIcon)
|
||||
[fDockIcon release];
|
||||
fDockIcon = [[NSImage alloc] initWithSize: iconSize];
|
||||
[fDockIcon addRepresentation: [icon bestRepresentationForDevice: nil]];
|
||||
[icon release];
|
||||
|
||||
if (fCompleted > 0)
|
||||
{
|
||||
if (!fBadge)
|
||||
fBadge = [NSImage imageNamed: @"Badge"];
|
||||
|
||||
NSRect badgeRect;
|
||||
badgeRect.size = [fBadge size];
|
||||
badgeRect.origin.x = iconSize.width - badgeRect.size.width;
|
||||
badgeRect.origin.y = iconSize.height - badgeRect.size.height;
|
||||
|
||||
[fDockIcon lockFocus];
|
||||
|
||||
//place badge
|
||||
[fBadge compositeToPoint: badgeRect.origin operation: NSCompositeSourceOver];
|
||||
|
||||
//ignore shadow of badge when placing string
|
||||
float badgeBottomExtra = 5.0;
|
||||
badgeRect.size.height -= badgeBottomExtra;
|
||||
badgeRect.origin.y += badgeBottomExtra;
|
||||
|
||||
//place badge text
|
||||
[self badgeString: [NSString stringWithFormat: @"%d", fCompleted] forRect: badgeRect];
|
||||
|
||||
[fDockIcon unlockFocus];
|
||||
}
|
||||
}
|
||||
|
||||
//set upload and download rate badges
|
||||
NSString * downloadRateString = nil, * uploadRateString = nil;
|
||||
|
||||
BOOL checkDownload = [[NSUserDefaults standardUserDefaults] boolForKey: @"BadgeDownloadRate"],
|
||||
checkUpload = [[NSUserDefaults standardUserDefaults] boolForKey: @"BadgeUploadRate"];
|
||||
if (checkDownload || checkUpload)
|
||||
{
|
||||
float downloadRate, uploadRate;
|
||||
tr_torrentRates(fLib, &downloadRate, &uploadRate);
|
||||
|
||||
if (checkDownload && downloadRate >= 0.1)
|
||||
downloadRateString = [NSString stringForSpeedAbbrev: downloadRate];
|
||||
if (checkUpload && uploadRate >= 0.1)
|
||||
uploadRateString = [NSString stringForSpeedAbbrev: uploadRate];
|
||||
}
|
||||
|
||||
NSImage * dockIcon = nil;
|
||||
BOOL speedChange;
|
||||
if ((speedChange = (uploadRateString || downloadRateString)))
|
||||
{
|
||||
if (!fDockIcon)
|
||||
fDockIcon = [[NSImage imageNamed: @"NSApplicationIcon"] copy];
|
||||
dockIcon = [fDockIcon copy];
|
||||
|
||||
if (!fUploadBadge)
|
||||
fUploadBadge = [NSImage imageNamed: @"UploadBadge"];
|
||||
if (!fDownloadBadge)
|
||||
fDownloadBadge = [NSImage imageNamed: @"DownloadBadge"];
|
||||
|
||||
NSRect badgeRect;
|
||||
badgeRect.size = [fUploadBadge size];
|
||||
badgeRect.origin = NSZeroPoint;
|
||||
|
||||
//ignore shadow of badge when placing string
|
||||
NSRect stringRect = badgeRect;
|
||||
float badgeBottomExtra = 2.0;
|
||||
stringRect.size.height -= badgeBottomExtra;
|
||||
stringRect.origin.y += badgeBottomExtra;
|
||||
|
||||
[dockIcon lockFocus];
|
||||
|
||||
if (uploadRateString)
|
||||
{
|
||||
//place badge
|
||||
[fUploadBadge compositeToPoint: badgeRect.origin operation: NSCompositeSourceOver];
|
||||
|
||||
//place badge text
|
||||
[self badgeString: uploadRateString forRect: stringRect];
|
||||
}
|
||||
|
||||
if (downloadRateString)
|
||||
{
|
||||
//download rate above upload rate
|
||||
if (uploadRateString)
|
||||
{
|
||||
float spaceBetween = badgeRect.size.height + 2.0;
|
||||
badgeRect.origin.y += spaceBetween;
|
||||
stringRect.origin.y += spaceBetween;
|
||||
}
|
||||
|
||||
//place badge
|
||||
[fDownloadBadge compositeToPoint: badgeRect.origin operation: NSCompositeSourceOver];
|
||||
|
||||
//place badge text
|
||||
[self badgeString: downloadRateString forRect: stringRect];
|
||||
}
|
||||
|
||||
[dockIcon unlockFocus];
|
||||
}
|
||||
|
||||
//update dock badge
|
||||
if (baseChange || fSpeedBadge || speedChange)
|
||||
{
|
||||
[NSApp setApplicationIconImage: dockIcon ? dockIcon : fDockIcon];
|
||||
if (dockIcon)
|
||||
[dockIcon release];
|
||||
|
||||
fSpeedBadge = speedChange;
|
||||
}
|
||||
}
|
||||
|
||||
- (void) incrementCompleted
|
||||
{
|
||||
fCompleted++;
|
||||
[self updateBadge];
|
||||
}
|
||||
|
||||
- (void) clearCompleted
|
||||
{
|
||||
if (fCompleted != 0)
|
||||
{
|
||||
fCompleted = 0;
|
||||
[self updateBadge];
|
||||
}
|
||||
}
|
||||
|
||||
- (void) clearBadge
|
||||
{
|
||||
fCompleted = 0;
|
||||
fCompletedBadged = 0;
|
||||
fSpeedBadge = NO;
|
||||
[NSApp setApplicationIconImage: [NSImage imageNamed: @"NSApplicationIcon"]];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation Badger (Private)
|
||||
|
||||
//dock icon must have locked focus
|
||||
- (void) badgeString: (NSString *) string forRect: (NSRect) rect
|
||||
{
|
||||
if (!fAttributes)
|
||||
{
|
||||
NSShadow * stringShadow = [[NSShadow alloc] init];
|
||||
[stringShadow setShadowOffset: NSMakeSize(2.0, -2.0)];
|
||||
[stringShadow setShadowBlurRadius: 4.0];
|
||||
|
||||
NSFont * boldFont = [[NSFontManager sharedFontManager] convertFont:
|
||||
[NSFont fontWithName: @"Helvetica" size: 28.0] toHaveTrait: NSBoldFontMask];
|
||||
|
||||
fAttributes = [[NSDictionary alloc] initWithObjectsAndKeys:
|
||||
[NSColor whiteColor], NSForegroundColorAttributeName,
|
||||
boldFont, NSFontAttributeName, stringShadow, NSShadowAttributeName, nil];
|
||||
|
||||
[stringShadow release];
|
||||
}
|
||||
|
||||
NSSize stringSize = [string sizeWithAttributes: fAttributes];
|
||||
|
||||
//string is in center of image
|
||||
rect.origin.x += (rect.size.width - stringSize.width) * 0.5;
|
||||
rect.origin.y += (rect.size.height - stringSize.height) * 0.5;
|
||||
|
||||
[string drawAtPoint: rect.origin withAttributes: fAttributes];
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,74 @@
|
|||
//
|
||||
// CTGradient.h
|
||||
//
|
||||
// Created by Chad Weider on 2/14/07.
|
||||
// Copyright (c) 2007 Chad Weider.
|
||||
// Some rights reserved: <http://creativecommons.org/licenses/by/2.5/>
|
||||
//
|
||||
// Version: 1.6
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
typedef struct _CTGradientElement
|
||||
{
|
||||
float red, green, blue, alpha;
|
||||
float position;
|
||||
|
||||
struct _CTGradientElement *nextElement;
|
||||
} CTGradientElement;
|
||||
|
||||
typedef enum _CTBlendingMode
|
||||
{
|
||||
CTLinearBlendingMode,
|
||||
CTChromaticBlendingMode,
|
||||
CTInverseChromaticBlendingMode
|
||||
} CTGradientBlendingMode;
|
||||
|
||||
|
||||
@interface CTGradient : NSObject <NSCopying, NSCoding>
|
||||
{
|
||||
CTGradientElement* elementList;
|
||||
CTGradientBlendingMode blendingMode;
|
||||
|
||||
CGFunctionRef gradientFunction;
|
||||
}
|
||||
|
||||
+ (id)gradientWithBeginningColor:(NSColor *)begin endingColor:(NSColor *)end;
|
||||
|
||||
+ (id)aquaSelectedGradient;
|
||||
+ (id)aquaNormalGradient;
|
||||
+ (id)aquaPressedGradient;
|
||||
|
||||
+ (id)unifiedSelectedGradient;
|
||||
+ (id)unifiedNormalGradient;
|
||||
+ (id)unifiedPressedGradient;
|
||||
+ (id)unifiedDarkGradient;
|
||||
|
||||
+ (id)sourceListSelectedGradient;
|
||||
+ (id)sourceListUnselectedGradient;
|
||||
|
||||
+ (id)rainbowGradient;
|
||||
+ (id)hydrogenSpectrumGradient;
|
||||
|
||||
- (CTGradient *)gradientWithAlphaComponent:(float)alpha;
|
||||
|
||||
- (void)addElement:(CTGradientElement*)newElement;
|
||||
|
||||
- (CTGradient *)addColorStop:(NSColor *)color atPosition:(float)position; //positions given relative to [0,1]
|
||||
- (CTGradient *)removeColorStopAtIndex:(unsigned)index;
|
||||
- (CTGradient *)removeColorStopAtPosition:(float)position;
|
||||
|
||||
- (CTGradientBlendingMode)blendingMode;
|
||||
- (NSColor *)colorStopAtIndex:(unsigned)index;
|
||||
- (NSColor *)colorAtPosition:(float)position;
|
||||
|
||||
|
||||
- (void)drawSwatchInRect:(NSRect)rect;
|
||||
- (void)fillRect:(NSRect)rect angle:(float)angle; //fills rect with axial gradient
|
||||
// angle in degrees
|
||||
- (void)radialFillRect:(NSRect)rect; //fills rect with radial gradient
|
||||
// gradient from center outwards
|
||||
- (void)fillBezierPath:(NSBezierPath *)path angle:(float)angle;
|
||||
- (void)radialFillBezierPath:(NSBezierPath *)path;
|
||||
|
||||
@end
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,49 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import "CTGradient.h"
|
||||
|
||||
@interface CTGradient (ActionBarView)
|
||||
+ (CTGradient *)actionNormalGradient;
|
||||
+ (CTGradient *)actionPressedGradient;
|
||||
@end
|
||||
|
||||
@interface CTGradient (ProgressBar)
|
||||
+ (CTGradient *)progressWhiteGradient;
|
||||
+ (CTGradient *)progressGrayGradient;
|
||||
+ (CTGradient *)progressLightGrayGradient;
|
||||
+ (CTGradient *)progressBlueGradient;
|
||||
+ (CTGradient *)progressDarkBlueGradient;
|
||||
+ (CTGradient *)progressGreenGradient;
|
||||
+ (CTGradient *)progressLightGreenGradient;
|
||||
+ (CTGradient *)progressDarkGreenGradient;
|
||||
+ (CTGradient *)progressYellowGradient;
|
||||
+ (CTGradient *)progressTransparentGradient;
|
||||
@end
|
||||
|
||||
@interface CTGradient (MiddleColour)
|
||||
+ (CTGradient *)gradientWithBeginningColor:(NSColor *)begin middleColor:(NSColor *)middle endingColor:(NSColor *)end;
|
||||
+ (CTGradient *)gradientWithBeginningColor:(NSColor *)begin middleColor1:(NSColor *)middle1
|
||||
middleColor2:(NSColor *)middle2 endingColor:(NSColor *)end;
|
||||
@end
|
|
@ -0,0 +1,540 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import "CTGradientAdditions.h"
|
||||
|
||||
@implementation CTGradient (ActionBar)
|
||||
|
||||
+ (CTGradient *)actionNormalGradient
|
||||
{
|
||||
CTGradient *newInstance = [[[self class] alloc] init];
|
||||
|
||||
CTGradientElement color1;
|
||||
color1.red = color1.green = color1.blue = 0.9;
|
||||
color1.alpha = 1.00;
|
||||
color1.position = 0;
|
||||
|
||||
CTGradientElement color2;
|
||||
color2.red = color2.green = color2.blue = 0.9;
|
||||
color2.alpha = 1.00;
|
||||
color2.position = 0.5;
|
||||
|
||||
CTGradientElement color3;
|
||||
color3.red = color3.green = color3.blue = 0.95;
|
||||
color3.alpha = 1.00;
|
||||
color3.position = 0.5;
|
||||
|
||||
CTGradientElement color4;
|
||||
color4.red = color4.green = color4.blue = 1.0;
|
||||
color4.alpha = 1.00;
|
||||
color4.position = 1;
|
||||
|
||||
[newInstance addElement:&color1];
|
||||
[newInstance addElement:&color2];
|
||||
[newInstance addElement:&color3];
|
||||
[newInstance addElement:&color4];
|
||||
|
||||
return [newInstance autorelease];
|
||||
}
|
||||
|
||||
+ (CTGradient *)actionPressedGradient
|
||||
{
|
||||
CTGradient *newInstance = [[[self class] alloc] init];
|
||||
|
||||
CTGradientElement color1;
|
||||
color1.red = color1.green = color1.blue = 0.80;
|
||||
color1.alpha = 1.00;
|
||||
color1.position = 0;
|
||||
|
||||
CTGradientElement color2;
|
||||
color2.red = color2.green = color2.blue = 0.64;
|
||||
color2.alpha = 1.00;
|
||||
color2.position = 11.5/23;
|
||||
|
||||
CTGradientElement color3;
|
||||
color3.red = color3.green = color3.blue = 0.80;
|
||||
color3.alpha = 1.00;
|
||||
color3.position = 11.5/23;
|
||||
|
||||
CTGradientElement color4;
|
||||
color4.red = color4.green = color4.blue = 0.77;
|
||||
color4.alpha = 1.00;
|
||||
color4.position = 1;
|
||||
|
||||
[newInstance addElement:&color1];
|
||||
[newInstance addElement:&color2];
|
||||
[newInstance addElement:&color3];
|
||||
[newInstance addElement:&color4];
|
||||
|
||||
return [newInstance autorelease];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation CTGradient (ProgressBar)
|
||||
|
||||
+ (CTGradient *)progressWhiteGradient
|
||||
{
|
||||
CTGradient *newInstance = [[[self class] alloc] init];
|
||||
|
||||
CTGradientElement color1;
|
||||
color1.red = color1.green = color1.blue = 0.95;
|
||||
color1.alpha = 1.00;
|
||||
color1.position = 0;
|
||||
|
||||
CTGradientElement color2;
|
||||
color2.red = color2.green = color2.blue = 0.83;
|
||||
color2.alpha = 1.00;
|
||||
color2.position = 11.5/23;
|
||||
|
||||
CTGradientElement color3;
|
||||
color3.red = color3.green = color3.blue = 0.95;
|
||||
color3.alpha = 1.00;
|
||||
color3.position = 11.5/23;
|
||||
|
||||
CTGradientElement color4;
|
||||
color4.red = color4.green = color4.blue = 0.92;
|
||||
color4.alpha = 1.00;
|
||||
color4.position = 1;
|
||||
|
||||
[newInstance addElement:&color1];
|
||||
[newInstance addElement:&color2];
|
||||
[newInstance addElement:&color3];
|
||||
[newInstance addElement:&color4];
|
||||
|
||||
return [newInstance autorelease];
|
||||
}
|
||||
|
||||
+ (CTGradient *)progressGrayGradient
|
||||
{
|
||||
CTGradient *newInstance = [[[self class] alloc] init];
|
||||
|
||||
CTGradientElement color1;
|
||||
color1.red = color1.green = color1.blue = 0.7;
|
||||
color1.alpha = 1.00;
|
||||
color1.position = 0;
|
||||
|
||||
CTGradientElement color2;
|
||||
color2.red = color2.green = color2.blue = 0.6;
|
||||
color2.alpha = 1.00;
|
||||
color2.position = 0.5;
|
||||
|
||||
CTGradientElement color3;
|
||||
color3.red = color3.green = color3.blue = 0.7;
|
||||
color3.alpha = 1.00;
|
||||
color3.position = 0.5;
|
||||
|
||||
CTGradientElement color4;
|
||||
color4.red = color4.green = color4.blue = 0.7;
|
||||
color4.alpha = 1.00;
|
||||
color4.position = 1;
|
||||
|
||||
[newInstance addElement:&color1];
|
||||
[newInstance addElement:&color2];
|
||||
[newInstance addElement:&color3];
|
||||
[newInstance addElement:&color4];
|
||||
|
||||
return [newInstance autorelease];
|
||||
}
|
||||
|
||||
+ (CTGradient *)progressLightGrayGradient
|
||||
{
|
||||
CTGradient *newInstance = [[[self class] alloc] init];
|
||||
|
||||
CTGradientElement color1;
|
||||
color1.red = color1.green = color1.blue = 0.87;
|
||||
color1.alpha = 1.00;
|
||||
color1.position = 0;
|
||||
|
||||
CTGradientElement color2;
|
||||
color2.red = color2.green = color2.blue = 0.754;
|
||||
color2.alpha = 1.00;
|
||||
color2.position = 0.5;
|
||||
|
||||
CTGradientElement color3;
|
||||
color3.red = color3.green = color3.blue = 0.87;
|
||||
color3.alpha = 1.00;
|
||||
color3.position = 0.5;
|
||||
|
||||
CTGradientElement color4;
|
||||
color4.red = color4.green = color4.blue = 0.87;
|
||||
color4.alpha = 1.00;
|
||||
color4.position = 1;
|
||||
|
||||
[newInstance addElement:&color1];
|
||||
[newInstance addElement:&color2];
|
||||
[newInstance addElement:&color3];
|
||||
[newInstance addElement:&color4];
|
||||
|
||||
return [newInstance autorelease];
|
||||
}
|
||||
|
||||
+ (CTGradient *)progressBlueGradient
|
||||
{
|
||||
CTGradient *newInstance = [[[self class] alloc] init];
|
||||
|
||||
CTGradientElement color1;
|
||||
color1.red = 0.416;
|
||||
color1.green = 0.788;
|
||||
color1.blue = 0.97;
|
||||
color1.alpha = 1.00;
|
||||
color1.position = 0;
|
||||
|
||||
CTGradientElement color2;
|
||||
color2.red = 0.274;
|
||||
color2.green = 0.52;
|
||||
color2.blue = 0.94;
|
||||
color2.alpha = 1.00;
|
||||
color2.position = 0.5;
|
||||
|
||||
CTGradientElement color3;
|
||||
color3.red = 0.372;
|
||||
color3.green = 0.635;
|
||||
color3.blue = 0.98;
|
||||
color3.alpha = 1.00;
|
||||
color3.position = 0.5;
|
||||
|
||||
CTGradientElement color4;
|
||||
color4.red = 0.396;
|
||||
color4.green = 0.66;
|
||||
color4.blue = 1.00;
|
||||
color4.alpha = 1.00;
|
||||
color4.position = 1;
|
||||
|
||||
[newInstance addElement:&color1];
|
||||
[newInstance addElement:&color2];
|
||||
[newInstance addElement:&color3];
|
||||
[newInstance addElement:&color4];
|
||||
|
||||
return [newInstance autorelease];
|
||||
}
|
||||
|
||||
+ (CTGradient *)progressDarkBlueGradient
|
||||
{
|
||||
CTGradient *newInstance = [[[self class] alloc] init];
|
||||
|
||||
CTGradientElement color1;
|
||||
color1.red = 0.616;
|
||||
color1.green = 0.722;
|
||||
color1.blue = 0.776;
|
||||
color1.alpha = 1.00;
|
||||
color1.position = 0;
|
||||
|
||||
CTGradientElement color2;
|
||||
color2.red = 0.525;
|
||||
color2.green = 0.631;
|
||||
color2.blue = 0.737;
|
||||
color2.alpha = 1.00;
|
||||
color2.position = 0.5;
|
||||
|
||||
CTGradientElement color3;
|
||||
color3.red = 0.651;
|
||||
color3.green = 0.725;
|
||||
color3.blue = 0.804;
|
||||
color3.alpha = 1.00;
|
||||
color3.position = 0.5;
|
||||
|
||||
CTGradientElement color4;
|
||||
color4.red = 0.659;
|
||||
color4.green = 0.733;
|
||||
color4.blue = 0.800;
|
||||
color4.alpha = 1.00;
|
||||
color4.position = 1;
|
||||
|
||||
[newInstance addElement:&color1];
|
||||
[newInstance addElement:&color2];
|
||||
[newInstance addElement:&color3];
|
||||
[newInstance addElement:&color4];
|
||||
|
||||
return [newInstance autorelease];
|
||||
}
|
||||
|
||||
+ (CTGradient *)progressGreenGradient
|
||||
{
|
||||
CTGradient *newInstance = [[[self class] alloc] init];
|
||||
|
||||
CTGradientElement color1;
|
||||
color1.red = 0.270;
|
||||
color1.green = 0.89;
|
||||
color1.blue = 0.35;
|
||||
color1.alpha = 1.00;
|
||||
color1.position = 0;
|
||||
|
||||
CTGradientElement color2;
|
||||
color2.red = 0.180;
|
||||
color2.green = 0.71;
|
||||
color2.blue = 0.23;
|
||||
color2.alpha = 1.00;
|
||||
color2.position = 0.5;
|
||||
|
||||
CTGradientElement color3;
|
||||
color3.red = 0.420;
|
||||
color3.green = 0.86;
|
||||
color3.blue = 0.32;
|
||||
color3.alpha = 1.00;
|
||||
color3.position = 0.5;
|
||||
|
||||
CTGradientElement color4;
|
||||
color4.red = 0.466;
|
||||
color4.green = 0.89;
|
||||
color4.blue = 0.34;
|
||||
color4.alpha = 1.00;
|
||||
color4.position = 1;
|
||||
|
||||
[newInstance addElement:&color1];
|
||||
[newInstance addElement:&color2];
|
||||
[newInstance addElement:&color3];
|
||||
[newInstance addElement:&color4];
|
||||
|
||||
return [newInstance autorelease];
|
||||
}
|
||||
|
||||
+ (CTGradient *)progressLightGreenGradient
|
||||
{
|
||||
CTGradient *newInstance = [[[self class] alloc] init];
|
||||
|
||||
CTGradientElement color1;
|
||||
color1.red = 0.522;
|
||||
color1.green = 0.894;
|
||||
color1.blue = 0.565;
|
||||
color1.alpha = 1.00;
|
||||
color1.position = 0;
|
||||
|
||||
CTGradientElement color2;
|
||||
color2.red = 0.373;
|
||||
color2.green = 0.780;
|
||||
color2.blue = 0.408;
|
||||
color2.alpha = 1.00;
|
||||
color2.position = 0.5;
|
||||
|
||||
CTGradientElement color3;
|
||||
color3.red = 0.659;
|
||||
color3.green = 0.918;
|
||||
color3.blue = 0.604;
|
||||
color3.alpha = 1.00;
|
||||
color3.position = 0.5;
|
||||
|
||||
CTGradientElement color4;
|
||||
color4.red = 0.678;
|
||||
color4.green = 0.929;
|
||||
color4.blue = 0.608;
|
||||
color4.alpha = 1.00;
|
||||
color4.position = 1;
|
||||
|
||||
[newInstance addElement:&color1];
|
||||
[newInstance addElement:&color2];
|
||||
[newInstance addElement:&color3];
|
||||
[newInstance addElement:&color4];
|
||||
|
||||
return [newInstance autorelease];
|
||||
}
|
||||
|
||||
+ (CTGradient *)progressDarkGreenGradient
|
||||
{
|
||||
CTGradient *newInstance = [[[self class] alloc] init];
|
||||
|
||||
CTGradientElement color1;
|
||||
color1.red = 0.627;
|
||||
color1.green = 0.714;
|
||||
color1.blue = 0.639;
|
||||
color1.alpha = 1.00;
|
||||
color1.position = 0;
|
||||
|
||||
CTGradientElement color2;
|
||||
color2.red = 0.545;
|
||||
color2.green = 0.635;
|
||||
color2.blue = 0.561;
|
||||
color2.alpha = 1.00;
|
||||
color2.position = 0.5;
|
||||
|
||||
CTGradientElement color3;
|
||||
color3.red = 0.690;
|
||||
color3.green = 0.745;
|
||||
color3.blue = 0.675;
|
||||
color3.alpha = 1.00;
|
||||
color3.position = 0.5;
|
||||
|
||||
CTGradientElement color4;
|
||||
color4.red = 0.694;
|
||||
color4.green = 0.741;
|
||||
color4.blue = 0.678;
|
||||
color4.alpha = 1.00;
|
||||
color4.position = 1;
|
||||
|
||||
[newInstance addElement:&color1];
|
||||
[newInstance addElement:&color2];
|
||||
[newInstance addElement:&color3];
|
||||
[newInstance addElement:&color4];
|
||||
|
||||
return [newInstance autorelease];
|
||||
}
|
||||
|
||||
+ (CTGradient *)progressYellowGradient
|
||||
{
|
||||
CTGradient *newInstance = [[[self class] alloc] init];
|
||||
|
||||
CTGradientElement color1;
|
||||
color1.red = 0.933;
|
||||
color1.green = 0.831;
|
||||
color1.blue = 0.227;
|
||||
color1.alpha = 1.00;
|
||||
color1.position = 1;
|
||||
|
||||
CTGradientElement color2;
|
||||
color2.red = 0.965;
|
||||
color2.green = 0.737;
|
||||
color2.blue = 0.086;
|
||||
color2.alpha = 1.00;
|
||||
color2.position = 0.5;
|
||||
|
||||
CTGradientElement color3;
|
||||
color3.red = 0.965;
|
||||
color3.green = 0.831;
|
||||
color3.blue = 0.169;
|
||||
color3.alpha = 1.00;
|
||||
color3.position = 0.5;
|
||||
|
||||
CTGradientElement color4;
|
||||
color4.red = 0.965;
|
||||
color4.green = 0.831;
|
||||
color4.blue = 0.169;
|
||||
color4.alpha = 1.00;
|
||||
color4.position = 0;
|
||||
|
||||
[newInstance addElement:&color1];
|
||||
[newInstance addElement:&color2];
|
||||
[newInstance addElement:&color3];
|
||||
[newInstance addElement:&color4];
|
||||
|
||||
return [newInstance autorelease];
|
||||
}
|
||||
|
||||
+ (CTGradient *)progressTransparentGradient
|
||||
{
|
||||
CTGradient *newInstance = [[[self class] alloc] init];
|
||||
|
||||
CTGradientElement color1;
|
||||
color1.red = color1.green = color1.blue = 1.0;
|
||||
color1.alpha = 0.65;
|
||||
color1.position = 0;
|
||||
|
||||
CTGradientElement color2;
|
||||
color2.red = color2.green = color2.blue = 1.0;
|
||||
color2.alpha = 0.05;
|
||||
color2.position = 0.5;
|
||||
|
||||
CTGradientElement color3;
|
||||
color3.red = color3.green = color3.blue = 1.0;
|
||||
color3.alpha = 0.4;
|
||||
color3.position = 0.5;
|
||||
|
||||
CTGradientElement color4;
|
||||
color4.red = color4.green = color4.blue = 1.0;
|
||||
color4.alpha = 0.4;
|
||||
color4.position = 1;
|
||||
|
||||
[newInstance addElement:&color1];
|
||||
[newInstance addElement:&color2];
|
||||
[newInstance addElement:&color3];
|
||||
[newInstance addElement:&color4];
|
||||
|
||||
return [newInstance autorelease];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation CTGradient (MiddleColour)
|
||||
|
||||
+ (CTGradient *)gradientWithBeginningColor:(NSColor *)begin middleColor:(NSColor *)middle endingColor:(NSColor *)end
|
||||
{
|
||||
CTGradient *newInstance = [[[self class] alloc] init];
|
||||
|
||||
CTGradientElement color1;
|
||||
CTGradientElement color2;
|
||||
CTGradientElement color3;
|
||||
|
||||
[[begin colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color1.red
|
||||
green:&color1.green
|
||||
blue:&color1.blue
|
||||
alpha:&color1.alpha];
|
||||
[[middle colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color2.red
|
||||
green:&color2.green
|
||||
blue:&color2.blue
|
||||
alpha:&color2.alpha];
|
||||
[[end colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color3.red
|
||||
green:&color3.green
|
||||
blue:&color3.blue
|
||||
alpha:&color3.alpha];
|
||||
color1.position = 0;
|
||||
color2.position = 0.5;
|
||||
color3.position = 1;
|
||||
|
||||
[newInstance addElement:&color1];
|
||||
[newInstance addElement:&color2];
|
||||
[newInstance addElement:&color3];
|
||||
|
||||
return [newInstance autorelease];
|
||||
}
|
||||
|
||||
+ (CTGradient *)gradientWithBeginningColor:(NSColor *)begin middleColor1:(NSColor *)middle1
|
||||
middleColor2:(NSColor *)middle2 endingColor:(NSColor *)end
|
||||
{
|
||||
CTGradient *newInstance = [[[self class] alloc] init];
|
||||
|
||||
CTGradientElement color1;
|
||||
CTGradientElement color2;
|
||||
CTGradientElement color3;
|
||||
CTGradientElement color4;
|
||||
|
||||
[[begin colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color1.red
|
||||
green:&color1.green
|
||||
blue:&color1.blue
|
||||
alpha:&color1.alpha];
|
||||
[[middle1 colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color2.red
|
||||
green:&color2.green
|
||||
blue:&color2.blue
|
||||
alpha:&color2.alpha];
|
||||
[[middle2 colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color3.red
|
||||
green:&color3.green
|
||||
blue:&color3.blue
|
||||
alpha:&color3.alpha];
|
||||
[[end colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&color4.red
|
||||
green:&color4.green
|
||||
blue:&color4.blue
|
||||
alpha:&color4.alpha];
|
||||
color1.position = 0;
|
||||
color2.position = 0.5;
|
||||
color3.position = 0.5;
|
||||
color4.position = 1;
|
||||
|
||||
[newInstance addElement:&color1];
|
||||
[newInstance addElement:&color2];
|
||||
[newInstance addElement:&color3];
|
||||
[newInstance addElement:&color4];
|
||||
|
||||
return [newInstance autorelease];
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,241 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2005-2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef CONTROLLER_H
|
||||
#define CONTROLLER_H
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import <transmission.h>
|
||||
#import "PrefsController.h"
|
||||
#import "InfoWindowController.h"
|
||||
#import "MessageWindowController.h"
|
||||
#import "DragOverlayWindow.h"
|
||||
#import "Badger.h"
|
||||
#import "ImageBackgroundView.h"
|
||||
#import "FilterBarView.h"
|
||||
#import "IPCController.h"
|
||||
|
||||
#import <Growl/Growl.h>
|
||||
|
||||
@class TorrentTableView;
|
||||
|
||||
@interface Controller : NSObject <GrowlApplicationBridgeDelegate>
|
||||
{
|
||||
tr_handle_t * fLib;
|
||||
|
||||
NSMutableArray * fTorrents, * fDisplayedTorrents;
|
||||
|
||||
PrefsController * fPrefsController;
|
||||
NSUserDefaults * fDefaults;
|
||||
InfoWindowController * fInfoController;
|
||||
MessageWindowController * fMessageController;
|
||||
IPCController * fIPCController;
|
||||
|
||||
IBOutlet NSWindow * fWindow;
|
||||
DragOverlayWindow * fOverlayWindow;
|
||||
IBOutlet NSScrollView * fScrollView;
|
||||
IBOutlet TorrentTableView * fTableView;
|
||||
|
||||
IBOutlet NSMenuItem * fOpenIgnoreDownloadFolder;
|
||||
|
||||
IBOutlet ImageBackgroundView * fBottomBar;
|
||||
IBOutlet NSButton * fActionButton, * fSpeedLimitButton;
|
||||
NSTimer * fSpeedLimitTimer;
|
||||
|
||||
IBOutlet ImageBackgroundView * fStatusBar;
|
||||
IBOutlet NSTextField * fTotalDLField, * fTotalULField, * fTotalTorrentsField;
|
||||
|
||||
IBOutlet NSMenuItem * fNameSortItem, * fStateSortItem, * fProgressSortItem,
|
||||
* fTrackerSortItem, * fDateSortItem, * fOrderSortItem,
|
||||
* fNameSortActionItem, * fStateSortActionItem, * fProgressSortActionItem,
|
||||
* fTrackerSortActionItem, * fDateSortActionItem, * fOrderSortActionItem;
|
||||
|
||||
IBOutlet FilterBarView * fFilterBar;
|
||||
IBOutlet FilterBarButton * fNoFilterButton, * fDownloadFilterButton,
|
||||
* fSeedFilterButton, * fPauseFilterButton;
|
||||
IBOutlet NSSearchField * fSearchFilterField;
|
||||
IBOutlet NSMenuItem * fNextFilterItem, * fPrevFilterItem;
|
||||
|
||||
IBOutlet NSMenuItem * fNextInfoTabItem, * fPrevInfoTabItem;
|
||||
|
||||
IBOutlet NSMenu * fUploadMenu, * fDownloadMenu;
|
||||
IBOutlet NSMenuItem * fUploadLimitItem, * fUploadNoLimitItem,
|
||||
* fDownloadLimitItem, * fDownloadNoLimitItem;
|
||||
|
||||
IBOutlet NSWindow * fURLSheetWindow;
|
||||
IBOutlet NSTextField * fURLSheetTextField;
|
||||
|
||||
io_connect_t fRootPort;
|
||||
NSTimer * fTimer;
|
||||
|
||||
IBOutlet SUUpdater * fUpdater;
|
||||
BOOL fUpdateInProgress;
|
||||
|
||||
Badger * fBadger;
|
||||
IBOutlet NSMenu * fDockMenu;
|
||||
|
||||
NSMutableArray * fAutoImportedNames;
|
||||
NSTimer * fAutoImportTimer;
|
||||
|
||||
NSMutableDictionary * fPendingTorrentDownloads;
|
||||
NSMutableArray * fTempTorrentFiles;
|
||||
|
||||
BOOL fRemoteQuit;
|
||||
}
|
||||
|
||||
- (void) openFiles: (NSArray *) filenames;
|
||||
- (void) openFiles: (NSArray *) filenames forcePath: (NSString *) path ignoreDownloadFolder: (BOOL) ignore
|
||||
deleteTorrentFile: (torrentFileState) deleteTorrent;
|
||||
- (void) openCreatedFile: (NSNotification *) notification;
|
||||
- (void) openFilesWithDict: (NSDictionary *) dictionary;
|
||||
- (void) openFilesAsk: (NSMutableArray *) files deleteTorrentFile: (torrentFileState) deleteTorrent;
|
||||
- (void) openFilesAskWithDict: (NSDictionary *) dictionary;
|
||||
- (void) openShowSheet: (id) sender;
|
||||
|
||||
- (void) duplicateOpenAlert: (NSString *) name;
|
||||
|
||||
- (void) openURL: (NSURL *) torrentURL;
|
||||
- (void) openURLEndSheet: (id) sender;
|
||||
- (void) openURLCancelEndSheet: (id) sender;
|
||||
- (void) openURLShowSheet: (id) sender;
|
||||
|
||||
- (void) quitSheetDidEnd: (NSWindow *) sheet returnCode: (int) returnCode contextInfo: (void *) contextInfo;
|
||||
|
||||
- (void) createFile: (id) sender;
|
||||
|
||||
- (void) resumeSelectedTorrents: (id) sender;
|
||||
- (void) resumeAllTorrents: (id) sender;
|
||||
- (void) resumeTorrents: (NSArray *) torrents;
|
||||
|
||||
- (void) resumeSelectedTorrentsNoWait: (id) sender;
|
||||
- (void) resumeWaitingTorrents: (id) sender;
|
||||
- (void) resumeTorrentsNoWait: (NSArray *) torrents;
|
||||
|
||||
- (void) stopSelectedTorrents: (id) sender;
|
||||
- (void) stopAllTorrents: (id) sender;
|
||||
- (void) stopTorrents: (NSArray *) torrents;
|
||||
|
||||
- (void) removeTorrents: (NSArray *) torrents
|
||||
deleteData: (BOOL) deleteData deleteTorrent: (BOOL) deleteData;
|
||||
- (void) removeSheetDidEnd: (NSWindow *) sheet returnCode: (int) returnCode
|
||||
contextInfo: (NSDictionary *) dict;
|
||||
- (void) confirmRemoveTorrents: (NSArray *) torrents
|
||||
deleteData: (BOOL) deleteData deleteTorrent: (BOOL) deleteTorrent;
|
||||
- (void) removeNoDelete: (id) sender;
|
||||
- (void) removeDeleteData: (id) sender;
|
||||
- (void) removeDeleteTorrent: (id) sender;
|
||||
- (void) removeDeleteDataAndTorrent: (id) sender;
|
||||
|
||||
- (void) moveDataFiles: (id) sender;
|
||||
- (void) moveDataFileChoiceClosed: (NSOpenPanel *) panel returnCode: (int) code contextInfo: (NSArray *) torrents;
|
||||
|
||||
- (void) copyTorrentFiles: (id) sender;
|
||||
- (void) copyTorrentFileForTorrents: (NSMutableArray *) torrents;
|
||||
|
||||
- (void) revealFile: (id) sender;
|
||||
|
||||
- (void) announceSelectedTorrents: (id) sender;
|
||||
|
||||
- (void) resetCacheForSelectedTorrents: (id) sender;
|
||||
|
||||
- (void) showPreferenceWindow: (id) sender;
|
||||
|
||||
- (void) showAboutWindow: (id) sender;
|
||||
|
||||
- (void) showInfo: (id) sender;
|
||||
- (void) setInfoTab: (id) sender;
|
||||
|
||||
- (void) showMessageWindow: (id) sender;
|
||||
|
||||
- (void) updateControlTint: (NSNotification *) notification;
|
||||
|
||||
- (void) updateUI;
|
||||
|
||||
- (void) updateTorrentsInQueue;
|
||||
- (int) numToStartFromQueue: (BOOL) downloadQueue;
|
||||
|
||||
- (void) torrentFinishedDownloading: (NSNotification *) notification;
|
||||
- (void) torrentRestartedDownloading: (NSNotification *) notification;
|
||||
|
||||
- (void) updateTorrentHistory;
|
||||
|
||||
- (void) sortTorrents;
|
||||
- (void) sortTorrentsIgnoreSelected;
|
||||
- (void) setSort: (id) sender;
|
||||
- (void) setSortReverse: (id) sender;
|
||||
- (void) applyFilter: (id) sender;
|
||||
- (void) setFilter: (id) sender;
|
||||
- (void) setFilterSearchType: (id) sender;
|
||||
- (void) switchFilter: (id) sender;
|
||||
|
||||
- (void) applySpeedLimit: (id) sender;
|
||||
- (void) toggleSpeedLimit: (id) sender;
|
||||
- (void) autoSpeedLimitChange: (NSNotification *) notification;
|
||||
- (void) autoSpeedLimit;
|
||||
|
||||
- (void) setLimitGlobalEnabled: (id) sender;
|
||||
- (void) setQuickLimitGlobal: (id) sender;
|
||||
|
||||
- (void) setQuickRatioGlobal: (id) sender;
|
||||
|
||||
- (void) torrentStoppedForRatio: (NSNotification *) notification;
|
||||
|
||||
- (void) changeAutoImport;
|
||||
- (void) checkAutoImportDirectory;
|
||||
|
||||
- (void) beginCreateFile: (NSNotification *) notification;
|
||||
|
||||
- (void) sleepCallBack: (natural_t) messageType argument: (void *) messageArgument;
|
||||
|
||||
- (void) torrentTableViewSelectionDidChange: (NSNotification *) notification;
|
||||
|
||||
- (void) toggleSmallView: (id) sender;
|
||||
|
||||
- (void) toggleStatusBar: (id) sender;
|
||||
- (void) showStatusBar: (BOOL) show animate: (BOOL) animate;
|
||||
- (void) toggleFilterBar: (id) sender;
|
||||
- (void) showFilterBar: (BOOL) show animate: (BOOL) animate;
|
||||
|
||||
- (void) toggleAdvancedBar: (id) sender;
|
||||
|
||||
- (void) doNothing: (id) sender; //needed for menu items that use bindings with no associated action
|
||||
|
||||
- (void) updateDockBadge: (NSNotification *) notification;
|
||||
|
||||
- (void) setWindowSizeToFit;
|
||||
- (NSRect) sizedWindowFrame;
|
||||
|
||||
- (void) showMainWindow: (id) sender;
|
||||
|
||||
- (void) linkHomepage: (id) sender;
|
||||
- (void) linkForums: (id) sender;
|
||||
- (void) linkDonate: (id) sender;
|
||||
|
||||
- (void) prepareForUpdate: (NSNotification *) notification;
|
||||
|
||||
- (NSString *) applicationSupportFolder;
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,59 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "transmission.h"
|
||||
#import "makemeta.h"
|
||||
|
||||
@interface CreatorWindowController : NSWindowController
|
||||
{
|
||||
IBOutlet NSImageView * fIconView;
|
||||
IBOutlet NSTextField * fNameField, * fStatusField, * fPiecesField, * fTrackerField, * fLocationField;
|
||||
IBOutlet NSTextView * fCommentView;
|
||||
IBOutlet NSButton * fPrivateCheck, * fOpenCheck;
|
||||
|
||||
IBOutlet NSView * fProgressView;
|
||||
IBOutlet NSProgressIndicator * fProgressIndicator;
|
||||
|
||||
tr_metainfo_builder_t * fInfo;
|
||||
NSString * fPath, * fLocation;
|
||||
BOOL fOpenTorrent;
|
||||
|
||||
NSTimer * fTimer;
|
||||
BOOL fStarted;
|
||||
|
||||
NSUserDefaults * fDefaults;
|
||||
}
|
||||
|
||||
+ (void) createTorrentFile: (tr_handle_t *) handle;
|
||||
+ (void) createTorrentFile: (tr_handle_t *) handle forFile: (NSString *) file;
|
||||
|
||||
- (id) initWithWindowNibName: (NSString *) name handle: (tr_handle_t *) handle path: (NSString *) path;
|
||||
|
||||
- (void) setLocation: (id) sender;
|
||||
- (void) create: (id) sender;
|
||||
- (void) cancelCreateWindow: (id) sender;
|
||||
- (void) cancelCreateProgress: (id) sender;
|
||||
|
||||
@end
|
|
@ -0,0 +1,378 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import "CreatorWindowController.h"
|
||||
#import "NSStringAdditions.h"
|
||||
|
||||
@interface CreatorWindowController (Private)
|
||||
|
||||
+ (NSString *) chooseFile;
|
||||
- (void) locationSheetClosed: (NSSavePanel *) openPanel returnCode: (int) code contextInfo: (void *) info;
|
||||
- (void) checkProgress;
|
||||
- (void) failureSheetClosed: (NSAlert *) alert returnCode: (int) code contextInfo: (void *) info;
|
||||
|
||||
@end
|
||||
|
||||
@implementation CreatorWindowController
|
||||
|
||||
+ (void) createTorrentFile: (tr_handle_t *) handle
|
||||
{
|
||||
//get file/folder for torrent
|
||||
NSString * path;
|
||||
if (!(path = [CreatorWindowController chooseFile]))
|
||||
return;
|
||||
|
||||
CreatorWindowController * creator = [[self alloc] initWithWindowNibName: @"Creator" handle: handle path: path];
|
||||
[creator showWindow: nil];
|
||||
}
|
||||
|
||||
+ (void) createTorrentFile: (tr_handle_t *) handle forFile: (NSString *) file
|
||||
{
|
||||
CreatorWindowController * creator = [[self alloc] initWithWindowNibName: @"Creator" handle: handle path: file];
|
||||
[creator showWindow: nil];
|
||||
}
|
||||
|
||||
- (id) initWithWindowNibName: (NSString *) name handle: (tr_handle_t *) handle path: (NSString *) path
|
||||
{
|
||||
if ((self = [super initWithWindowNibName: name]))
|
||||
{
|
||||
fStarted = NO;
|
||||
|
||||
fPath = [path retain];
|
||||
fInfo = tr_metaInfoBuilderCreate(handle, [fPath UTF8String]);
|
||||
|
||||
if (fInfo->fileCount == 0)
|
||||
{
|
||||
NSAlert * alert = [[NSAlert alloc] init];
|
||||
[alert addButtonWithTitle: NSLocalizedString(@"OK", "Create torrent -> no files -> button")];
|
||||
[alert setMessageText: NSLocalizedString(@"This folder contains no files.",
|
||||
"Create torrent -> no files -> title")];
|
||||
[alert setInformativeText: NSLocalizedString(@"There must be at least one file in a folder to create a torrent file.",
|
||||
"Create torrent -> no files -> warning")];
|
||||
[alert setAlertStyle: NSWarningAlertStyle];
|
||||
|
||||
[alert runModal];
|
||||
[alert release];
|
||||
|
||||
[self release];
|
||||
return nil;
|
||||
}
|
||||
if (fInfo->totalSize == 0)
|
||||
{
|
||||
NSAlert * alert = [[NSAlert alloc] init];
|
||||
[alert addButtonWithTitle: NSLocalizedString(@"OK", "Create torrent -> zero size -> button")];
|
||||
[alert setMessageText: NSLocalizedString(@"The total file size is zero bytes.",
|
||||
"Create torrent -> zero size -> title")];
|
||||
[alert setInformativeText: NSLocalizedString(@"A torrent file cannot be created for files with no size.",
|
||||
"Create torrent -> zero size -> warning")];
|
||||
[alert setAlertStyle: NSWarningAlertStyle];
|
||||
|
||||
[alert runModal];
|
||||
[alert release];
|
||||
|
||||
[self release];
|
||||
return nil;
|
||||
}
|
||||
|
||||
fDefaults = [NSUserDefaults standardUserDefaults];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) awakeFromNib
|
||||
{
|
||||
NSString * name = [fPath lastPathComponent];
|
||||
|
||||
[[self window] setTitle: name];
|
||||
|
||||
[fNameField setStringValue: name];
|
||||
[fNameField setToolTip: fPath];
|
||||
|
||||
BOOL multifile = !fInfo->isSingleFile;
|
||||
|
||||
NSImage * icon = [[NSWorkspace sharedWorkspace] iconForFileType: multifile
|
||||
? NSFileTypeForHFSTypeCode('fldr') : [fPath pathExtension]];
|
||||
[icon setSize: [fIconView frame].size];
|
||||
[fIconView setImage: icon];
|
||||
|
||||
NSString * statusString = [NSString stringForFileSize: fInfo->totalSize];
|
||||
if (multifile)
|
||||
{
|
||||
NSString * fileString;
|
||||
int count = fInfo->fileCount;
|
||||
if (count != 1)
|
||||
fileString = [NSString stringWithFormat: NSLocalizedString(@"%d Files, ", "Create torrent -> info"), count];
|
||||
else
|
||||
fileString = NSLocalizedString(@"1 File, ", "Create torrent -> info");
|
||||
statusString = [fileString stringByAppendingString: statusString];
|
||||
}
|
||||
[fStatusField setStringValue: statusString];
|
||||
|
||||
NSString * piecesCountString;
|
||||
int piecesCount = fInfo->pieceCount;
|
||||
if (piecesCount == 1)
|
||||
piecesCountString = NSLocalizedString(@"1 piece", "Create torrent -> info");
|
||||
else
|
||||
piecesCountString = [NSString stringWithFormat: NSLocalizedString(@"%d pieces", "Create torrent -> info"),
|
||||
piecesCount];
|
||||
[fPiecesField setStringValue: [NSString stringWithFormat: NSLocalizedString(@"%@, %@ each", "Create torrent -> info"),
|
||||
piecesCountString, [NSString stringForFileSize: fInfo->pieceSize]]];
|
||||
|
||||
fLocation = [[[[fDefaults stringForKey: @"CreatorLocation"] stringByExpandingTildeInPath] stringByAppendingPathComponent:
|
||||
[name stringByAppendingPathExtension: @"torrent"]] retain];
|
||||
[fLocationField setStringValue: [fLocation stringByAbbreviatingWithTildeInPath]];
|
||||
[fLocationField setToolTip: fLocation];
|
||||
|
||||
//set previously saved values
|
||||
NSString * tracker;
|
||||
if ((tracker = [fDefaults stringForKey: @"CreatorTracker"]))
|
||||
[fTrackerField setStringValue: tracker];
|
||||
|
||||
if ([fDefaults objectForKey: @"CreatorPrivate"])
|
||||
[fPrivateCheck setState: [fDefaults boolForKey: @"CreatorPrivate"] ? NSOnState : NSOffState];
|
||||
|
||||
if ([fDefaults objectForKey: @"CreatorOpen"])
|
||||
[fOpenCheck setState: [fDefaults boolForKey: @"CreatorOpen"] ? NSOnState : NSOffState];
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[fPath release];
|
||||
[fLocation release];
|
||||
|
||||
if (fInfo)
|
||||
tr_metaInfoBuilderFree(fInfo);
|
||||
|
||||
if (fTimer)
|
||||
[fTimer invalidate];
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void) setLocation: (id) sender
|
||||
{
|
||||
NSSavePanel * panel = [NSSavePanel savePanel];
|
||||
|
||||
[panel setPrompt: @"Select"];
|
||||
[panel setRequiredFileType: @"torrent"];
|
||||
[panel setCanSelectHiddenExtension: YES];
|
||||
|
||||
[panel beginSheetForDirectory: nil file: [fLocation lastPathComponent] modalForWindow: [self window] modalDelegate: self
|
||||
didEndSelector: @selector(locationSheetClosed:returnCode:contextInfo:) contextInfo: nil];
|
||||
}
|
||||
|
||||
- (void) create: (id) sender
|
||||
{
|
||||
//parse tracker string
|
||||
NSString * trackerString = [fTrackerField stringValue];
|
||||
if ([trackerString rangeOfString: @"://"].location != NSNotFound)
|
||||
{
|
||||
if (![trackerString hasPrefix: @"http://"])
|
||||
{
|
||||
NSAlert * alert = [[[NSAlert alloc] init] autorelease];
|
||||
[alert addButtonWithTitle: NSLocalizedString(@"OK", "Create torrent -> http warning -> button")];
|
||||
[alert setMessageText: NSLocalizedString(@"The tracker address must begin with \"http://\".",
|
||||
"Create torrent -> http warning -> title")];
|
||||
[alert setInformativeText: NSLocalizedString(@"Change the tracker address to create the torrent.",
|
||||
"Create torrent -> http warning -> warning")];
|
||||
[alert setAlertStyle: NSWarningAlertStyle];
|
||||
|
||||
[alert beginSheetModalForWindow: [self window] modalDelegate: self didEndSelector: nil contextInfo: nil];
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
trackerString = [@"http://" stringByAppendingString: trackerString];
|
||||
|
||||
//don't allow blank addresses
|
||||
if ([trackerString length] <= 7)
|
||||
{
|
||||
NSAlert * alert = [[[NSAlert alloc] init] autorelease];
|
||||
[alert addButtonWithTitle: NSLocalizedString(@"OK", "Create torrent -> no url warning -> button")];
|
||||
[alert setMessageText: NSLocalizedString(@"The tracker address cannot be blank.",
|
||||
"Create torrent -> no url warning -> title")];
|
||||
[alert setInformativeText: NSLocalizedString(@"Change the tracker address to create the torrent.",
|
||||
"Create torrent -> no url warning -> warning")];
|
||||
[alert setAlertStyle: NSWarningAlertStyle];
|
||||
|
||||
[alert beginSheetModalForWindow: [self window] modalDelegate: self didEndSelector: nil contextInfo: nil];
|
||||
return;
|
||||
}
|
||||
|
||||
//check if a file with the same name and location already exists
|
||||
if ([[NSFileManager defaultManager] fileExistsAtPath: fLocation])
|
||||
{
|
||||
NSArray * pathComponents = [fLocation pathComponents];
|
||||
int count = [pathComponents count];
|
||||
|
||||
NSAlert * alert = [[[NSAlert alloc] init] autorelease];
|
||||
[alert addButtonWithTitle: NSLocalizedString(@"OK", "Create torrent -> file already exists warning -> button")];
|
||||
[alert setMessageText: NSLocalizedString(@"A torrent file with this name and directory cannot be created.",
|
||||
"Create torrent -> file already exists warning -> title")];
|
||||
[alert setInformativeText: [NSString stringWithFormat:
|
||||
NSLocalizedString(@"A file with the name \"%@\" already exists in the directory \"%@\". "
|
||||
"Choose a new name or directory to create the torrent.",
|
||||
"Create torrent -> file already exists warning -> warning"),
|
||||
[pathComponents objectAtIndex: count-1], [pathComponents objectAtIndex: count-2]]];
|
||||
[alert setAlertStyle: NSWarningAlertStyle];
|
||||
|
||||
[alert beginSheetModalForWindow: [self window] modalDelegate: self didEndSelector: nil contextInfo: nil];
|
||||
return;
|
||||
}
|
||||
|
||||
fOpenTorrent = [fOpenCheck state] == NSOnState;
|
||||
|
||||
//store values
|
||||
[fDefaults setObject: trackerString forKey: @"CreatorTracker"];
|
||||
[fDefaults setBool: [fPrivateCheck state] == NSOnState forKey: @"CreatorPrivate"];
|
||||
[fDefaults setBool: fOpenTorrent forKey: @"CreatorOpen"];
|
||||
[fDefaults setObject: [fLocation stringByDeletingLastPathComponent] forKey: @"CreatorLocation"];
|
||||
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName: @"BeginCreateTorrentFile" object: fLocation userInfo: nil];
|
||||
tr_makeMetaInfo(fInfo, [fLocation UTF8String], [trackerString UTF8String], [[fCommentView string] UTF8String],
|
||||
[fPrivateCheck state] == NSOnState);
|
||||
|
||||
fTimer = [NSTimer scheduledTimerWithTimeInterval: 0.1 target: self selector: @selector(checkProgress)
|
||||
userInfo: nil repeats: YES];
|
||||
}
|
||||
|
||||
- (void) cancelCreateWindow: (id) sender
|
||||
{
|
||||
[[self window] close];
|
||||
}
|
||||
|
||||
- (void) windowWillClose: (NSNotification *) notification
|
||||
{
|
||||
[self release];
|
||||
}
|
||||
|
||||
- (void) cancelCreateProgress: (id) sender
|
||||
{
|
||||
fInfo->abortFlag = 1;
|
||||
[fTimer fire];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation CreatorWindowController (Private)
|
||||
|
||||
+ (NSString *) chooseFile
|
||||
{
|
||||
NSOpenPanel * panel = [NSOpenPanel openPanel];
|
||||
|
||||
[panel setTitle: NSLocalizedString(@"Create Torrent File", "Create torrent -> select file")];
|
||||
[panel setPrompt: NSLocalizedString(@"Select", "Create torrent -> select file")];
|
||||
[panel setAllowsMultipleSelection: NO];
|
||||
[panel setCanChooseFiles: YES];
|
||||
[panel setCanChooseDirectories: YES];
|
||||
[panel setCanCreateDirectories: NO];
|
||||
|
||||
[panel setMessage: NSLocalizedString(@"Select a file or folder for the torrent file.", "Create torrent -> select file")];
|
||||
|
||||
BOOL success = [panel runModal] == NSOKButton;
|
||||
return success ? [[panel filenames] objectAtIndex: 0] : nil;
|
||||
}
|
||||
|
||||
- (void) locationSheetClosed: (NSSavePanel *) panel returnCode: (int) code contextInfo: (void *) info
|
||||
{
|
||||
if (code == NSOKButton)
|
||||
{
|
||||
[fLocation release];
|
||||
fLocation = [[panel filename] retain];
|
||||
|
||||
[fLocationField setStringValue: [fLocation stringByAbbreviatingWithTildeInPath]];
|
||||
[fLocationField setToolTip: fLocation];
|
||||
}
|
||||
}
|
||||
|
||||
- (void) checkProgress
|
||||
{
|
||||
if (fInfo->isDone)
|
||||
{
|
||||
[fTimer invalidate];
|
||||
fTimer = nil;
|
||||
|
||||
if (fInfo->failed)
|
||||
{
|
||||
if (!fInfo->abortFlag)
|
||||
{
|
||||
NSAlert * alert = [[[NSAlert alloc] init] autorelease];
|
||||
[alert addButtonWithTitle: NSLocalizedString(@"OK", "Create torrent -> failed -> button")];
|
||||
[alert setMessageText: [NSString stringWithFormat: NSLocalizedString(@"Creation of \"%@\" failed.",
|
||||
"Create torrent -> failed -> title"), [fLocation lastPathComponent]]];
|
||||
[alert setInformativeText: NSLocalizedString(@"There was an error parsing the data file. "
|
||||
"The torrent file was not created.", "Create torrent -> failed -> warning")];
|
||||
[alert setAlertStyle: NSWarningAlertStyle];
|
||||
|
||||
[alert beginSheetModalForWindow: [self window] modalDelegate: self
|
||||
didEndSelector: @selector(failureSheetClosed:returnCode:contextInfo:) contextInfo: nil];
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (fOpenTorrent)
|
||||
{
|
||||
NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys: fLocation, @"File",
|
||||
[fPath stringByDeletingLastPathComponent], @"Path", nil];
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName: @"OpenCreatedTorrentFile" object: self userInfo: dict];
|
||||
}
|
||||
}
|
||||
|
||||
[[self window] close];
|
||||
}
|
||||
else
|
||||
{
|
||||
[fProgressIndicator setDoubleValue: (double)fInfo->pieceIndex / fInfo->pieceCount];
|
||||
|
||||
if (!fStarted)
|
||||
{
|
||||
NSWindow * window = [self window];
|
||||
|
||||
NSRect windowRect = [window frame];
|
||||
float difference = [fProgressView frame].size.height - [[window contentView] frame].size.height;
|
||||
windowRect.origin.y -= difference;
|
||||
windowRect.size.height += difference;
|
||||
|
||||
//don't allow vertical resizing
|
||||
float height = windowRect.size.height;
|
||||
[window setMinSize: NSMakeSize([window minSize].width, height)];
|
||||
[window setMaxSize: NSMakeSize([window maxSize].width, height)];
|
||||
|
||||
[window setContentView: fProgressView];
|
||||
[window setFrame: windowRect display: YES animate: YES];
|
||||
[fProgressView setHidden: NO];
|
||||
|
||||
fStarted = YES;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void) failureSheetClosed: (NSAlert *) alert returnCode: (int) code contextInfo: (void *) info
|
||||
{
|
||||
[[alert window] orderOut: nil];
|
||||
[[self window] close];
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,144 @@
|
|||
{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf440
|
||||
{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;}
|
||||
{\colortbl;\red255\green255\blue255;\red127\green127\blue127;}
|
||||
\vieww9000\viewh8400\viewkind0
|
||||
\pard\tx440\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li100\slleading40\sb40\qc
|
||||
|
||||
\f0\b\fs28 \cf0 The Transmission Project
|
||||
\fs24 \
|
||||
\pard\tx440\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li100\slleading40\sb40\qc
|
||||
|
||||
\f1\b0 \cf0 http://transmission.m0k.org/
|
||||
\f0\b \
|
||||
\pard\tx440\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li100\slleading40\sb40\ql\qnatural
|
||||
\cf0 \
|
||||
Lead Developers
|
||||
\f1\b0 <transmission-dev@m0k.org>\
|
||||
Eric Petit <titer@m0k.org>
|
||||
\fs20 \cf2 (Creator)\
|
||||
|
||||
\fs24 \cf0 Josh Elsasser <josh@elsasser.org>
|
||||
\fs20 \cf2 (Back-end, GTK+ interface, Daemon interface)
|
||||
\fs24 \cf0 \
|
||||
Mitchell Livingston <livings124@gmail.com>
|
||||
\fs20 \cf2 (Mac OS X interface, Back-end)
|
||||
\fs24 \cf0 \
|
||||
Charles Kerr <charles@rebelbase.com>
|
||||
\fs20 \cf2 (Back-end, GTK+ interface)
|
||||
\fs24 \cf0 \
|
||||
Bryan Varner <bryan@varnernet.com>
|
||||
\fs20 \cf2 (BeOS interface)
|
||||
\fs24 \cf0 \
|
||||
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
|
||||
\cf0 \
|
||||
\pard\tx440\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li100\slleading40\sb40\ql\qnatural
|
||||
|
||||
\f0\b \cf0 Project Contributors
|
||||
\f1\b0 \
|
||||
Nick Pucius
|
||||
\fs20 \cf2 (Mac OS X Help documentation)\
|
||||
|
||||
\fs24 \cf0 Hugo van Heuven, madebysofa
|
||||
\fs20 \cf2 (Icon design, Mac toolbar icons)
|
||||
\fs24 \cf0 \
|
||||
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
|
||||
\cf0 \
|
||||
\pard\tx440\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li100\slleading40\sb40\ql\qnatural
|
||||
|
||||
\f0\b \cf0 Translators
|
||||
\f1\b0 \cf2 \
|
||||
\cf0 Mac OS X, current release:\
|
||||
Jorge Carrasco Perez \cf2
|
||||
\fs20 (Spanish)\
|
||||
|
||||
\fs24 \cf0 Etienne Samson
|
||||
\fs20 \cf2 (French)\
|
||||
|
||||
\fs24 \cf0 Marco Cavazzuti
|
||||
\fs20 \cf2 (Italian)
|
||||
\fs24 \cf0 \
|
||||
Thermaikos
|
||||
\fs20 \cf2 (Greek)\
|
||||
|
||||
\fs24 \cf0 Jaewoo Chung
|
||||
\fs20 \cf2 (Korean)\
|
||||
|
||||
\fs24 \cf0 Anton Sotkov
|
||||
\fs20 \cf2 (Russian)\
|
||||
|
||||
\fs24 \cf0 Alexander Bykov
|
||||
\fs20 \cf2 (Russian)
|
||||
\fs24 \cf0 \
|
||||
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
|
||||
\cf0 \
|
||||
\pard\tx440\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li100\slleading40\sb40\qc
|
||||
|
||||
\f0\b\fs28 \cf0 Special Thanks\
|
||||
\pard\tx440\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li100\slleading40\sb40\ql\qnatural
|
||||
|
||||
\fs24 \cf0 \
|
||||
Image Contributors\
|
||||
|
||||
\f1\b0 FOOOD
|
||||
\f0\b \
|
||||
|
||||
\f1\b0 Martin Stadtmueller
|
||||
\fs20 \cf2 (Icon tweaking)
|
||||
\f0\b\fs24 \cf0 \
|
||||
|
||||
\f1\b0 Mike Matas <http://www.mikematas.com/>
|
||||
\fs20 \cf2 (Previous toolbar icons)
|
||||
\fs24 \cf0 \
|
||||
Jonas Rask
|
||||
\fs20 \cf2 (Globe icon)
|
||||
\fs24 \cf0 \
|
||||
George Tsotsos\
|
||||
Rashid Eissing
|
||||
\fs20 \cf2 (Transfers preferences icon)
|
||||
\fs24 \cf0 \
|
||||
\
|
||||
|
||||
\f0\b Other Contributors
|
||||
\f1\b0 \
|
||||
Omar and Adrien
|
||||
\fs20 \cf2 (Beta testing)
|
||||
\fs24 \cf0 \
|
||||
BitTorrent Protocol Specification <http://wiki.theory.org/BitTorrentSpecification>\
|
||||
vi@nwr.jp
|
||||
\fs20 \cf2 (Free SHA1 implementation)\
|
||||
|
||||
\fs24 \cf0 Ahmad M. Afuni
|
||||
\fs20 \cf2 (NetBSD patch)\
|
||||
|
||||
\fs24 \cf0 Jeremy Messenger
|
||||
\fs20 \cf2 (FreeBSD patch)
|
||||
\fs24 \cf0 \
|
||||
John Blitch
|
||||
\fs20 \cf2 (Mac OS X patch)\
|
||||
|
||||
\fs24 \cf0 Michael Demars <keul@m0k.org>
|
||||
\fs20 \cf2 (Mac OS X patches)\
|
||||
|
||||
\fs24 \cf0 Fredrik Mod\'8een
|
||||
\fs20 \cf2 (BeOS patches)
|
||||
\fs24 \cf0 \
|
||||
Deanna Phillips
|
||||
\fs20 \cf2 (transmissioncli manpage)
|
||||
\fs24 \cf0 \
|
||||
Nicholas Shanks
|
||||
\fs20 \cf2 (Mac OS X patches)\
|
||||
|
||||
\fs24 \cf0 TooMuchTime
|
||||
\fs20 \cf2 (Technical Advice)
|
||||
\fs24 \cf0 \
|
||||
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
|
||||
\cf0 \
|
||||
\pard\tx440\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li100\slleading40\sb40\ql\qnatural
|
||||
|
||||
\f0\b \cf0 Third-Party Resources\
|
||||
|
||||
\f1\b0 Thanks to:\
|
||||
Niels Provos for libevent. <http://monkey.org/~provos/libevent/>\
|
||||
The Growl Development Team for use of Growl. <http://growl.info/>\
|
||||
Andy Matuschak for use of Sparkle. <http://sparkle.andymatuschak.org/>\
|
||||
M. Uli Kusterer for use of UKKQueue.}
|
|
@ -0,0 +1,128 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>AutoImport</key>
|
||||
<false/>
|
||||
<key>AutoSize</key>
|
||||
<false/>
|
||||
<key>AutoStartDownload</key>
|
||||
<true/>
|
||||
<key>BadgeDownloadRate</key>
|
||||
<true/>
|
||||
<key>BadgeUploadRate</key>
|
||||
<true/>
|
||||
<key>BindPort</key>
|
||||
<integer>9090</integer>
|
||||
<key>CheckDownload</key>
|
||||
<false/>
|
||||
<key>CheckForUpdates</key>
|
||||
<true/>
|
||||
<key>CheckQuit</key>
|
||||
<true/>
|
||||
<key>CheckQuitDownloading</key>
|
||||
<false/>
|
||||
<key>CheckRemove</key>
|
||||
<true/>
|
||||
<key>CheckRemoveDownloading</key>
|
||||
<false/>
|
||||
<key>CheckStalled</key>
|
||||
<false/>
|
||||
<key>CheckUpload</key>
|
||||
<true/>
|
||||
<key>CreatorLocation</key>
|
||||
<string>~/Desktop</string>
|
||||
<key>DeleteOriginalTorrent</key>
|
||||
<false/>
|
||||
<key>DownloadChoice</key>
|
||||
<string>Constant</string>
|
||||
<key>DownloadFolder</key>
|
||||
<string>~/Desktop</string>
|
||||
<key>DownloadLimit</key>
|
||||
<integer>100</integer>
|
||||
<key>DownloadSound</key>
|
||||
<string>Glass</string>
|
||||
<key>EncryptionRequire</key>
|
||||
<false/>
|
||||
<key>Filter</key>
|
||||
<string>None</string>
|
||||
<key>FilterBar</key>
|
||||
<false/>
|
||||
<key>FilterSearchType</key>
|
||||
<string>Name</string>
|
||||
<key>IncompleteDownloadFolder</key>
|
||||
<string>~/Desktop</string>
|
||||
<key>InfoVisible</key>
|
||||
<false/>
|
||||
<key>InspectorSelected</key>
|
||||
<string>Info</string>
|
||||
<key>MessageLevel</key>
|
||||
<integer>1</integer>
|
||||
<key>MoveChoice</key>
|
||||
<string>Constant</string>
|
||||
<key>MoveFolder</key>
|
||||
<string>~/Desktop</string>
|
||||
<key>NatTraversal</key>
|
||||
<true/>
|
||||
<key>PiecesViewShowAvailability</key>
|
||||
<false/>
|
||||
<key>PlayDownloadSound</key>
|
||||
<true/>
|
||||
<key>PlaySeedingSound</key>
|
||||
<false/>
|
||||
<key>Queue</key>
|
||||
<false/>
|
||||
<key>QueueDownloadNumber</key>
|
||||
<integer>3</integer>
|
||||
<key>QueueSeed</key>
|
||||
<false/>
|
||||
<key>QueueSeedNumber</key>
|
||||
<integer>3</integer>
|
||||
<key>RatioCheck</key>
|
||||
<false/>
|
||||
<key>RatioLimit</key>
|
||||
<integer>2</integer>
|
||||
<key>SeedingSound</key>
|
||||
<string>Submarine</string>
|
||||
<key>ShowInspector</key>
|
||||
<false/>
|
||||
<key>SleepPrevent</key>
|
||||
<true/>
|
||||
<key>SmallStatusRegular</key>
|
||||
<true/>
|
||||
<key>SmallView</key>
|
||||
<false/>
|
||||
<key>Sort</key>
|
||||
<string>Order</string>
|
||||
<key>SortReverse</key>
|
||||
<false/>
|
||||
<key>SpeedLimit</key>
|
||||
<false/>
|
||||
<key>SpeedLimitAuto</key>
|
||||
<false/>
|
||||
<key>SpeedLimitAutoOffDate</key>
|
||||
<date>2000-01-01T13:00:00Z</date>
|
||||
<key>SpeedLimitAutoOnDate</key>
|
||||
<date>2000-01-01T03:00:00Z</date>
|
||||
<key>SpeedLimitDownloadLimit</key>
|
||||
<integer>10</integer>
|
||||
<key>SpeedLimitUploadLimit</key>
|
||||
<integer>10</integer>
|
||||
<key>StalledMinutes</key>
|
||||
<integer>30</integer>
|
||||
<key>StatusBar</key>
|
||||
<true/>
|
||||
<key>UploadLimit</key>
|
||||
<integer>20</integer>
|
||||
<key>UseAdvancedBar</key>
|
||||
<false/>
|
||||
<key>UseIncompleteDownloadFolder</key>
|
||||
<false/>
|
||||
<key>WarningDebug</key>
|
||||
<true/>
|
||||
<key>WarningDuplicate</key>
|
||||
<true/>
|
||||
<key>WarningRemainingSpace</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
|
@ -0,0 +1,36 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@interface DragOverlayView : NSView
|
||||
{
|
||||
NSImage * fBadge, * fBackBadge, * fAppIcon;
|
||||
|
||||
NSDictionary * fMainLineAttributes, * fSubLineAttributes;
|
||||
}
|
||||
|
||||
- (void) setOverlay: (NSImage *) icon mainLine: (NSString *) mainLine subLine: (NSString *) subLine;
|
||||
|
||||
@end
|
|
@ -0,0 +1,151 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import "DragOverlayView.h"
|
||||
#import "NSBezierPathAdditions.h"
|
||||
|
||||
@implementation DragOverlayView
|
||||
|
||||
- (id) initWithFrame: (NSRect) frame
|
||||
{
|
||||
if ((self = [super initWithFrame: frame]))
|
||||
{
|
||||
//create badge
|
||||
NSRect badgeRect = NSMakeRect(0, 0, 325.0, 84.0);
|
||||
NSBezierPath * bp = [NSBezierPath bezierPathWithRoundedRect: badgeRect radius: 15.0];
|
||||
|
||||
fBackBadge = [[NSImage alloc] initWithSize: badgeRect.size];
|
||||
[fBackBadge lockFocus];
|
||||
|
||||
[[NSColor colorWithCalibratedWhite: 0.0 alpha: 0.75] set];
|
||||
[bp fill];
|
||||
|
||||
[fBackBadge unlockFocus];
|
||||
|
||||
//create attributes
|
||||
NSShadow * stringShadow = [[NSShadow alloc] init];
|
||||
[stringShadow setShadowOffset: NSMakeSize(2.0, -2.0)];
|
||||
[stringShadow setShadowBlurRadius: 4.0];
|
||||
|
||||
NSFont * bigFont = [[NSFontManager sharedFontManager] convertFont:
|
||||
[NSFont fontWithName: @"Lucida Grande" size: 18.0] toHaveTrait: NSBoldFontMask],
|
||||
* smallFont = [NSFont fontWithName: @"Lucida Grande" size: 14.0];
|
||||
|
||||
NSMutableParagraphStyle * paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
|
||||
[paragraphStyle setLineBreakMode: NSLineBreakByTruncatingTail];
|
||||
|
||||
fMainLineAttributes = [[NSDictionary alloc] initWithObjectsAndKeys:
|
||||
[NSColor whiteColor], NSForegroundColorAttributeName,
|
||||
bigFont, NSFontAttributeName, stringShadow, NSShadowAttributeName,
|
||||
paragraphStyle, NSParagraphStyleAttributeName, nil];
|
||||
|
||||
fSubLineAttributes = [[NSDictionary alloc] initWithObjectsAndKeys:
|
||||
[NSColor whiteColor], NSForegroundColorAttributeName,
|
||||
smallFont, NSFontAttributeName, stringShadow, NSShadowAttributeName,
|
||||
paragraphStyle, NSParagraphStyleAttributeName, nil];
|
||||
|
||||
[stringShadow release];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[fBackBadge release];
|
||||
|
||||
[fBadge release];
|
||||
[fAppIcon release];
|
||||
|
||||
[fMainLineAttributes release];
|
||||
[fSubLineAttributes release];
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void) setOverlay: (NSImage *) icon mainLine: (NSString *) mainLine subLine: (NSString *) subLine
|
||||
{
|
||||
if (fBadge)
|
||||
[fBadge release];
|
||||
fBadge = [fBackBadge copy];
|
||||
NSSize badgeSize = [fBadge size];
|
||||
|
||||
//get icon
|
||||
NSSize iconSize = NSMakeSize(64.0, 64.0);
|
||||
if (!icon)
|
||||
{
|
||||
if (!fAppIcon)
|
||||
{
|
||||
fAppIcon = [[NSImage imageNamed: @"TransmissionDocument.icns"] copy];
|
||||
[fAppIcon setScalesWhenResized: YES];
|
||||
[fAppIcon setSize: iconSize];
|
||||
}
|
||||
icon = [fAppIcon retain];
|
||||
}
|
||||
else
|
||||
{
|
||||
icon = [icon copy];
|
||||
[icon setScalesWhenResized: YES];
|
||||
[icon setSize: iconSize];
|
||||
}
|
||||
|
||||
float padding = 10.0;
|
||||
|
||||
[fBadge lockFocus];
|
||||
|
||||
//place icon
|
||||
[icon compositeToPoint: NSMakePoint(padding, (badgeSize.height - iconSize.height) * 0.5)
|
||||
operation: NSCompositeSourceOver];
|
||||
[icon release];
|
||||
|
||||
//place main text
|
||||
NSSize mainLineSize = [mainLine sizeWithAttributes: fMainLineAttributes];
|
||||
NSSize subLineSize = [subLine sizeWithAttributes: fSubLineAttributes];
|
||||
|
||||
NSRect lineRect = NSMakeRect(padding + iconSize.width + 5.0,
|
||||
(badgeSize.height + (subLineSize.height + 2.0 - mainLineSize.height)) * 0.5,
|
||||
badgeSize.width - (padding + iconSize.width + 2.0) - padding, mainLineSize.height);
|
||||
[mainLine drawInRect: lineRect withAttributes: fMainLineAttributes];
|
||||
|
||||
//place sub text
|
||||
lineRect.origin.y -= subLineSize.height + 2.0;
|
||||
lineRect.size.height = subLineSize.height;
|
||||
[subLine drawInRect: lineRect withAttributes: fSubLineAttributes];
|
||||
|
||||
[fBadge unlockFocus];
|
||||
|
||||
[self setNeedsDisplay: YES];
|
||||
}
|
||||
|
||||
-(void) drawRect: (NSRect) rect
|
||||
{
|
||||
if (fBadge)
|
||||
{
|
||||
NSRect frame = [self frame];
|
||||
NSSize imageSize = [fBadge size];
|
||||
[fBadge compositeToPoint: NSMakePoint((frame.size.width - imageSize.width) * 0.5,
|
||||
(frame.size.height - imageSize.height) * 0.5) operation: NSCompositeSourceOver];
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,44 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import <transmission.h>
|
||||
|
||||
@interface DragOverlayWindow : NSWindow
|
||||
{
|
||||
tr_handle_t * fLib;
|
||||
|
||||
NSViewAnimation * fFadeInAnimation, * fFadeOutAnimation;
|
||||
}
|
||||
|
||||
- (id) initWithLib: (tr_handle_t *) lib forWindow: (NSWindow *) window;
|
||||
|
||||
- (void) setTorrents: (NSArray *) files;
|
||||
- (void) setFile: (NSString *) file;
|
||||
- (void) setURL: (NSString *) url;
|
||||
|
||||
- (void) fadeIn;
|
||||
- (void) fadeOut;
|
||||
|
||||
@end
|
|
@ -0,0 +1,170 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import "DragOverlayWindow.h"
|
||||
#import "DragOverlayView.h"
|
||||
#import "NSStringAdditions.h"
|
||||
|
||||
@implementation DragOverlayWindow
|
||||
|
||||
- (id) initWithLib: (tr_handle_t *) lib forWindow: (NSWindow *) window
|
||||
{
|
||||
if (self = ([super initWithContentRect: NSMakeRect(0, 0, 1.0, 1.0) styleMask: NSBorderlessWindowMask
|
||||
backing: NSBackingStoreBuffered defer: NO]))
|
||||
{
|
||||
fLib = lib;
|
||||
|
||||
[self setBackgroundColor: [NSColor colorWithCalibratedWhite: 0.0 alpha: 0.5]];
|
||||
[self setAlphaValue: 0.0];
|
||||
[self setOpaque: NO];
|
||||
[self setHasShadow: NO];
|
||||
|
||||
DragOverlayView * view = [[DragOverlayView alloc] initWithFrame: [self frame]];
|
||||
[self setContentView: view];
|
||||
[view release];
|
||||
|
||||
[self setReleasedWhenClosed: NO];
|
||||
[self setIgnoresMouseEvents: YES];
|
||||
|
||||
fFadeInAnimation = [[NSViewAnimation alloc] initWithViewAnimations: [NSArray arrayWithObject:
|
||||
[NSDictionary dictionaryWithObjectsAndKeys: self, NSViewAnimationTargetKey,
|
||||
NSViewAnimationFadeInEffect, NSViewAnimationEffectKey, nil]]];
|
||||
[fFadeInAnimation setDuration: 0.15];
|
||||
|
||||
fFadeOutAnimation = [[NSViewAnimation alloc] initWithViewAnimations: [NSArray arrayWithObject:
|
||||
[NSDictionary dictionaryWithObjectsAndKeys: self, NSViewAnimationTargetKey,
|
||||
NSViewAnimationFadeOutEffect, NSViewAnimationEffectKey, nil]]];
|
||||
[fFadeOutAnimation setDuration: 0.5];
|
||||
[fFadeOutAnimation setAnimationBlockingMode: NSAnimationNonblockingThreaded];
|
||||
|
||||
[window addChildWindow: self ordered: NSWindowAbove];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[fFadeInAnimation release];
|
||||
[fFadeOutAnimation release];
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void) setTorrents: (NSArray *) files
|
||||
{
|
||||
uint64_t size = 0;
|
||||
int count = 0;
|
||||
|
||||
NSString * name;
|
||||
BOOL folder;
|
||||
int fileCount = 0;
|
||||
|
||||
NSString * file;
|
||||
NSEnumerator * enumerator = [files objectEnumerator];
|
||||
tr_info_t info;
|
||||
while ((file = [enumerator nextObject]))
|
||||
{
|
||||
if (tr_torrentParse(fLib, [file UTF8String], NULL, &info) == TR_OK)
|
||||
{
|
||||
count++;
|
||||
size += info.totalSize;
|
||||
fileCount += info.fileCount;
|
||||
|
||||
//only useful when one torrent
|
||||
if (count == 1)
|
||||
{
|
||||
name = [NSString stringWithUTF8String: info.name];
|
||||
folder = info.multifile;
|
||||
}
|
||||
}
|
||||
tr_metainfoFree(&info);
|
||||
}
|
||||
|
||||
if (count <= 0)
|
||||
return;
|
||||
|
||||
//set strings and icon
|
||||
NSImage * icon = nil;
|
||||
NSString * secondString = [NSString stringForFileSize: size];
|
||||
if (count > 1 || folder)
|
||||
{
|
||||
NSString * fileString;
|
||||
if (fileCount == 1)
|
||||
fileString = NSLocalizedString(@"1 File, ", "Drag overlay -> torrents");
|
||||
else
|
||||
fileString= [NSString stringWithFormat: NSLocalizedString(@"%d Files, ", "Drag overlay -> torrents"), fileCount];
|
||||
secondString = [fileString stringByAppendingString: secondString];
|
||||
}
|
||||
|
||||
if (count == 1)
|
||||
icon = [[NSWorkspace sharedWorkspace] iconForFileType: folder ? NSFileTypeForHFSTypeCode('fldr') : [name pathExtension]];
|
||||
else
|
||||
{
|
||||
name = [NSString stringWithFormat: NSLocalizedString(@"%d Torrent Files", "Drag overlay -> torrents"), count];
|
||||
secondString = [secondString stringByAppendingString: @" Total"];
|
||||
}
|
||||
|
||||
[[self contentView] setOverlay: icon mainLine: name subLine: secondString];
|
||||
[self fadeIn];
|
||||
}
|
||||
|
||||
- (void) setFile: (NSString *) file
|
||||
{
|
||||
[[self contentView] setOverlay: [NSImage imageNamed: @"CreateLarge.png"]
|
||||
mainLine: NSLocalizedString(@"Create a Torrent File", "Drag overlay -> file") subLine: file];
|
||||
[self fadeIn];
|
||||
}
|
||||
|
||||
|
||||
- (void) setURL: (NSString *) url
|
||||
{
|
||||
[[self contentView] setOverlay: [NSImage imageNamed: @"Globe.png"]
|
||||
mainLine: NSLocalizedString(@"Web Address", "Drag overlay -> url") subLine: url];
|
||||
[self fadeIn];
|
||||
}
|
||||
|
||||
- (void) fadeIn
|
||||
{
|
||||
//stop other animation and set to same progress
|
||||
if ([fFadeOutAnimation isAnimating])
|
||||
{
|
||||
[fFadeOutAnimation stopAnimation];
|
||||
[fFadeInAnimation setCurrentProgress: 1.0 - [fFadeOutAnimation currentProgress]];
|
||||
}
|
||||
[self setFrame: [[self parentWindow] frame] display: YES];
|
||||
[fFadeInAnimation startAnimation];
|
||||
}
|
||||
|
||||
- (void) fadeOut
|
||||
{
|
||||
//stop other animation and set to same progress
|
||||
if ([fFadeInAnimation isAnimating])
|
||||
{
|
||||
[fFadeInAnimation stopAnimation];
|
||||
[fFadeOutAnimation setCurrentProgress: 1.0 - [fFadeInAnimation currentProgress]];
|
||||
}
|
||||
[fFadeOutAnimation startAnimation];
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
IBClasses = (
|
||||
{
|
||||
ACTIONS = {hideLicense = id; showLicense = id; };
|
||||
CLASS = AboutWindowController;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fCopyrightField = NSTextField;
|
||||
fLicenseSheet = NSPanel;
|
||||
fLicenseView = NSTextView;
|
||||
fTextView = NSTextView;
|
||||
fVersionField = NSTextField;
|
||||
};
|
||||
SUPERCLASS = NSWindowController;
|
||||
},
|
||||
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }
|
||||
);
|
||||
IBVersion = 1;
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBDocumentLocation</key>
|
||||
<string>17 91 356 240 0 0 1152 842 </string>
|
||||
<key>IBFramework Version</key>
|
||||
<string>446.1</string>
|
||||
<key>IBOpenObjects</key>
|
||||
<array>
|
||||
<integer>5</integer>
|
||||
</array>
|
||||
<key>IBSystem Version</key>
|
||||
<string>8R218</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
IBClasses = (
|
||||
{
|
||||
ACTIONS = {
|
||||
cancelCreateProgress = id;
|
||||
cancelCreateWindow = id;
|
||||
create = id;
|
||||
setLocation = id;
|
||||
};
|
||||
CLASS = CreatorWindowController;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fCommentView = NSTextView;
|
||||
fIconView = NSImageView;
|
||||
fLocationField = NSTextField;
|
||||
fNameField = NSTextField;
|
||||
fOpenCheck = NSButton;
|
||||
fPiecesField = NSTextField;
|
||||
fPrivateCheck = NSButton;
|
||||
fProgressIndicator = NSProgressIndicator;
|
||||
fProgressView = NSView;
|
||||
fStatusField = NSTextField;
|
||||
fTrackerField = NSTextField;
|
||||
};
|
||||
SUPERCLASS = NSWindowController;
|
||||
},
|
||||
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }
|
||||
);
|
||||
IBVersion = 1;
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBDocumentLocation</key>
|
||||
<string>52 61 356 240 0 0 1152 842 </string>
|
||||
<key>IBEditorPositions</key>
|
||||
<dict>
|
||||
<key>56</key>
|
||||
<string>392 515 368 126 0 0 1152 842 </string>
|
||||
</dict>
|
||||
<key>IBFramework Version</key>
|
||||
<string>446.1</string>
|
||||
<key>IBOpenObjects</key>
|
||||
<array>
|
||||
<integer>5</integer>
|
||||
</array>
|
||||
<key>IBSystem Version</key>
|
||||
<string>8R218</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
|
@ -0,0 +1,4 @@
|
|||
/* Localized versions of Info.plist keys */
|
||||
|
||||
CFBundleName = "Transmission";
|
||||
NSHumanReadableCopyright = "Copyright 2005-2007 The Transmission Project";
|
|
@ -0,0 +1,87 @@
|
|||
{
|
||||
IBClasses = (
|
||||
{CLASS = FileOutlineView; LANGUAGE = ObjC; SUPERCLASS = NSOutlineView; },
|
||||
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
|
||||
{
|
||||
ACTIONS = {
|
||||
revealDataFile = id;
|
||||
revealFile = id;
|
||||
revealTorrentFile = id;
|
||||
setCheck = id;
|
||||
setOnlySelectedCheck = id;
|
||||
setPex = id;
|
||||
setPiecesView = id;
|
||||
setPriority = id;
|
||||
setRatioLimit = id;
|
||||
setRatioSetting = id;
|
||||
setSpeedLimit = id;
|
||||
setSpeedMode = id;
|
||||
};
|
||||
CLASS = InfoWindowController;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fCommentView = NSTextView;
|
||||
fCompletedFromTrackerField = NSTextField;
|
||||
fConnectedPeersField = NSTextField;
|
||||
fCreatorField = NSTextField;
|
||||
fDataLocationField = NSTextField;
|
||||
fDateActivityField = NSTextField;
|
||||
fDateAddedField = NSTextField;
|
||||
fDateCompletedField = NSTextField;
|
||||
fDateCreatedField = NSTextField;
|
||||
fDownloadLimitField = NSTextField;
|
||||
fDownloadLimitLabel = NSTextField;
|
||||
fDownloadLimitPopUp = NSPopUpButton;
|
||||
fDownloadedTotalField = NSTextField;
|
||||
fDownloadedValidField = NSTextField;
|
||||
fDownloadingFromField = NSTextField;
|
||||
fErrorMessageView = NSTextView;
|
||||
fFileCheckItem = NSMenuItem;
|
||||
fFileOutline = FileOutlineView;
|
||||
fFilePriorityHigh = NSMenuItem;
|
||||
fFilePriorityLow = NSMenuItem;
|
||||
fFilePriorityNormal = NSMenuItem;
|
||||
fFileTableStatusField = NSTextField;
|
||||
fFileUncheckItem = NSMenuItem;
|
||||
fHashField = NSTextField;
|
||||
fImageView = NSImageView;
|
||||
fLeechersField = NSTextField;
|
||||
fNameField = NSTextField;
|
||||
fPeerTable = NSTableView;
|
||||
fPexCheck = NSButton;
|
||||
fPiecesControl = NSSegmentedControl;
|
||||
fPiecesField = NSTextField;
|
||||
fPiecesView = PiecesView;
|
||||
fProgressField = NSTextField;
|
||||
fRatioField = NSTextField;
|
||||
fRatioLimitField = NSTextField;
|
||||
fRatioPopUp = NSPopUpButton;
|
||||
fRevealDataButton = NSButton;
|
||||
fRevealTorrentButton = NSButton;
|
||||
fSecureField = NSTextField;
|
||||
fSeedersField = NSTextField;
|
||||
fSizeField = NSTextField;
|
||||
fStateField = NSTextField;
|
||||
fSwarmSpeedField = NSTextField;
|
||||
fTabView = NSTabView;
|
||||
fTorrentLocationField = NSTextField;
|
||||
fTrackerField = NSTextField;
|
||||
fUploadLimitField = NSTextField;
|
||||
fUploadLimitLabel = NSTextField;
|
||||
fUploadLimitPopUp = NSPopUpButton;
|
||||
fUploadedTotalField = NSTextField;
|
||||
fUploadingToField = NSTextField;
|
||||
};
|
||||
SUPERCLASS = NSWindowController;
|
||||
},
|
||||
{CLASS = NSLevelIndicatorCell; LANGUAGE = ObjC; SUPERCLASS = NSActionCell; },
|
||||
{CLASS = NSSegmentedControl; LANGUAGE = ObjC; SUPERCLASS = NSControl; },
|
||||
{
|
||||
CLASS = PeerProgressIndicatorCell;
|
||||
LANGUAGE = ObjC;
|
||||
SUPERCLASS = NSLevelIndicatorCell;
|
||||
},
|
||||
{CLASS = PiecesView; LANGUAGE = ObjC; SUPERCLASS = NSImageView; }
|
||||
);
|
||||
IBVersion = 1;
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBDocumentLocation</key>
|
||||
<string>58 88 356 240 0 0 1680 1028 </string>
|
||||
<key>IBEditorPositions</key>
|
||||
<dict>
|
||||
<key>549</key>
|
||||
<string>565 283 174 149 0 0 1152 842 </string>
|
||||
</dict>
|
||||
<key>IBFramework Version</key>
|
||||
<string>446.1</string>
|
||||
<key>IBLockedObjects</key>
|
||||
<array>
|
||||
<integer>5</integer>
|
||||
</array>
|
||||
<key>IBLockedTabItems</key>
|
||||
<array>
|
||||
<integer>332</integer>
|
||||
</array>
|
||||
<key>IBOpenObjects</key>
|
||||
<array>
|
||||
<integer>5</integer>
|
||||
</array>
|
||||
<key>IBSystem Version</key>
|
||||
<string>8R4031</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
|
@ -0,0 +1,619 @@
|
|||
/* Torrent -> progress string */
|
||||
" - %@ remaining" = " - %@ remaining";
|
||||
|
||||
/* Torrent -> progress string */
|
||||
" - remaining time unknown" = " - remaining time unknown";
|
||||
|
||||
/* File size (beware of leading space) */
|
||||
" GB" = " GB";
|
||||
|
||||
/* File size (beware of leading space) */
|
||||
" KB" = " KB";
|
||||
|
||||
/* File size (beware of leading space) */
|
||||
" MB" = " MB";
|
||||
|
||||
/* Removal confirm panel -> message part 2 */
|
||||
" Once removed, continuing the transfers will require the torrent files. Do you really want to remove them?" = " Once removed, continuing the transfers will require the torrent files. Do you really want to remove them?";
|
||||
|
||||
/* Inspector -> Activity tab -> progress */
|
||||
"%.2f%% (%.2f%% selected)" = "%1$.2f%% (%2$.2f%% selected)";
|
||||
|
||||
/* Inspector -> Files tab -> file status string */
|
||||
"%.2f%% of %@" = "%1$.2f%% of %2$@";
|
||||
|
||||
/* Torrent -> progress string */
|
||||
"%@ of %@ (%.2f%%)" = "%1$@ of %2$@ (%3$.2f%%)";
|
||||
|
||||
/* Torrent -> progress string */
|
||||
"%@ of %@ (%.2f%%), uploaded %@ (Ratio: %@)" = "%1$@ of %2$@ (%3$.2f%%), uploaded %4$@ (Ratio: %5$@)";
|
||||
|
||||
/* Inspector -> above tabs -> total size (several torrents selected) */
|
||||
"%@ Total" = "%@ Total";
|
||||
|
||||
/* Create torrent -> info */
|
||||
"%@, %@ each" = "%1$@, %2$@ each";
|
||||
|
||||
/* Torrent -> progress string */
|
||||
"%@, uploaded %@ (Ratio: %@)" = "%1$@, uploaded %2$@ (Ratio: %3$@)";
|
||||
|
||||
/* Inspector -> Peers tab -> peers */
|
||||
"%d cache" = "%d cache";
|
||||
|
||||
/* Inspector -> Peers tab -> peers */
|
||||
"%d Connected" = "%d Connected";
|
||||
|
||||
/* Torrent -> remaining time */
|
||||
"%d days %d hr" = "%1$d days %2$d hr";
|
||||
|
||||
/* Dock item - Downloading */
|
||||
"%d Downloading" = "%d Downloading";
|
||||
|
||||
/* Inspector -> Files tab -> bottom text (number of files) */
|
||||
"%d files total" = "%d files total";
|
||||
|
||||
/* Drag overlay -> torrents
|
||||
Create torrent -> info */
|
||||
"%d Files, " = "%d Files, ";
|
||||
|
||||
/* Torrent -> remaining time */
|
||||
"%d hr %d min" = "%1$d hr %2$d min";
|
||||
|
||||
/* Inspector -> Peers tab -> peers */
|
||||
"%d incoming" = "%d incoming";
|
||||
|
||||
/* Torrent -> remaining time */
|
||||
"%d min %d sec" = "%1$d min %2$d sec";
|
||||
|
||||
/* Inspector -> Peers tab -> peers */
|
||||
"%d PEX" = "%d PEX";
|
||||
|
||||
/* Create torrent -> info */
|
||||
"%d pieces" = "%d pieces";
|
||||
|
||||
/* Torrent -> remaining time */
|
||||
"%d sec" = "%d sec";
|
||||
|
||||
/* Dock item - Seeding */
|
||||
"%d Seeding" = "%d Seeding";
|
||||
|
||||
/* Drag overlay -> torrents */
|
||||
"%d Torrent Files" = "%d Torrent Files";
|
||||
|
||||
/* Inspector -> above tabs -> selected torrents */
|
||||
"%d Torrents Selected" = "%d Torrents Selected";
|
||||
|
||||
/* Inspector -> Peers tab -> peers */
|
||||
"%d tracker" = "%d tracker";
|
||||
|
||||
/* Filter Bar Button -> tool tip
|
||||
Status bar transfer count */
|
||||
"%d Transfers" = "%d Transfers";
|
||||
|
||||
/* File size */
|
||||
"%lld bytes" = "%lld bytes";
|
||||
|
||||
/* Torrent -> error string unreadable */
|
||||
"(unreadable error)" = "(unreadable error)";
|
||||
|
||||
/* Torrent -> remaining time */
|
||||
"1 day %d hr" = "1 day %d hr";
|
||||
|
||||
/* Inspector -> Files tab -> bottom text (number of files) */
|
||||
"1 file total" = "1 file total";
|
||||
|
||||
/* Drag overlay -> torrents
|
||||
Create torrent -> info */
|
||||
"1 File, " = "1 File, ";
|
||||
|
||||
/* Create torrent -> info */
|
||||
"1 piece" = "1 piece";
|
||||
|
||||
/* Filter Bar Button -> tool tip
|
||||
Status bar transfer count */
|
||||
"1 Transfer" = "1 Transfer";
|
||||
|
||||
/* Move folder cannot be found alert -> message */
|
||||
"\"%@\" cannot be found. The file will remain in its current location." = "\"%@\" cannot be found. The file will remain in its current location.";
|
||||
|
||||
/* Folder cannot be found alert -> message */
|
||||
"\"%@\" cannot be found. The transfer will be paused." = "\"%@\" cannot be found. The transfer will be paused.";
|
||||
|
||||
/* Create torrent -> file already exists warning -> warning */
|
||||
"A file with the name \"%@\" already exists in the directory \"%@\". Choose a new name or directory to create the torrent." = "A file with the name \"%1$@\" already exists in the directory \"%2$@\". Choose a new name or directory to create the torrent.";
|
||||
|
||||
/* Move inside itself alert -> title */
|
||||
"A folder cannot be moved to inside itself." = "A folder cannot be moved to inside itself.";
|
||||
|
||||
/* Create torrent -> zero size -> warning */
|
||||
"A torrent file cannot be created for files with no size." = "A torrent file cannot be created for files with no size.";
|
||||
|
||||
/* Create torrent -> file already exists warning -> title */
|
||||
"A torrent file with this name and directory cannot be created." = "A torrent file with this name and directory cannot be created.";
|
||||
|
||||
/* Open duplicate alert -> title */
|
||||
"A transfer of \"%@\" is already running." = "A transfer of \"%@\" is already running.";
|
||||
|
||||
/* Torrent file disk space alert -> button */
|
||||
"Always Download" = "Always Download";
|
||||
|
||||
/* Transfer speed (Bytes per second) */
|
||||
"B/s" = "B/s";
|
||||
|
||||
/* Preferences -> Bandwidth toolbar item title */
|
||||
"Bandwidth" = "Bandwidth";
|
||||
|
||||
/* Growl notification description */
|
||||
"Bandwidth settings changed" = "Bandwidth settings changed";
|
||||
|
||||
/* Removal confirm panel -> button
|
||||
Confirm Quit panel -> button */
|
||||
"Cancel" = "Cancel";
|
||||
|
||||
/* Create torrent -> no url warning -> warning
|
||||
Create torrent -> http warning -> warning */
|
||||
"Change the tracker address to create the torrent." = "Change the tracker address to create the torrent.";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Checking existing data (%.2f%%)" = "Checking existing data (%.2f%%)";
|
||||
|
||||
/* Preferences -> Network -> port status */
|
||||
"Checking port status" = "Checking port status";
|
||||
|
||||
/* Folder cannot be found alert -> location button */
|
||||
"Choose New Location" = "Choose New Location";
|
||||
|
||||
/* Confirm Quit panel -> title */
|
||||
"Confirm Quit" = "Confirm Quit";
|
||||
|
||||
/* Removal confirm panel -> title */
|
||||
"Confirm Removal of %d Transfers" = "Confirm Removal of %d Transfers";
|
||||
|
||||
/* Removal confirm panel -> title */
|
||||
"Confirm Removal of \"%@\"" = "Confirm Removal of \"%@\"";
|
||||
|
||||
/* Debug log alert -> informative message */
|
||||
"Continuous use at this level might increase memory usage. This setting can be changed in the Message Log window (accessible from the Window menu)." = "Continuous use at this level might increase memory usage. This setting can be changed in the Message Log window (accessible from the Window menu).";
|
||||
|
||||
/* Torrent file copy alert -> title */
|
||||
"Copy of \"%@\" Cannot Be Created" = "Copy of \"%@\" Cannot Be Created";
|
||||
|
||||
/* Create toolbar item -> label */
|
||||
"Create" = "Create";
|
||||
|
||||
/* Drag overlay -> file */
|
||||
"Create a Torrent File" = "Create a Torrent File";
|
||||
|
||||
/* Create toolbar item -> tooltip */
|
||||
"Create torrent file" = "Create torrent file";
|
||||
|
||||
/* Create toolbar item -> palette label */
|
||||
"Create Torrent File" = "Create Torrent File";
|
||||
|
||||
/* Create torrent -> failed -> title */
|
||||
"Creation of \"%@\" failed." = "Creation of \"%@\" failed.";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"DL: %@, " = "DL: %@, ";
|
||||
|
||||
/* Debug log alert -> button
|
||||
Open duplicate alert -> button */
|
||||
"Don't Alert Again" = "Don't Alert Again";
|
||||
|
||||
/* Inspector -> files tab -> tooltip */
|
||||
"Don't Download" = "Don't Download";
|
||||
|
||||
/* Inspector -> files tab -> tooltip */
|
||||
"Download" = "Download";
|
||||
|
||||
/* Torrent file disk space alert -> button */
|
||||
"Download Anyway" = "Download Anyway";
|
||||
|
||||
/* Growl notification title */
|
||||
"Download Complete" = "Download Complete";
|
||||
|
||||
/* Inspector -> files tab -> tooltip */
|
||||
"Download Some" = "Download Some";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Downloading" = "Downloading";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Downloading from %d of %d peers" = "Downloading from %1$d of %2$d peers";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Downloading from %d of 1 peer" = "Downloading from %d of 1 peer";
|
||||
|
||||
/* Transfer speed invalid
|
||||
Ratio invalid */
|
||||
"error" = "error";
|
||||
|
||||
/* Preferences -> Network -> port map status */
|
||||
"Error mapping port" = "Error mapping port";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Error: " = "Error: ";
|
||||
|
||||
/* Filter toolbar item -> label */
|
||||
"Filter" = "Filter";
|
||||
|
||||
/* Inspector -> Peers tab -> table row tooltip */
|
||||
"From: cache" = "From: cache";
|
||||
|
||||
/* Inspector -> Peers tab -> table row tooltip */
|
||||
"From: incoming connection" = "From: incoming connection";
|
||||
|
||||
/* Inspector -> Peers tab -> table row tooltip */
|
||||
"From: peer exchange" = "From: peer exchange";
|
||||
|
||||
/* Inspector -> Peers tab -> table row tooltip */
|
||||
"From: tracker" = "From: tracker";
|
||||
|
||||
/* Preferences -> General toolbar item title */
|
||||
"General" = "General";
|
||||
|
||||
/* View menu -> Filter Bar */
|
||||
"Hide Filter Bar" = "Hide Filter Bar";
|
||||
|
||||
/* View menu -> Inspector */
|
||||
"Hide Inspector" = "Hide Inspector";
|
||||
|
||||
/* View menu -> Status Bar */
|
||||
"Hide Status Bar" = "Hide Status Bar";
|
||||
|
||||
/* Inspector -> files tab -> tooltip */
|
||||
"High Priority" = "High Priority";
|
||||
|
||||
/* Inspector -> Peers tab -> peers
|
||||
Inspector -> Files tab -> bottom text (number of files) */
|
||||
"info not available" = "info not available";
|
||||
|
||||
/* Inspector toolbar item -> label */
|
||||
"Inspector" = "Inspector";
|
||||
|
||||
/* Download not a torrent -> message */
|
||||
"It appears that the file \"%@\" from %@ is not a torrent file." = "It appears that the file \"%1$@\" from %2$@ is not a torrent file.";
|
||||
|
||||
/* Action context menu -> upload/download limit */
|
||||
"Limit (%d KB/s)" = "Limit (%d KB/s)";
|
||||
|
||||
/* Save log alert panel -> title */
|
||||
"Log Could Not Be Saved" = "Log Could Not Be Saved";
|
||||
|
||||
/* Inspector -> files tab -> tooltip */
|
||||
"Low Priority" = "Low Priority";
|
||||
|
||||
/* Inspector -> files tab -> tooltip */
|
||||
"Multiple Priorities" = "Multiple Priorities";
|
||||
|
||||
/* No Ratio
|
||||
Torrent -> status string */
|
||||
"N/A" = "N/A";
|
||||
|
||||
/* Preferences -> Network toolbar item title */
|
||||
"Network" = "Network";
|
||||
|
||||
/* Inspector -> above tabs -> selected torrents */
|
||||
"No Torrents Selected" = "No Torrents Selected";
|
||||
|
||||
/* Inspector -> files tab -> tooltip */
|
||||
"Normal Priority" = "Normal Priority";
|
||||
|
||||
/* Torrent file disk space alert -> title */
|
||||
"Not enough remaining disk space to download \"%@\" completely." = "Not enough remaining disk space to download \"%@\" completely.";
|
||||
|
||||
/* Open duplicate alert -> button
|
||||
Create torrent -> no files -> button
|
||||
Create torrent -> file already exists warning -> button
|
||||
Torrent file copy alert -> button
|
||||
Move folder cannot be found alert -> button
|
||||
Folder cannot be found alert -> button
|
||||
Torrent file disk space alert -> button
|
||||
Create torrent -> no url warning -> button
|
||||
Torrent download failed -> button
|
||||
Create torrent -> failed -> button
|
||||
Move error alert -> button
|
||||
Debug log alert -> button
|
||||
Download not a torrent -> button
|
||||
Create torrent -> zero size -> button
|
||||
Move inside itself alert -> button
|
||||
Save log alert panel -> button
|
||||
Create torrent -> http warning -> button */
|
||||
"OK" = "OK";
|
||||
|
||||
/* Open toolbar item -> label */
|
||||
"Open" = "Open";
|
||||
|
||||
/* Open toolbar item -> palette label */
|
||||
"Open Torrent Files" = "Open Torrent Files";
|
||||
|
||||
/* Open toolbar item -> tooltip */
|
||||
"Open torrent files" = "Open torrent files";
|
||||
|
||||
/* Pause toolbar item -> label */
|
||||
"Pause" = "Pause";
|
||||
|
||||
/* Pause All toolbar item -> label */
|
||||
"Pause All" = "Pause All";
|
||||
|
||||
/* Pause All toolbar item -> tooltip */
|
||||
"Pause all transfers" = "Pause all transfers";
|
||||
|
||||
/* Pause toolbar item -> palette label */
|
||||
"Pause Selected" = "Pause Selected";
|
||||
|
||||
/* Pause toolbar item -> tooltip */
|
||||
"Pause selected transfers" = "Pause selected transfers";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Paused" = "Paused";
|
||||
|
||||
/* Preferences -> Network -> port status */
|
||||
"Port is closed" = "Port is closed";
|
||||
|
||||
/* Preferences -> Network -> port status */
|
||||
"Port is open" = "Port is open";
|
||||
|
||||
/* Preferences -> Network -> port status */
|
||||
"Port is stealth" = "Port is stealth";
|
||||
|
||||
/* Preferences -> Network -> port map status */
|
||||
"Port successfully mapped" = "Port successfully mapped";
|
||||
|
||||
/* Inspector -> Peers tab -> table row tooltip */
|
||||
"Port: %d" = "Port: %d";
|
||||
|
||||
/* Inspector -> Peers tab -> table row tooltip */
|
||||
"Port: N/A" = "Port: N/A";
|
||||
|
||||
/* Inspector -> files tab -> tooltip */
|
||||
"Priority Not Available" = "Priority Not Available";
|
||||
|
||||
/* Inspector -> is private torrent */
|
||||
"Private Torrent, PEX disabled" = "Private Torrent, PEX disabled";
|
||||
|
||||
/* Inspector -> Peers tab -> table row tooltip */
|
||||
"Progress: %.1f%%" = "Progress: %.1f%%";
|
||||
|
||||
/* Inspector -> is not private torrent */
|
||||
"Public Torrent" = "Public Torrent";
|
||||
|
||||
/* Transmission already running alert -> button
|
||||
OS update needed -> button
|
||||
Confirm Quit panel -> button */
|
||||
"Quit" = "Quit";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Ratio: " = "Ratio: ";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Ratio: %@, " = "Ratio: %@, ";
|
||||
|
||||
/* Removal confirm panel -> button
|
||||
Remove toolbar item -> label */
|
||||
"Remove" = "Remove";
|
||||
|
||||
/* Remove toolbar item -> palette label */
|
||||
"Remove Selected" = "Remove Selected";
|
||||
|
||||
/* Remove toolbar item -> tooltip */
|
||||
"Remove selected transfers" = "Remove selected transfers";
|
||||
|
||||
/* Resume toolbar item -> label */
|
||||
"Resume" = "Resume";
|
||||
|
||||
/* Resume All toolbar item -> label */
|
||||
"Resume All" = "Resume All";
|
||||
|
||||
/* Resume All toolbar item -> tooltip */
|
||||
"Resume all transfers" = "Resume all transfers";
|
||||
|
||||
/* Resume toolbar item -> palette label */
|
||||
"Resume Selected" = "Resume Selected";
|
||||
|
||||
/* Resume toolbar item -> tooltip */
|
||||
"Resume selected transfers" = "Resume selected transfers";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Seeding" = "Seeding";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Seeding complete" = "Seeding complete";
|
||||
|
||||
/* Growl notification title */
|
||||
"Seeding Complete" = "Seeding Complete";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Seeding to %d of %d peers" = "Seeding to %1$d of %2$d peers";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Seeding to %d of 1 peer" = "Seeding to %d of 1 peer";
|
||||
|
||||
/* Folder cannot be found alert -> prompt
|
||||
Default folder cannot be found alert -> prompt
|
||||
Open torrent -> prompt
|
||||
Move torrent -> prompt
|
||||
Default incomplete folder cannot be found alert -> prompt
|
||||
Create torrent -> select file */
|
||||
"Select" = "Select";
|
||||
|
||||
/* Create torrent -> select file */
|
||||
"Select a file or folder for the torrent file." = "Select a file or folder for the torrent file.";
|
||||
|
||||
/* Folder cannot be found alert -> select destination folder
|
||||
Open torrent -> select destination folder */
|
||||
"Select the download folder for \"%@\"" = "Select the download folder for \"%@\"";
|
||||
|
||||
/* Move torrent -> select destination folder */
|
||||
"Select the new folder for %d data files." = "Select the new folder for %d data files.";
|
||||
|
||||
/* Move torrent -> select destination folder */
|
||||
"Select the new folder for \"%@\"." = "Select the new folder for \"%@\".";
|
||||
|
||||
/* Main window -> 1st bottom left button (action) tooltip */
|
||||
"Shortcuts for changing global settings." = "Shortcuts for changing global settings.";
|
||||
|
||||
/* View menu -> Filter Bar */
|
||||
"Show Filter Bar" = "Show Filter Bar";
|
||||
|
||||
/* View menu -> Inspector */
|
||||
"Show Inspector" = "Show Inspector";
|
||||
|
||||
/* View menu -> Status Bar */
|
||||
"Show Status Bar" = "Show Status Bar";
|
||||
|
||||
/* Growl notification title */
|
||||
"Speed Limit Auto Disabled" = "Speed Limit Auto Disabled";
|
||||
|
||||
/* Growl notification title */
|
||||
"Speed Limit Auto Enabled" = "Speed Limit Auto Enabled";
|
||||
|
||||
/* Main window -> 2nd bottom left button (turtle) tooltip */
|
||||
"Speed Limit overrides the total bandwidth limits with its own limits." = "Speed Limit overrides the total bandwidth limits with its own limits.";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Stalled, " = "Stalled, ";
|
||||
|
||||
/* Action context menu -> ratio stop */
|
||||
"Stop at Ratio (%.2f)" = "Stop at Ratio (%.2f)";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Stopping" = "Stopping";
|
||||
|
||||
/* Default folder cannot be found alert -> message */
|
||||
"The download folder cannot be found. Choose a new location." = "The download folder cannot be found. Choose a new location.";
|
||||
|
||||
/* Folder cannot be found alert -> title */
|
||||
"The folder for downloading \"%@\" cannot be found." = "The folder for downloading \"%@\" cannot be found.";
|
||||
|
||||
/* Move folder cannot be found alert -> title */
|
||||
"The folder for moving the completed \"%@\" cannot be found." = "The folder for moving the completed \"%@\" cannot be found.";
|
||||
|
||||
/* Default incomplete folder cannot be found alert -> message */
|
||||
"The incomplete folder cannot be found. Choose a new location or cancel for none." = "The incomplete folder cannot be found. Choose a new location or cancel for none.";
|
||||
|
||||
/* Debug log alert -> message */
|
||||
"The Message Log is set to \"Debug\"" = "The Message Log is set to \"Debug\"";
|
||||
|
||||
/* Move inside itself alert -> message
|
||||
Move error alert -> message */
|
||||
"The move operation of \"%@\" cannot be done." = "The move operation of \"%@\" cannot be done.";
|
||||
|
||||
/* Torrent download failed -> message */
|
||||
"The torrent could not be downloaded from %@ because an error occurred (%@)." = "The torrent could not be downloaded from %1$@ because an error occurred (%2$@).";
|
||||
|
||||
/* Torrent file copy alert -> message */
|
||||
"The torrent file (%@) cannot be found." = "The torrent file (%@) cannot be found.";
|
||||
|
||||
/* Open duplicate alert -> message */
|
||||
"The torrent file cannot be opened because it is a duplicate of an already running transfer." = "The torrent file cannot be opened because it is a duplicate of an already running transfer.";
|
||||
|
||||
/* Create torrent -> zero size -> title */
|
||||
"The total file size is zero bytes." = "The total file size is zero bytes.";
|
||||
|
||||
/* Create torrent -> no url warning -> title */
|
||||
"The tracker address cannot be blank." = "The tracker address cannot be blank.";
|
||||
|
||||
/* Create torrent -> http warning -> title */
|
||||
"The tracker address must begin with \"http://\"." = "The tracker address must begin with \"http://\".";
|
||||
|
||||
/* Torrent file disk space alert -> message */
|
||||
"The transfer will be paused. Clear up space on %@ or deselect files in the torrent inspector to continue." = "The transfer will be paused. Clear up space on %@ or deselect files in the torrent inspector to continue.";
|
||||
|
||||
/* Removal confirm panel -> message part 1 */
|
||||
"There are %d active transfers." = "There are %d active transfers.";
|
||||
|
||||
/* Confirm Quit panel -> message */
|
||||
"There are %d active transfers. Do you really want to quit?" = "There are %d active transfers. Do you really want to quit?";
|
||||
|
||||
/* Removal confirm panel -> message part 1 */
|
||||
"There are %d transfers (%d active)." = "There are %1$d transfers (%2$d active).";
|
||||
|
||||
/* Transmission already running alert -> message */
|
||||
"There is already a copy of Transmission running. This copy cannot be opened until that instance is quit." = "There is already a copy of Transmission running. This copy cannot be opened until that instance is quit.";
|
||||
|
||||
/* Confirm Quit panel -> message */
|
||||
"There is an active transfer. Do you really want to quit?" = "There is an active transfer. Do you really want to quit?";
|
||||
|
||||
/* Create torrent -> no files -> warning */
|
||||
"There must be at least one file in a folder to create a torrent file." = "There must be at least one file in a folder to create a torrent file.";
|
||||
|
||||
/* Save log alert panel -> message */
|
||||
"There was a problem creating the file \"%@\"." = "There was a problem creating the file \"%@\".";
|
||||
|
||||
/* Move error alert -> title */
|
||||
"There was an error moving the data file." = "There was an error moving the data file.";
|
||||
|
||||
/* Create torrent -> failed -> warning */
|
||||
"There was an error parsing the data file. The torrent file was not created." = "There was an error parsing the data file. The torrent file was not created.";
|
||||
|
||||
/* Create torrent -> no files -> title */
|
||||
"This folder contains no files." = "This folder contains no files.";
|
||||
|
||||
/* Removal confirm panel -> message */
|
||||
"This transfer is active. Once removed, continuing the transfer will require the torrent file. Do you really want to remove it?" = "This transfer is active. Once removed, continuing the transfer will require the torrent file. Do you really want to remove it?";
|
||||
|
||||
/* Filter toolbar item -> palette label */
|
||||
"Toggle Filter" = "Toggle Filter";
|
||||
|
||||
/* Inspector toolbar item -> palette label */
|
||||
"Toggle Inspector" = "Toggle Inspector";
|
||||
|
||||
/* Filter toolbar item -> tooltip */
|
||||
"Toggle the filter bar" = "Toggle the filter bar";
|
||||
|
||||
/* Inspector toolbar item -> tooltip */
|
||||
"Toggle the torrent inspector" = "Toggle the torrent inspector";
|
||||
|
||||
/* Torrent download error -> title
|
||||
Download not a torrent -> title */
|
||||
"Torrent download failed" = "Torrent download failed";
|
||||
|
||||
/* Growl notification title */
|
||||
"Torrent File Auto Added" = "Torrent File Auto Added";
|
||||
|
||||
/* Status bar -> total download */
|
||||
"Total DL: " = "Total DL: ";
|
||||
|
||||
/* Status bar -> total upload */
|
||||
"Total UL: " = "Total UL: ";
|
||||
|
||||
/* Preferences -> Transfers toolbar item title */
|
||||
"Transfers" = "Transfers";
|
||||
|
||||
/* OS update needed -> message */
|
||||
"Transmission has features that require a more up-to-date operating system. The operating system must be updated before this version can run." = "Transmission has features that require a more up-to-date operating system. The operating system must be updated before this version can run.";
|
||||
|
||||
/* Transmission already running alert -> title */
|
||||
"Transmission is already running." = "Transmission is already running.";
|
||||
|
||||
/* OS update needed -> title */
|
||||
"Transmission requires Mac OS X 10.4 or greater." = "Transmission requires Mac OS X 10.4 or greater.";
|
||||
|
||||
/* Torrent -> location when deleting original */
|
||||
"Transmission Support Folder" = "Transmission Support Folder";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"UL: " = "UL: ";
|
||||
|
||||
/* Preferences -> Network -> port status */
|
||||
"Unable to check port status" = "Unable to check port status";
|
||||
|
||||
/* Torrent -> remaining time */
|
||||
"Unknown" = "Unknown";
|
||||
|
||||
/* Save log panel -> default file name */
|
||||
"untitled" = "untitled";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Waiting to check existing data" = "Waiting to check existing data";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Waiting to download" = "Waiting to download";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Waiting to seed" = "Waiting to seed";
|
||||
|
||||
/* Drag overlay -> url */
|
||||
"Web Address" = "Web Address";
|
||||
|
|
@ -0,0 +1,205 @@
|
|||
{
|
||||
IBClasses = (
|
||||
{CLASS = ActionPopUpButton; LANGUAGE = ObjC; SUPERCLASS = NSPopUpButton; },
|
||||
{
|
||||
ACTIONS = {
|
||||
announceSelectedTorrents = id;
|
||||
applyFilter = id;
|
||||
applySpeedLimit = id;
|
||||
copyTorrentFiles = id;
|
||||
createFile = id;
|
||||
doNothing = id;
|
||||
linkDonate = id;
|
||||
linkForums = id;
|
||||
linkHomepage = id;
|
||||
moveDataFiles = id;
|
||||
openShowSheet = id;
|
||||
openURLCancelEndSheet = id;
|
||||
openURLEndSheet = id;
|
||||
openURLShowSheet = id;
|
||||
removeDeleteData = id;
|
||||
removeDeleteDataAndTorrent = id;
|
||||
removeDeleteTorrent = id;
|
||||
removeNoDelete = id;
|
||||
resetCacheForSelectedTorrents = id;
|
||||
resumeAllTorrents = id;
|
||||
resumeSelectedTorrents = id;
|
||||
resumeSelectedTorrentsNoWait = id;
|
||||
resumeWaitingTorrents = id;
|
||||
revealFile = id;
|
||||
setFilter = id;
|
||||
setFilterSearchType = id;
|
||||
setInfoTab = id;
|
||||
setLimitGlobalEnabled = id;
|
||||
setQuickLimitGlobal = id;
|
||||
setQuickRatioGlobal = id;
|
||||
setSort = id;
|
||||
setSortReverse = id;
|
||||
showAboutWindow = id;
|
||||
showInfo = id;
|
||||
showMainWindow = id;
|
||||
showMessageWindow = id;
|
||||
showPreferenceWindow = id;
|
||||
stopAllTorrents = id;
|
||||
stopSelectedTorrents = id;
|
||||
switchFilter = id;
|
||||
toggleAdvancedBar = id;
|
||||
toggleFilterBar = id;
|
||||
toggleSmallView = id;
|
||||
toggleSpeedLimit = id;
|
||||
toggleStatusBar = id;
|
||||
};
|
||||
CLASS = Controller;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fActionButton = NSButton;
|
||||
fBottomBar = ImageBackgroundView;
|
||||
fDateSortActionItem = NSMenuItem;
|
||||
fDateSortItem = NSMenuItem;
|
||||
fDockMenu = NSMenu;
|
||||
fDownloadFilterButton = FilterBarButton;
|
||||
fDownloadLimitItem = NSMenuItem;
|
||||
fDownloadMenu = NSMenu;
|
||||
fDownloadNoLimitItem = NSMenuItem;
|
||||
fFilterBar = FilterBarView;
|
||||
fNameSortActionItem = NSMenuItem;
|
||||
fNameSortItem = NSMenuItem;
|
||||
fNextFilterItem = NSMenuItem;
|
||||
fNextInfoTabItem = NSMenuItem;
|
||||
fNoFilterButton = FilterBarButton;
|
||||
fOpenIgnoreDownloadFolder = NSMenuItem;
|
||||
fOrderSortActionItem = NSMenuItem;
|
||||
fOrderSortItem = NSMenuItem;
|
||||
fPauseFilterButton = FilterBarButton;
|
||||
fPrevFilterItem = NSMenuItem;
|
||||
fPrevInfoTabItem = NSMenuItem;
|
||||
fProgressSortActionItem = NSMenuItem;
|
||||
fProgressSortItem = NSMenuItem;
|
||||
fScrollView = NSScrollView;
|
||||
fSearchFilterField = NSSearchField;
|
||||
fSeedFilterButton = FilterBarButton;
|
||||
fSpeedLimitButton = NSButton;
|
||||
fStateSortActionItem = NSMenuItem;
|
||||
fStateSortItem = NSMenuItem;
|
||||
fStatusBar = ImageBackgroundView;
|
||||
fTableView = TorrentTableView;
|
||||
fTotalDLField = NSTextField;
|
||||
fTotalTorrentsField = NSTextField;
|
||||
fTotalULField = NSTextField;
|
||||
fTrackerSortActionItem = NSMenuItem;
|
||||
fTrackerSortItem = NSMenuItem;
|
||||
fURLSheetTextField = NSTextField;
|
||||
fURLSheetWindow = NSWindow;
|
||||
fUpdater = SUUpdater;
|
||||
fUploadLimitItem = NSMenuItem;
|
||||
fUploadMenu = NSMenu;
|
||||
fUploadNoLimitItem = NSMenuItem;
|
||||
fWindow = NSWindow;
|
||||
};
|
||||
SUPERCLASS = NSObject;
|
||||
},
|
||||
{CLASS = FilterBarButton; LANGUAGE = ObjC; SUPERCLASS = NSButton; },
|
||||
{
|
||||
CLASS = FilterBarView;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fDownloadFilterButton = FilterBarButton;
|
||||
fNoFilterButton = FilterBarButton;
|
||||
fPauseFilterButton = FilterBarButton;
|
||||
fSeedFilterButton = FilterBarButton;
|
||||
};
|
||||
SUPERCLASS = ImageBackgroundView;
|
||||
},
|
||||
{
|
||||
ACTIONS = {deselectAll = id; revealFile = id; setNextTab = id; setPreviousTab = id; };
|
||||
CLASS = FirstResponder;
|
||||
LANGUAGE = ObjC;
|
||||
SUPERCLASS = NSObject;
|
||||
},
|
||||
{CLASS = ImageBackgroundView; LANGUAGE = ObjC; SUPERCLASS = NSView; },
|
||||
{CLASS = NSSegmentedControl; LANGUAGE = ObjC; SUPERCLASS = NSControl; },
|
||||
{CLASS = NameCell; LANGUAGE = ObjC; SUPERCLASS = NSCell; },
|
||||
{
|
||||
ACTIONS = {
|
||||
folderSheetShow = id;
|
||||
setAutoStart = id;
|
||||
setBadge = id;
|
||||
setDownloadLocation = id;
|
||||
setLimit = id;
|
||||
setLimitCheck = id;
|
||||
setLimitMenu = id;
|
||||
setPort = id;
|
||||
setQuickRatio = id;
|
||||
setQuickSpeed = id;
|
||||
setRatio = id;
|
||||
setRatioCheck = id;
|
||||
setRatioMenu = id;
|
||||
setShowMessage = id;
|
||||
setUpdate = id;
|
||||
};
|
||||
CLASS = PrefsController;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fAutoStartCheck = NSButton;
|
||||
fBadgeDownloadRateCheck = NSButton;
|
||||
fBadgeUploadRateCheck = NSButton;
|
||||
fBlankView = NSView;
|
||||
fDownloadCheck = NSButton;
|
||||
fDownloadField = NSTextField;
|
||||
fDownloadLimitItem = NSMenuItem;
|
||||
fDownloadMenu = NSMenu;
|
||||
fDownloadNoLimitItem = NSMenuItem;
|
||||
fFolderPopUp = NSPopUpButton;
|
||||
fGeneralView = NSView;
|
||||
fNetworkView = NSView;
|
||||
fPortField = NSTextField;
|
||||
fPrefsWindow = NSPanel;
|
||||
fQuitCheck = NSButton;
|
||||
fRatioCheck = NSButton;
|
||||
fRatioField = NSTextField;
|
||||
fRatioNotSetItem = NSMenuItem;
|
||||
fRatioSetItem = NSMenuItem;
|
||||
fRemoveCheck = NSButton;
|
||||
fTransfersView = NSView;
|
||||
fUpdatePopUp = NSPopUpButton;
|
||||
fUpdater = SUUpdater;
|
||||
fUploadCheck = NSButton;
|
||||
fUploadField = NSTextField;
|
||||
fUploadLimitItem = NSMenuItem;
|
||||
fUploadMenu = NSMenu;
|
||||
fUploadNoLimitItem = NSMenuItem;
|
||||
fWindow = NSWindow;
|
||||
};
|
||||
SUPERCLASS = NSObject;
|
||||
},
|
||||
{CLASS = ProgressCell; LANGUAGE = ObjC; SUPERCLASS = NSCell; },
|
||||
{
|
||||
ACTIONS = {checkForUpdates = id; };
|
||||
CLASS = SUUpdater;
|
||||
LANGUAGE = ObjC;
|
||||
SUPERCLASS = NSObject;
|
||||
},
|
||||
{
|
||||
ACTIONS = {
|
||||
checkFile = id;
|
||||
setQuickLimit = id;
|
||||
setQuickLimitMode = id;
|
||||
setQuickRatio = id;
|
||||
setQuickRatioMode = id;
|
||||
};
|
||||
CLASS = TorrentTableView;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fActionMenu = NSMenu;
|
||||
fContextNoRow = NSMenu;
|
||||
fContextRow = NSMenu;
|
||||
fController = Controller;
|
||||
fDownloadMenu = NSMenu;
|
||||
fRatioMenu = NSMenu;
|
||||
fUploadMenu = NSMenu;
|
||||
};
|
||||
SUPERCLASS = NSTableView;
|
||||
}
|
||||
);
|
||||
IBVersion = 1;
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBDocumentLocation</key>
|
||||
<string>19 80 422 283 0 0 1152 842 </string>
|
||||
<key>IBEditorPositions</key>
|
||||
<dict>
|
||||
<key>1041</key>
|
||||
<string>480 344 208 149 0 0 1680 1028 </string>
|
||||
<key>1480</key>
|
||||
<string>366 546 420 63 0 0 1152 842 </string>
|
||||
<key>1603</key>
|
||||
<string>601 669 477 67 0 0 1680 1028 </string>
|
||||
<key>1936</key>
|
||||
<string>792 514 208 111 0 0 1680 1028 </string>
|
||||
<key>2043</key>
|
||||
<string>63 491 87 68 0 0 1680 1028 </string>
|
||||
<key>29</key>
|
||||
<string>261 932 451 44 0 0 1680 1028 </string>
|
||||
<key>456</key>
|
||||
<string>396 374 240 225 0 0 1152 842 </string>
|
||||
<key>581</key>
|
||||
<string>862 580 115 99 0 0 1680 1028 </string>
|
||||
<key>589</key>
|
||||
<string>323 390 201 87 0 0 1024 746 </string>
|
||||
</dict>
|
||||
<key>IBFramework Version</key>
|
||||
<string>446.1</string>
|
||||
<key>IBLockedObjects</key>
|
||||
<array>
|
||||
<integer>21</integer>
|
||||
</array>
|
||||
<key>IBOldestOS</key>
|
||||
<integer>3</integer>
|
||||
<key>IBOpenObjects</key>
|
||||
<array>
|
||||
<integer>1603</integer>
|
||||
<integer>2043</integer>
|
||||
<integer>21</integer>
|
||||
<integer>29</integer>
|
||||
</array>
|
||||
<key>IBSystem Version</key>
|
||||
<string>8R4031</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
IBClasses = (
|
||||
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
|
||||
{
|
||||
ACTIONS = {changeLevel = id; clearLog = id; writeToFile = id; };
|
||||
CLASS = MessageWindowController;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fDebugWarningField = NSTextField;
|
||||
fDebugWarningIcon = NSImageView;
|
||||
fLevelButton = NSPopUpButton;
|
||||
fMessageTable = NSTableView;
|
||||
};
|
||||
SUPERCLASS = NSWindowController;
|
||||
}
|
||||
);
|
||||
IBVersion = 1;
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBDocumentLocation</key>
|
||||
<string>42 94 356 240 0 0 1680 1028 </string>
|
||||
<key>IBFramework Version</key>
|
||||
<string>446.1</string>
|
||||
<key>IBOpenObjects</key>
|
||||
<array>
|
||||
<integer>5</integer>
|
||||
</array>
|
||||
<key>IBSystem Version</key>
|
||||
<string>8R4031</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
|
@ -0,0 +1,77 @@
|
|||
{
|
||||
IBClasses = (
|
||||
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
|
||||
{CLASS = MenuButton; LANGUAGE = ObjC; SUPERCLASS = NSButton; },
|
||||
{CLASS = NSDatePicker; LANGUAGE = ObjC; SUPERCLASS = NSControl; },
|
||||
{
|
||||
ACTIONS = {
|
||||
applyRatioSetting = id;
|
||||
applySpeedSettings = id;
|
||||
folderSheetShow = id;
|
||||
helpForNetwork = id;
|
||||
importFolderSheetShow = id;
|
||||
incompleteFolderSheetShow = id;
|
||||
resetWarnings = id;
|
||||
setAutoImport = id;
|
||||
setAutoSize = id;
|
||||
setAutoSpeedLimit = id;
|
||||
setBadge = id;
|
||||
setCheckForUpdate = id;
|
||||
setDownloadLocation = id;
|
||||
setGlobalLimit = id;
|
||||
setNat = id;
|
||||
setPort = id;
|
||||
setQueue = id;
|
||||
setQueueNumber = id;
|
||||
setRatioStop = id;
|
||||
setSound = id;
|
||||
setSpeedLimit = id;
|
||||
setStalled = id;
|
||||
setStalledMinutes = id;
|
||||
};
|
||||
CLASS = PrefsController;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fAdvancedView = NSView;
|
||||
fBandwidthView = NSView;
|
||||
fDownloadField = NSTextField;
|
||||
fDownloadSoundPopUp = NSPopUpButton;
|
||||
fFolderPopUp = NSPopUpButton;
|
||||
fGeneralView = NSView;
|
||||
fImportFolderPopUp = NSPopUpButton;
|
||||
fIncompleteFolderPopUp = NSPopUpButton;
|
||||
fNatCheck = NSButton;
|
||||
fNatStatusField = NSTextField;
|
||||
fNatStatusImage = NSImageView;
|
||||
fPortField = NSTextField;
|
||||
fPortStatusField = NSTextField;
|
||||
fPortStatusImage = NSImageView;
|
||||
fPortStatusProgress = NSProgressIndicator;
|
||||
fQueueDownloadField = NSTextField;
|
||||
fQueueSeedField = NSTextField;
|
||||
fRatioStopField = NSTextField;
|
||||
fSeedingSoundPopUp = NSPopUpButton;
|
||||
fSpeedLimitDownloadField = NSTextField;
|
||||
fSpeedLimitUploadField = NSTextField;
|
||||
fStalledField = NSTextField;
|
||||
fTransfersView = NSView;
|
||||
fUploadField = NSTextField;
|
||||
};
|
||||
SUPERCLASS = NSWindowController;
|
||||
},
|
||||
{CLASS = PrefsWindow; LANGUAGE = ObjC; SUPERCLASS = NSWindow; },
|
||||
{
|
||||
ACTIONS = {checkForUpdates = id; };
|
||||
CLASS = SUUpdater;
|
||||
LANGUAGE = ObjC;
|
||||
SUPERCLASS = NSObject;
|
||||
},
|
||||
{
|
||||
CLASS = TorrentTableView;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {fContextNoRow = NSMenu; fContextRow = NSMenu; fController = Controller; };
|
||||
SUPERCLASS = NSTableView;
|
||||
}
|
||||
);
|
||||
IBVersion = 1;
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBDocumentLocation</key>
|
||||
<string>32 103 356 240 0 0 1680 1028 </string>
|
||||
<key>IBEditorPositions</key>
|
||||
<dict>
|
||||
<key>153</key>
|
||||
<string>558 568 563 268 0 0 1680 1028 </string>
|
||||
<key>28</key>
|
||||
<string>558 545 563 314 0 0 1680 1028 </string>
|
||||
<key>41</key>
|
||||
<string>558 550 563 305 0 0 1680 1028 </string>
|
||||
<key>66</key>
|
||||
<string>558 578 563 249 0 0 1680 1028 </string>
|
||||
</dict>
|
||||
<key>IBFramework Version</key>
|
||||
<string>446.1</string>
|
||||
<key>IBLockedTabItems</key>
|
||||
<array>
|
||||
<integer>253</integer>
|
||||
</array>
|
||||
<key>IBOpenObjects</key>
|
||||
<array>
|
||||
<integer>66</integer>
|
||||
</array>
|
||||
<key>IBSystem Version</key>
|
||||
<string>8R4031</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
|
@ -0,0 +1,31 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface ExpandedPathToIconTransformer : NSValueTransformer
|
||||
{
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,58 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import "ExpandedPathToIconTransformer.h"
|
||||
|
||||
@implementation ExpandedPathToIconTransformer
|
||||
|
||||
+ (Class) transformedValueClass
|
||||
{
|
||||
return [NSImage class];
|
||||
}
|
||||
|
||||
+ (BOOL) allowsReverseTransformation
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (id) transformedValue: (id) value
|
||||
{
|
||||
if (!value)
|
||||
return nil;
|
||||
|
||||
NSString * path = [value stringByExpandingTildeInPath];
|
||||
NSImage * icon;
|
||||
//show a folder icon if the folder doesn't exist
|
||||
if (![[NSFileManager defaultManager] fileExistsAtPath: path] && [[path pathExtension] isEqualToString: @""])
|
||||
icon = [[NSWorkspace sharedWorkspace] iconForFileType: NSFileTypeForHFSTypeCode('fldr')];
|
||||
else
|
||||
icon = [[NSWorkspace sharedWorkspace] iconForFile: [value stringByExpandingTildeInPath]];
|
||||
|
||||
[icon setScalesWhenResized: YES];
|
||||
[icon setSize: NSMakeSize(16.0, 16.0)];
|
||||
|
||||
return icon;
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,31 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface ExpandedPathToPathTransformer : NSValueTransformer
|
||||
{
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,44 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import "ExpandedPathToPathTransformer.h"
|
||||
|
||||
@implementation ExpandedPathToPathTransformer
|
||||
|
||||
+ (Class) transformedValueClass
|
||||
{
|
||||
return [NSString class];
|
||||
}
|
||||
|
||||
+ (BOOL) allowsReverseTransformation
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (id) transformedValue: (id) value
|
||||
{
|
||||
return value == nil ? nil : [value lastPathComponent];
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,38 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@interface FileNameCell : NSActionCell
|
||||
{
|
||||
NSImage * fFolderImage;
|
||||
|
||||
NSMutableDictionary * fTitleAttributes, * fStatusAttributes;
|
||||
}
|
||||
|
||||
- (NSRect) imageRectForBounds: (NSRect) bounds;
|
||||
- (NSRect) titleRectForBounds: (NSRect) bounds;
|
||||
- (NSRect) statusRectForBounds: (NSRect) bounds;
|
||||
|
||||
@end
|
|
@ -0,0 +1,208 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import "FileNameCell.h"
|
||||
#import "InfoWindowController.h"
|
||||
#import "NSStringAdditions.h"
|
||||
|
||||
#define PADDING_HORIZONAL 2.0
|
||||
#define IMAGE_FOLDER_SIZE 16.0
|
||||
#define IMAGE_ICON_SIZE 32.0
|
||||
#define PADDING_BETWEEN_IMAGE_AND_TITLE 4.0
|
||||
#define PADDING_ABOVE_TITLE_FILE 2.0
|
||||
#define PADDING_BELOW_STATUS_FILE 2.0
|
||||
|
||||
@interface FileNameCell (Private)
|
||||
|
||||
- (NSRect) rectForTitleWithString: (NSAttributedString *) string inBounds: (NSRect) bounds;
|
||||
- (NSRect) rectForStatusWithString: (NSAttributedString *) string inBounds: (NSRect) bounds;
|
||||
|
||||
- (NSAttributedString *) attributedTitleWithColor: (NSColor *) color;
|
||||
- (NSAttributedString *) attributedStatusWithColor: (NSColor *) color;
|
||||
|
||||
@end
|
||||
|
||||
@implementation FileNameCell
|
||||
|
||||
- (NSImage *) image
|
||||
{
|
||||
NSImage * image = [[self objectValue] objectForKey: @"Icon"];
|
||||
if (!image)
|
||||
{
|
||||
if (!fFolderImage)
|
||||
{
|
||||
fFolderImage = [[[NSWorkspace sharedWorkspace] iconForFileType: NSFileTypeForHFSTypeCode('fldr')] copy];
|
||||
[fFolderImage setFlipped: YES];
|
||||
}
|
||||
image = fFolderImage;
|
||||
}
|
||||
return image;
|
||||
}
|
||||
|
||||
- (NSRect) imageRectForBounds: (NSRect) bounds
|
||||
{
|
||||
NSRect result = bounds;
|
||||
|
||||
result.origin.x += PADDING_HORIZONAL;
|
||||
|
||||
const float IMAGE_SIZE = [[[self objectValue] objectForKey: @"IsFolder"] boolValue] ? IMAGE_FOLDER_SIZE : IMAGE_ICON_SIZE;
|
||||
result.origin.y += (result.size.height - IMAGE_SIZE) * 0.5;
|
||||
result.size = NSMakeSize(IMAGE_SIZE, IMAGE_SIZE);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
- (NSRect) titleRectForBounds: (NSRect) bounds
|
||||
{
|
||||
return [self rectForTitleWithString: [self attributedTitleWithColor: nil] inBounds: bounds];
|
||||
}
|
||||
|
||||
- (NSRect) statusRectForBounds: (NSRect) bounds
|
||||
{
|
||||
return [self rectForStatusWithString: [self attributedStatusWithColor: nil] inBounds: bounds];
|
||||
}
|
||||
|
||||
- (void) drawWithFrame: (NSRect) cellFrame inView: (NSView *) controlView
|
||||
{
|
||||
//icon
|
||||
[[self image] drawInRect: [self imageRectForBounds: cellFrame] fromRect: NSZeroRect operation: NSCompositeSourceOver
|
||||
fraction: 1.0];
|
||||
|
||||
Torrent * torrent = [[[[self controlView] window] windowController] selectedTorrent];
|
||||
|
||||
//title
|
||||
NSColor * specialColor = nil;
|
||||
if ([self isHighlighted]
|
||||
&& [[self highlightColorWithFrame: cellFrame inView: controlView] isEqual: [NSColor alternateSelectedControlColor]])
|
||||
specialColor = [NSColor whiteColor];
|
||||
else if ([torrent checkForFiles: [[self objectValue] objectForKey: @"Indexes"]] == NSOffState)
|
||||
specialColor = [NSColor disabledControlTextColor];
|
||||
else;
|
||||
|
||||
NSAttributedString * titleString = [self attributedTitleWithColor: specialColor ? specialColor : [NSColor controlTextColor]];
|
||||
NSRect titleRect = [self rectForTitleWithString: titleString inBounds: cellFrame];
|
||||
[titleString drawInRect: titleRect];
|
||||
|
||||
//status
|
||||
if (![[[self objectValue] objectForKey: @"IsFolder"] boolValue])
|
||||
{
|
||||
NSAttributedString * statusString = [self attributedStatusWithColor: specialColor ? specialColor : [NSColor darkGrayColor]];
|
||||
NSRect statusRect = [self rectForStatusWithString: statusString inBounds: cellFrame];
|
||||
[statusString drawInRect: statusRect];
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation FileNameCell (Private)
|
||||
|
||||
- (NSRect) rectForTitleWithString: (NSAttributedString *) string inBounds: (NSRect) bounds
|
||||
{
|
||||
NSSize titleSize = [string size];
|
||||
|
||||
NSRect result = bounds;
|
||||
|
||||
if (![[[self objectValue] objectForKey: @"IsFolder"] boolValue])
|
||||
{
|
||||
result.origin.x += PADDING_HORIZONAL + IMAGE_ICON_SIZE + PADDING_BETWEEN_IMAGE_AND_TITLE;
|
||||
result.origin.y += PADDING_ABOVE_TITLE_FILE;
|
||||
}
|
||||
else
|
||||
{
|
||||
result.origin.x += PADDING_HORIZONAL + IMAGE_FOLDER_SIZE + PADDING_BETWEEN_IMAGE_AND_TITLE;
|
||||
result.origin.y += (result.size.height - titleSize.height) * 0.5;
|
||||
}
|
||||
result.size = titleSize;
|
||||
result.size.width = MIN(result.size.width, NSMaxX(bounds) - result.origin.x - PADDING_HORIZONAL);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
- (NSRect) rectForStatusWithString: (NSAttributedString *) string inBounds: (NSRect) bounds
|
||||
{
|
||||
if ([[[self objectValue] objectForKey: @"IsFolder"] boolValue])
|
||||
return NSZeroRect;
|
||||
|
||||
NSSize statusSize = [string size];
|
||||
|
||||
NSRect result = bounds;
|
||||
|
||||
result.origin.x += PADDING_HORIZONAL + IMAGE_ICON_SIZE + PADDING_BETWEEN_IMAGE_AND_TITLE;
|
||||
result.origin.y += result.size.height - PADDING_BELOW_STATUS_FILE - statusSize.height;
|
||||
|
||||
result.size = statusSize;
|
||||
result.size.width = MIN(result.size.width, NSMaxX(bounds) - result.origin.x - PADDING_HORIZONAL);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
- (NSAttributedString *) attributedTitleWithColor: (NSColor *) color
|
||||
{
|
||||
if (!fTitleAttributes)
|
||||
{
|
||||
NSMutableParagraphStyle * paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
|
||||
[paragraphStyle setLineBreakMode: NSLineBreakByTruncatingTail];
|
||||
|
||||
fTitleAttributes = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
|
||||
[NSFont messageFontOfSize: 12.0], NSFontAttributeName,
|
||||
paragraphStyle, NSParagraphStyleAttributeName, nil];
|
||||
|
||||
[paragraphStyle release];
|
||||
}
|
||||
|
||||
if (color)
|
||||
[fTitleAttributes setObject: color forKey: NSForegroundColorAttributeName];
|
||||
|
||||
NSString * title = [[self objectValue] objectForKey: @"Name"];
|
||||
return [[[NSAttributedString alloc] initWithString: title attributes: fTitleAttributes] autorelease];
|
||||
}
|
||||
|
||||
- (NSAttributedString *) attributedStatusWithColor: (NSColor *) color
|
||||
{
|
||||
if (!fStatusAttributes)
|
||||
{
|
||||
NSMutableParagraphStyle * paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
|
||||
[paragraphStyle setLineBreakMode: NSLineBreakByTruncatingTail];
|
||||
|
||||
fStatusAttributes = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
|
||||
[NSFont messageFontOfSize: 9.0], NSFontAttributeName,
|
||||
paragraphStyle, NSParagraphStyleAttributeName, nil];
|
||||
|
||||
[paragraphStyle release];
|
||||
}
|
||||
|
||||
if (color)
|
||||
[fStatusAttributes setObject: color forKey: NSForegroundColorAttributeName];
|
||||
|
||||
Torrent * torrent = [[[[self controlView] window] windowController] selectedTorrent];
|
||||
float percent = [torrent fileProgress: [[[self objectValue] objectForKey: @"Indexes"] firstIndex]] * 100.0;
|
||||
|
||||
NSString * status = [NSString stringWithFormat: NSLocalizedString(@"%.2f%% of %@",
|
||||
"Inspector -> Files tab -> file status string"), percent,
|
||||
[NSString stringForFileSize: [[[self objectValue] objectForKey: @"Size"] unsignedLongLongValue]]];
|
||||
|
||||
return [[[NSAttributedString alloc] initWithString: status attributes: fStatusAttributes] autorelease];
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,37 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@interface FileOutlineView : NSOutlineView
|
||||
{
|
||||
NSColor * fNormalColor, * fHighPriorityColor, * fLowPriorityColor, * fMixedPriorityColor;
|
||||
|
||||
int fHoverRow;
|
||||
}
|
||||
|
||||
- (void) setHoverRowForEvent: (NSEvent *) event;
|
||||
- (int) hoverRow;
|
||||
|
||||
@end
|
|
@ -0,0 +1,148 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import "FileOutlineView.h"
|
||||
#import "FileNameCell.h"
|
||||
#import "FilePriorityCell.h"
|
||||
#import "InfoWindowController.h"
|
||||
#import "Torrent.h"
|
||||
|
||||
@implementation FileOutlineView
|
||||
|
||||
- (void) awakeFromNib
|
||||
{
|
||||
FileNameCell * nameCell = [[FileNameCell alloc] init];
|
||||
[[self tableColumnWithIdentifier: @"Name"] setDataCell: nameCell];
|
||||
[nameCell release];
|
||||
|
||||
FilePriorityCell * priorityCell = [[FilePriorityCell alloc] init];
|
||||
[[self tableColumnWithIdentifier: @"Priority"] setDataCell: priorityCell];
|
||||
[priorityCell release];
|
||||
|
||||
[self setAutoresizesOutlineColumn: NO];
|
||||
[self setIndentationPerLevel: 14.0];
|
||||
|
||||
fNormalColor = [self backgroundColor];
|
||||
fHighPriorityColor = [[NSColor colorWithCalibratedRed: 0.8588 green: 0.9961 blue: 0.8311 alpha: 1.0] retain];
|
||||
fLowPriorityColor = [[NSColor colorWithCalibratedRed: 1.0 green: 0.9529 blue: 0.8078 alpha: 1.0] retain];
|
||||
fMixedPriorityColor = [[NSColor colorWithCalibratedRed: 0.9216 green: 0.9059 blue: 1.0 alpha: 1.0] retain];
|
||||
|
||||
fHoverRow = -1;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[fHighPriorityColor release];
|
||||
[fLowPriorityColor release];
|
||||
[fMixedPriorityColor release];
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void) mouseDown: (NSEvent *) event
|
||||
{
|
||||
[[self window] makeKeyWindow];
|
||||
[super mouseDown: event];
|
||||
}
|
||||
|
||||
- (NSMenu *) menuForEvent: (NSEvent *) event
|
||||
{
|
||||
int row = [self rowAtPoint: [self convertPoint: [event locationInWindow] fromView: nil]];
|
||||
|
||||
if (row >= 0)
|
||||
{
|
||||
if (![self isRowSelected: row])
|
||||
[self selectRowIndexes: [NSIndexSet indexSetWithIndex: row] byExtendingSelection: NO];
|
||||
}
|
||||
else
|
||||
[self deselectAll: self];
|
||||
|
||||
return [self menu];
|
||||
}
|
||||
|
||||
- (void) setHoverRowForEvent: (NSEvent *) event
|
||||
{
|
||||
int row = -1;
|
||||
if (event)
|
||||
{
|
||||
NSPoint point = [self convertPoint: [event locationInWindow] fromView: nil];
|
||||
if ([self columnAtPoint: point] == [self columnWithIdentifier: @"Priority"])
|
||||
row = [self rowAtPoint: point];
|
||||
}
|
||||
|
||||
if (row != fHoverRow)
|
||||
{
|
||||
if (fHoverRow != -1)
|
||||
[self reloadItem: [self itemAtRow: fHoverRow]];
|
||||
fHoverRow = row;
|
||||
if (fHoverRow != -1)
|
||||
[self reloadItem: [self itemAtRow: fHoverRow]];
|
||||
}
|
||||
}
|
||||
|
||||
- (int) hoverRow
|
||||
{
|
||||
return fHoverRow;
|
||||
}
|
||||
|
||||
- (void) drawRow: (int) row clipRect: (NSRect) clipRect
|
||||
{
|
||||
if (![self isRowSelected: row])
|
||||
{
|
||||
NSDictionary * item = [self itemAtRow: row];
|
||||
Torrent * torrent = [(InfoWindowController *)[[self window] windowController] selectedTorrent];
|
||||
NSIndexSet * indexes = [item objectForKey: @"Indexes"];
|
||||
|
||||
if ([torrent checkForFiles: indexes] == NSOffState)
|
||||
[fNormalColor set];
|
||||
else
|
||||
{
|
||||
NSSet * priorities = [torrent filePrioritiesForIndexes: indexes];
|
||||
int count = [priorities count];
|
||||
if (count == 0)
|
||||
[fNormalColor set];
|
||||
else if (count > 1)
|
||||
[fMixedPriorityColor set];
|
||||
else
|
||||
{
|
||||
int priority = [[priorities anyObject] intValue];
|
||||
if (priority == TR_PRI_LOW)
|
||||
[fLowPriorityColor set];
|
||||
else if (priority == TR_PRI_HIGH)
|
||||
[fHighPriorityColor set];
|
||||
else
|
||||
[fNormalColor set];
|
||||
}
|
||||
}
|
||||
|
||||
NSRect rect = [self rectOfRow: row];
|
||||
rect.size.height -= 1.0;
|
||||
|
||||
NSRectFill(rect);
|
||||
}
|
||||
|
||||
[super drawRow: row clipRect: clipRect];
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,35 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "FileOutlineView.h"
|
||||
|
||||
@interface FilePriorityCell : NSSegmentedCell
|
||||
{
|
||||
NSMutableDictionary * fItem;
|
||||
|
||||
NSImage * fLowImage, * fHighImage, * fNormalImage, * fMixedImage, * fNoneImage;
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,126 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import "FilePriorityCell.h"
|
||||
#import "InfoWindowController.h"
|
||||
#import "Torrent.h"
|
||||
|
||||
@implementation FilePriorityCell
|
||||
|
||||
- (id) init
|
||||
{
|
||||
if ((self = [super init]))
|
||||
{
|
||||
[self setTrackingMode: NSSegmentSwitchTrackingSelectAny];
|
||||
[self setControlSize: NSMiniControlSize];
|
||||
[self setSegmentCount: 3];
|
||||
|
||||
int i;
|
||||
for (i = 0; i < [self segmentCount]; i++)
|
||||
{
|
||||
[self setLabel: @"" forSegment: i];
|
||||
[self setWidth: 7.0 forSegment: i];
|
||||
}
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) setSelected: (BOOL) flag forSegment: (int) segment
|
||||
{
|
||||
[super setSelected: flag forSegment: segment];
|
||||
|
||||
//only for when clicking manually
|
||||
Torrent * torrent = [[[[self controlView] window] windowController] selectedTorrent];
|
||||
|
||||
int priority;
|
||||
if (segment == 0)
|
||||
priority = TR_PRI_LOW;
|
||||
else if (segment == 2)
|
||||
priority = TR_PRI_HIGH;
|
||||
else
|
||||
priority = TR_PRI_NORMAL;
|
||||
|
||||
[torrent setFilePriority: priority forIndexes: [[self representedObject] objectForKey: @"Indexes"]];
|
||||
[(FileOutlineView *)[self controlView] reloadData];
|
||||
}
|
||||
|
||||
- (void) drawWithFrame: (NSRect) cellFrame inView: (NSView *) controlView
|
||||
{
|
||||
Torrent * torrent = [(InfoWindowController *)[[[self controlView] window] windowController] selectedTorrent];
|
||||
NSDictionary * dict = [self representedObject];
|
||||
NSSet * priorities = [torrent filePrioritiesForIndexes: [dict objectForKey: @"Indexes"]];
|
||||
|
||||
int count = [priorities count];
|
||||
|
||||
FileOutlineView * view = (FileOutlineView *)[self controlView];
|
||||
int row = [view hoverRow];
|
||||
if (count > 0 && row != -1 && [view itemAtRow: row] == dict)
|
||||
{
|
||||
[super setSelected: [priorities containsObject: [NSNumber numberWithInt: TR_PRI_LOW]] forSegment: 0];
|
||||
[super setSelected: [priorities containsObject: [NSNumber numberWithInt: TR_PRI_NORMAL]] forSegment: 1];
|
||||
[super setSelected: [priorities containsObject: [NSNumber numberWithInt: TR_PRI_HIGH]] forSegment: 2];
|
||||
|
||||
[super drawWithFrame: cellFrame inView: controlView];
|
||||
}
|
||||
else
|
||||
{
|
||||
NSImage * image;
|
||||
if (count == 0)
|
||||
{
|
||||
if (!fNoneImage)
|
||||
fNoneImage = [NSImage imageNamed: @"PriorityNone.png"];
|
||||
image = fNoneImage;
|
||||
}
|
||||
else if (count > 1)
|
||||
{
|
||||
if (!fMixedImage)
|
||||
fMixedImage = [NSImage imageNamed: @"PriorityMixed.png"];
|
||||
image = fMixedImage;
|
||||
}
|
||||
else if ([priorities containsObject: [NSNumber numberWithInt: TR_PRI_NORMAL]])
|
||||
{
|
||||
if (!fNormalImage)
|
||||
fNormalImage = [NSImage imageNamed: @"PriorityNormal.png"];
|
||||
image = fNormalImage;
|
||||
}
|
||||
else if ([priorities containsObject: [NSNumber numberWithInt: TR_PRI_LOW]])
|
||||
{
|
||||
if (!fLowImage)
|
||||
fLowImage = [NSImage imageNamed: @"PriorityLow.png"];
|
||||
image = fLowImage;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!fHighImage)
|
||||
fHighImage = [NSImage imageNamed: @"PriorityHigh.png"];
|
||||
image = fHighImage;
|
||||
}
|
||||
|
||||
NSSize imageSize = [image size];
|
||||
[image compositeToPoint: NSMakePoint(cellFrame.origin.x + (cellFrame.size.width - imageSize.width) * 0.5,
|
||||
cellFrame.origin.y + (cellFrame.size.height + imageSize.height) * 0.5) operation: NSCompositeSourceOver];
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,51 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2006-2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@class CTGradient;
|
||||
@interface FilterBarButton : NSButton
|
||||
{
|
||||
int fCount;
|
||||
int fState;
|
||||
BOOL fEnabled;
|
||||
NSTrackingRectTag fTrackingTag;
|
||||
NSBezierPath * fPath, * fEdgePath, * fStepPath;
|
||||
NSDictionary * fNormalAttributes, * fNormalDimAttributes,
|
||||
* fHighlightedAttributes, * fHighlightedDimAttributes;
|
||||
CTGradient * fHighlightedBackground, * fHighlightedOutline,
|
||||
* fActiveBackground, * fActiveOutline,
|
||||
* fHoveringBackground;
|
||||
NSColor * fHoveringOutline;
|
||||
}
|
||||
|
||||
- (void) setCount: (int) count;
|
||||
- (void) setEnabled: (BOOL) enable;
|
||||
|
||||
- (void) resetBounds: (NSNotification *) notification;
|
||||
|
||||
- (void) setForActive: (NSNotification *) notification;
|
||||
- (void) setForInactive: (NSNotification *) notification;
|
||||
|
||||
@end
|
|
@ -0,0 +1,300 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2006-2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import "FilterBarButton.h"
|
||||
#import "CTGradient.h"
|
||||
#import "CTGradientAdditions.h"
|
||||
#import "NSBezierPathAdditions.h"
|
||||
|
||||
@interface FilterBarButton (Private)
|
||||
|
||||
- (void) createPaths;
|
||||
- (void) createGradients;
|
||||
- (void) createFontAttributes;
|
||||
|
||||
@end
|
||||
|
||||
@implementation FilterBarButton
|
||||
|
||||
- (id) initWithCoder: (NSCoder *) coder
|
||||
{
|
||||
if ((self = [super initWithCoder: coder]))
|
||||
{
|
||||
fEnabled = NO;
|
||||
fTrackingTag = 0;
|
||||
fCount = -1;
|
||||
[self setCount: 0];
|
||||
[self createPaths];
|
||||
[self createGradients];
|
||||
[self createFontAttributes];
|
||||
|
||||
NSNotificationCenter * nc = [NSNotificationCenter defaultCenter];
|
||||
[nc addObserver: self selector: @selector(setForActive:) name: NSWindowDidBecomeKeyNotification object: [self window]];
|
||||
[nc addObserver: self selector: @selector(setForInactive:) name: NSWindowDidResignKeyNotification object: [self window]];
|
||||
[nc addObserver: self selector: @selector(resetBounds:) name: NSViewFrameDidChangeNotification object: nil];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[[NSNotificationCenter defaultCenter] removeObserver: self];
|
||||
|
||||
[fPath release];
|
||||
[fEdgePath release];
|
||||
[fStepPath release];
|
||||
|
||||
[fNormalAttributes release];
|
||||
[fNormalDimAttributes release];
|
||||
[fHighlightedAttributes release];
|
||||
|
||||
[fHighlightedDimAttributes release];
|
||||
[fHighlightedBackground release];
|
||||
[fHighlightedOutline release];
|
||||
[fActiveBackground release];
|
||||
[fActiveOutline release];
|
||||
[fHoveringBackground release];
|
||||
[fHoveringOutline release];
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void) sizeToFit
|
||||
{
|
||||
NSSize size = [[self title] sizeWithAttributes: fNormalAttributes];
|
||||
size.width = floorf(size.width + 14.5);
|
||||
size.height += 1;
|
||||
[self setFrameSize: size];
|
||||
[self setBoundsSize: size];
|
||||
[self createPaths];
|
||||
}
|
||||
|
||||
- (BOOL) isFlipped
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (void) drawRect: (NSRect) rect
|
||||
{
|
||||
// draw background
|
||||
if ([[self cell] isHighlighted])
|
||||
{
|
||||
[fHighlightedBackground fillBezierPath: fPath angle: -90.0];
|
||||
[fHighlightedOutline fillBezierPath: fStepPath angle: -90.0];
|
||||
}
|
||||
else
|
||||
switch (fState)
|
||||
{
|
||||
case 1: // active
|
||||
[fActiveBackground fillBezierPath: fPath angle: -90.0];
|
||||
[fActiveOutline fillBezierPath: fStepPath angle: -90.0];
|
||||
break;
|
||||
case 2: // hovering
|
||||
case 3: // clicked but cell is not highlighted
|
||||
[fHoveringBackground fillBezierPath: fPath angle: -90.0];
|
||||
[fHoveringOutline setStroke];
|
||||
[fEdgePath stroke];
|
||||
break;
|
||||
}
|
||||
|
||||
// draw title
|
||||
NSSize titleSize = [[self title] sizeWithAttributes: fNormalAttributes];
|
||||
NSPoint titlePos = NSMakePoint(([self bounds].size.width - titleSize.width) * 0.5,
|
||||
([self bounds].size.height - titleSize.height) * 0.5 + 1.5);
|
||||
|
||||
NSDictionary * attributes;
|
||||
if (fState)
|
||||
attributes = fEnabled ? fHighlightedAttributes : fHighlightedDimAttributes;
|
||||
else
|
||||
attributes = fEnabled ? fNormalAttributes : fNormalDimAttributes;
|
||||
|
||||
[[self title] drawAtPoint: titlePos withAttributes: attributes];
|
||||
}
|
||||
|
||||
- (void) setCount: (int) count
|
||||
{
|
||||
if (count == fCount)
|
||||
return;
|
||||
fCount = count;
|
||||
|
||||
[self setToolTip: fCount == 1 ? NSLocalizedString(@"1 Transfer", "Filter Bar Button -> tool tip")
|
||||
: [NSString stringWithFormat: NSLocalizedString(@"%d Transfers", "Filter Bar Button -> tool tip"), fCount]];
|
||||
}
|
||||
|
||||
- (void) mouseDown: (NSEvent *) event
|
||||
{
|
||||
if ([self state] != 1)
|
||||
[self setState: 3];
|
||||
[super mouseDown: event];
|
||||
}
|
||||
|
||||
- (void) mouseUp: (NSEvent *) event
|
||||
{
|
||||
[super mouseUp: event];
|
||||
if ([self state] != 1)
|
||||
[self setState: 1];
|
||||
}
|
||||
|
||||
- (void) mouseEntered: (NSEvent *) event
|
||||
{
|
||||
[super mouseEntered: event];
|
||||
if ([self state] == 0)
|
||||
[self setState: 2];
|
||||
}
|
||||
|
||||
- (void) mouseExited: (NSEvent *) event
|
||||
{
|
||||
[super mouseExited: event];
|
||||
if ([self state] >= 2)
|
||||
[self setState: 0];
|
||||
}
|
||||
|
||||
- (void) setEnabled: (BOOL) enable
|
||||
{
|
||||
fEnabled = enable;
|
||||
[self setNeedsDisplay: YES];
|
||||
}
|
||||
|
||||
- (int) state
|
||||
{
|
||||
return fState;
|
||||
}
|
||||
|
||||
- (void) setState: (int) state
|
||||
{
|
||||
fState = state;
|
||||
[self setNeedsDisplay: YES];
|
||||
}
|
||||
|
||||
- (void) resetBounds: (NSNotification *) notification
|
||||
{
|
||||
if (fTrackingTag)
|
||||
[self removeTrackingRect: fTrackingTag];
|
||||
fTrackingTag = [self addTrackingRect: [self bounds] owner: self userData: nil assumeInside: NO];
|
||||
}
|
||||
|
||||
- (void) setForActive: (NSNotification *) notification
|
||||
{
|
||||
[self setEnabled: YES];
|
||||
[self resetBounds: nil];
|
||||
[self setNeedsDisplay: YES];
|
||||
}
|
||||
|
||||
- (void) setForInactive: (NSNotification *) notification
|
||||
{
|
||||
if (fTrackingTag)
|
||||
{
|
||||
[self removeTrackingRect: fTrackingTag];
|
||||
fTrackingTag = 0;
|
||||
}
|
||||
[self setEnabled: NO];
|
||||
[self setNeedsDisplay: YES];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation FilterBarButton (Private)
|
||||
|
||||
- (void) createPaths
|
||||
{
|
||||
NSSize buttonSize = [self frame].size;
|
||||
|
||||
// the main button path
|
||||
[fPath release];
|
||||
fPath = [[NSBezierPath bezierPathWithRoundedRect: NSMakeRect(0.0, 1.0, buttonSize.width, buttonSize.height - 1.0)
|
||||
radius: (buttonSize.height - 1.0) / 2.0] retain];
|
||||
|
||||
// the path used to draw the hover edging
|
||||
[fEdgePath release];
|
||||
fEdgePath = [[NSBezierPath bezierPathWithRoundedRect: NSMakeRect(0.5, 1.5, buttonSize.width - 1.0, buttonSize.height - 2.0)
|
||||
radius: (buttonSize.height - 2.0) / 2.0] retain];
|
||||
|
||||
// the path used to draw the depressed shading/highlights of the active button
|
||||
[fStepPath release];
|
||||
fStepPath = [[NSBezierPath bezierPathWithRoundedRect: NSMakeRect(0.0, 0.0, buttonSize.width, buttonSize.height - 1.0)
|
||||
radius: (buttonSize.height - 1.0) / 2.0] retain];
|
||||
[fStepPath appendBezierPath: fPath];
|
||||
[fStepPath setWindingRule: NSEvenOddWindingRule];
|
||||
}
|
||||
|
||||
- (void) createGradients
|
||||
{
|
||||
NSColor *quarterAlphaBlack = [NSColor colorWithCalibratedWhite: 0.0 alpha: 0.25];
|
||||
NSColor *thirdAlphaWhite = [NSColor colorWithCalibratedWhite: 1.0 alpha: 0.3333];
|
||||
fHighlightedBackground = [[CTGradient gradientWithBeginningColor: [NSColor colorWithCalibratedRed: 134.0/255 green: 151.0/255 blue: 176.0/255 alpha: 1.0]
|
||||
endingColor: [NSColor colorWithCalibratedRed: 104.0/255 green: 125.0/255 blue: 157.0/255 alpha: 1.0]] retain];
|
||||
fHighlightedOutline = [[CTGradient gradientWithBeginningColor: quarterAlphaBlack
|
||||
middleColor1: quarterAlphaBlack
|
||||
middleColor2: thirdAlphaWhite
|
||||
endingColor: thirdAlphaWhite] retain];
|
||||
fActiveBackground = [[CTGradient gradientWithBeginningColor: [NSColor colorWithCalibratedRed: 151.0/255 green: 166.0/255 blue: 188.0/255 alpha: 1.0]
|
||||
endingColor: [NSColor colorWithCalibratedRed: 126.0/255 green: 144.0/255 blue: 171.0/255 alpha: 1.0]] retain];
|
||||
fActiveOutline = [fHighlightedOutline retain];
|
||||
fHoveringBackground = [[CTGradient gradientWithBeginningColor: [NSColor colorWithCalibratedRed: 164.0/255 green: 177.0/255 blue: 196.0/255 alpha: 1.0]
|
||||
endingColor: [NSColor colorWithCalibratedRed: 141.0/255 green: 158.0/255 blue: 182.0/255 alpha: 1.0]] retain];
|
||||
fHoveringOutline = [[NSColor colorWithCalibratedWhite: 0.0 alpha: 0.075] retain];
|
||||
}
|
||||
|
||||
- (void) createFontAttributes
|
||||
{
|
||||
NSFont * boldSystemFont = [NSFont boldSystemFontOfSize: 12.0];
|
||||
NSSize shadowOffset = NSMakeSize(0.0, -1.0);
|
||||
|
||||
NSShadow * shadowNormal = [[[NSShadow alloc] init] autorelease];
|
||||
[shadowNormal setShadowOffset: shadowOffset];
|
||||
[shadowNormal setShadowBlurRadius: 1.0];
|
||||
[shadowNormal setShadowColor: [NSColor colorWithCalibratedWhite: 1.0 alpha: 0.4]];
|
||||
|
||||
NSShadow * shadowNormalDim = [[[NSShadow alloc] init] autorelease];
|
||||
[shadowNormalDim setShadowOffset: shadowOffset];
|
||||
[shadowNormalDim setShadowBlurRadius: 1.0];
|
||||
[shadowNormalDim setShadowColor: [NSColor colorWithCalibratedWhite: 1.0 alpha: 0.2]];
|
||||
|
||||
NSShadow * shadowHighlighted = [[[NSShadow alloc] init] autorelease];
|
||||
[shadowHighlighted setShadowOffset: shadowOffset];
|
||||
[shadowHighlighted setShadowBlurRadius: 1.0];
|
||||
[shadowHighlighted setShadowColor: [NSColor colorWithCalibratedWhite: 0.0 alpha: 0.4]];
|
||||
|
||||
fNormalAttributes = [[NSDictionary alloc] initWithObjectsAndKeys:
|
||||
[NSColor colorWithCalibratedWhite: 0.259 alpha: 1.0], NSForegroundColorAttributeName,
|
||||
boldSystemFont, NSFontAttributeName,
|
||||
shadowNormal, NSShadowAttributeName, nil];
|
||||
|
||||
fNormalDimAttributes = [[NSDictionary alloc] initWithObjectsAndKeys:
|
||||
[NSColor disabledControlTextColor], NSForegroundColorAttributeName,
|
||||
boldSystemFont, NSFontAttributeName,
|
||||
shadowNormalDim, NSShadowAttributeName, nil];
|
||||
|
||||
fHighlightedAttributes = [[NSDictionary alloc] initWithObjectsAndKeys:
|
||||
[NSColor whiteColor], NSForegroundColorAttributeName,
|
||||
boldSystemFont, NSFontAttributeName,
|
||||
shadowHighlighted, NSShadowAttributeName, nil];
|
||||
|
||||
fHighlightedDimAttributes = [[NSDictionary alloc] initWithObjectsAndKeys:
|
||||
[NSColor colorWithCalibratedWhite: 0.9 alpha: 1.0], NSForegroundColorAttributeName,
|
||||
boldSystemFont, NSFontAttributeName,
|
||||
shadowHighlighted, NSShadowAttributeName, nil];
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,35 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "ImageBackgroundView.h"
|
||||
#import "FilterBarButton.h"
|
||||
|
||||
@interface FilterBarView : ImageBackgroundView
|
||||
{
|
||||
IBOutlet FilterBarButton * fNoFilterButton, * fDownloadFilterButton,
|
||||
* fSeedFilterButton, * fPauseFilterButton;
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,53 @@
|
|||
/******************************************************************************
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (c) 2007 Transmission authors and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#import "FilterBarView.h"
|
||||
|
||||
#define ORIGIN_VERTICAL 3.0
|
||||
#define ORIGIN_HORIZONTAL 4.0
|
||||
#define PADDING_HORIZONTAL 2.0
|
||||
|
||||
@implementation FilterBarView
|
||||
|
||||
- (void) awakeFromNib
|
||||
{
|
||||
[fNoFilterButton setTitle: NSLocalizedString(@"All", @"Filter Bar Button -> title")];
|
||||
[fDownloadFilterButton setTitle: NSLocalizedString(@"Downloading", @"Filter Bar Button -> title")];
|
||||
[fSeedFilterButton setTitle: NSLocalizedString(@"Seeding", @"Filter Bar Button -> title")];
|
||||
[fPauseFilterButton setTitle: NSLocalizedString(@"Paused", @"Filter Bar Button -> title")];
|
||||
|
||||
[fNoFilterButton sizeToFit];
|
||||
[fDownloadFilterButton sizeToFit];
|
||||
[fSeedFilterButton sizeToFit];
|
||||
[fPauseFilterButton sizeToFit];
|
||||
|
||||
[fNoFilterButton setFrameOrigin: NSMakePoint(ORIGIN_HORIZONTAL, ORIGIN_VERTICAL)];
|
||||
[fDownloadFilterButton setFrameOrigin: NSMakePoint(NSMaxX([fNoFilterButton frame]) + PADDING_HORIZONTAL, ORIGIN_VERTICAL)];
|
||||
[fSeedFilterButton setFrameOrigin: NSMakePoint(NSMaxX([fDownloadFilterButton frame]) + PADDING_HORIZONTAL, ORIGIN_VERTICAL)];
|
||||
[fPauseFilterButton setFrameOrigin: NSMakePoint(NSMaxX([fSeedFilterButton frame]) + PADDING_HORIZONTAL, ORIGIN_VERTICAL)];
|
||||
|
||||
[self setNeedsDisplay: YES];
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
IBClasses = (
|
||||
{
|
||||
ACTIONS = {hideLicense = id; showLicense = id; };
|
||||
CLASS = AboutWindowController;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fLicenseSheet = NSPanel;
|
||||
fLicenseView = NSTextView;
|
||||
fTextView = NSTextView;
|
||||
fVersionField = NSTextField;
|
||||
};
|
||||
SUPERCLASS = NSWindowController;
|
||||
},
|
||||
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }
|
||||
);
|
||||
IBVersion = 1;
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBDocumentLocation</key>
|
||||
<string>23 96 356 240 0 0 1440 878 </string>
|
||||
<key>IBFramework Version</key>
|
||||
<string>446.1</string>
|
||||
<key>IBSystem Version</key>
|
||||
<string>8R2218</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
IBClasses = (
|
||||
{
|
||||
ACTIONS = {
|
||||
cancelCreateProgress = id;
|
||||
cancelCreateWindow = id;
|
||||
create = id;
|
||||
setLocation = id;
|
||||
};
|
||||
CLASS = CreatorWindowController;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fCommentView = NSTextView;
|
||||
fIconView = NSImageView;
|
||||
fLocationField = NSTextField;
|
||||
fNameField = NSTextField;
|
||||
fOpenCheck = NSButton;
|
||||
fPiecesField = NSTextField;
|
||||
fPrivateCheck = NSButton;
|
||||
fProgressIndicator = NSProgressIndicator;
|
||||
fProgressView = NSView;
|
||||
fStatusField = NSTextField;
|
||||
fTrackerField = NSTextField;
|
||||
};
|
||||
SUPERCLASS = NSWindowController;
|
||||
},
|
||||
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }
|
||||
);
|
||||
IBVersion = 1;
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBDocumentLocation</key>
|
||||
<string>259 52 356 240 0 0 1440 878 </string>
|
||||
<key>IBEditorPositions</key>
|
||||
<dict>
|
||||
<key>56</key>
|
||||
<string>549 442 376 126 0 0 1440 878 </string>
|
||||
</dict>
|
||||
<key>IBFramework Version</key>
|
||||
<string>446.1</string>
|
||||
<key>IBSystem Version</key>
|
||||
<string>8R2218</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
|
@ -0,0 +1,4 @@
|
|||
/* Localized versions of Info.plist keys */
|
||||
|
||||
CFBundleName = "Transmission";
|
||||
NSHumanReadableCopyright = "Copyright 2005-2007 The Transmission Project";
|
|
@ -0,0 +1,87 @@
|
|||
{
|
||||
IBClasses = (
|
||||
{CLASS = FileOutlineView; LANGUAGE = ObjC; SUPERCLASS = NSOutlineView; },
|
||||
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
|
||||
{
|
||||
ACTIONS = {
|
||||
revealDataFile = id;
|
||||
revealFile = id;
|
||||
revealTorrentFile = id;
|
||||
setCheck = id;
|
||||
setOnlySelectedCheck = id;
|
||||
setPex = id;
|
||||
setPiecesView = id;
|
||||
setPriority = id;
|
||||
setRatioLimit = id;
|
||||
setRatioSetting = id;
|
||||
setSpeedLimit = id;
|
||||
setSpeedMode = id;
|
||||
};
|
||||
CLASS = InfoWindowController;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fCommentView = NSTextView;
|
||||
fCompletedFromTrackerField = NSTextField;
|
||||
fConnectedPeersField = NSTextField;
|
||||
fCreatorField = NSTextField;
|
||||
fDataLocationField = NSTextField;
|
||||
fDateActivityField = NSTextField;
|
||||
fDateAddedField = NSTextField;
|
||||
fDateCompletedField = NSTextField;
|
||||
fDateCreatedField = NSTextField;
|
||||
fDownloadLimitField = NSTextField;
|
||||
fDownloadLimitLabel = NSTextField;
|
||||
fDownloadLimitPopUp = NSPopUpButton;
|
||||
fDownloadedTotalField = NSTextField;
|
||||
fDownloadedValidField = NSTextField;
|
||||
fDownloadingFromField = NSTextField;
|
||||
fErrorMessageView = NSTextView;
|
||||
fFileCheckItem = NSMenuItem;
|
||||
fFileOutline = FileOutlineView;
|
||||
fFilePriorityHigh = NSMenuItem;
|
||||
fFilePriorityLow = NSMenuItem;
|
||||
fFilePriorityNormal = NSMenuItem;
|
||||
fFileTableStatusField = NSTextField;
|
||||
fFileUncheckItem = NSMenuItem;
|
||||
fHashField = NSTextField;
|
||||
fImageView = NSImageView;
|
||||
fLeechersField = NSTextField;
|
||||
fNameField = NSTextField;
|
||||
fPeerTable = NSTableView;
|
||||
fPexCheck = NSButton;
|
||||
fPiecesControl = NSSegmentedControl;
|
||||
fPiecesField = NSTextField;
|
||||
fPiecesView = PiecesView;
|
||||
fProgressField = NSTextField;
|
||||
fRatioField = NSTextField;
|
||||
fRatioLimitField = NSTextField;
|
||||
fRatioPopUp = NSPopUpButton;
|
||||
fRevealDataButton = NSButton;
|
||||
fRevealTorrentButton = NSButton;
|
||||
fSecureField = NSTextField;
|
||||
fSeedersField = NSTextField;
|
||||
fSizeField = NSTextField;
|
||||
fStateField = NSTextField;
|
||||
fSwarmSpeedField = NSTextField;
|
||||
fTabView = NSTabView;
|
||||
fTorrentLocationField = NSTextField;
|
||||
fTrackerField = NSTextField;
|
||||
fUploadLimitField = NSTextField;
|
||||
fUploadLimitLabel = NSTextField;
|
||||
fUploadLimitPopUp = NSPopUpButton;
|
||||
fUploadedTotalField = NSTextField;
|
||||
fUploadingToField = NSTextField;
|
||||
};
|
||||
SUPERCLASS = NSWindowController;
|
||||
},
|
||||
{CLASS = NSLevelIndicatorCell; LANGUAGE = ObjC; SUPERCLASS = NSActionCell; },
|
||||
{CLASS = NSSegmentedControl; LANGUAGE = ObjC; SUPERCLASS = NSControl; },
|
||||
{
|
||||
CLASS = PeerProgressIndicatorCell;
|
||||
LANGUAGE = ObjC;
|
||||
SUPERCLASS = NSLevelIndicatorCell;
|
||||
},
|
||||
{CLASS = PiecesView; LANGUAGE = ObjC; SUPERCLASS = NSImageView; }
|
||||
);
|
||||
IBVersion = 1;
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBDocumentLocation</key>
|
||||
<string>454 71 356 240 0 0 1440 878 </string>
|
||||
<key>IBEditorPositions</key>
|
||||
<dict>
|
||||
<key>549</key>
|
||||
<string>577 325 236 149 0 0 1440 878 </string>
|
||||
</dict>
|
||||
<key>IBFramework Version</key>
|
||||
<string>446.1</string>
|
||||
<key>IBLockedObjects</key>
|
||||
<array>
|
||||
<integer>5</integer>
|
||||
</array>
|
||||
<key>IBLockedTabItems</key>
|
||||
<array>
|
||||
<integer>332</integer>
|
||||
</array>
|
||||
<key>IBSystem Version</key>
|
||||
<string>8R2218</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
|
@ -0,0 +1,619 @@
|
|||
/* Torrent -> progress string */
|
||||
" - %@ remaining" = " - %@ restant";
|
||||
|
||||
/* Torrent -> progress string */
|
||||
" - remaining time unknown" = " - temps restant inconnu";
|
||||
|
||||
/* File size (beware of leading space) */
|
||||
" GB" = " Go";
|
||||
|
||||
/* File size (beware of leading space) */
|
||||
" KB" = " Ko";
|
||||
|
||||
/* File size (beware of leading space) */
|
||||
" MB" = " Mo";
|
||||
|
||||
/* Removal confirm panel -> message part 2 */
|
||||
" Once removed, continuing the transfers will require the torrent files. Do you really want to remove them?" = " Une fois supprimés, la reprise des transferts requiert les fichiers torrents. Voulez-vous vraiment les supprimer?";
|
||||
|
||||
/* Inspector -> Activity tab -> progress */
|
||||
"%.2f%% (%.2f%% selected)" = "%1$.2f%% (%2$.2f%% sélectionné)";
|
||||
|
||||
/* Inspector -> Files tab -> file status string */
|
||||
"%.2f%% of %@" = "%1$.2f%% de %2$@";
|
||||
|
||||
/* Torrent -> progress string */
|
||||
"%@ of %@ (%.2f%%)" = "%1$@ sur %2$@ (%3$.2f%%)";
|
||||
|
||||
/* Torrent -> progress string */
|
||||
"%@ of %@ (%.2f%%), uploaded %@ (Ratio: %@)" = "%1$@ de %2$@ (%3$.2f%%), envoyé %4$@ (Ratio: %5$@)";
|
||||
|
||||
/* Inspector -> above tabs -> total size (several torrents selected) */
|
||||
"%@ Total" = "Total : %@";
|
||||
|
||||
/* Create torrent -> info */
|
||||
"%@, %@ each" = "%1$@, %2$@ chaque";
|
||||
|
||||
/* Torrent -> progress string */
|
||||
"%@, uploaded %@ (Ratio: %@)" = "%1$@, envoyé %2$@ (Ratio: %3$@)";
|
||||
|
||||
/* Inspector -> Peers tab -> peers */
|
||||
"%d cache" = "%d cache";
|
||||
|
||||
/* Inspector -> Peers tab -> peers */
|
||||
"%d Connected" = "%d connecté(s)";
|
||||
|
||||
/* Torrent -> remaining time */
|
||||
"%d days %d hr" = "%1$d jours %2$d h";
|
||||
|
||||
/* Dock item - Downloading */
|
||||
"%d Downloading" = "%d en téléchargement";
|
||||
|
||||
/* Inspector -> Files tab -> bottom text (number of files) */
|
||||
"%d files total" = "%d fichiers";
|
||||
|
||||
/* Drag overlay -> torrents
|
||||
Create torrent -> info */
|
||||
"%d Files, " = "%d Fichiers, ";
|
||||
|
||||
/* Torrent -> remaining time */
|
||||
"%d hr %02d min" = "%1$d h %2$d min";
|
||||
|
||||
/* Inspector -> Peers tab -> peers */
|
||||
"%d incoming" = "%d entrant";
|
||||
|
||||
/* Torrent -> remaining time */
|
||||
"%d min %02d sec" = "%1$d min %2$d sec";
|
||||
|
||||
/* Inspector -> Peers tab -> peers */
|
||||
"%d PEX" = "%d PEX";
|
||||
|
||||
/* Create torrent -> info */
|
||||
"%d pieces" = "%d pièces";
|
||||
|
||||
/* Torrent -> remaining time */
|
||||
"%d sec" = "%d sec";
|
||||
|
||||
/* Dock item - Seeding */
|
||||
"%d Seeding" = "%d en Seed";
|
||||
|
||||
/* Drag overlay -> torrents */
|
||||
"%d Torrent Files" = "%d Fichiers Torrent";
|
||||
|
||||
/* Inspector -> above tabs -> selected torrents */
|
||||
"%d Torrents Selected" = "%d torrents sélectionnés";
|
||||
|
||||
/* Inspector -> Peers tab -> peers */
|
||||
"%d tracker" = "%d tracker";
|
||||
|
||||
/* Filter Bar Button -> tool tip
|
||||
Status bar transfer count */
|
||||
"%d Transfers" = "%d transferts";
|
||||
|
||||
/* File size */
|
||||
"%lld bytes" = "%lld octets";
|
||||
|
||||
/* Torrent -> error string unreadable */
|
||||
"(unreadable error)" = "(erreur illisible)";
|
||||
|
||||
/* Torrent -> remaining time */
|
||||
"1 day %d hr" = "1 jour %d h";
|
||||
|
||||
/* Inspector -> Files tab -> bottom text (number of files) */
|
||||
"1 file total" = "1 fichier";
|
||||
|
||||
/* Drag overlay -> torrents
|
||||
Create torrent -> info */
|
||||
"1 File, " = "1 Fichier, ";
|
||||
|
||||
/* Create torrent -> info */
|
||||
"1 piece" = "1 pièce";
|
||||
|
||||
/* Filter Bar Button -> tool tip
|
||||
Status bar transfer count */
|
||||
"1 Transfer" = "1 transfert";
|
||||
|
||||
/* Move folder cannot be found alert -> message */
|
||||
"\"%@\" cannot be found. The file will remain in its current location." = "\"%@\" n'a pas pu être trouvé. Le fichier va rester à son emplacement actuel.";
|
||||
|
||||
/* Folder cannot be found alert -> message */
|
||||
"\"%@\" cannot be found. The transfer will be paused." = "\"%@\" n'a pas pu être trouvé. Le transfert va être arrêté.";
|
||||
|
||||
/* Create torrent -> file already exists warning -> warning */
|
||||
"A file with the name \"%@\" already exists in the directory \"%@\". Choose a new name or directory to create the torrent." = "Un fichier nommé \"%1$@\" existe déja dans le dossier \"%2$@\". Choisissez un nom ou un dossier différent pour créer le torrent.";
|
||||
|
||||
/* Move inside iteself alert -> title */
|
||||
"A folder cannot be moved to inside itself." = "Un dossier ne peut être déplacé à l'intérieur de lui-même.";
|
||||
|
||||
/* Create torrent -> zero size -> warning */
|
||||
"A torrent file cannot be created for files with no size." = "Un ficher torrent ne peut être créé avec une taille nulle.";
|
||||
|
||||
/* Create torrent -> file already exists warning -> title */
|
||||
"A torrent file with this name and directory cannot be created." = "Un ficher torrent ne peut être créé avec ce nom et ce dossier.";
|
||||
|
||||
/* Open duplicate alert -> title */
|
||||
"A transfer of \"%@\" is already running." = "Un transfer de \"%@\" est déja actif.";
|
||||
|
||||
/* Torrent file disk space alert -> button */
|
||||
"Always Download" = "Toujours télécharger";
|
||||
|
||||
/* Transfer speed (Bytes per second) */
|
||||
"B/s" = "o/s";
|
||||
|
||||
/* Preferences -> Bandwidth toolbar item title */
|
||||
"Bandwidth" = "Bande passante";
|
||||
|
||||
/* Growl notification description */
|
||||
"Bandwidth settings changed" = "Les réglages de bande passante ont changé";
|
||||
|
||||
/* Removal confirm panel -> button
|
||||
Confirm Quit panel -> button */
|
||||
"Cancel" = "Annuler";
|
||||
|
||||
/* Create torrent -> no url warning -> warning
|
||||
Create torrent -> http warning -> warning */
|
||||
"Change the tracker address to create the torrent." = "Changez l'adresse du tracker pour créer le torrent.";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Checking existing data (%.2f%%)" = "Vérification des fichiers existants (%.2f%%)";
|
||||
|
||||
/* Preferences -> Network -> port status */
|
||||
"Checking port status" = "Vérification de l'état du port";
|
||||
|
||||
/* Folder cannot be found alert -> location button */
|
||||
"Choose New Location" = "Nouvel emplacement";
|
||||
|
||||
/* Confirm Quit panel -> title */
|
||||
"Confirm Quit" = "Voulez-vous réellement quitter ?";
|
||||
|
||||
/* Removal confirm panel -> title */
|
||||
"Confirm Removal of %d Transfers" = "Confirmez la suppression de %d transferts";
|
||||
|
||||
/* Removal confirm panel -> title */
|
||||
"Confirm Removal of \"%@\"" = "Confirmez la suppression de \"%@\"";
|
||||
|
||||
/* Debug log alert -> informative message */
|
||||
"Continuous use at this level might increase memory usage. This setting can be changed in the Message Log window (accessible from the Window menu)." = "Un usage continu à ce niveau peut augmenter l'utilisation mémoire. Ce réglage peut être modifié dans la fenêtre Historique des Messages (accessible via le menu Fenêtre).";
|
||||
|
||||
/* Torrent file copy alert -> title */
|
||||
"Copy of \"%@\" Cannot Be Created" = "La copie de \"%@\" ne peut pas être créée";
|
||||
|
||||
/* Create toolbar item -> label */
|
||||
"Create" = "Créer";
|
||||
|
||||
/* Drag overlay -> file */
|
||||
"Create a Torrent File" = "Créer un fichier torrent";
|
||||
|
||||
/* Create toolbar item -> tooltip */
|
||||
"Create torrent file" = "Crée un fichier torrent";
|
||||
|
||||
/* Create toolbar item -> palette label */
|
||||
"Create Torrent File" = "Créer un fichier torrent";
|
||||
|
||||
/* Create torrent -> failed -> title */
|
||||
"Creation of \"%@\" failed." = "La création de \"%@\" a échoué.";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"DL: %@, " = "DL: %@, ";
|
||||
|
||||
/* Debug log alert -> button
|
||||
Open duplicate alert -> button */
|
||||
"Don't Alert Again" = "Ne plus avertir";
|
||||
|
||||
/* Inspector -> files tab -> tooltip */
|
||||
"Don't Download" = "Ne pas télécharger";
|
||||
|
||||
/* Inspector -> files tab -> tooltip */
|
||||
"Download" = "Télécharger";
|
||||
|
||||
/* Torrent file disk space alert -> button */
|
||||
"Download Anyway" = "Télécharger quand même";
|
||||
|
||||
/* Growl notification title */
|
||||
"Download Complete" = "Téléchargement terminé";
|
||||
|
||||
/* Inspector -> files tab -> tooltip */
|
||||
"Download Some" = "Téléchargement (certains)";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Downloading" = "Téléchargement";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Downloading from %d of %d peers" = "Téléchargement de %1$d sur %2$d pairs";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Downloading from %d of 1 peer" = "Téléchargement de %d sur 1 pair";
|
||||
|
||||
/* Transfer speed invalid
|
||||
Ratio invalid */
|
||||
"error" = "erreur";
|
||||
|
||||
/* Preferences -> Network -> port map status */
|
||||
"Error mapping port" = "Erreur de mappage du port";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Error: " = "Erreur: ";
|
||||
|
||||
/* Filter toolbar item -> label */
|
||||
"Filter" = "Filtre";
|
||||
|
||||
/* Inspector -> Peers tab -> table row tooltip */
|
||||
"From: cache" = "De: cache";
|
||||
|
||||
/* Inspector -> Peers tab -> table row tooltip */
|
||||
"From: incoming connection" = "De: connexion entrante";
|
||||
|
||||
/* Inspector -> Peers tab -> table row tooltip */
|
||||
"From: peer exchange" = "De: PEX";
|
||||
|
||||
/* Inspector -> Peers tab -> table row tooltip */
|
||||
"From: tracker" = "De: tracker";
|
||||
|
||||
/* Preferences -> General toolbar item title */
|
||||
"General" = "Général";
|
||||
|
||||
/* View menu -> Filter Bar */
|
||||
"Hide Filter Bar" = "Masquer la barre de filtre";
|
||||
|
||||
/* View menu -> Inspector */
|
||||
"Hide Inspector" = "Masquer l'inspecteur";
|
||||
|
||||
/* View menu -> Status Bar */
|
||||
"Hide Status Bar" = "Masquer la barre de statut";
|
||||
|
||||
/* Inspector -> files tab -> tooltip */
|
||||
"High Priority" = "Priorité haute";
|
||||
|
||||
/* Inspector -> Peers tab -> peers
|
||||
Inspector -> Files tab -> bottom text (number of files) */
|
||||
"info not available" = "information non disponible";
|
||||
|
||||
/* Inspector toolbar item -> label */
|
||||
"Inspector" = "Inspecteur";
|
||||
|
||||
/* Download not a torrent -> message */
|
||||
"It appears that the file \"%@\" from %@ is not a torrent file." = "Il semble que le fichier \"%1$@\" provenant de %2$@ ne soit pas un torrent.";
|
||||
|
||||
/* Action context menu -> upload/download limit */
|
||||
"Limit (%d KB/s)" = "Limité (%d Ko/s)";
|
||||
|
||||
/* Save log alert panel -> title */
|
||||
"Log Could Not Be Saved" = "Les messages n'ont pas pu être enregistrés";
|
||||
|
||||
/* Inspector -> files tab -> tooltip */
|
||||
"Low Priority" = "Priorité basse";
|
||||
|
||||
/* Inspector -> files tab -> tooltip */
|
||||
"Multiple Priorities" = "Prioritiés multiples";
|
||||
|
||||
/* No Ratio
|
||||
Torrent -> status string */
|
||||
"N/A" = "ND";
|
||||
|
||||
/* Preferences -> Network toolbar item title */
|
||||
"Network" = "Réseau";
|
||||
|
||||
/* Inspector -> above tabs -> selected torrents */
|
||||
"No Torrents Selected" = "Aucun torrent sélectionné";
|
||||
|
||||
/* Inspector -> files tab -> tooltip */
|
||||
"Normal Priority" = "Priorité Normale";
|
||||
|
||||
/* Torrent file disk space alert -> title */
|
||||
"Not enough remaining disk space to download \"%@\" completely." = "Pas assez d'espace disque pour télécharger \"%@\" en entier.";
|
||||
|
||||
/* Open duplicate alert -> button
|
||||
Create torrent -> no files -> button
|
||||
Create torrent -> file already exists warning -> button
|
||||
Torrent file copy alert -> button
|
||||
Move folder cannot be found alert -> button
|
||||
Folder cannot be found alert -> button
|
||||
Torrent file disk space alert -> button
|
||||
Create torrent -> no url warning -> button
|
||||
Torrent download failed -> button
|
||||
Create torrent -> failed -> button
|
||||
Move error alert -> button
|
||||
Debug log alert -> button
|
||||
Download not a torrent -> button
|
||||
Create torrent -> zero size -> button
|
||||
Move inside itself alert -> button
|
||||
Save log alert panel -> button
|
||||
Create torrent -> http warning -> button */
|
||||
"OK" = "OK";
|
||||
|
||||
/* Open toolbar item -> label */
|
||||
"Open" = "Ouvrir";
|
||||
|
||||
/* Open toolbar item -> tooltip */
|
||||
"Open torrent files" = "Ouvre des fichiers torrents";
|
||||
|
||||
/* Open toolbar item -> palette label */
|
||||
"Open Torrent Files" = "Ouvrir des fichiers torrents";
|
||||
|
||||
/* Pause toolbar item -> label */
|
||||
"Pause" = "Arrêt";
|
||||
|
||||
/* Pause All toolbar item -> label */
|
||||
"Pause All" = "Arrêt tous";
|
||||
|
||||
/* Pause All toolbar item -> tooltip */
|
||||
"Pause all transfers" = "Arrête tous les transferts";
|
||||
|
||||
/* Pause toolbar item -> palette label */
|
||||
"Pause Selected" = "Arrêter la sélection";
|
||||
|
||||
/* Pause toolbar item -> tooltip */
|
||||
"Pause selected transfers" = "Arrête le transfert sélectionné";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Paused" = "En pause";
|
||||
|
||||
/* Preferences -> Network -> port status */
|
||||
"Port is closed" = "Le port est fermé";
|
||||
|
||||
/* Preferences -> Network -> port status */
|
||||
"Port is open" = "Le port est ouvert";
|
||||
|
||||
/* Preferences -> Network -> port status */
|
||||
"Port is stealth" = "Le port est furtif";
|
||||
|
||||
/* Preferences -> Network -> port map status */
|
||||
"Port successfully mapped" = "Mappage du port réussi";
|
||||
|
||||
/* Inspector -> Peers tab -> table row tooltip */
|
||||
"Port: %d" = "Port: %d";
|
||||
|
||||
/* Inspector -> Peers tab -> table row tooltip */
|
||||
"Port: N/A" = "Port: ND";
|
||||
|
||||
/* Inspector -> files tab -> tooltip */
|
||||
"Priority Not Available" = "Priorité indisponible";
|
||||
|
||||
/* Inspector -> is private torrent */
|
||||
"Private Torrent, PEX disabled" = "Torrent privé, PEX désactivé";
|
||||
|
||||
/* Inspector -> Peers tab -> table row tooltip */
|
||||
"Progress: %.1f%%" = "Progrès: %.1f%%";
|
||||
|
||||
/* Inspector -> is not private torrent */
|
||||
"Public Torrent" = "Torrent public";
|
||||
|
||||
/* Transmission already running alert -> button
|
||||
OS update needed -> button
|
||||
Confirm Quit panel -> button */
|
||||
"Quit" = "Quitter";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Ratio: " = "Ratio: ";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Ratio: %@, " = "Ratio: %@, ";
|
||||
|
||||
/* Removal confirm panel -> button
|
||||
Remove toolbar item -> label */
|
||||
"Remove" = "Supprimer";
|
||||
|
||||
/* Remove toolbar item -> palette label */
|
||||
"Remove Selected" = "Supprimer la sélection";
|
||||
|
||||
/* Remove toolbar item -> tooltip */
|
||||
"Remove selected transfers" = "Supprime les transferts sélectionnés";
|
||||
|
||||
/* Resume toolbar item -> label */
|
||||
"Resume" = "Reprendre";
|
||||
|
||||
/* Resume All toolbar item -> label */
|
||||
"Resume All" = "Reprendre tous";
|
||||
|
||||
/* Resume All toolbar item -> tooltip */
|
||||
"Resume all transfers" = "Reprend tous les transferts";
|
||||
|
||||
/* Resume toolbar item -> palette label */
|
||||
"Resume Selected" = "Reprendre la sélection";
|
||||
|
||||
/* Resume toolbar item -> tooltip */
|
||||
"Resume selected transfers" = "Reprend le transfert sélectionné";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Seeding" = "Seed";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Seeding complete" = "Seed terminé";
|
||||
|
||||
/* Growl notification title */
|
||||
"Seeding Complete" = "Seed Terminé";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Seeding to %d of %d peers" = "Seed à %1$d sur %2$d pairs";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Seeding to %d of 1 peer" = "Seed à %d sur 1 pair";
|
||||
|
||||
/* Folder cannot be found alert -> prompt
|
||||
Default folder cannot be found alert -> prompt
|
||||
Open torrent -> prompt
|
||||
Move torrent -> prompt
|
||||
Default incomplete folder cannot be found alert -> prompt
|
||||
Create torrent -> select file */
|
||||
"Select" = "Choisir";
|
||||
|
||||
/* Create torrent -> select file */
|
||||
"Select a file or folder for the torrent file." = "Sélectionnez un fichier ou un dossier pour le fichier torrent.";
|
||||
|
||||
/* Folder cannot be found alert -> select destination folder
|
||||
Open torrent -> select destination folder */
|
||||
"Select the download folder for \"%@\"" = "Sélectionnez le dossier de téléchargement pour \"%@\"";
|
||||
|
||||
/* Move torrent -> select destination folder */
|
||||
"Select the new folder for %d data files." = "Sélectionnez le nouveau dossier pour les données de %d.";
|
||||
|
||||
/* Move torrent -> select destination folder */
|
||||
"Select the new folder for \"%@\"." = "Sélectionnez le nouveau dossier pour \"%@\".";
|
||||
|
||||
/* Main window -> 1st bottom left button (action) tooltip */
|
||||
"Shortcuts for changing global settings." = "Raccourci pour changer les réglages";
|
||||
|
||||
/* View menu -> Filter Bar */
|
||||
"Show Filter Bar" = "Afficher la barre de filtre";
|
||||
|
||||
/* View menu -> Inspector */
|
||||
"Show Inspector" = "Afficher l'inspecteur";
|
||||
|
||||
/* View menu -> Status Bar */
|
||||
"Show Status Bar" = "Afficher la barre de statut";
|
||||
|
||||
/* Growl notification title */
|
||||
"Speed Limit Auto Disabled" = "Vitesse limitée automatique désactivée";
|
||||
|
||||
/* Growl notification title */
|
||||
"Speed Limit Auto Enabled" = "Vitesse limitée automatique activée";
|
||||
|
||||
/* Main window -> 2nd bottom left button (turtle) tooltip */
|
||||
"Speed Limit overrides the total bandwidth limits with its own limits." = "Le mode vitesse limitée prime sur les autres réglages de vitesse";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Stalled, " = "Calé, ";
|
||||
|
||||
/* Action context menu -> ratio stop */
|
||||
"Stop at Ratio (%.2f)" = "Arrêter au ratio (%.2f)";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Stopping" = "Arrêt";
|
||||
|
||||
/* Default folder cannot be found alert -> message */
|
||||
"The download folder cannot be found. Choose a new location." = "Le dossier de téléchargement est introuvable. Veuillez choisir un nouvel emplacement.";
|
||||
|
||||
/* Folder cannot be found alert -> title */
|
||||
"The folder for downloading \"%@\" cannot be found." = "Le dossier pour le téléchargement de \"%@\" n'a pas pu être trouvé.";
|
||||
|
||||
/* Move folder cannot be found alert -> title */
|
||||
"The folder for moving the completed \"%@\" cannot be found." = "Le dossier pour déplacer \"%@\" n'a pas pu être trouvé.";
|
||||
|
||||
/* Default incomplete folder cannot be found alert -> message */
|
||||
"The incomplete folder cannot be found. Choose a new location or cancel for none." = "Le dossier des téléchargements incomplets est introuvable. Veuillez choisir un nouvel emplacement ou annuler.";
|
||||
|
||||
/* Debug log alert -> message */
|
||||
"The Message Log is set to \"Debug\"" = "L'Historique des Messages est réglé sur \"Debug\"";
|
||||
|
||||
/* Move inside iteself alert -> message
|
||||
Move error alert -> message */
|
||||
"The move operation of \"%@\" cannot be done." = "L'opération de déplacement de \"%@\" ne peut être effectuée.";
|
||||
|
||||
/* Torrent download failed -> message */
|
||||
"The torrent could not be downloaded from %@ because an error occurred (%@)." = "Le torrent provenant de %1$@ n'a pas pu être téléchargé car une erreur est survenue (%2$@).";
|
||||
|
||||
/* Torrent file copy alert -> message */
|
||||
"The torrent file (%@) cannot be found." = "Le torrent (%@) n'a pas pu être trouvé.";
|
||||
|
||||
/* Open duplicate alert -> message */
|
||||
"The torrent file cannot be opened because it is a duplicate of an already running transfer." = "Le fichier torrent n'a pu être ouvert car c'est une copie d'un transfert actif.";
|
||||
|
||||
/* Create torrent -> zero size -> title */
|
||||
"The total file size is zero bytes." = "La taille totale du ficher est zéro octets.";
|
||||
|
||||
/* Create torrent -> no url warning -> title */
|
||||
"The tracker address cannot be blank." = "L'adresse du tracker ne peut être vide.";
|
||||
|
||||
/* Create torrent -> http warning -> title */
|
||||
"The tracker address must begin with \"http://\"." = "L'adresse du tracker doit commencer par \"http://\".";
|
||||
|
||||
/* Torrent file disk space alert -> message */
|
||||
"The transfer will be paused. Clear up space on \"%@\" to continue." = "Le transfert va être mis en pause. Faites de la place sur \"%@\" pour continuer.";
|
||||
|
||||
/* Removal confirm panel -> message part 1 */
|
||||
"There are %d active transfers." = "Il y a %d transferts actifs.";
|
||||
|
||||
/* Confirm Quit panel -> message */
|
||||
"There are %d active transfers. Do you really want to quit?" = "Il y a encore %d transferts actifs. Voulez-vous vraiment quitter ?";
|
||||
|
||||
/* Removal confirm panel -> message part 1 */
|
||||
"There are %d transfers (%d active)." = "Il y a %1$d transferts dont %2$d actif(s).";
|
||||
|
||||
/* Transmission already running alert -> message */
|
||||
"There is already a copy of Transmission running. This copy cannot be opened until that instance is quit." = "Il y a déja une copie de Transmission en route. Cette copie ne pourra être ouverte avant que l'autre ne soit quittée.";
|
||||
|
||||
/* Confirm Quit panel -> message */
|
||||
"There is an active transfer. Do you really want to quit?" = "Il y a encore un transfert actif. Voulez-vous vraiment quitter ?";
|
||||
|
||||
/* Create torrent -> no files -> warning */
|
||||
"There must be at least one file in a folder to create a torrent file." = "Il doit y avoir au moins un fichier ou dossier pour créer un torrent.";
|
||||
|
||||
/* Save log alert panel -> message */
|
||||
"There was a problem creating the file \"%@\"." = "Problème lors de la création du fichier \"%@\".";
|
||||
|
||||
/* Move error alert -> title */
|
||||
"There was an error moving the data file." = "Il y a eu une erreur lors du déplacement des données.";
|
||||
|
||||
/* Create torrent -> failed -> warning */
|
||||
"There was an error parsing the data file. The torrent file was not created." = "Il y a eu une erreur à l'analyse des données. Le fichier torrent n'a pas été créé.";
|
||||
|
||||
/* Create torrent -> no files -> title */
|
||||
"This folder contains no files." = "Ce dossier ne contient pas de fichiers.";
|
||||
|
||||
/* Removal confirm panel -> message */
|
||||
"This transfer is active. Once removed, continuing the transfer will require the torrent file. Do you really want to remove it?" = "Ce transfert est actif. Une fois supprimé, la reprise du transfert requiert le fichier torrent. Voulez-vous vraiment le supprimer?";
|
||||
|
||||
/* Filter toolbar item -> palette label */
|
||||
"Toggle Filter" = "Afficher/masquer le filtre";
|
||||
|
||||
/* Inspector toolbar item -> palette label */
|
||||
"Toggle Inspector" = "Afficher/masquer l'inspecteur";
|
||||
|
||||
/* Filter toolbar item -> tooltip */
|
||||
"Toggle the filter bar" = "Affiche/masque la barre de filtre";
|
||||
|
||||
/* Inspector toolbar item -> tooltip */
|
||||
"Toggle the torrent inspector" = "Affiche/masque l'inspecteur de torrents";
|
||||
|
||||
/* Torrent download error -> title
|
||||
Download not a torrent -> title */
|
||||
"Torrent download failed" = "Echec du téléchargement";
|
||||
|
||||
/* Growl notification title */
|
||||
"Torrent File Auto Added" = "Torrent automatiquement ajouté";
|
||||
|
||||
/* Status bar -> total download */
|
||||
"Total DL: " = "DL total: ";
|
||||
|
||||
/* Status bar -> total upload */
|
||||
"Total UL: " = "UL total: ";
|
||||
|
||||
/* Preferences -> Transfers toolbar item title */
|
||||
"Transfers" = "Transferts";
|
||||
|
||||
/* OS update needed -> message */
|
||||
"Transmission has features that require a more up-to-date operating system. The operating system must be updated before this version can run." = "Transmission utilise des composants requiérant une version plus récente du système. Vous devez mettre Mac OS X à jour avant de pouvoir utiliser Transmission.";
|
||||
|
||||
/* Transmission already running alert -> title */
|
||||
"Transmission is already running." = "Transmission est déjà en cours d'exécution";
|
||||
|
||||
/* OS update needed -> title */
|
||||
"Transmission requires Mac OS X 10.4 or greater." = "Transmission requiert Mac OS X 10.4 ou supérieur";
|
||||
|
||||
/* Torrent -> location when deleting original */
|
||||
"Transmission Support Folder" = "Dossier support de Transmission";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"UL: " = "UL: ";
|
||||
|
||||
/* Preferences -> Network -> port status */
|
||||
"Unable to check port status" = "Impossible de vérifier le port";
|
||||
|
||||
/* Torrent -> remaining time */
|
||||
"Unknown" = "inconnu";
|
||||
|
||||
/* Save log panel -> default file name */
|
||||
"untitled" = "sans titre";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Waiting to check existing files" = "En attente de vérification";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Waiting to download" = "En attente de téléchargement";
|
||||
|
||||
/* Torrent -> status string */
|
||||
"Waiting to seed" = "En attente de seed";
|
||||
|
||||
/* Drag overlay -> url */
|
||||
"Web Address" = "Adresse Web";
|
||||
|
|
@ -0,0 +1,188 @@
|
|||
{
|
||||
IBClasses = (
|
||||
{CLASS = ActionPopUpButton; LANGUAGE = ObjC; SUPERCLASS = NSPopUpButton; },
|
||||
{CLASS = BarButton; LANGUAGE = ObjC; SUPERCLASS = NSButton; },
|
||||
{
|
||||
ACTIONS = {
|
||||
announceSelectedTorrents = id;
|
||||
applyFilter = id;
|
||||
applySpeedLimit = id;
|
||||
copyTorrentFiles = id;
|
||||
createFile = id;
|
||||
doNothing = id;
|
||||
linkDonate = id;
|
||||
linkForums = id;
|
||||
linkHomepage = id;
|
||||
moveDataFiles = id;
|
||||
openShowSheet = id;
|
||||
openURLCancelEndSheet = id;
|
||||
openURLEndSheet = id;
|
||||
openURLShowSheet = id;
|
||||
removeDeleteData = id;
|
||||
removeDeleteDataAndTorrent = id;
|
||||
removeDeleteTorrent = id;
|
||||
removeNoDelete = id;
|
||||
resetCacheForSelectedTorrents = id;
|
||||
resumeAllTorrents = id;
|
||||
resumeSelectedTorrents = id;
|
||||
resumeSelectedTorrentsNoWait = id;
|
||||
resumeWaitingTorrents = id;
|
||||
revealFile = id;
|
||||
setFilter = id;
|
||||
setInfoTab = id;
|
||||
setLimitGlobalEnabled = id;
|
||||
setQuickLimitGlobal = id;
|
||||
setQuickRatioGlobal = id;
|
||||
setSort = id;
|
||||
setSortReverse = id;
|
||||
showAboutWindow = id;
|
||||
showInfo = id;
|
||||
showMainWindow = id;
|
||||
showMessageWindow = id;
|
||||
showPreferenceWindow = id;
|
||||
stopAllTorrents = id;
|
||||
stopSelectedTorrents = id;
|
||||
switchFilter = id;
|
||||
toggleAdvancedBar = id;
|
||||
toggleFilterBar = id;
|
||||
toggleSmallView = id;
|
||||
toggleSpeedLimit = id;
|
||||
toggleStatusBar = id;
|
||||
};
|
||||
CLASS = Controller;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fActionButton = NSButton;
|
||||
fBottomBar = ImageBackgroundView;
|
||||
fDateSortActionItem = NSMenuItem;
|
||||
fDateSortItem = NSMenuItem;
|
||||
fDockMenu = NSMenu;
|
||||
fDownloadFilterButton = FilterBarButton;
|
||||
fDownloadLimitItem = NSMenuItem;
|
||||
fDownloadMenu = NSMenu;
|
||||
fDownloadNoLimitItem = NSMenuItem;
|
||||
fFilterBar = FilterBarView;
|
||||
fNameSortActionItem = NSMenuItem;
|
||||
fNameSortItem = NSMenuItem;
|
||||
fNextFilterItem = NSMenuItem;
|
||||
fNextInfoTabItem = NSMenuItem;
|
||||
fNoFilterButton = FilterBarButton;
|
||||
fOpenIgnoreDownloadFolder = NSMenuItem;
|
||||
fOrderSortActionItem = NSMenuItem;
|
||||
fOrderSortItem = NSMenuItem;
|
||||
fPauseFilterButton = FilterBarButton;
|
||||
fPrevFilterItem = NSMenuItem;
|
||||
fPrevInfoTabItem = NSMenuItem;
|
||||
fProgressSortActionItem = NSMenuItem;
|
||||
fProgressSortItem = NSMenuItem;
|
||||
fScrollView = NSScrollView;
|
||||
fSearchFilterField = NSSearchField;
|
||||
fSeedFilterButton = FilterBarButton;
|
||||
fSpeedLimitButton = NSButton;
|
||||
fStateSortActionItem = NSMenuItem;
|
||||
fStateSortItem = NSMenuItem;
|
||||
fStatusBar = ImageBackgroundView;
|
||||
fTableView = TorrentTableView;
|
||||
fTotalDLField = NSTextField;
|
||||
fTotalTorrentsField = NSTextField;
|
||||
fTotalULField = NSTextField;
|
||||
fURLSheetTextField = NSTextField;
|
||||
fURLSheetWindow = NSWindow;
|
||||
fUpdater = SUUpdater;
|
||||
fUploadLimitItem = NSMenuItem;
|
||||
fUploadMenu = NSMenu;
|
||||
fUploadNoLimitItem = NSMenuItem;
|
||||
fWindow = NSWindow;
|
||||
};
|
||||
SUPERCLASS = NSObject;
|
||||
},
|
||||
{CLASS = FilterBarButton; LANGUAGE = ObjC; SUPERCLASS = NSButton; },
|
||||
{
|
||||
CLASS = FilterBarView;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fDownloadFilterButton = FilterBarButton;
|
||||
fNoFilterButton = FilterBarButton;
|
||||
fPauseFilterButton = FilterBarButton;
|
||||
fSeedFilterButton = FilterBarButton;
|
||||
};
|
||||
SUPERCLASS = ImageBackgroundView;
|
||||
},
|
||||
{
|
||||
ACTIONS = {deselectAll = id; revealFile = id; setNextTab = id; setPreviousTab = id; };
|
||||
CLASS = FirstResponder;
|
||||
LANGUAGE = ObjC;
|
||||
SUPERCLASS = NSObject;
|
||||
},
|
||||
{CLASS = ImageBackgroundView; LANGUAGE = ObjC; SUPERCLASS = NSView; },
|
||||
{CLASS = NSSegmentedControl; LANGUAGE = ObjC; SUPERCLASS = NSControl; },
|
||||
{CLASS = NameCell; LANGUAGE = ObjC; SUPERCLASS = NSCell; },
|
||||
{
|
||||
ACTIONS = {
|
||||
folderSheetShow = id;
|
||||
setAutoStart = id;
|
||||
setBadge = id;
|
||||
setDownloadLocation = id;
|
||||
setLimit = id;
|
||||
setLimitCheck = id;
|
||||
setLimitMenu = id;
|
||||
setPort = id;
|
||||
setQuickRatio = id;
|
||||
setQuickSpeed = id;
|
||||
setRatio = id;
|
||||
setRatioCheck = id;
|
||||
setRatioMenu = id;
|
||||
setShowMessage = id;
|
||||
setUpdate = id;
|
||||
};
|
||||
CLASS = PrefsController;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fAutoStartCheck = NSButton;
|
||||
fBadgeDownloadRateCheck = NSButton;
|
||||
fBadgeUploadRateCheck = NSButton;
|
||||
fBlankView = NSView;
|
||||
fDownloadCheck = NSButton;
|
||||
fDownloadField = NSTextField;
|
||||
fDownloadLimitItem = NSMenuItem;
|
||||
fDownloadMenu = NSMenu;
|
||||
fDownloadNoLimitItem = NSMenuItem;
|
||||
fFolderPopUp = NSPopUpButton;
|
||||
fGeneralView = NSView;
|
||||
fNetworkView = NSView;
|
||||
fPortField = NSTextField;
|
||||
fPrefsWindow = NSPanel;
|
||||
fQuitCheck = NSButton;
|
||||
fRatioCheck = NSButton;
|
||||
fRatioField = NSTextField;
|
||||
fRatioNotSetItem = NSMenuItem;
|
||||
fRatioSetItem = NSMenuItem;
|
||||
fRemoveCheck = NSButton;
|
||||
fTransfersView = NSView;
|
||||
fUpdatePopUp = NSPopUpButton;
|
||||
fUpdater = SUUpdater;
|
||||
fUploadCheck = NSButton;
|
||||
fUploadField = NSTextField;
|
||||
fUploadLimitItem = NSMenuItem;
|
||||
fUploadMenu = NSMenu;
|
||||
fUploadNoLimitItem = NSMenuItem;
|
||||
fWindow = NSWindow;
|
||||
};
|
||||
SUPERCLASS = NSObject;
|
||||
},
|
||||
{CLASS = ProgressCell; LANGUAGE = ObjC; SUPERCLASS = NSCell; },
|
||||
{
|
||||
ACTIONS = {checkForUpdates = id; };
|
||||
CLASS = SUUpdater;
|
||||
LANGUAGE = ObjC;
|
||||
SUPERCLASS = NSObject;
|
||||
},
|
||||
{
|
||||
CLASS = TorrentTableView;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {fContextNoRow = NSMenu; fContextRow = NSMenu; fController = Controller; };
|
||||
SUPERCLASS = NSTableView;
|
||||
}
|
||||
);
|
||||
IBVersion = 1;
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBDocumentLocation</key>
|
||||
<string>438 17 422 283 0 0 1440 878 </string>
|
||||
<key>IBEditorPositions</key>
|
||||
<dict>
|
||||
<key>1041</key>
|
||||
<string>616 618 239 149 0 0 1440 878 </string>
|
||||
<key>1480</key>
|
||||
<string>512 553 420 63 0 0 1440 878 </string>
|
||||
<key>1906</key>
|
||||
<string>483 550 477 67 0 0 1440 878 </string>
|
||||
<key>29</key>
|
||||
<string>76 652 548 44 0 0 1440 878 </string>
|
||||
<key>456</key>
|
||||
<string>713 400 274 225 0 0 1440 878 </string>
|
||||
<key>581</key>
|
||||
<string>733 486 140 99 0 0 1440 878 </string>
|
||||
<key>589</key>
|
||||
<string>73 545 241 106 0 0 1440 878 </string>
|
||||
</dict>
|
||||
<key>IBFramework Version</key>
|
||||
<string>446.1</string>
|
||||
<key>IBLockedObjects</key>
|
||||
<array/>
|
||||
<key>IBOldestOS</key>
|
||||
<integer>3</integer>
|
||||
<key>IBSystem Version</key>
|
||||
<string>8R2218</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
IBClasses = (
|
||||
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
|
||||
{
|
||||
ACTIONS = {changeLevel = id; clearLog = id; writeToFile = id; };
|
||||
CLASS = MessageWindowController;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fDebugWarningField = NSTextField;
|
||||
fDebugWarningIcon = NSImageView;
|
||||
fLevelButton = NSPopUpButton;
|
||||
fScrollView = NSScrollView;
|
||||
fTextView = NSTextView;
|
||||
};
|
||||
SUPERCLASS = NSWindowController;
|
||||
}
|
||||
);
|
||||
IBVersion = 1;
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBDocumentLocation</key>
|
||||
<string>34 76 356 240 0 0 1440 878 </string>
|
||||
<key>IBFramework Version</key>
|
||||
<string>446.1</string>
|
||||
<key>IBSystem Version</key>
|
||||
<string>8R2218</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
|
@ -0,0 +1,78 @@
|
|||
{
|
||||
IBClasses = (
|
||||
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
|
||||
{CLASS = MenuButton; LANGUAGE = ObjC; SUPERCLASS = NSButton; },
|
||||
{CLASS = NSDatePicker; LANGUAGE = ObjC; SUPERCLASS = NSControl; },
|
||||
{
|
||||
ACTIONS = {
|
||||
applyRatioSetting = id;
|
||||
applySpeedSettings = id;
|
||||
folderSheetShow = id;
|
||||
helpForNetwork = id;
|
||||
importFolderSheetShow = id;
|
||||
incompleteFolderSheetShow = id;
|
||||
resetWarnings = id;
|
||||
setAutoImport = id;
|
||||
setAutoSize = id;
|
||||
setAutoSpeedLimit = id;
|
||||
setBadge = id;
|
||||
setDownloadLocation = id;
|
||||
setGlobalLimit = id;
|
||||
setNat = id;
|
||||
setPort = id;
|
||||
setQueue = id;
|
||||
setQueueNumber = id;
|
||||
setRatioStop = id;
|
||||
setSound = id;
|
||||
setSpeedLimit = id;
|
||||
setStalled = id;
|
||||
setStalledMinutes = id;
|
||||
setUpdate = id;
|
||||
};
|
||||
CLASS = PrefsController;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fBandwidthView = NSView;
|
||||
fDownloadField = NSTextField;
|
||||
fDownloadSoundPopUp = NSPopUpButton;
|
||||
fFolderPopUp = NSPopUpButton;
|
||||
fGeneralView = NSView;
|
||||
fImportFolderPopUp = NSPopUpButton;
|
||||
fIncompleteFolderPopUp = NSPopUpButton;
|
||||
fNatCheck = NSButton;
|
||||
fNatStatusField = NSTextField;
|
||||
fNatStatusImage = NSImageView;
|
||||
fNetworkView = NSView;
|
||||
fPortField = NSTextField;
|
||||
fPortStatusField = NSTextField;
|
||||
fPortStatusImage = NSImageView;
|
||||
fPortStatusProgress = NSProgressIndicator;
|
||||
fQueueDownloadField = NSTextField;
|
||||
fQueueSeedField = NSTextField;
|
||||
fRatioStopField = NSTextField;
|
||||
fSeedingSoundPopUp = NSPopUpButton;
|
||||
fSpeedLimitDownloadField = NSTextField;
|
||||
fSpeedLimitUploadField = NSTextField;
|
||||
fStalledField = NSTextField;
|
||||
fTransfersView = NSView;
|
||||
fUpdatePopUp = NSPopUpButton;
|
||||
fUploadField = NSTextField;
|
||||
};
|
||||
SUPERCLASS = NSWindowController;
|
||||
},
|
||||
{CLASS = PrefsWindow; LANGUAGE = ObjC; SUPERCLASS = NSWindow; },
|
||||
{
|
||||
ACTIONS = {checkForUpdates = id; };
|
||||
CLASS = SUUpdater;
|
||||
LANGUAGE = ObjC;
|
||||
SUPERCLASS = NSObject;
|
||||
},
|
||||
{
|
||||
CLASS = TorrentTableView;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {fContextNoRow = NSMenu; fContextRow = NSMenu; fController = Controller; };
|
||||
SUPERCLASS = NSTableView;
|
||||
}
|
||||
);
|
||||
IBVersion = 1;
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBDocumentLocation</key>
|
||||
<string>690 102 356 240 0 0 1440 878 </string>
|
||||
<key>IBEditorPositions</key>
|
||||
<dict>
|
||||
<key>153</key>
|
||||
<string>531 187 563 267 0 0 1440 878 </string>
|
||||
<key>28</key>
|
||||
<string>821 425 563 319 0 0 1440 878 </string>
|
||||
<key>41</key>
|
||||
<string>440 355 563 317 0 0 1440 878 </string>
|
||||
<key>66</key>
|
||||
<string>440 514 563 144 0 0 1440 878 </string>
|
||||
</dict>
|
||||
<key>IBFramework Version</key>
|
||||
<string>446.1</string>
|
||||
<key>IBLockedTabItems</key>
|
||||
<array>
|
||||
<integer>253</integer>
|
||||
</array>
|
||||
<key>IBSystem Version</key>
|
||||
<string>8R2218</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
IBClasses = (
|
||||
{
|
||||
ACTIONS = {hideLicense = id; showLicense = id; };
|
||||
CLASS = AboutWindowController;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fLicenseSheet = NSPanel;
|
||||
fLicenseView = NSTextView;
|
||||
fTextView = NSTextView;
|
||||
fVersionField = NSTextField;
|
||||
};
|
||||
SUPERCLASS = NSWindowController;
|
||||
},
|
||||
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }
|
||||
);
|
||||
IBVersion = 1;
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBDocumentLocation</key>
|
||||
<string>27 115 356 240 0 0 1600 1002 </string>
|
||||
<key>IBFramework Version</key>
|
||||
<string>446.1</string>
|
||||
<key>IBOpenObjects</key>
|
||||
<array>
|
||||
<integer>5</integer>
|
||||
</array>
|
||||
<key>IBSystem Version</key>
|
||||
<string>8R218</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
IBClasses = (
|
||||
{
|
||||
ACTIONS = {
|
||||
cancelCreateProgress = id;
|
||||
cancelCreateWindow = id;
|
||||
create = id;
|
||||
setLocation = id;
|
||||
};
|
||||
CLASS = CreatorWindowController;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fCommentView = NSTextView;
|
||||
fIconView = NSImageView;
|
||||
fLocationField = NSTextField;
|
||||
fNameField = NSTextField;
|
||||
fOpenCheck = NSButton;
|
||||
fPiecesField = NSTextField;
|
||||
fPrivateCheck = NSButton;
|
||||
fProgressIndicator = NSProgressIndicator;
|
||||
fProgressView = NSView;
|
||||
fStatusField = NSTextField;
|
||||
fTrackerField = NSTextField;
|
||||
};
|
||||
SUPERCLASS = NSWindowController;
|
||||
},
|
||||
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }
|
||||
);
|
||||
IBVersion = 1;
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBDocumentLocation</key>
|
||||
<string>81 77 356 240 0 0 1600 1002 </string>
|
||||
<key>IBEditorPositions</key>
|
||||
<dict>
|
||||
<key>56</key>
|
||||
<string>2 579 368 126 0 0 1600 1002 </string>
|
||||
</dict>
|
||||
<key>IBFramework Version</key>
|
||||
<string>446.1</string>
|
||||
<key>IBOpenObjects</key>
|
||||
<array>
|
||||
<integer>5</integer>
|
||||
</array>
|
||||
<key>IBSystem Version</key>
|
||||
<string>8R218</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
|
@ -0,0 +1,4 @@
|
|||
/* Localized versions of Info.plist keys */
|
||||
|
||||
CFBundleName = "Transmission";
|
||||
NSHumanReadableCopyright = "Copyright 2005-2007 The Transmission Project";
|
|
@ -0,0 +1,88 @@
|
|||
{
|
||||
IBClasses = (
|
||||
{CLASS = FileOutlineView; LANGUAGE = ObjC; SUPERCLASS = NSOutlineView; },
|
||||
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
|
||||
{CLASS = InfoWindow; LANGUAGE = ObjC; SUPERCLASS = NSPanel; },
|
||||
{
|
||||
ACTIONS = {
|
||||
revealDataFile = id;
|
||||
revealFile = id;
|
||||
revealTorrentFile = id;
|
||||
setCheck = id;
|
||||
setOnlySelectedCheck = id;
|
||||
setPex = id;
|
||||
setPiecesView = id;
|
||||
setPriority = id;
|
||||
setRatioLimit = id;
|
||||
setRatioSetting = id;
|
||||
setSpeedLimit = id;
|
||||
setSpeedMode = id;
|
||||
};
|
||||
CLASS = InfoWindowController;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fCommentView = NSTextView;
|
||||
fCompletedFromTrackerField = NSTextField;
|
||||
fConnectedPeersField = NSTextField;
|
||||
fCreatorField = NSTextField;
|
||||
fDataLocationField = NSTextField;
|
||||
fDateActivityField = NSTextField;
|
||||
fDateAddedField = NSTextField;
|
||||
fDateCompletedField = NSTextField;
|
||||
fDateCreatedField = NSTextField;
|
||||
fDownloadLimitField = NSTextField;
|
||||
fDownloadLimitLabel = NSTextField;
|
||||
fDownloadLimitPopUp = NSPopUpButton;
|
||||
fDownloadedTotalField = NSTextField;
|
||||
fDownloadedValidField = NSTextField;
|
||||
fDownloadingFromField = NSTextField;
|
||||
fErrorMessageView = NSTextView;
|
||||
fFileCheckItem = NSMenuItem;
|
||||
fFileOutline = FileOutlineView;
|
||||
fFilePriorityHigh = NSMenuItem;
|
||||
fFilePriorityLow = NSMenuItem;
|
||||
fFilePriorityNormal = NSMenuItem;
|
||||
fFileTableStatusField = NSTextField;
|
||||
fFileUncheckItem = NSMenuItem;
|
||||
fHashField = NSTextField;
|
||||
fImageView = NSImageView;
|
||||
fLeechersField = NSTextField;
|
||||
fNameField = NSTextField;
|
||||
fPeerTable = NSTableView;
|
||||
fPexCheck = NSButton;
|
||||
fPiecesControl = NSSegmentedControl;
|
||||
fPiecesField = NSTextField;
|
||||
fPiecesView = PiecesView;
|
||||
fProgressField = NSTextField;
|
||||
fRatioField = NSTextField;
|
||||
fRatioLimitField = NSTextField;
|
||||
fRatioPopUp = NSPopUpButton;
|
||||
fRevealDataButton = NSButton;
|
||||
fRevealTorrentButton = NSButton;
|
||||
fSecureField = NSTextField;
|
||||
fSeedersField = NSTextField;
|
||||
fSizeField = NSTextField;
|
||||
fStateField = NSTextField;
|
||||
fSwarmSpeedField = NSTextField;
|
||||
fTabView = NSTabView;
|
||||
fTorrentLocationField = NSTextField;
|
||||
fTrackerField = NSTextField;
|
||||
fUploadLimitField = NSTextField;
|
||||
fUploadLimitLabel = NSTextField;
|
||||
fUploadLimitPopUp = NSPopUpButton;
|
||||
fUploadedTotalField = NSTextField;
|
||||
fUploadingToField = NSTextField;
|
||||
};
|
||||
SUPERCLASS = NSWindowController;
|
||||
},
|
||||
{CLASS = NSLevelIndicatorCell; LANGUAGE = ObjC; SUPERCLASS = NSActionCell; },
|
||||
{CLASS = NSSegmentedControl; LANGUAGE = ObjC; SUPERCLASS = NSControl; },
|
||||
{
|
||||
CLASS = PeerProgressIndicatorCell;
|
||||
LANGUAGE = ObjC;
|
||||
SUPERCLASS = NSLevelIndicatorCell;
|
||||
},
|
||||
{CLASS = PiecesView; LANGUAGE = ObjC; SUPERCLASS = NSImageView; }
|
||||
);
|
||||
IBVersion = 1;
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBDocumentLocation</key>
|
||||
<string>3 464 356 240 0 0 1600 1002 </string>
|
||||
<key>IBEditorPositions</key>
|
||||
<dict>
|
||||
<key>549</key>
|
||||
<string>368 553 258 149 0 0 1600 1002 </string>
|
||||
</dict>
|
||||
<key>IBFramework Version</key>
|
||||
<string>446.1</string>
|
||||
<key>IBLockedObjects</key>
|
||||
<array>
|
||||
<integer>5</integer>
|
||||
</array>
|
||||
<key>IBLockedTabItems</key>
|
||||
<array>
|
||||
<integer>332</integer>
|
||||
</array>
|
||||
<key>IBSystem Version</key>
|
||||
<string>8R218</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,186 @@
|
|||
{
|
||||
IBClasses = (
|
||||
{CLASS = ActionPopUpButton; LANGUAGE = ObjC; SUPERCLASS = NSPopUpButton; },
|
||||
{
|
||||
ACTIONS = {
|
||||
announceSelectedTorrents = id;
|
||||
applyFilter = id;
|
||||
applySpeedLimit = id;
|
||||
copyTorrentFiles = id;
|
||||
createFile = id;
|
||||
doNothing = id;
|
||||
linkForums = id;
|
||||
linkHomepage = id;
|
||||
moveDataFiles = id;
|
||||
openShowSheet = id;
|
||||
openURLCancelEndSheet = id;
|
||||
openURLEndSheet = id;
|
||||
openURLShowSheet = id;
|
||||
removeDeleteData = id;
|
||||
removeDeleteDataAndTorrent = id;
|
||||
removeDeleteTorrent = id;
|
||||
removeNoDelete = id;
|
||||
resetCacheForSelectedTorrents = id;
|
||||
resumeAllTorrents = id;
|
||||
resumeSelectedTorrents = id;
|
||||
resumeSelectedTorrentsNoWait = id;
|
||||
resumeWaitingTorrents = id;
|
||||
revealFile = id;
|
||||
setFilter = id;
|
||||
setInfoTab = id;
|
||||
setLimitGlobalEnabled = id;
|
||||
setQuickLimitGlobal = id;
|
||||
setQuickRatioGlobal = id;
|
||||
setSort = id;
|
||||
setSortReverse = id;
|
||||
showAboutWindow = id;
|
||||
showInfo = id;
|
||||
showMainWindow = id;
|
||||
showMessageWindow = id;
|
||||
showPreferenceWindow = id;
|
||||
stopAllTorrents = id;
|
||||
stopSelectedTorrents = id;
|
||||
switchFilter = id;
|
||||
toggleAdvancedBar = id;
|
||||
toggleFilterBar = id;
|
||||
toggleSmallView = id;
|
||||
toggleSpeedLimit = id;
|
||||
toggleStatusBar = id;
|
||||
};
|
||||
CLASS = Controller;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fActionButton = NSButton;
|
||||
fBottomBar = ImageBackgroundView;
|
||||
fDateSortActionItem = NSMenuItem;
|
||||
fDateSortItem = NSMenuItem;
|
||||
fDockMenu = NSMenu;
|
||||
fDownloadFilterButton = FilterBarButton;
|
||||
fDownloadLimitItem = NSMenuItem;
|
||||
fDownloadMenu = NSMenu;
|
||||
fDownloadNoLimitItem = NSMenuItem;
|
||||
fFilterBar = FilterBarView;
|
||||
fNameSortActionItem = NSMenuItem;
|
||||
fNameSortItem = NSMenuItem;
|
||||
fNextFilterItem = NSMenuItem;
|
||||
fNextInfoTabItem = NSMenuItem;
|
||||
fNoFilterButton = FilterBarButton;
|
||||
fOpenIgnoreDownloadFolder = NSMenuItem;
|
||||
fOrderSortActionItem = NSMenuItem;
|
||||
fOrderSortItem = NSMenuItem;
|
||||
fPauseFilterButton = FilterBarButton;
|
||||
fPrevFilterItem = NSMenuItem;
|
||||
fPrevInfoTabItem = NSMenuItem;
|
||||
fProgressSortActionItem = NSMenuItem;
|
||||
fProgressSortItem = NSMenuItem;
|
||||
fScrollView = NSScrollView;
|
||||
fSearchFilterField = NSSearchField;
|
||||
fSeedFilterButton = FilterBarButton;
|
||||
fSpeedLimitButton = NSButton;
|
||||
fStateSortActionItem = NSMenuItem;
|
||||
fStateSortItem = NSMenuItem;
|
||||
fStatusBar = ImageBackgroundView;
|
||||
fTableView = TorrentTableView;
|
||||
fTotalDLField = NSTextField;
|
||||
fTotalTorrentsField = NSTextField;
|
||||
fTotalULField = NSTextField;
|
||||
fURLSheetTextField = NSTextField;
|
||||
fURLSheetWindow = NSWindow;
|
||||
fUpdater = SUUpdater;
|
||||
fUploadLimitItem = NSMenuItem;
|
||||
fUploadMenu = NSMenu;
|
||||
fUploadNoLimitItem = NSMenuItem;
|
||||
fWindow = NSWindow;
|
||||
};
|
||||
SUPERCLASS = NSObject;
|
||||
},
|
||||
{CLASS = FilterBarButton; LANGUAGE = ObjC; SUPERCLASS = NSButton; },
|
||||
{
|
||||
CLASS = FilterBarView;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fDownloadFilterButton = FilterBarButton;
|
||||
fNoFilterButton = FilterBarButton;
|
||||
fPauseFilterButton = FilterBarButton;
|
||||
fSeedFilterButton = FilterBarButton;
|
||||
};
|
||||
SUPERCLASS = ImageBackgroundView;
|
||||
},
|
||||
{
|
||||
ACTIONS = {deselectAll = id; revealFile = id; setNextTab = id; setPreviousTab = id; };
|
||||
CLASS = FirstResponder;
|
||||
LANGUAGE = ObjC;
|
||||
SUPERCLASS = NSObject;
|
||||
},
|
||||
{CLASS = ImageBackgroundView; LANGUAGE = ObjC; SUPERCLASS = NSView; },
|
||||
{CLASS = NSSegmentedControl; LANGUAGE = ObjC; SUPERCLASS = NSControl; },
|
||||
{CLASS = NameCell; LANGUAGE = ObjC; SUPERCLASS = NSCell; },
|
||||
{
|
||||
ACTIONS = {
|
||||
folderSheetShow = id;
|
||||
setAutoStart = id;
|
||||
setBadge = id;
|
||||
setDownloadLocation = id;
|
||||
setLimit = id;
|
||||
setLimitCheck = id;
|
||||
setLimitMenu = id;
|
||||
setPort = id;
|
||||
setQuickRatio = id;
|
||||
setQuickSpeed = id;
|
||||
setRatio = id;
|
||||
setRatioCheck = id;
|
||||
setRatioMenu = id;
|
||||
setShowMessage = id;
|
||||
setUpdate = id;
|
||||
};
|
||||
CLASS = PrefsController;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fAutoStartCheck = NSButton;
|
||||
fBadgeDownloadRateCheck = NSButton;
|
||||
fBadgeUploadRateCheck = NSButton;
|
||||
fBlankView = NSView;
|
||||
fDownloadCheck = NSButton;
|
||||
fDownloadField = NSTextField;
|
||||
fDownloadLimitItem = NSMenuItem;
|
||||
fDownloadMenu = NSMenu;
|
||||
fDownloadNoLimitItem = NSMenuItem;
|
||||
fFolderPopUp = NSPopUpButton;
|
||||
fGeneralView = NSView;
|
||||
fNetworkView = NSView;
|
||||
fPortField = NSTextField;
|
||||
fPrefsWindow = NSPanel;
|
||||
fQuitCheck = NSButton;
|
||||
fRatioCheck = NSButton;
|
||||
fRatioField = NSTextField;
|
||||
fRatioNotSetItem = NSMenuItem;
|
||||
fRatioSetItem = NSMenuItem;
|
||||
fRemoveCheck = NSButton;
|
||||
fTransfersView = NSView;
|
||||
fUpdatePopUp = NSPopUpButton;
|
||||
fUpdater = SUUpdater;
|
||||
fUploadCheck = NSButton;
|
||||
fUploadField = NSTextField;
|
||||
fUploadLimitItem = NSMenuItem;
|
||||
fUploadMenu = NSMenu;
|
||||
fUploadNoLimitItem = NSMenuItem;
|
||||
fWindow = NSWindow;
|
||||
};
|
||||
SUPERCLASS = NSObject;
|
||||
},
|
||||
{CLASS = ProgressCell; LANGUAGE = ObjC; SUPERCLASS = NSCell; },
|
||||
{
|
||||
ACTIONS = {checkForUpdates = id; };
|
||||
CLASS = SUUpdater;
|
||||
LANGUAGE = ObjC;
|
||||
SUPERCLASS = NSObject;
|
||||
},
|
||||
{
|
||||
CLASS = TorrentTableView;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {fContextNoRow = NSMenu; fContextRow = NSMenu; fController = Controller; };
|
||||
SUPERCLASS = NSTableView;
|
||||
}
|
||||
);
|
||||
IBVersion = 1;
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBDocumentLocation</key>
|
||||
<string>6 212 356 438 0 0 1600 1002 </string>
|
||||
<key>IBEditorPositions</key>
|
||||
<dict>
|
||||
<key>1041</key>
|
||||
<string>518 760 308 149 0 0 1600 1002 </string>
|
||||
<key>1480</key>
|
||||
<string>12 552 420 63 0 0 1600 1002 </string>
|
||||
<key>1603</key>
|
||||
<string>553 634 477 67 0 0 1600 1002 </string>
|
||||
<key>29</key>
|
||||
<string>8 958 639 44 0 0 1600 1002 </string>
|
||||
<key>456</key>
|
||||
<string>360 777 356 225 0 0 1600 1002 </string>
|
||||
<key>581</key>
|
||||
<string>363 903 167 99 0 0 1600 1002 </string>
|
||||
<key>589</key>
|
||||
<string>362 896 249 106 0 0 1600 1002 </string>
|
||||
</dict>
|
||||
<key>IBFramework Version</key>
|
||||
<string>446.1</string>
|
||||
<key>IBLockedObjects</key>
|
||||
<array>
|
||||
<integer>21</integer>
|
||||
</array>
|
||||
<key>IBOldestOS</key>
|
||||
<integer>3</integer>
|
||||
<key>IBSystem Version</key>
|
||||
<string>8R218</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
IBClasses = (
|
||||
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
|
||||
{
|
||||
ACTIONS = {changeLevel = id; clearLog = id; writeToFile = id; };
|
||||
CLASS = MessageWindowController;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fDebugWarningField = NSTextField;
|
||||
fDebugWarningIcon = NSImageView;
|
||||
fLevelButton = NSPopUpButton;
|
||||
fScrollView = NSScrollView;
|
||||
fTextView = NSTextView;
|
||||
};
|
||||
SUPERCLASS = NSWindowController;
|
||||
}
|
||||
);
|
||||
IBVersion = 1;
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBDocumentLocation</key>
|
||||
<string>1 461 356 240 0 0 1600 1002 </string>
|
||||
<key>IBFramework Version</key>
|
||||
<string>446.1</string>
|
||||
<key>IBOpenObjects</key>
|
||||
<array>
|
||||
<integer>5</integer>
|
||||
</array>
|
||||
<key>IBSystem Version</key>
|
||||
<string>8R218</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
|
@ -0,0 +1,78 @@
|
|||
{
|
||||
IBClasses = (
|
||||
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
|
||||
{CLASS = MenuButton; LANGUAGE = ObjC; SUPERCLASS = NSButton; },
|
||||
{CLASS = NSDatePicker; LANGUAGE = ObjC; SUPERCLASS = NSControl; },
|
||||
{
|
||||
ACTIONS = {
|
||||
applyRatioSetting = id;
|
||||
applySpeedSettings = id;
|
||||
folderSheetShow = id;
|
||||
helpForNetwork = id;
|
||||
importFolderSheetShow = id;
|
||||
incompleteFolderSheetShow = id;
|
||||
resetWarnings = id;
|
||||
setAutoImport = id;
|
||||
setAutoSize = id;
|
||||
setAutoSpeedLimit = id;
|
||||
setBadge = id;
|
||||
setDownloadLocation = id;
|
||||
setGlobalLimit = id;
|
||||
setNat = id;
|
||||
setPort = id;
|
||||
setQueue = id;
|
||||
setQueueNumber = id;
|
||||
setRatioStop = id;
|
||||
setSound = id;
|
||||
setSpeedLimit = id;
|
||||
setStalled = id;
|
||||
setStalledMinutes = id;
|
||||
setUpdate = id;
|
||||
};
|
||||
CLASS = PrefsController;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {
|
||||
fBandwidthView = NSView;
|
||||
fDownloadField = NSTextField;
|
||||
fDownloadSoundPopUp = NSPopUpButton;
|
||||
fFolderPopUp = NSPopUpButton;
|
||||
fGeneralView = NSView;
|
||||
fImportFolderPopUp = NSPopUpButton;
|
||||
fIncompleteFolderPopUp = NSPopUpButton;
|
||||
fNatCheck = NSButton;
|
||||
fNatStatusField = NSTextField;
|
||||
fNatStatusImage = NSImageView;
|
||||
fNetworkView = NSView;
|
||||
fPortField = NSTextField;
|
||||
fPortStatusField = NSTextField;
|
||||
fPortStatusImage = NSImageView;
|
||||
fPortStatusProgress = NSProgressIndicator;
|
||||
fQueueDownloadField = NSTextField;
|
||||
fQueueSeedField = NSTextField;
|
||||
fRatioStopField = NSTextField;
|
||||
fSeedingSoundPopUp = NSPopUpButton;
|
||||
fSpeedLimitDownloadField = NSTextField;
|
||||
fSpeedLimitUploadField = NSTextField;
|
||||
fStalledField = NSTextField;
|
||||
fTransfersView = NSView;
|
||||
fUpdatePopUp = NSPopUpButton;
|
||||
fUploadField = NSTextField;
|
||||
};
|
||||
SUPERCLASS = NSWindowController;
|
||||
},
|
||||
{CLASS = PrefsWindow; LANGUAGE = ObjC; SUPERCLASS = NSWindow; },
|
||||
{
|
||||
ACTIONS = {checkForUpdates = id; };
|
||||
CLASS = SUUpdater;
|
||||
LANGUAGE = ObjC;
|
||||
SUPERCLASS = NSObject;
|
||||
},
|
||||
{
|
||||
CLASS = TorrentTableView;
|
||||
LANGUAGE = ObjC;
|
||||
OUTLETS = {fContextNoRow = NSMenu; fContextRow = NSMenu; fController = Controller; };
|
||||
SUPERCLASS = NSTableView;
|
||||
}
|
||||
);
|
||||
IBVersion = 1;
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBDocumentLocation</key>
|
||||
<string>5 407 356 286 0 0 1600 1002 </string>
|
||||
<key>IBEditorPositions</key>
|
||||
<dict>
|
||||
<key>153</key>
|
||||
<string>510 534 563 268 0 0 1600 1002 </string>
|
||||
<key>28</key>
|
||||
<string>78 381 563 313 0 0 1600 1002 </string>
|
||||
<key>41</key>
|
||||
<string>510 515 563 305 0 0 1600 1002 </string>
|
||||
<key>66</key>
|
||||
<string>510 596 563 144 0 0 1600 1002 </string>
|
||||
</dict>
|
||||
<key>IBFramework Version</key>
|
||||
<string>446.1</string>
|
||||
<key>IBLockedTabItems</key>
|
||||
<array>
|
||||
<integer>253</integer>
|
||||
</array>
|
||||
<key>IBOpenObjects</key>
|
||||
<array>
|
||||
<integer>153</integer>
|
||||
</array>
|
||||
<key>IBSystem Version</key>
|
||||
<string>8R218</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue