rearrange some of the file viewer code

This commit is contained in:
Mitchell Livingston 2007-08-14 22:55:06 +00:00
parent 8ad6b7aa3b
commit f407e44edc
7 changed files with 45 additions and 62 deletions

View File

@ -64,7 +64,7 @@
A21DFF100A292B2B007C5F76 /* Transfers.png in Resources */ = {isa = PBXBuildFile; fileRef = A21DFF0F0A292B2B007C5F76 /* Transfers.png */; }; A21DFF100A292B2B007C5F76 /* Transfers.png in Resources */ = {isa = PBXBuildFile; fileRef = A21DFF0F0A292B2B007C5F76 /* Transfers.png */; };
A21F5B890AF25FB6008CE5CE /* ActionMenuRatioToDisplayRatioTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = A21F5B870AF25FB6008CE5CE /* ActionMenuRatioToDisplayRatioTransformer.m */; }; A21F5B890AF25FB6008CE5CE /* ActionMenuRatioToDisplayRatioTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = A21F5B870AF25FB6008CE5CE /* ActionMenuRatioToDisplayRatioTransformer.m */; };
A21F5C040AF26DD5008CE5CE /* ActionMenuSpeedToDisplayLimitTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = A21F5C020AF26DD5008CE5CE /* ActionMenuSpeedToDisplayLimitTransformer.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 */; }; A22A8D560AEEAFA5007E9CB9 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A22A8D540AEEAFA5007E9CB9 /* Localizable.strings */; };
A22BC9A30C5BBCF100F5FB72 /* BottomBorder.png in Resources */ = {isa = PBXBuildFile; fileRef = A22BC9A20C5BBCF100F5FB72 /* BottomBorder.png */; }; A22BC9A30C5BBCF100F5FB72 /* BottomBorder.png in Resources */ = {isa = PBXBuildFile; fileRef = A22BC9A20C5BBCF100F5FB72 /* BottomBorder.png */; };
A232D29E0A70903E00973B12 /* Filter.png in Resources */ = {isa = PBXBuildFile; fileRef = A232D29D0A70903E00973B12 /* Filter.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 = "<group>"; }; A21F5B870AF25FB6008CE5CE /* ActionMenuRatioToDisplayRatioTransformer.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = ActionMenuRatioToDisplayRatioTransformer.m; path = macosx/ActionMenuRatioToDisplayRatioTransformer.m; sourceTree = "<group>"; };
A21F5C010AF26DD5008CE5CE /* ActionMenuSpeedToDisplayLimitTransformer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ActionMenuSpeedToDisplayLimitTransformer.h; path = macosx/ActionMenuSpeedToDisplayLimitTransformer.h; sourceTree = "<group>"; }; A21F5C010AF26DD5008CE5CE /* ActionMenuSpeedToDisplayLimitTransformer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ActionMenuSpeedToDisplayLimitTransformer.h; path = macosx/ActionMenuSpeedToDisplayLimitTransformer.h; sourceTree = "<group>"; };
A21F5C020AF26DD5008CE5CE /* ActionMenuSpeedToDisplayLimitTransformer.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = ActionMenuSpeedToDisplayLimitTransformer.m; path = macosx/ActionMenuSpeedToDisplayLimitTransformer.m; sourceTree = "<group>"; }; A21F5C020AF26DD5008CE5CE /* ActionMenuSpeedToDisplayLimitTransformer.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = ActionMenuSpeedToDisplayLimitTransformer.m; path = macosx/ActionMenuSpeedToDisplayLimitTransformer.m; sourceTree = "<group>"; };
A2265F3F0B5EF5F40093DDA5 /* FileBrowserCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = FileBrowserCell.h; path = macosx/FileBrowserCell.h; sourceTree = "<group>"; }; A2265F3F0B5EF5F40093DDA5 /* FileNameCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = FileNameCell.h; path = macosx/FileNameCell.h; sourceTree = "<group>"; };
A2265F400B5EF5F40093DDA5 /* FileBrowserCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = FileBrowserCell.m; path = macosx/FileBrowserCell.m; sourceTree = "<group>"; }; A2265F400B5EF5F40093DDA5 /* FileNameCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = FileNameCell.m; path = macosx/FileNameCell.m; sourceTree = "<group>"; };
A22A7EBB0C627FC200E30364 /* Greek */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Greek; path = macosx/Greek.lproj/AboutWindow.nib; sourceTree = "<group>"; }; A22A7EBB0C627FC200E30364 /* Greek */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Greek; path = macosx/Greek.lproj/AboutWindow.nib; sourceTree = "<group>"; };
A22A7EBC0C627FC200E30364 /* Greek */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = Greek; path = macosx/Greek.lproj/InfoPlist.strings; sourceTree = "<group>"; }; A22A7EBC0C627FC200E30364 /* Greek */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = Greek; path = macosx/Greek.lproj/InfoPlist.strings; sourceTree = "<group>"; };
A22A7EBD0C627FC200E30364 /* Greek */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Greek; path = macosx/Greek.lproj/InfoWindow.nib; sourceTree = "<group>"; }; A22A7EBD0C627FC200E30364 /* Greek */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Greek; path = macosx/Greek.lproj/InfoWindow.nib; sourceTree = "<group>"; };
@ -922,8 +922,8 @@
35F372130C2D780600DAA8F2 /* InfoWindow.m */, 35F372130C2D780600DAA8F2 /* InfoWindow.m */,
A2AF1C360A3D0F6200F1575D /* FileOutlineView.h */, A2AF1C360A3D0F6200F1575D /* FileOutlineView.h */,
A2AF1C370A3D0F6200F1575D /* FileOutlineView.m */, A2AF1C370A3D0F6200F1575D /* FileOutlineView.m */,
A2265F3F0B5EF5F40093DDA5 /* FileBrowserCell.h */, A2265F3F0B5EF5F40093DDA5 /* FileNameCell.h */,
A2265F400B5EF5F40093DDA5 /* FileBrowserCell.m */, A2265F400B5EF5F40093DDA5 /* FileNameCell.m */,
A2A1CB770BF29D5500AE959F /* PeerProgressIndicatorCell.h */, A2A1CB770BF29D5500AE959F /* PeerProgressIndicatorCell.h */,
A2A1CB780BF29D5500AE959F /* PeerProgressIndicatorCell.m */, A2A1CB780BF29D5500AE959F /* PeerProgressIndicatorCell.m */,
A2AA579A0ADFCAB400CA59F6 /* PiecesView.h */, A2AA579A0ADFCAB400CA59F6 /* PiecesView.h */,
@ -1313,7 +1313,7 @@
A25E74660AF5097D006F11AE /* ExpandedPathToIconTransformer.m in Sources */, A25E74660AF5097D006F11AE /* ExpandedPathToIconTransformer.m in Sources */,
A2BF07910B066E0800757C92 /* SpeedLimitToTurtleIconTransformer.m in Sources */, A2BF07910B066E0800757C92 /* SpeedLimitToTurtleIconTransformer.m in Sources */,
A24999230B49F1B5001EADA3 /* ActionPopUpButton.m in Sources */, A24999230B49F1B5001EADA3 /* ActionPopUpButton.m in Sources */,
A2265F420B5EF5F40093DDA5 /* FileBrowserCell.m in Sources */, A2265F420B5EF5F40093DDA5 /* FileNameCell.m in Sources */,
A2A1CB7A0BF29D5500AE959F /* PeerProgressIndicatorCell.m in Sources */, A2A1CB7A0BF29D5500AE959F /* PeerProgressIndicatorCell.m in Sources */,
A2385DD40BFE06C800B24EF6 /* DragOverlayWindow.m in Sources */, A2385DD40BFE06C800B24EF6 /* DragOverlayWindow.m in Sources */,
A2FB057F0BFEB6800095564D /* DragOverlayView.m in Sources */, A2FB057F0BFEB6800095564D /* DragOverlayView.m in Sources */,

