diff --git a/Cog.xcodeproj/project.pbxproj b/Cog.xcodeproj/project.pbxproj index f538d3a30..1daef9802 100644 --- a/Cog.xcodeproj/project.pbxproj +++ b/Cog.xcodeproj/project.pbxproj @@ -26,6 +26,7 @@ 17211A780D68B79700911CA9 /* PathNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 17211A6E0D68B79700911CA9 /* PathNode.m */; }; 17211A790D68B79700911CA9 /* SmartFolderNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 17211A700D68B79700911CA9 /* SmartFolderNode.m */; }; 17211A7E0D68B7C500911CA9 /* FileTreePanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = 17211A7C0D68B7C500911CA9 /* FileTreePanel.xib */; }; + 17249F0F0D82E17700F33392 /* ToggleQueueTitleTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 17249F0E0D82E17700F33392 /* ToggleQueueTitleTransformer.m */; }; 173428F50D5FB1C400E8D854 /* EntriesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 173428F40D5FB1C400E8D854 /* EntriesController.m */; }; 17342A9A0D5FD20B00E8D854 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 17342A980D5FD20B00E8D854 /* MainMenu.xib */; }; 17342ABF0D5FD36400E8D854 /* OpenURLPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = 17342ABD0D5FD36400E8D854 /* OpenURLPanel.xib */; }; @@ -511,6 +512,8 @@ 17211A6F0D68B79700911CA9 /* SmartFolderNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmartFolderNode.h; sourceTree = ""; }; 17211A700D68B79700911CA9 /* SmartFolderNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SmartFolderNode.m; sourceTree = ""; }; 17211A7D0D68B7C500911CA9 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/FileTreePanel.xib; sourceTree = ""; }; + 17249F0D0D82E17700F33392 /* ToggleQueueTitleTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ToggleQueueTitleTransformer.h; sourceTree = ""; }; + 17249F0E0D82E17700F33392 /* ToggleQueueTitleTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ToggleQueueTitleTransformer.m; sourceTree = ""; }; 173428F30D5FB1C400E8D854 /* EntriesController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EntriesController.h; sourceTree = ""; }; 173428F40D5FB1C400E8D854 /* EntriesController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EntriesController.m; sourceTree = ""; }; 17342A990D5FD20B00E8D854 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = ""; }; @@ -1233,6 +1236,8 @@ 170B55930D6E5E7B006B9E92 /* StatusImageTransformer.m */, 17B7DD7B0D7CD10D00320E70 /* BlankZeroFormatter.h */, 17B7DD7C0D7CD10D00320E70 /* BlankZeroFormatter.m */, + 17249F0D0D82E17700F33392 /* ToggleQueueTitleTransformer.h */, + 17249F0E0D82E17700F33392 /* ToggleQueueTitleTransformer.m */, ); path = Playlist; sourceTree = ""; @@ -1718,6 +1723,7 @@ 17A8F6370D6A7B0F0095DA13 /* RepeatTransformers.m in Sources */, 170B55940D6E5E7B006B9E92 /* StatusImageTransformer.m in Sources */, 17B7DD7D0D7CD10D00320E70 /* BlankZeroFormatter.m in Sources */, + 17249F0F0D82E17700F33392 /* ToggleQueueTitleTransformer.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/English.lproj/MainMenu.xib b/English.lproj/MainMenu.xib index 61eee0698..9c46bfcf5 100644 --- a/English.lproj/MainMenu.xib +++ b/English.lproj/MainMenu.xib @@ -9,8 +9,11 @@ YES + + + + - YES @@ -2331,11 +2334,14 @@ QXBwbGUsIEluYy4sIDIwMDgAA filename path status + + queued + PlaylistEntry - YES YES + YES YES YES YES @@ -2773,26 +2779,10 @@ QXBwbGUsIEluYy4sIDIwMDgAA - + 258 YES - - - 260 - {{91, 76}, {97, 22}} - - YES - - -2077098431 - 272630784 - - - - - - - 260 @@ -2857,22 +2847,6 @@ QXBwbGUsIEluYy4sIDIwMDgAA - - - 260 - {{91, 46}, {97, 22}} - - YES - - -2077098431 - 272630784 - - - - - - - 257 @@ -2880,7 +2854,7 @@ QXBwbGUsIEluYy4sIDIwMDgAA YES - -2077098431 + -2076574143 272630784 @@ -2928,8 +2902,41 @@ QXBwbGUsIEluYy4sIDIwMDgAA 25 + + + 260 + {{91, 76}, {97, 22}} + + YES + + -2077098431 + 272630784 + + + + + + + + + + 260 + {{91, 46}, {97, 22}} + + YES + + -2077098431 + 272630784 + + + + + + + {321, 103} + NSView NSResponder @@ -3203,11 +3210,27 @@ QXBwbGUsIEluYy4sIDIwMDgAA seekable + queued PlaylistEntry YES + + + YES + + queued + + + YES + + YES + YES + YES + YES + YES + @@ -3728,22 +3751,6 @@ QXBwbGUsIEluYy4sIDIwMDgAA 853 - - - value: selection.channels - - - - - - value: selection.channels - value - selection.channels - 2 - - - 877 - value: selection.bitsPerSample @@ -3768,22 +3775,6 @@ QXBwbGUsIEluYy4sIDIwMDgAA 1065 - - - value: selection.bitrate - - - - - - value: selection.bitrate - value - selection.bitrate - 2 - - - 1094 - showPrefs: @@ -3956,22 +3947,6 @@ QXBwbGUsIEluYy4sIDIwMDgAA 1356 - - - value: selection.sampleRate - - - - - - value: selection.sampleRate - value - selection.sampleRate - 2 - - - 1359 - remove: @@ -4865,22 +4840,6 @@ QXBwbGUsIEluYy4sIDIwMDgAA 1873 - - - removeFromQueue: - - - - 1874 - - - - addToQueue: - - - - 1875 - selectText: @@ -4989,14 +4948,6 @@ QXBwbGUsIEluYy4sIDIwMDgAA 1891 - - - addToQueue: - - - - 1894 - stopAfterCurrent: @@ -5268,6 +5219,131 @@ QXBwbGUsIEluYy4sIDIwMDgAA 1927 + + + toggleQueued: + + + + 1934 + + + + value: selection.channels + + + + + + value: selection.channels + value + selection.channels + + YES + + YES + NSAllowsEditingMultipleValuesSelection + NSAlwaysPresentsApplicationModalAlerts + NSConditionallySetsEditable + NSConditionallySetsEnabled + NSConditionallySetsHidden + NSContinuouslyUpdatesValue + NSMultipleValuesPlaceholder + NSNoSelectionPlaceholder + NSNotApplicablePlaceholder + NSNullPlaceholder + NSRaisesForNotApplicableKeys + NSValidatesImmediately + + + YES + + + + + + + + + + + + + + + 2 + + + 1970 + + + + value: selection.bitrate + + + + + + value: selection.bitrate + value + selection.bitrate + 2 + + + 2015 + + + + contentArray: selectedObjects + + + + + + contentArray: selectedObjects + contentArray + selectedObjects + 2 + + + 2023 + + + + title: arrangedObjects.queued + + + + + + title: arrangedObjects.queued + title + arrangedObjects.queued + + NSValueTransformerName + ToggleQueueTitleTransformer + + 2 + + + 2025 + + + + value: selection.sampleRate + + + + + + value: selection.sampleRate + value + selection.sampleRate + 2 + + + 2028 + @@ -6320,15 +6396,15 @@ QXBwbGUsIEluYy4sIDIwMDgAA YES - - + + infoView @@ -7104,6 +7180,12 @@ QXBwbGUsIEluYy4sIDIwMDgAA + + 2020 + + + Playlist Selection Controller + @@ -7160,6 +7242,7 @@ QXBwbGUsIEluYy4sIDIwMDgAA 131.ImportedFromIB2 1319.IBPluginDependency 1319.ImportedFromIB2 + 1324.IBEditorWindowLastContentRect 1324.IBPluginDependency 1324.ImportedFromIB2 1337.IBPluginDependency @@ -7433,6 +7516,7 @@ QXBwbGUsIEluYy4sIDIwMDgAA 197.ImportedFromIB2 2.IBPluginDependency 2.ImportedFromIB2 + 2020.IBPluginDependency 206.IBPluginDependency 206.ImportedFromIB2 207.CustomClassName @@ -7536,11 +7620,14 @@ QXBwbGUsIEluYy4sIDIwMDgAA 426.ImportedFromIB2 448.IBPluginDependency 448.ImportedFromIB2 + 463.IBEditorWindowLastContentRect 463.IBPluginDependency 463.ImportedFromIB2 463.editorWindowContentRectSynchronizationRect + 463.lastResizeAction 5.IBPluginDependency 5.ImportedFromIB2 + 513.IBEditorWindowLastContentRect 513.IBPluginDependency 513.ImportedFromIB2 517.IBPluginDependency @@ -7628,7 +7715,7 @@ QXBwbGUsIEluYy4sIDIwMDgAA com.apple.InterfaceBuilder.CocoaPlugin {{365, 691}, {137, 23}} - {{21, 898}, {169, 63}} + {{375, 745}, {169, 63}} com.apple.InterfaceBuilder.CocoaPlugin {{482, 640}, {169, 63}} @@ -7669,6 +7756,7 @@ QXBwbGUsIEluYy4sIDIwMDgAA com.apple.InterfaceBuilder.CocoaPlugin + {{0, 821}, {140, 163}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -7943,6 +8031,7 @@ QXBwbGUsIEluYy4sIDIwMDgAA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin PlaylistView com.apple.InterfaceBuilder.CocoaPlugin @@ -8057,11 +8146,26 @@ QXBwbGUsIEluYy4sIDIwMDgAA com.apple.InterfaceBuilder.CocoaPlugin + {{300, 656}, {321, 103}} com.apple.InterfaceBuilder.CocoaPlugin {{0, 653}, {321, 103}} + + YES + + YES + IBResizeActionFinalFrame + IBResizeActionInitialFrame + + + YES + {{0, 881}, {321, 103}} + {{0, 881}, {321, 103}} + + com.apple.InterfaceBuilder.CocoaPlugin + {{21, 818}, {164, 143}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -8159,7 +8263,7 @@ QXBwbGUsIEluYy4sIDIwMDgAA - 1927 + 2028 @@ -8593,16 +8697,15 @@ QXBwbGUsIEluYy4sIDIwMDgAA YES YES - addToQueue: clear: clearFilterPredicate: emptyQueueList: - removeFromQueue: searchByAlbum: searchByArtist: showEntryInFinder: stopAfterCurrent: takeShuffleFromObject: + toggleQueued: toggleRepeat: @@ -8617,7 +8720,6 @@ QXBwbGUsIEluYy4sIDIwMDgAA id id id - id diff --git a/Playlist/PlaylistController.h b/Playlist/PlaylistController.h index 133ebe139..460e8df3a 100644 --- a/Playlist/PlaylistController.h +++ b/Playlist/PlaylistController.h @@ -87,8 +87,7 @@ typedef enum { - (PlaylistEntry *)entryAtIndex:(int)i; // queue methods -- (IBAction)addToQueue:(id)sender; -- (IBAction)removeFromQueue:(id)sender; +- (IBAction)toggleQueued:(id)sender; - (IBAction)emptyQueueList:(id)sender; - (NSMutableArray *)queueList; diff --git a/Playlist/PlaylistController.m b/Playlist/PlaylistController.m index dec4dc1ec..44036960b 100644 --- a/Playlist/PlaylistController.m +++ b/Playlist/PlaylistController.m @@ -13,6 +13,7 @@ #import "SpotlightWindowController.h" #import "RepeatTransformers.h" #import "StatusImageTransformer.h" +#import "ToggleQueueTitleTransformer.h" #import "CogAudio/AudioPlayer.h" @@ -45,8 +46,18 @@ NSValueTransformer *statusImageTransformer = [[[StatusImageTransformer alloc] init] autorelease]; [NSValueTransformer setValueTransformer:statusImageTransformer forName:@"StatusImageTransformer"]; + + NSValueTransformer *toggleQueueTitleTransformer = [[[ToggleQueueTitleTransformer alloc] init] autorelease]; + [NSValueTransformer setValueTransformer:toggleQueueTitleTransformer + forName:@"ToggleQueueTitleTransformer"]; } ++ (NSSet *)keyPathsForValuesAffectingSelection +{ + return [NSSet setWithObjects:@"content.bitrate", @"content.sampleRate", nil]; +} + + - (id)initWithCoder:(NSCoder *)decoder { self = [super initWithCoder:decoder]; @@ -647,34 +658,32 @@ } -- (IBAction)addToQueue:(id)sender +- (IBAction)toggleQueued:(id)sender { for (PlaylistEntry *queueItem in [self selectedObjects]) { - queueItem.queued = YES; - [queueItem setQueuePosition: [queueList count]]; - - [queueList addObject:queueItem]; - } - - for (PlaylistEntry *ap in queueList) - NSLog(@"hehe now: %d", ap.queuePosition); -} + if (queueItem.queued) + { + queueItem.queued = NO; + queueItem.queuePosition = -1; -- (IBAction)removeFromQueue:(id)sender -{ + [queueList removeObject:queueItem]; + } + else + { + queueItem.queued = YES; + queueItem.queuePosition = [queueList count]; + + [queueList addObject:queueItem]; + } - for (PlaylistEntry *queueItem in [self selectedObjects]) - { - queueItem.queued = NO; - [queueItem setQueuePosition:-1]; - [queueList removeObject:queueItem]; + NSLog(@"TOGGLE QUEUED: %i", queueItem.queued); } int i = 0; for (PlaylistEntry *cur in queueList) { - [cur setQueuePosition:i++]; + cur.queuePosition = i++; } } diff --git a/Playlist/PlaylistView.m b/Playlist/PlaylistView.m index 309e58aab..247161ff9 100644 --- a/Playlist/PlaylistView.m +++ b/Playlist/PlaylistView.m @@ -141,6 +141,8 @@ // enables right-click selection for "Show in Finder" contextual menu -(NSMenu*)menuForEvent:(NSEvent*)event { + return [self menu]; + //Find which row is under the cursor [[self window] makeFirstResponder:self]; NSPoint menuPoint = [self convertPoint:[event locationInWindow] fromView:nil]; @@ -204,31 +206,6 @@ [artistMenuItem release]; addedItems++; } - - int remQ = 0; - if (song.queuePosition > 0) - { - NSMenuItem *queueRemoveMenuItem = [NSMenuItem alloc]; - NSString *retitle = [NSString - stringWithFormat:@"Remove from Queue"]; - [queueRemoveMenuItem initWithTitle:retitle - action:@selector(removeFromQueue:) - keyEquivalent:@""]; - queueRemoveMenuItem.target = playlistController; - [tableViewMenu insertItem:queueRemoveMenuItem atIndex:1]; - [queueRemoveMenuItem release]; - remQ = 1; - } - if (remQ == 1) - [tableViewMenu insertItem:[NSMenuItem separatorItem] atIndex:2]; - else - [tableViewMenu insertItem:[NSMenuItem separatorItem] atIndex:1]; - - if(addedItems) - { - // add a separator in the right place - turned into a hack now - [tableViewMenu insertItem:[NSMenuItem separatorItem] atIndex:[tableViewMenu numberOfItems]-2]; - } } return [tableViewMenu autorelease];