diff --git a/AppController.h b/AppController.h index 1d194c551..e7b686f07 100644 --- a/AppController.h +++ b/AppController.h @@ -6,6 +6,8 @@ #import "PlaylistView.h" #import "FileTreeController.h" +#import "FileOutlineView.h" + #import "NDHotKeyEvent.h" @@ -29,6 +31,7 @@ IBOutlet NSDrawer *fileDrawer; IBOutlet FileTreeController *fileTreeController; + IBOutlet FileOutlineView *fileOutlineView; IBOutlet PlaylistView *playlistView; diff --git a/AppController.m b/AppController.m index 5c83aaf27..b18fc8e40 100644 --- a/AppController.m +++ b/AppController.m @@ -224,24 +224,32 @@ - (IBAction)toggleFileDrawer:(id)sender { [mainWindow makeKeyAndOrderFront:self]; - + NSLog(@"TOGGLING..."); [fileDrawer toggle:self]; } - (void)drawerDidOpen:(NSNotification *)notification { - if ([notification object] == infoDrawer) + if ([notification object] == infoDrawer) { [infoButton setState:NSOnState]; - else if ([notification object] == fileDrawer) + } + else if ([notification object] == fileDrawer) { [fileButton setState:NSOnState]; + + [mainWindow makeFirstResponder: fileOutlineView]; + } } - (void)drawerDidClose:(NSNotification *)notification { - if ([notification object] == infoDrawer) + if ([notification object] == infoDrawer) { [infoButton setState:NSOffState]; - else if ([notification object] == fileDrawer) + } + else if ([notification object] == fileDrawer) { [fileButton setState:NSOffState]; + + [mainWindow makeFirstResponder: playlistView]; + } } - (IBAction)donate:(id)sender diff --git a/English.lproj/MainMenu.nib/classes.nib b/English.lproj/MainMenu.nib/classes.nib index c95c1d6d9..421576684 100644 --- a/English.lproj/MainMenu.nib/classes.nib +++ b/English.lproj/MainMenu.nib/classes.nib @@ -30,6 +30,7 @@ addButton = NSButton; fileButton = NSButton; fileDrawer = NSDrawer; + fileOutlineView = FileOutlineView; fileTreeController = FileTreeController; infoButton = NSButton; infoDrawer = NSDrawer; @@ -74,7 +75,12 @@ }; SUPERCLASS = NSObject; }, - {CLASS = FileOutlineView; LANGUAGE = ObjC; SUPERCLASS = NSOutlineView; }, + { + CLASS = FileOutlineView; + LANGUAGE = ObjC; + OUTLETS = {fileDrawer = NSDrawer; }; + SUPERCLASS = NSOutlineView; + }, { CLASS = FileTreeController; LANGUAGE = ObjC; diff --git a/English.lproj/MainMenu.nib/info.nib b/English.lproj/MainMenu.nib/info.nib index 273ae3837..cc599a056 100644 --- a/English.lproj/MainMenu.nib/info.nib +++ b/English.lproj/MainMenu.nib/info.nib @@ -3,7 +3,7 @@ IBDocumentLocation - 61 -9 639 388 0 0 1024 746 + 52 273 639 388 0 0 1024 746 IBEditorPositions 1063 @@ -32,11 +32,10 @@ 4 IBOpenObjects - 513 - 463 1156 - 29 21 + 29 + 513 IBSystem Version 8L127 diff --git a/English.lproj/MainMenu.nib/keyedobjects.nib b/English.lproj/MainMenu.nib/keyedobjects.nib index 9af7814b7..b61b3b24b 100644 Binary files a/English.lproj/MainMenu.nib/keyedobjects.nib and b/English.lproj/MainMenu.nib/keyedobjects.nib differ diff --git a/FileDrawer/DirectoryNode.m b/FileDrawer/DirectoryNode.m index 257970408..93f074318 100644 --- a/FileDrawer/DirectoryNode.m +++ b/FileDrawer/DirectoryNode.m @@ -86,7 +86,7 @@ if (subpaths == nil) { subpaths = [[NSMutableArray alloc] init]; - NSArray *contents = [[NSFileManager defaultManager] directoryContentsAtPath:path]; + NSArray *contents = [[[NSFileManager defaultManager] directoryContentsAtPath:path] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; [self processContents: contents]; diff --git a/FileDrawer/FileOutlineView.h b/FileDrawer/FileOutlineView.h index 10694d4f3..5e49b2679 100644 --- a/FileDrawer/FileOutlineView.h +++ b/FileDrawer/FileOutlineView.h @@ -10,7 +10,7 @@ @interface FileOutlineView : NSOutlineView { - + IBOutlet NSDrawer *fileDrawer; } @end diff --git a/FileDrawer/FileOutlineView.m b/FileDrawer/FileOutlineView.m index ab062dbbf..43c005070 100644 --- a/FileDrawer/FileOutlineView.m +++ b/FileDrawer/FileOutlineView.m @@ -32,6 +32,17 @@ } +- (BOOL)acceptsFirstResponder +{ + return YES; +} + +- (BOOL)resignFirstResponder +{ + return YES; +} + + //Navigate outline view with the keyboard, send select actions to delegate - (void)keyDown:(NSEvent *)theEvent { @@ -43,7 +54,19 @@ //Get the pressed character if ([charString length] == 1) pressedChar = [charString characterAtIndex:0]; - if ((pressedChar == '\031') && // backtab + if (pressedChar == NSDeleteFunctionKey || pressedChar == NSBackspaceCharacter || pressedChar == NSDeleteCharacter) { //Delete + //As Weird-al said....EAT IT JUST EAT IT!!! + [self kfResetSearch]; + } else if (pressedChar == NSCarriageReturnCharacter || pressedChar == NSEnterCharacter) { //Enter or return + //Add songs to list + [[self delegate] addSelectedToPlaylist]; + + [fileDrawer close]; + } else if (pressedChar == NSLeftArrowFunctionKey || pressedChar == NSRightArrowFunctionKey) { //left or right + [super keyDown:theEvent]; + + [self kfResetSearch]; + } else if ((pressedChar == '\031') && // backtab ([self respondsToSelector:@selector(findPrevious:)])) { /* KFTypeSelectTableView supports findPrevious; backtab is added to AIOutlineView as a find previous action * if KFTypeSelectTableView is being used via posing */ @@ -63,5 +86,4 @@ } } - @end diff --git a/FileDrawer/FileTreeController.m b/FileDrawer/FileTreeController.m index 4966133a9..922491c6c 100644 --- a/FileDrawer/FileTreeController.m +++ b/FileDrawer/FileTreeController.m @@ -144,6 +144,31 @@ return YES; } + +// Required Protocol Bullshit (RPB) This is neccessary so it can be used as a datasource for drag/drop things. + + - (id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item + { + return nil; + } + + - (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item + { + return NO; + } + + - (int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item + { + return 0; + } + - (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item + { + return nil; + } + +//End of RPB + + //For type-select - (void)configureTypeSelectTableView:(KFTypeSelectTableView *)tableView @@ -167,4 +192,19 @@ //End type-select +- (void)addSelectedToPlaylist { + NSMutableArray *paths = [[NSMutableArray alloc] init]; + NSArray *nodes = [self selectedObjects]; + NSEnumerator *e = [nodes objectEnumerator]; + + id n; + while (n = [e nextObject]) { + [paths addObject:[n path]]; + } + + [playlistController addPaths:paths sort:YES]; + [paths release]; +} + + @end diff --git a/Playlist/PlaylistView.m b/Playlist/PlaylistView.m index 05402c956..e221e7508 100644 --- a/Playlist/PlaylistView.m +++ b/Playlist/PlaylistView.m @@ -66,6 +66,7 @@ { return YES; } + - (BOOL)resignFirstResponder { return YES;