View File

@ -24,17 +24,13 @@
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
@interface FileBrowserCell : NSBrowserCell @interface FileNameCell : NSActionCell
{ {
NSImage * fFolderImage; NSImage * fFolderImage;
float fPercent;
NSMutableDictionary * fTitleAttributes, * fStatusAttributes; NSMutableDictionary * fTitleAttributes, * fStatusAttributes;
} }
- (void) setProgress: (float) progress;
- (NSRect) imageRectForBounds: (NSRect) bounds; - (NSRect) imageRectForBounds: (NSRect) bounds;
- (NSRect) titleRectForBounds: (NSRect) bounds; - (NSRect) titleRectForBounds: (NSRect) bounds;
- (NSRect) statusRectForBounds: (NSRect) bounds; - (NSRect) statusRectForBounds: (NSRect) bounds;

View File

@ -22,7 +22,8 @@
* DEALINGS IN THE SOFTWARE. * DEALINGS IN THE SOFTWARE.
*****************************************************************************/ *****************************************************************************/
#import "FileBrowserCell.h" #import "FileNameCell.h"
#import "InfoWindowController.h"
#import "StringAdditions.h" #import "StringAdditions.h"
#define PADDING_HORIZONAL 2.0 #define PADDING_HORIZONAL 2.0
@ -32,44 +33,28 @@
#define PADDING_ABOVE_TITLE_FILE 2.0 #define PADDING_ABOVE_TITLE_FILE 2.0
#define PADDING_BELOW_STATUS_FILE 2.0 #define PADDING_BELOW_STATUS_FILE 2.0
@interface FileBrowserCell (Private) @interface FileNameCell (Private)
- (NSAttributedString *) attributedTitleWithColor: (NSColor *) color; - (NSAttributedString *) attributedTitleWithColor: (NSColor *) color;
- (NSAttributedString *) attributedStatusWithColor: (NSColor *) color; - (NSAttributedString *) attributedStatusWithColor: (NSColor *) color;
@end @end
@implementation FileBrowserCell @implementation FileNameCell
- (void) awakeFromNib - (NSImage *) image
{
[self setLeaf: YES];
}
- (void) setImage: (NSImage *) image
{ {
NSImage * image = [[self objectValue] objectForKey: @"Icon"];
if (!image) if (!image)
{ {
if (!fFolderImage) if (!fFolderImage)
{ {
fFolderImage = [[[NSWorkspace sharedWorkspace] iconForFileType: NSFileTypeForHFSTypeCode('fldr')] copy]; fFolderImage = [[[NSWorkspace sharedWorkspace] iconForFileType: NSFileTypeForHFSTypeCode('fldr')] copy];
[fFolderImage setFlipped: YES]; [fFolderImage setFlipped: YES];
[fFolderImage setScalesWhenResized: YES];
} }
image = fFolderImage; image = fFolderImage;
} }
else return image;
{
[image setFlipped: YES];
[image setScalesWhenResized: YES];
}
[super setImage: image];
}
- (void) setProgress: (float) progress
{
fPercent = progress * 100.0;
} }
- (NSRect) imageRectForBounds: (NSRect) bounds - (NSRect) imageRectForBounds: (NSRect) bounds
@ -130,13 +115,16 @@
- (void) drawWithFrame: (NSRect) cellFrame inView: (NSView *) controlView - (void) drawWithFrame: (NSRect) cellFrame inView: (NSView *) controlView
{ {
//icon //icon
[[self image] drawInRect: [self imageRectForBounds: cellFrame] fromRect: NSZeroRect NSImage * icon = [self image];
operation: NSCompositeSourceOver fraction: 1.0]; NSSize iconSize = [icon size];
[icon drawInRect: [self imageRectForBounds: cellFrame] fromRect: NSMakeRect(0, 0, iconSize.width, iconSize.height)
operation: NSCompositeSourceOver fraction: 1.0];
//title //title
BOOL highlighted = [self isHighlighted] && [[self highlightColorWithFrame: cellFrame inView: controlView] BOOL highlighted = [self isHighlighted] && [[self highlightColorWithFrame: cellFrame inView: controlView]
isEqual: [NSColor alternateSelectedControlColor]]; isEqual: [NSColor alternateSelectedControlColor]];
#warning mimic torrent cell
[[self attributedTitleWithColor: highlighted ? [NSColor whiteColor] : [NSColor controlTextColor]] [[self attributedTitleWithColor: highlighted ? [NSColor whiteColor] : [NSColor controlTextColor]]
drawInRect: [self titleRectForBounds: cellFrame]]; drawInRect: [self titleRectForBounds: cellFrame]];
@ -148,7 +136,7 @@
@end @end
@implementation FileBrowserCell (Private) @implementation FileNameCell (Private)
- (NSAttributedString *) attributedTitleWithColor: (NSColor *) color - (NSAttributedString *) attributedTitleWithColor: (NSColor *) color
{ {
@ -188,9 +176,11 @@
if (color) if (color)
[fStatusAttributes setObject: color forKey: NSForegroundColorAttributeName]; [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 %@", 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]]]; [NSString stringForFileSize: [[[self objectValue] objectForKey: @"Size"] unsignedLongLongValue]]];
return [[[NSAttributedString alloc] initWithString: status attributes: fStatusAttributes] autorelease]; return [[[NSAttributedString alloc] initWithString: status attributes: fStatusAttributes] autorelease];

View File

@ -23,7 +23,8 @@
*****************************************************************************/ *****************************************************************************/
#import "FileOutlineView.h" #import "FileOutlineView.h"
#import "FileBrowserCell.h" #import "FileNameCell.h"
#import "FilePriorityCell.h"
#import "InfoWindowController.h" #import "InfoWindowController.h"
#import "Torrent.h" #import "Torrent.h"
@ -31,9 +32,13 @@
- (void) awakeFromNib - (void) awakeFromNib
{ {
NSBrowserCell * browserCell = [[FileBrowserCell alloc] init]; FileNameCell * nameCell = [[FileNameCell alloc] init];
[[self tableColumnWithIdentifier: @"Name"] setDataCell: browserCell]; [[self tableColumnWithIdentifier: @"Name"] setDataCell: nameCell];
[browserCell release]; [nameCell release];
FilePriorityCell * priorityCell = [[FilePriorityCell alloc] init];
[[self tableColumnWithIdentifier: @"Priority"] setDataCell: priorityCell];
[priorityCell release];
[self setAutoresizesOutlineColumn: NO]; [self setAutoresizesOutlineColumn: NO];
[self setIndentationPerLevel: 14.0]; [self setIndentationPerLevel: 14.0];

View File

@ -23,7 +23,6 @@
*****************************************************************************/ *****************************************************************************/
#import "InfoWindowController.h" #import "InfoWindowController.h"
#import "FileBrowserCell.h"
#import "FilePriorityCell.h" #import "FilePriorityCell.h"
#import "StringAdditions.h" #import "StringAdditions.h"
@ -98,13 +97,10 @@
[fPeerTable setSortDescriptors: [NSArray arrayWithObject: [[fPeerTable tableColumnWithIdentifier: @"IP"] [fPeerTable setSortDescriptors: [NSArray arrayWithObject: [[fPeerTable tableColumnWithIdentifier: @"IP"]
sortDescriptorPrototype]]]; sortDescriptorPrototype]]];
#warning make button? or just cell?
//set file table //set file table
[fFileOutline setDoubleAction: @selector(revealFile:)]; [fFileOutline setDoubleAction: @selector(revealFile:)];
//set file outline
FilePriorityCell * priorityCell = [[[FilePriorityCell alloc] init] autorelease];
[[fFileOutline tableColumnWithIdentifier: @"Priority"] setDataCell: priorityCell];
//set blank inspector //set blank inspector
[self updateInfoForTorrents: [NSArray array]]; [self updateInfoForTorrents: [NSArray array]];
@ -881,19 +877,9 @@
forTableColumn: (NSTableColumn *) tableColumn item: (id) item forTableColumn: (NSTableColumn *) tableColumn item: (id) item
{ {
NSString * identifier = [tableColumn identifier]; NSString * identifier = [tableColumn identifier];
if ([identifier isEqualToString: @"Name"]) if ([identifier isEqualToString: @"Check"])
{
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"])
[cell setEnabled: [[fTorrents objectAtIndex: 0] canChangeDownloadCheckForFiles: [item objectForKey: @"Indexes"]]]; [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"]) else if ([identifier isEqualToString: @"Priority"])
[(FilePriorityCell *)cell setItem: item]; [(FilePriorityCell *)cell setItem: item];
else; else;

View File

@ -1589,7 +1589,10 @@ static int static_lastid = 0;
{ {
[dict setObject: [NSIndexSet indexSetWithIndex: index] forKey: @"Indexes"]; [dict setObject: [NSIndexSet indexSetWithIndex: index] forKey: @"Indexes"];
[dict setObject: [NSNumber numberWithUnsignedLongLong: size] forKey: @"Size"]; [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]; [flatList addObject: dict];
} }

View File

@ -281,6 +281,7 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
@implementation TorrentCell (Private) @implementation TorrentCell (Private)
#warning don't use image #warning don't use image
#warning NSDivideRect ?
- (NSImage *) simpleBar: (float) width - (NSImage *) simpleBar: (float) width
{ {
Torrent * torrent = [self representedObject]; 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)]; NSImage * bar = [[NSImage alloc] initWithSize: NSMakeSize(width, BAR_HEIGHT)];
[bar lockFocus]; [bar lockFocus];
NSRect barBounds = NSMakeRect(0, 0, width, BAR_HEIGHT);
float progress = [torrent progress], left = [torrent progressLeft]; float progress = [torrent progress], left = [torrent progressLeft];
if (progress < 1.0) if (progress < 1.0)
{ {
if (!fWhiteGradient) if (!fWhiteGradient)
fWhiteGradient = [[CTGradient progressWhiteGradient] retain]; fWhiteGradient = [[CTGradient progressWhiteGradient] retain];
[fWhiteGradient fillRect: NSMakeRect(0, 0, width, BAR_HEIGHT) angle: -90]; [fWhiteGradient fillRect: barBounds angle: -90];
float include = progress + left; float include = progress + left;
if (include < 1.0) if (include < 1.0)
@ -364,7 +367,7 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
} }
[fBarOverlayColor set]; [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]; [bar unlockFocus];