diff --git a/Transmission.xcodeproj/project.pbxproj b/Transmission.xcodeproj/project.pbxproj index 61a3809ed..321a25c19 100644 --- a/Transmission.xcodeproj/project.pbxproj +++ b/Transmission.xcodeproj/project.pbxproj @@ -64,7 +64,7 @@ A21DFF100A292B2B007C5F76 /* Transfers.png in Resources */ = {isa = PBXBuildFile; fileRef = A21DFF0F0A292B2B007C5F76 /* Transfers.png */; }; A21F5B890AF25FB6008CE5CE /* ActionMenuRatioToDisplayRatioTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = A21F5B870AF25FB6008CE5CE /* ActionMenuRatioToDisplayRatioTransformer.m */; }; A21F5C040AF26DD5008CE5CE /* ActionMenuSpeedToDisplayLimitTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = A21F5C020AF26DD5008CE5CE /* ActionMenuSpeedToDisplayLimitTransformer.m */; }; - A2265F420B5EF5F40093DDA5 /* FileBrowserCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A2265F400B5EF5F40093DDA5 /* FileBrowserCell.m */; }; + A2265F420B5EF5F40093DDA5 /* FileNameCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A2265F400B5EF5F40093DDA5 /* FileNameCell.m */; }; A22A8D560AEEAFA5007E9CB9 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A22A8D540AEEAFA5007E9CB9 /* Localizable.strings */; }; A22BC9A30C5BBCF100F5FB72 /* BottomBorder.png in Resources */ = {isa = PBXBuildFile; fileRef = A22BC9A20C5BBCF100F5FB72 /* BottomBorder.png */; }; A232D29E0A70903E00973B12 /* Filter.png in Resources */ = {isa = PBXBuildFile; fileRef = A232D29D0A70903E00973B12 /* Filter.png */; }; @@ -343,8 +343,8 @@ A21F5B870AF25FB6008CE5CE /* ActionMenuRatioToDisplayRatioTransformer.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = ActionMenuRatioToDisplayRatioTransformer.m; path = macosx/ActionMenuRatioToDisplayRatioTransformer.m; sourceTree = ""; }; A21F5C010AF26DD5008CE5CE /* ActionMenuSpeedToDisplayLimitTransformer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ActionMenuSpeedToDisplayLimitTransformer.h; path = macosx/ActionMenuSpeedToDisplayLimitTransformer.h; sourceTree = ""; }; A21F5C020AF26DD5008CE5CE /* ActionMenuSpeedToDisplayLimitTransformer.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = ActionMenuSpeedToDisplayLimitTransformer.m; path = macosx/ActionMenuSpeedToDisplayLimitTransformer.m; sourceTree = ""; }; - A2265F3F0B5EF5F40093DDA5 /* FileBrowserCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = FileBrowserCell.h; path = macosx/FileBrowserCell.h; sourceTree = ""; }; - A2265F400B5EF5F40093DDA5 /* FileBrowserCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = FileBrowserCell.m; path = macosx/FileBrowserCell.m; sourceTree = ""; }; + A2265F3F0B5EF5F40093DDA5 /* FileNameCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = FileNameCell.h; path = macosx/FileNameCell.h; sourceTree = ""; }; + A2265F400B5EF5F40093DDA5 /* FileNameCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = FileNameCell.m; path = macosx/FileNameCell.m; sourceTree = ""; }; A22A7EBB0C627FC200E30364 /* Greek */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Greek; path = macosx/Greek.lproj/AboutWindow.nib; sourceTree = ""; }; A22A7EBC0C627FC200E30364 /* Greek */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = Greek; path = macosx/Greek.lproj/InfoPlist.strings; sourceTree = ""; }; A22A7EBD0C627FC200E30364 /* Greek */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Greek; path = macosx/Greek.lproj/InfoWindow.nib; sourceTree = ""; }; @@ -922,8 +922,8 @@ 35F372130C2D780600DAA8F2 /* InfoWindow.m */, A2AF1C360A3D0F6200F1575D /* FileOutlineView.h */, A2AF1C370A3D0F6200F1575D /* FileOutlineView.m */, - A2265F3F0B5EF5F40093DDA5 /* FileBrowserCell.h */, - A2265F400B5EF5F40093DDA5 /* FileBrowserCell.m */, + A2265F3F0B5EF5F40093DDA5 /* FileNameCell.h */, + A2265F400B5EF5F40093DDA5 /* FileNameCell.m */, A2A1CB770BF29D5500AE959F /* PeerProgressIndicatorCell.h */, A2A1CB780BF29D5500AE959F /* PeerProgressIndicatorCell.m */, A2AA579A0ADFCAB400CA59F6 /* PiecesView.h */, @@ -1313,7 +1313,7 @@ A25E74660AF5097D006F11AE /* ExpandedPathToIconTransformer.m in Sources */, A2BF07910B066E0800757C92 /* SpeedLimitToTurtleIconTransformer.m in Sources */, A24999230B49F1B5001EADA3 /* ActionPopUpButton.m in Sources */, - A2265F420B5EF5F40093DDA5 /* FileBrowserCell.m in Sources */, + A2265F420B5EF5F40093DDA5 /* FileNameCell.m in Sources */, A2A1CB7A0BF29D5500AE959F /* PeerProgressIndicatorCell.m in Sources */, A2385DD40BFE06C800B24EF6 /* DragOverlayWindow.m in Sources */, A2FB057F0BFEB6800095564D /* DragOverlayView.m in Sources */, diff --git a/macosx/FileBrowserCell.h b/macosx/FileNameCell.h similarity index 93% rename from macosx/FileBrowserCell.h rename to macosx/FileNameCell.h index bc3adfb11..168ab4942 100644 --- a/macosx/FileBrowserCell.h +++ b/macosx/FileNameCell.h @@ -24,17 +24,13 @@ #import -@interface FileBrowserCell : NSBrowserCell +@interface FileNameCell : NSActionCell { NSImage * fFolderImage; - float fPercent; - NSMutableDictionary * fTitleAttributes, * fStatusAttributes; } -- (void) setProgress: (float) progress; - - (NSRect) imageRectForBounds: (NSRect) bounds; - (NSRect) titleRectForBounds: (NSRect) bounds; - (NSRect) statusRectForBounds: (NSRect) bounds; diff --git a/macosx/FileBrowserCell.m b/macosx/FileNameCell.m similarity index 89% rename from macosx/FileBrowserCell.m rename to macosx/FileNameCell.m index ee5a2ab28..6b6be54bd 100644 --- a/macosx/FileBrowserCell.m +++ b/macosx/FileNameCell.m @@ -22,7 +22,8 @@ * DEALINGS IN THE SOFTWARE. *****************************************************************************/ -#import "FileBrowserCell.h" +#import "FileNameCell.h" +#import "InfoWindowController.h" #import "StringAdditions.h" #define PADDING_HORIZONAL 2.0 @@ -32,44 +33,28 @@ #define PADDING_ABOVE_TITLE_FILE 2.0 #define PADDING_BELOW_STATUS_FILE 2.0 -@interface FileBrowserCell (Private) +@interface FileNameCell (Private) - (NSAttributedString *) attributedTitleWithColor: (NSColor *) color; - (NSAttributedString *) attributedStatusWithColor: (NSColor *) color; @end -@implementation FileBrowserCell +@implementation FileNameCell -- (void) awakeFromNib -{ - [self setLeaf: YES]; -} - -- (void) setImage: (NSImage *) image +- (NSImage *) image { + NSImage * image = [[self objectValue] objectForKey: @"Icon"]; if (!image) { if (!fFolderImage) { fFolderImage = [[[NSWorkspace sharedWorkspace] iconForFileType: NSFileTypeForHFSTypeCode('fldr')] copy]; [fFolderImage setFlipped: YES]; - [fFolderImage setScalesWhenResized: YES]; } image = fFolderImage; } - else - { - [image setFlipped: YES]; - [image setScalesWhenResized: YES]; - } - - [super setImage: image]; -} - -- (void) setProgress: (float) progress -{ - fPercent = progress * 100.0; + return image; } - (NSRect) imageRectForBounds: (NSRect) bounds @@ -130,13 +115,16 @@ - (void) drawWithFrame: (NSRect) cellFrame inView: (NSView *) controlView { //icon - [[self image] drawInRect: [self imageRectForBounds: cellFrame] fromRect: NSZeroRect - operation: NSCompositeSourceOver fraction: 1.0]; + NSImage * icon = [self image]; + NSSize iconSize = [icon size]; + [icon drawInRect: [self imageRectForBounds: cellFrame] fromRect: NSMakeRect(0, 0, iconSize.width, iconSize.height) + operation: NSCompositeSourceOver fraction: 1.0]; //title BOOL highlighted = [self isHighlighted] && [[self highlightColorWithFrame: cellFrame inView: controlView] isEqual: [NSColor alternateSelectedControlColor]]; + #warning mimic torrent cell [[self attributedTitleWithColor: highlighted ? [NSColor whiteColor] : [NSColor controlTextColor]] drawInRect: [self titleRectForBounds: cellFrame]]; @@ -148,7 +136,7 @@ @end -@implementation FileBrowserCell (Private) +@implementation FileNameCell (Private) - (NSAttributedString *) attributedTitleWithColor: (NSColor *) color { @@ -188,9 +176,11 @@ if (color) [fStatusAttributes setObject: color forKey: NSForegroundColorAttributeName]; - #warning fPercent? + 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"), fPercent, + "Inspector -> Files tab -> file status string"), percent, [NSString stringForFileSize: [[[self objectValue] objectForKey: @"Size"] unsignedLongLongValue]]]; return [[[NSAttributedString alloc] initWithString: status attributes: fStatusAttributes] autorelease]; diff --git a/macosx/FileOutlineView.m b/macosx/FileOutlineView.m index 2d364ee7a..c548c7f5e 100644 --- a/macosx/FileOutlineView.m +++ b/macosx/FileOutlineView.m @@ -23,7 +23,8 @@ *****************************************************************************/ #import "FileOutlineView.h" -#import "FileBrowserCell.h" +#import "FileNameCell.h" +#import "FilePriorityCell.h" #import "InfoWindowController.h" #import "Torrent.h" @@ -31,9 +32,13 @@ - (void) awakeFromNib { - NSBrowserCell * browserCell = [[FileBrowserCell alloc] init]; - [[self tableColumnWithIdentifier: @"Name"] setDataCell: browserCell]; - [browserCell release]; + 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]; diff --git a/macosx/InfoWindowController.m b/macosx/InfoWindowController.m index 949097168..e918eb028 100644 --- a/macosx/InfoWindowController.m +++ b/macosx/InfoWindowController.m @@ -23,7 +23,6 @@ *****************************************************************************/ #import "InfoWindowController.h" -#import "FileBrowserCell.h" #import "FilePriorityCell.h" #import "StringAdditions.h" @@ -98,13 +97,10 @@ [fPeerTable setSortDescriptors: [NSArray arrayWithObject: [[fPeerTable tableColumnWithIdentifier: @"IP"] sortDescriptorPrototype]]]; + #warning make button? or just cell? //set file table [fFileOutline setDoubleAction: @selector(revealFile:)]; - //set file outline - FilePriorityCell * priorityCell = [[[FilePriorityCell alloc] init] autorelease]; - [[fFileOutline tableColumnWithIdentifier: @"Priority"] setDataCell: priorityCell]; - //set blank inspector [self updateInfoForTorrents: [NSArray array]]; @@ -881,19 +877,9 @@ forTableColumn: (NSTableColumn *) tableColumn item: (id) item { NSString * identifier = [tableColumn identifier]; - if ([identifier isEqualToString: @"Name"]) - { - if ([[item objectForKey: @"IsFolder"] boolValue]) - [cell setImage: nil]; - else - { - [cell setImage: [item objectForKey: @"Icon"]]; - [(FileBrowserCell *)cell setProgress: [[fTorrents objectAtIndex: 0] fileProgress: - [[item objectForKey: @"Indexes"] firstIndex]]]; - } - } - else if ([identifier isEqualToString: @"Check"]) + if ([identifier isEqualToString: @"Check"]) [cell setEnabled: [[fTorrents objectAtIndex: 0] canChangeDownloadCheckForFiles: [item objectForKey: @"Indexes"]]]; + #warning is this redundant? what about objectValue, and remove import too else if ([identifier isEqualToString: @"Priority"]) [(FilePriorityCell *)cell setItem: item]; else; diff --git a/macosx/Torrent.m b/macosx/Torrent.m index 7d6bc157e..4b5721563 100644 --- a/macosx/Torrent.m +++ b/macosx/Torrent.m @@ -1589,7 +1589,10 @@ static int static_lastid = 0; { [dict setObject: [NSIndexSet indexSetWithIndex: index] forKey: @"Indexes"]; [dict setObject: [NSNumber numberWithUnsignedLongLong: size] forKey: @"Size"]; - [dict setObject: [[NSWorkspace sharedWorkspace] iconForFileType: [name pathExtension]] forKey: @"Icon"]; + + NSImage * icon = [[NSWorkspace sharedWorkspace] iconForFileType: [name pathExtension]]; + [icon setFlipped: YES]; + [dict setObject: icon forKey: @"Icon"]; [flatList addObject: dict]; } diff --git a/macosx/TorrentCell.m b/macosx/TorrentCell.m index 14c7f8228..487aecb0f 100644 --- a/macosx/TorrentCell.m +++ b/macosx/TorrentCell.m @@ -281,6 +281,7 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 @implementation TorrentCell (Private) #warning don't use image +#warning NSDivideRect ? - (NSImage *) simpleBar: (float) width { Torrent * torrent = [self representedObject]; @@ -288,13 +289,15 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 NSImage * bar = [[NSImage alloc] initWithSize: NSMakeSize(width, BAR_HEIGHT)]; [bar lockFocus]; + NSRect barBounds = NSMakeRect(0, 0, width, BAR_HEIGHT); + float progress = [torrent progress], left = [torrent progressLeft]; if (progress < 1.0) { if (!fWhiteGradient) fWhiteGradient = [[CTGradient progressWhiteGradient] retain]; - [fWhiteGradient fillRect: NSMakeRect(0, 0, width, BAR_HEIGHT) angle: -90]; + [fWhiteGradient fillRect: barBounds angle: -90]; float include = progress + left; if (include < 1.0) @@ -364,7 +367,7 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 } [fBarOverlayColor set]; - [NSBezierPath strokeRect: NSInsetRect(NSMakeRect(0, 0, width, BAR_HEIGHT), 0.5, 0.5)]; + [NSBezierPath strokeRect: NSInsetRect(barBounds, 0.5, 0.5)]; [bar unlockFocus];