From b7e3c9af5aea879c0f52b4a647540358ab23b853 Mon Sep 17 00:00:00 2001 From: Mitchell Livingston Date: Wed, 17 Jan 2007 06:25:35 +0000 Subject: [PATCH] first go at using an outline view for files....what a pain parsing the file names --- .../English.lproj/InfoWindow.nib/classes.nib | 2 +- .../InfoWindow.nib/keyedobjects.nib | Bin 41776 -> 41130 bytes macosx/InfoWindowController.h | 2 +- macosx/InfoWindowController.m | 90 +++++++++++------- macosx/Torrent.m | 44 ++++++++- 5 files changed, 98 insertions(+), 40 deletions(-) diff --git a/macosx/English.lproj/InfoWindow.nib/classes.nib b/macosx/English.lproj/InfoWindow.nib/classes.nib index 90181c9e2..08256d6bf 100644 --- a/macosx/English.lproj/InfoWindow.nib/classes.nib +++ b/macosx/English.lproj/InfoWindow.nib/classes.nib @@ -37,7 +37,7 @@ fDownloadedValidField = NSTextField; fDownloadingFromField = NSTextField; fErrorMessageView = NSTextView; - fFileTable = NSTableView; + fFileOutline = NSOutlineView; fFileTableStatusField = NSTextField; fHashField = NSTextField; fImageView = NSImageView; diff --git a/macosx/English.lproj/InfoWindow.nib/keyedobjects.nib b/macosx/English.lproj/InfoWindow.nib/keyedobjects.nib index 03517d7e5756f740cb01a9ef96a61bc32ae60dc5..09c18f1d3735c69d5d94b64399b4ae53c2cc7a87 100644 GIT binary patch literal 41130 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%0AT>}M z7!9ljZbN={L3VL=Np^X5Rd#K5Lv~a4yX>~?&g`D-{_Kz0L)pXGW7!kg=IrV0ne6%O z#q5>rwd{@T&Fro0U)jI2_p=YOkF)<~Uu0ir-(^3*ZQ%BBN4PWG748A|hWo(-;lc1Q zcqB}ODKH(*gV`_-7QkXSAC|*PSPg4o18jz^umg6%Uf2%@;1C>z6L1nv!D+Y#u7_c` z5k}!Acr-i?o&bLVPl2bwGvL|q9C#kQ5dH>U3NMFO!E535@VD?5cq_ae-UaW4e}I34 ze}aF3kHW{{X1E1D3txaQ!&l+!@J;wn_%?hOz7IcypTN)Hm+))&E&N}ub*^o$L#|V< zORih4XRc4Ke{N82NN#v;WR8@h<`_94x+~`XK#~fyiKF7%~zeAykBcun;aHK*UHsB1e>n8qp#K#Ee)G2jW7!h#v_cVI+oB zA^-v+5K@O^kwyeVMj>O73CI`7m&kNv7BUB!hb%)1kue&Uhp{j&Ccwm4J|@SMm>Sb!2F#3EF$d=>c(2Z-ckTJK~-3u6Pf; zH{K5)h!4hx;UjSpPQ@8G3+LhjT#V=Aa$JF{@M2tt8*vM6!%J~DUWS+BK|F%T@g$zY z(|8SDkHa{E+p^EW_&BY9p8oT#ecvL z;y>d@@Z)$h-h!XQFXC75YxoWP5BxTM7r&1`!=K|Xn_4xsZfe)`SyR`h9!&$AhW;-E WtW~QvA8ASdd)+tv-~az?V*U@5NMK_C literal 41776 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 Z&1xMwbZW1l`oGin 1) [fFileTableStatusField setStringValue: [NSString stringWithFormat: NSLocalizedString(@"%d files", "Inspector -> Files tab -> bottom text (number of files)"), [fFiles count]]]; @@ -272,7 +277,7 @@ [self updateInfoSettings]; [fPeerTable reloadData]; - [fFileTable reloadData]; + [fFileOutline reloadData]; } - (void) updateInfoStats @@ -505,7 +510,7 @@ SEL action = [menuItem action]; if (action == @selector(revealFile:)) - return [fFileTable numberOfSelectedRows] > 0 && + return [fFileOutline numberOfSelectedRows] > 0 && [[[fTabView selectedTabViewItem] identifier] isEqualToString: TAB_FILES_IDENT]; return YES; @@ -585,15 +590,14 @@ { if (tableView == fPeerTable) return fPeers ? [fPeers count] : 0; - else - return fFiles ? [fFiles count] : 0; + return 0; } - (id) tableView: (NSTableView *) tableView objectValueForTableColumn: (NSTableColumn *) column row: (int) row { - NSString * ident = [column identifier]; if (tableView == fPeerTable) { + NSString * ident = [column identifier]; NSDictionary * peer = [fPeers objectAtIndex: row]; if ([ident isEqualToString: @"Connected"]) @@ -611,16 +615,7 @@ else return [peer objectForKey: @"IP"]; } - else - { - NSDictionary * file = [fFiles objectAtIndex: row]; - if ([ident isEqualToString: @"Icon"]) - return [[NSWorkspace sharedWorkspace] iconForFileType: [[file objectForKey: @"Name"] pathExtension]]; - else if ([ident isEqualToString: @"Size"]) - return [NSString stringForFileSize: [[file objectForKey: @"Size"] unsignedLongLongValue]]; - else - return [file objectForKey: @"Name"]; - } + return nil; } - (void) tableView: (NSTableView *) tableView didClickTableColumn: (NSTableColumn *) tableColumn @@ -646,16 +641,8 @@ rect: (NSRectPointer) rect tableColumn: (NSTableColumn *) column row: (int) row mouseLocation: (NSPoint) mouseLocation { - if (tableView == fFileTable) - { - NSDictionary * file = [fFiles objectAtIndex: row]; - if ([[column identifier] isEqualToString: @"Size"]) - return [[[file objectForKey: @"Size"] stringValue] stringByAppendingString: NSLocalizedString(@" bytes", - "Inspector -> Files tab -> table row tooltip")]; - else - return [file objectForKey: @"Name"]; - } - else if (tableView == fPeerTable) + #warning tooltip for file table? + if (tableView == fPeerTable) { NSDictionary * peerDic = [fPeers objectAtIndex: row]; return [NSString stringWithFormat: NSLocalizedString(@"Progress: %.1f%%" @@ -667,8 +654,41 @@ ? NSLocalizedString(@"incoming", "Inspector -> Peers tab -> table row tooltip") : NSLocalizedString(@"outgoing", "Inspector -> Peers tab -> table row tooltip")]; } - else - return nil; + return nil; +} + +- (int) outlineView: (NSOutlineView *) outlineView numberOfChildrenOfItem: (id) item +{ + if (!item) + return [fFiles count]; + return [[item objectForKey: @"IsFolder"] boolValue] ? [[item objectForKey: @"Children"] count] : 0; +} + +- (BOOL) outlineView: (NSOutlineView *) outlineView isItemExpandable: (id) item +{ + return [[item objectForKey: @"IsFolder"] boolValue]; +} + +- (id) outlineView: (NSOutlineView *) outlineView child: (int) index ofItem: (id) item +{ + return [(item ? [item objectForKey: @"Children"] : fFiles) objectAtIndex: index]; +} + +- (id) outlineView: (NSOutlineView *) outlineView objectValueForTableColumn: (NSTableColumn *) tableColumn + byItem: (id) item +{ + NSString * ident = [tableColumn identifier]; + return [item objectForKey: @"Name"]; +} + +- (void) outlineView: (NSOutlineView *) outlineView willDisplayCell: (id) cell + forTableColumn: (NSTableColumn *) tableColumn item:(id) item +{ + NSImage * icon = [[NSWorkspace sharedWorkspace] iconForFileType: ![[item objectForKey: @"IsFolder"] boolValue] + ? [[item objectForKey: @"Name"] pathExtension] : NSFileTypeForHFSTypeCode('fldr')]; + [icon setScalesWhenResized: YES]; + [icon setSize: NSMakeSize(16.0, 16.0)]; + [cell setImage: icon]; } - (NSArray *) peerSortDescriptors @@ -698,12 +718,16 @@ - (void) revealFile: (id) sender { - Torrent * torrent = [fTorrents objectAtIndex: 0]; - NSEnumerator * enumerator = [[fFiles objectsAtIndexes: [fFileTable selectedRowIndexes]] objectEnumerator]; + if (!fFiles) + return; + + #warning get working + /*Torrent * torrent = [fTorrents objectAtIndex: 0]; + NSEnumerator * enumerator = [[fFiles objectsAtIndexes: [fFileOutline selectedRowIndexes]] objectEnumerator]; NSDictionary * file; while ((file = [enumerator nextObject])) [[NSWorkspace sharedWorkspace] selectFile: [[torrent downloadFolder] - stringByAppendingPathComponent: [file objectForKey: @"Name"]] inFileViewerRootedAtPath: nil]; + stringByAppendingPathComponent: [file objectForKey: @"Name"]] inFileViewerRootedAtPath: nil];*/ } - (void) setLimitCustom: (id) sender diff --git a/macosx/Torrent.m b/macosx/Torrent.m index 9db8aa554..605f256d1 100644 --- a/macosx/Torrent.m +++ b/macosx/Torrent.m @@ -43,8 +43,8 @@ checkDownload: (NSNumber *) checkDownload downloadLimit: (NSNumber *) downloadLimit waitToStart: (NSNumber *) waitToStart orderValue: (NSNumber *) orderValue; +- (void) insertPath: (NSMutableArray *) components withParent: (NSMutableArray *) parent; - (NSImage *) advancedBar; - - (void) trashFile: (NSString *) path; @end @@ -1068,16 +1068,17 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 { int count = fInfo->fileCount, i; tr_file_t file; - NSMutableArray * files = [NSMutableArray arrayWithCapacity: count]; + NSMutableArray * files = [NSMutableArray array]; for (i = 0; i < count; i++) { file = fInfo->files[i]; - [files addObject: [NSDictionary dictionaryWithObjectsAndKeys: + + [self insertPath: [[[NSString stringWithUTF8String: file.name] pathComponents] mutableCopy] withParent: files]; + /*[files addObject: [NSDictionary dictionaryWithObjectsAndKeys: [NSString stringWithUTF8String: file.name], @"Name", - [NSNumber numberWithUnsignedLongLong: file.length], @"Size", nil]]; + [NSNumber numberWithUnsignedLongLong: file.length], @"Size", nil]];*/ } - return files; } @@ -1204,6 +1205,39 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 return self; } +- (void) insertPath: (NSMutableArray *) components withParent: (NSMutableArray *) parent +{ + NSString * name = [components objectAtIndex: 0]; + BOOL isFolder = [components count] > 1; + + NSMutableDictionary * dict = nil; + if (isFolder) + { + NSEnumerator * enumerator = [parent objectEnumerator]; + while ((dict = [enumerator nextObject])) + if ([[dict objectForKey: @"Name"] isEqualToString: name] && [[dict objectForKey: @"IsFolder"] boolValue]) + break; + } + + //create new folder or item if it doesn't already exist + if (!dict) + { + #warning put size and full path here for item later + dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: name, @"Name", + [NSNumber numberWithBool: isFolder], @"IsFolder", nil]; + if (isFolder) + [dict setObject: [NSMutableArray array] forKey: @"Children"]; + + [parent addObject: dict]; + } + + if (isFolder) + { + [components removeObjectAtIndex: 0]; + [self insertPath: components withParent: [dict objectForKey: @"Children"]]; + } +} + - (NSImage *) advancedBar { int h, w;