From 27d9ff122ac0ac5c356a6a93397cdd79db4881e4 Mon Sep 17 00:00:00 2001 From: vspader Date: Sun, 14 Oct 2007 23:24:54 +0000 Subject: [PATCH] Started cleanup of file drawer. Still needs to handle updating. --- Cog.xcodeproj/project.pbxproj | 16 +-- English.lproj/MainMenu.nib/info.nib | 8 +- English.lproj/MainMenu.nib/keyedobjects.nib | Bin 59579 -> 58081 bytes FileDrawer/DirectoryNode.h | 5 - FileDrawer/DirectoryNode.m | 90 ++--------------- FileDrawer/FileOutlineView.h | 3 + FileDrawer/FileOutlineView.m | 11 ++- FileDrawer/FileTreeController.h | 5 +- FileDrawer/FileTreeController.m | 4 +- FileDrawer/FileTreeWatcher.h | 3 +- FileDrawer/FileTreeWatcher.m | 2 + FileDrawer/PathIcon.h | 19 ---- FileDrawer/PathIcon.m | 44 --------- FileDrawer/PathNode.h | 18 +++- FileDrawer/PathNode.m | 104 ++++++++++++++++++-- FileDrawer/SmartFolderNode.h | 2 - FileDrawer/SmartFolderNode.m | 68 +------------ 17 files changed, 150 insertions(+), 252 deletions(-) delete mode 100644 FileDrawer/PathIcon.h delete mode 100644 FileDrawer/PathIcon.m diff --git a/Cog.xcodeproj/project.pbxproj b/Cog.xcodeproj/project.pbxproj index c961a1b28..37d65df79 100644 --- a/Cog.xcodeproj/project.pbxproj +++ b/Cog.xcodeproj/project.pbxproj @@ -25,6 +25,8 @@ 1766C8970B912FB4004A7AE4 /* repeat_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 1766C88F0B912FB4004A7AE4 /* repeat_on.png */; }; 1766C8980B912FB4004A7AE4 /* shuffle_off.png in Resources */ = {isa = PBXBuildFile; fileRef = 1766C8900B912FB4004A7AE4 /* shuffle_off.png */; }; 1766C8990B912FB4004A7AE4 /* shuffle_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 1766C8910B912FB4004A7AE4 /* shuffle_on.png */; }; + 1769D7D10CC2BFF7003F455B /* FileTreeDataSource.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1769D7CF0CC2BFF7003F455B /* FileTreeDataSource.h */; }; + 1769D7D20CC2BFF7003F455B /* FileTreeDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 1769D7D00CC2BFF7003F455B /* FileTreeDataSource.m */; }; 1770429C0B8BC53600B86321 /* AppController.m in Sources */ = {isa = PBXBuildFile; fileRef = 177042980B8BC53600B86321 /* AppController.m */; }; 1770429E0B8BC53600B86321 /* PlaybackController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1770429A0B8BC53600B86321 /* PlaybackController.m */; }; 177EBF9E0B8BC2A70000BC8C /* AMRemovableColumnsTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EBF7A0B8BC2A70000BC8C /* AMRemovableColumnsTableView.m */; }; @@ -121,9 +123,7 @@ 8EFFCD610AA093AF00C458A5 /* FileIconCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD450AA093AF00C458A5 /* FileIconCell.m */; }; 8EFFCD630AA093AF00C458A5 /* FileNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD470AA093AF00C458A5 /* FileNode.m */; }; 8EFFCD650AA093AF00C458A5 /* FileOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD490AA093AF00C458A5 /* FileOutlineView.m */; }; - 8EFFCD670AA093AF00C458A5 /* FileTreeController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD4B0AA093AF00C458A5 /* FileTreeController.m */; }; 8EFFCD690AA093AF00C458A5 /* FileTreeWatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD4D0AA093AF00C458A5 /* FileTreeWatcher.m */; }; - 8EFFCD6D0AA093AF00C458A5 /* PathIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD510AA093AF00C458A5 /* PathIcon.m */; }; 8EFFCD6F0AA093AF00C458A5 /* PathNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD530AA093AF00C458A5 /* PathNode.m */; }; /* End PBXBuildFile section */ @@ -418,6 +418,7 @@ 170680840B950164006BA573 /* Growl.framework in CopyFiles */, 17F94CCD0B8D090800A34E87 /* Sparkle.framework in CopyFiles */, 1791FF8F0CB43A2C0070BC5C /* MediaKeysApplication.h in CopyFiles */, + 1769D7D10CC2BFF7003F455B /* FileTreeDataSource.h in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -465,6 +466,8 @@ 1766C88F0B912FB4004A7AE4 /* repeat_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = repeat_on.png; path = Images/repeat_on.png; sourceTree = ""; }; 1766C8900B912FB4004A7AE4 /* shuffle_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = shuffle_off.png; path = Images/shuffle_off.png; sourceTree = ""; }; 1766C8910B912FB4004A7AE4 /* shuffle_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = shuffle_on.png; path = Images/shuffle_on.png; sourceTree = ""; }; + 1769D7CF0CC2BFF7003F455B /* FileTreeDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileTreeDataSource.h; sourceTree = ""; }; + 1769D7D00CC2BFF7003F455B /* FileTreeDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FileTreeDataSource.m; sourceTree = ""; }; 1770424E0B8BC41800B86321 /* Cog.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Cog.app; sourceTree = BUILT_PRODUCTS_DIR; }; 177042970B8BC53600B86321 /* AppController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AppController.h; sourceTree = ""; }; 177042980B8BC53600B86321 /* AppController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AppController.m; sourceTree = ""; }; @@ -614,8 +617,6 @@ 8EFFCD4B0AA093AF00C458A5 /* FileTreeController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = FileTreeController.m; sourceTree = ""; }; 8EFFCD4C0AA093AF00C458A5 /* FileTreeWatcher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FileTreeWatcher.h; sourceTree = ""; }; 8EFFCD4D0AA093AF00C458A5 /* FileTreeWatcher.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = FileTreeWatcher.m; sourceTree = ""; }; - 8EFFCD500AA093AF00C458A5 /* PathIcon.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PathIcon.h; sourceTree = ""; }; - 8EFFCD510AA093AF00C458A5 /* PathIcon.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = PathIcon.m; sourceTree = ""; }; 8EFFCD520AA093AF00C458A5 /* PathNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PathNode.h; sourceTree = ""; }; 8EFFCD530AA093AF00C458A5 /* PathNode.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = PathNode.m; sourceTree = ""; }; /* End PBXFileReference section */ @@ -1146,10 +1147,10 @@ children = ( 8EFFCD440AA093AF00C458A5 /* FileIconCell.h */, 8EFFCD450AA093AF00C458A5 /* FileIconCell.m */, - 8EFFCD500AA093AF00C458A5 /* PathIcon.h */, - 8EFFCD510AA093AF00C458A5 /* PathIcon.m */, 8EFFCD480AA093AF00C458A5 /* FileOutlineView.h */, 8EFFCD490AA093AF00C458A5 /* FileOutlineView.m */, + 1769D7CF0CC2BFF7003F455B /* FileTreeDataSource.h */, + 1769D7D00CC2BFF7003F455B /* FileTreeDataSource.m */, 8EFFCD4A0AA093AF00C458A5 /* FileTreeController.h */, 8EFFCD4B0AA093AF00C458A5 /* FileTreeController.m */, 8EFFCD4C0AA093AF00C458A5 /* FileTreeWatcher.h */, @@ -1506,9 +1507,7 @@ 8EFFCD610AA093AF00C458A5 /* FileIconCell.m in Sources */, 8EFFCD630AA093AF00C458A5 /* FileNode.m in Sources */, 8EFFCD650AA093AF00C458A5 /* FileOutlineView.m in Sources */, - 8EFFCD670AA093AF00C458A5 /* FileTreeController.m in Sources */, 8EFFCD690AA093AF00C458A5 /* FileTreeWatcher.m in Sources */, - 8EFFCD6D0AA093AF00C458A5 /* PathIcon.m in Sources */, 8EFFCD6F0AA093AF00C458A5 /* PathNode.m in Sources */, 8E07AAF30AAC910500A4B32F /* SS_PrefsController.m in Sources */, 8E07AB790AAC930B00A4B32F /* PreferencesController.m in Sources */, @@ -1539,6 +1538,7 @@ 8E9A30160BA792DC0091081B /* NSFileHandle+CreateFile.m in Sources */, 179790E10C087AB7001D6996 /* OpenURLPanel.m in Sources */, 1791FF900CB43A2C0070BC5C /* MediaKeysApplication.m in Sources */, + 1769D7D20CC2BFF7003F455B /* FileTreeDataSource.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/English.lproj/MainMenu.nib/info.nib b/English.lproj/MainMenu.nib/info.nib index 590022da4..e953b87cb 100644 --- a/English.lproj/MainMenu.nib/info.nib +++ b/English.lproj/MainMenu.nib/info.nib @@ -15,7 +15,7 @@ 29 157 976 383 44 0 0 1680 1028 463 - 669 640 341 145 0 0 1680 1028 + 669 639 341 145 0 0 1680 1028 513 379 636 131 168 0 0 1680 1028 @@ -34,14 +34,14 @@ 4 IBOpenObjects - 463 - 29 - 1324 1063 268 + 29 21 1156 + 1324 513 + 463 IBSystem Version 8R2218 diff --git a/English.lproj/MainMenu.nib/keyedobjects.nib b/English.lproj/MainMenu.nib/keyedobjects.nib index f709b1b42fda7944bd0df358f169806749839f05..ddaaac14d7430dffa278647ce33ce565528eb362 100644 GIT binary patch delta 34991 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%0AUT(grzRy4>e&G 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 z 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 GDYo`LI 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 jozgqKcR}yM-X* +@class FileTreeDataSource; @interface FileOutlineView : NSOutlineView { IBOutlet NSDrawer *fileDrawer; + + FileTreeDataSource *dataSource; } @end diff --git a/FileDrawer/FileOutlineView.m b/FileDrawer/FileOutlineView.m index 0f6a26753..880510d6c 100644 --- a/FileDrawer/FileOutlineView.m +++ b/FileDrawer/FileOutlineView.m @@ -8,10 +8,13 @@ #import "FileOutlineView.h" #import "FileIconCell.h" +#import "FileTreeDataSource.h" + @interface FileOutlineView (KFTypeSelectTableViewSupport) - (void)findPrevious:(id)sender; - (void)findNext:(id)sender; +- (void)kfResetSearch; @end @implementation FileOutlineView @@ -22,13 +25,15 @@ id c; while ((c = [e nextObject])) { -// id headerCell = [[ImageTextCell alloc] init]; id dataCell = [[FileIconCell alloc] init]; [dataCell setLineBreakMode:NSLineBreakByTruncatingTail]; -// [c setHeaderCell: headerCell]; [c setDataCell: dataCell]; + NSLog(@"Setting data cell!"); } + + dataSource = [[FileTreeDataSource alloc] initWithRoot: [[[NSUserDefaultsController sharedUserDefaultsController] defaults] objectForKey:@"fileDrawerRootPath"] ]; + [self setDataSource: dataSource]; } @@ -59,7 +64,7 @@ [self kfResetSearch]; } else if (pressedChar == NSCarriageReturnCharacter || pressedChar == NSEnterCharacter) { //Enter or return //Add songs to list - [[self delegate] addSelectedToPlaylist]; + //[[self delegate] addSelectedToPlaylist]; [fileDrawer close]; } else if (pressedChar == 0x1b) {//Escape diff --git a/FileDrawer/FileTreeController.h b/FileDrawer/FileTreeController.h index cad5f8f93..6f6127156 100644 --- a/FileDrawer/FileTreeController.h +++ b/FileDrawer/FileTreeController.h @@ -20,8 +20,11 @@ FileTreeWatcher *watcher; } +- (FileTreeWatcher *)watcher; + - (id)rootPath; - (void)setRootPath:(id)r; -- (void) refreshRoot; +- (void)refreshRoot; +- (NSArray *)acceptableFileTypes; @end diff --git a/FileDrawer/FileTreeController.m b/FileDrawer/FileTreeController.m index 9a1b6b69c..745efa9e2 100644 --- a/FileDrawer/FileTreeController.m +++ b/FileDrawer/FileTreeController.m @@ -48,7 +48,7 @@ - (void) refreshRoot { DirectoryNode *base = [[DirectoryNode alloc] initWithPath:rootPath controller:self]; - [self setContent: [base subpaths]]; +// [self setContent: [base subpaths]]; [base release]; @@ -122,7 +122,7 @@ while (p = [e nextObject]) { int i; - PathNode *n = nil; + id n = nil; NSIndexPath *ip = [p indexPath]; for (i = 0; i < [ip length]; i++) diff --git a/FileDrawer/FileTreeWatcher.h b/FileDrawer/FileTreeWatcher.h index f80b4c70e..1b78ffd89 100644 --- a/FileDrawer/FileTreeWatcher.h +++ b/FileDrawer/FileTreeWatcher.h @@ -7,7 +7,8 @@ // #import -#import "UKKQueue.h" + +@class UKKQueue; @interface FileTreeWatcher : NSObject { UKKQueue *kqueue; diff --git a/FileDrawer/FileTreeWatcher.m b/FileDrawer/FileTreeWatcher.m index df34d58dd..d5d44d95b 100644 --- a/FileDrawer/FileTreeWatcher.m +++ b/FileDrawer/FileTreeWatcher.m @@ -8,6 +8,8 @@ #import "FileTreeWatcher.h" +#import "UKKQueue.h" + @implementation FileTreeWatcher - (id)init diff --git a/FileDrawer/PathIcon.h b/FileDrawer/PathIcon.h deleted file mode 100644 index b30d4269d..000000000 --- a/FileDrawer/PathIcon.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// FileIcon.h -// Cog -// -// Created by Vincent Spader on 8/20/06. -// Copyright 2006 Vincent Spader. All rights reserved. -// - -#import - - -@interface PathIcon : NSObject { - NSString *path; - NSImage *icon; -} - --(id)initWithPath:(NSString *)p; - -@end diff --git a/FileDrawer/PathIcon.m b/FileDrawer/PathIcon.m deleted file mode 100644 index 59e19f67b..000000000 --- a/FileDrawer/PathIcon.m +++ /dev/null @@ -1,44 +0,0 @@ -// -// FileIcon.m -// Cog -// -// Created by Vincent Spader on 8/20/06. -// Copyright 2006 Vincent Spader. All rights reserved. -// - -#import "PathIcon.h" - - -@implementation PathIcon - --(id)initWithPath:(NSString *)p -{ - self = [super init]; - if (self) - { - path = [p retain]; - icon = [[[NSWorkspace sharedWorkspace] iconForFile:path] retain]; - - [icon setSize: NSMakeSize(16.0, 16.0)]; - } - - return self; -} - -- (void)dealloc -{ - [path release]; - [icon release]; -} - -- (NSString *) path -{ - return path; -} - -- (NSImage *) icon -{ - return icon; -} - -@end diff --git a/FileDrawer/PathNode.h b/FileDrawer/PathNode.h index 906764e5b..dc6e1e5c1 100644 --- a/FileDrawer/PathNode.h +++ b/FileDrawer/PathNode.h @@ -7,17 +7,27 @@ // #import -#import "PathIcon.h" @interface PathNode : NSObject { NSString *path; - PathIcon *pathIcon; + NSImage *icon; + + NSArray *subpaths; } - (id)initWithPath:(NSString *)p; -- (id)pathIcon; -- (void)setPathIcon:(id)pi; +- (NSString *)path; +- (void)setPath:(NSString *)p; + +- (void)processPaths: (NSArray *)contents; + +- (NSArray *)subpaths; +- (void)setSubpaths:(NSArray *)s; + +- (NSImage *)icon; + +- (BOOL)isLeaf; @end diff --git a/FileDrawer/PathNode.m b/FileDrawer/PathNode.m index 9ac6fd626..6269a69f0 100644 --- a/FileDrawer/PathNode.m +++ b/FileDrawer/PathNode.m @@ -8,6 +8,12 @@ #import "PathNode.h" +#import "CogAudio/AudioPlayer.h" + +@class FileNode; +@class DirectoryNode; +@class SmartFolderNode; + @implementation PathNode - (id)initWithPath:(NSString *)p @@ -16,8 +22,7 @@ if (self) { - path = [p retain]; - [self setPathIcon:[[PathIcon alloc] initWithPath:path]]; + [self setPath: p]; } return self; @@ -26,26 +31,105 @@ - (void)dealloc { [path release]; - [pathIcon release]; - + [icon release]; + + if (subpaths) { + [subpaths release]; + subpaths = nil; + } + [super dealloc]; } +- (void)setPath:(NSString *)p +{ + [p retain]; + [path release]; + + path = p; + + [icon release]; + icon = [[NSWorkspace sharedWorkspace] iconForFile:path]; + [icon retain]; + + [icon setSize: NSMakeSize(16.0, 16.0)]; +} + - (NSString *)path { return path; } -- (id)pathIcon +- (void)processPaths: (NSArray *)contents { - return pathIcon; + NSMutableArray *newSubpaths = [[NSMutableArray alloc] init]; + + NSEnumerator *e = [contents objectEnumerator]; + NSString *s; + while ((s = [e nextObject])) + { + if ([s characterAtIndex:0] == '.') + { + continue; + } + + PathNode *newNode; + NSString *newSubpath = [path stringByAppendingPathComponent: s]; + + if ([[s pathExtension] caseInsensitiveCompare:@"savedSearch"] == NSOrderedSame) + { + newNode = [[SmartFolderNode alloc] initWithPath:newSubpath]; + } + else + { + BOOL isDir; + + [[NSFileManager defaultManager] fileExistsAtPath:newSubpath isDirectory:&isDir]; + + if (!isDir && ![[AudioPlayer fileTypes] containsObject:[s pathExtension]]) + { + continue; + } + + if (isDir) + newNode = [[DirectoryNode alloc] initWithPath: newSubpath]; + else + newNode = [[FileNode alloc] initWithPath: newSubpath]; + } + + [newSubpaths addObject:newNode]; + + [newNode release]; + } + + [self setSubpaths:[[newSubpaths copy] autorelease]]; + + [newSubpaths release]; } -- (void)setPathIcon:(id)pi +- (NSArray *)subpaths { - [pi retain]; - [pathIcon release]; - pathIcon = pi; + return subpaths; } +- (void)setSubpaths:(NSArray *)s +{ + [s retain]; + [subpaths release]; + subpaths = s; +} + + +- (BOOL)isLeaf +{ + return YES; +} + + +- (NSImage *)icon +{ + return icon; +} + + @end diff --git a/FileDrawer/SmartFolderNode.h b/FileDrawer/SmartFolderNode.h index f5cab29eb..35b59f840 100644 --- a/FileDrawer/SmartFolderNode.h +++ b/FileDrawer/SmartFolderNode.h @@ -11,8 +11,6 @@ #import "PathNode.h" @interface SmartFolderNode : PathNode { - NSMutableArray *subpaths; - id controller; } @end diff --git a/FileDrawer/SmartFolderNode.m b/FileDrawer/SmartFolderNode.m index dd61d32d3..d6c6c1e00 100644 --- a/FileDrawer/SmartFolderNode.m +++ b/FileDrawer/SmartFolderNode.m @@ -12,77 +12,15 @@ @implementation SmartFolderNode --(id)initWithPath:(NSString *)p controller:(id) c -{ - self = [super initWithPath:p]; - if (self) - { - controller = [c retain]; - } - - return self; -} - -- (void)dealloc { - if (subpaths) - [subpaths release]; - - [super dealloc]; -} - - - (BOOL)isLeaf { return NO; } -//need to merge this and directorynode -- (void)processContents: (NSArray *)contents -{ - NSEnumerator *e = [contents objectEnumerator]; - NSString *s; - - while (s = [e nextObject]) - { -/* if ([s characterAtIndex:0] == '.') - { - continue; - } -*/ - PathNode *newNode; -// NSString *newSubpath = [path stringByAppendingPathComponent: s]; - - if ([[s pathExtension] caseInsensitiveCompare:@"savedSearch"] == NSOrderedSame) - { - newNode = [[SmartFolderNode alloc] initWithPath:s controller:controller]; - } - else - { - BOOL isDir; - - [[NSFileManager defaultManager] fileExistsAtPath:s isDirectory:&isDir]; - - if (!isDir && ![[controller acceptableFileTypes] containsObject:[s pathExtension]]) - continue; - - if (isDir) - newNode = [[DirectoryNode alloc] initWithPath: s controller:controller]; - else - newNode = [[FileNode alloc] initWithPath: s]; - } - - [subpaths addObject:newNode]; - - [newNode release]; - } -} - - (NSArray *)subpaths { if (subpaths == nil) { - subpaths = [[NSMutableArray alloc] init]; - NSDictionary *doc = [NSDictionary dictionaryWithContentsOfFile:path]; NSString *rawQuery = [doc objectForKey:@"RawQuery"]; NSArray *searchPaths = [[doc objectForKey:@"SearchCriteria"] objectForKey:@"CurrentFolderPath"]; @@ -120,7 +58,7 @@ - (void)queryFinished:(NSNotification *)notification { - MDQueryRef query = [notification object]; + MDQueryRef query = (MDQueryRef)[notification object]; NSMutableArray *results = [NSMutableArray array]; @@ -141,13 +79,11 @@ MDQueryEnableUpdates(query); - [self processContents:results]; - [self setSubpaths:subpaths]; + [self processPaths:results]; } - (void)queryUpdate:(NSNotification *)notification { - [subpaths removeAllObjects]; [self queryFinished: notification]; }