Fixed up undo/redo support. Should be working great now.
parent
03cdbd508d
commit
37820a586d
|
@ -14,6 +14,7 @@
|
|||
171B57DE0C091F2B00F6AFAF /* m4a.icns in Resources */ = {isa = PBXBuildFile; fileRef = 171B57DA0C091F2B00F6AFAF /* m4a.icns */; };
|
||||
171B57DF0C091F2B00F6AFAF /* mp3.icns in Resources */ = {isa = PBXBuildFile; fileRef = 171B57DB0C091F2B00F6AFAF /* mp3.icns */; };
|
||||
171B57E00C091F2B00F6AFAF /* ogg.icns in Resources */ = {isa = PBXBuildFile; fileRef = 171B57DC0C091F2B00F6AFAF /* ogg.icns */; };
|
||||
173428F50D5FB1C400E8D854 /* EntriesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 173428F40D5FB1C400E8D854 /* EntriesController.m */; };
|
||||
1755E1F90BA0D2B600CA3560 /* PlaylistLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1755E1F70BA0D2B600CA3560 /* PlaylistLoader.m */; };
|
||||
1766C6930B911DF1004A7AE4 /* AudioScrobbler.m in Sources */ = {isa = PBXBuildFile; fileRef = 1766C68F0B911DF1004A7AE4 /* AudioScrobbler.m */; };
|
||||
1766C6950B911DF1004A7AE4 /* AudioScrobblerClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 1766C6910B911DF1004A7AE4 /* AudioScrobblerClient.m */; };
|
||||
|
@ -468,6 +469,8 @@
|
|||
171B57DA0C091F2B00F6AFAF /* m4a.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = m4a.icns; sourceTree = "<group>"; };
|
||||
171B57DB0C091F2B00F6AFAF /* mp3.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = mp3.icns; sourceTree = "<group>"; };
|
||||
171B57DC0C091F2B00F6AFAF /* ogg.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = ogg.icns; sourceTree = "<group>"; };
|
||||
173428F30D5FB1C400E8D854 /* EntriesController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EntriesController.h; sourceTree = "<group>"; };
|
||||
173428F40D5FB1C400E8D854 /* EntriesController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EntriesController.m; sourceTree = "<group>"; };
|
||||
1755E1F60BA0D2B600CA3560 /* PlaylistLoader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PlaylistLoader.h; sourceTree = "<group>"; };
|
||||
1755E1F70BA0D2B600CA3560 /* PlaylistLoader.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = PlaylistLoader.m; sourceTree = "<group>"; };
|
||||
1766C68E0B911DF1004A7AE4 /* AudioScrobbler.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AudioScrobbler.h; sourceTree = "<group>"; };
|
||||
|
@ -1144,6 +1147,8 @@
|
|||
8E9A2E840BA78B500091081B /* SecondsFormatter.m */,
|
||||
8E9A2ED70BA78D9D0091081B /* IndexFormatter.h */,
|
||||
8E9A2ED80BA78D9D0091081B /* IndexFormatter.m */,
|
||||
173428F30D5FB1C400E8D854 /* EntriesController.h */,
|
||||
173428F40D5FB1C400E8D854 /* EntriesController.m */,
|
||||
);
|
||||
path = Playlist;
|
||||
sourceTree = "<group>";
|
||||
|
@ -1622,6 +1627,7 @@
|
|||
567E73780D5F456D006C6486 /* SpotlightSearchController.m in Sources */,
|
||||
567E75070D5F71E7006C6486 /* SpotlightTransformers.m in Sources */,
|
||||
567E75750D5F8E20006C6486 /* SpotlightWindowController.m in Sources */,
|
||||
173428F50D5FB1C400E8D854 /* EntriesController.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -12,16 +12,16 @@
|
|||
|
||||
@class PlaylistLoader;
|
||||
@class PlaylistEntry;
|
||||
@class EntriesController;
|
||||
|
||||
@interface PlaylistController : DNDArrayController {
|
||||
IBOutlet PlaylistLoader *playlistLoader;
|
||||
IBOutlet EntriesController *entriesController;
|
||||
|
||||
NSString *totalTimeDisplay;
|
||||
|
||||
NSMutableArray *shuffleList;
|
||||
|
||||
NSUndoManager *undoManager;
|
||||
|
||||
PlaylistEntry *currentEntry;
|
||||
|
||||
BOOL shuffle;
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
@implementation PlaylistController
|
||||
|
||||
#define SHUFFLE_HISTORY_SIZE 100
|
||||
#define UNDO_STACK_LIMIT 0
|
||||
|
||||
- (id)initWithCoder:(NSCoder *)decoder
|
||||
{
|
||||
|
@ -25,14 +24,18 @@
|
|||
if (self)
|
||||
{
|
||||
shuffleList = [[NSMutableArray alloc] init];
|
||||
undoManager = [[NSUndoManager alloc] init];
|
||||
|
||||
[undoManager setLevelsOfUndo:UNDO_STACK_LIMIT];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
[shuffleList release];
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void)tableView:(NSTableView *)tableView
|
||||
didClickTableColumn:(NSTableColumn *)tableColumn
|
||||
{
|
||||
|
@ -44,21 +47,6 @@
|
|||
|
||||
-(void)moveObjectsFromArrangedObjectIndexes:(NSArray *) sources toIndexes:(NSArray *)destinations
|
||||
{
|
||||
NSLog(@"MOVING!: %@ %@", sources, destinations);
|
||||
|
||||
NSMutableArray *undoSources = [NSMutableArray array];
|
||||
NSMutableArray *undoDests = [NSMutableArray array];
|
||||
|
||||
for (id s in sources)
|
||||
{
|
||||
[undoDests insertObject:s atIndex:0];
|
||||
}
|
||||
for (id d in destinations)
|
||||
{
|
||||
[undoSources insertObject:d atIndex:0];
|
||||
}
|
||||
[[[self undoManager] prepareWithInvocationTarget:self] moveObjectsFromArrangedObjectIndexes:undoSources toIndexes:undoDests];
|
||||
|
||||
[super moveObjectsFromArrangedObjectIndexes:sources toIndexes:destinations];
|
||||
|
||||
NSUInteger firstIndex = (NSUInteger)-1;
|
||||
|
@ -191,12 +179,11 @@
|
|||
|
||||
- (NSUndoManager *)undoManager
|
||||
{
|
||||
return undoManager;
|
||||
return [entriesController undoManager];
|
||||
}
|
||||
|
||||
- (void)insertObjects:(NSArray *)objects atArrangedObjectIndexes:(NSIndexSet *)indexes
|
||||
{
|
||||
[[[self undoManager] prepareWithInvocationTarget:self] removeObjectsAtArrangedObjectIndexes:indexes];
|
||||
[super insertObjects:objects atArrangedObjectIndexes:indexes];
|
||||
|
||||
[self updateIndexesFromRow:[indexes firstIndex]];
|
||||
|
@ -206,7 +193,6 @@
|
|||
[self resetShuffleList];
|
||||
}
|
||||
|
||||
|
||||
- (void)removeObjectsAtArrangedObjectIndexes:(NSIndexSet *)indexes
|
||||
{
|
||||
NSLog(@"Removing indexes: %@", indexes);
|
||||
|
@ -235,7 +221,6 @@
|
|||
NSLog(@"UPDATING INDEX: %@", [currentEntry index]);
|
||||
}
|
||||
|
||||
[[[self undoManager] prepareWithInvocationTarget:self] insertObjects:[[self arrangedObjects] objectsAtIndexes:indexes] atArrangedObjectIndexes:indexes];
|
||||
[super removeObjectsAtArrangedObjectIndexes:indexes];
|
||||
|
||||
[self updateIndexesFromRow:[indexes firstIndex]];
|
||||
|
@ -248,7 +233,6 @@
|
|||
- (void)setSortDescriptors:(NSArray *)sortDescriptors
|
||||
{
|
||||
NSLog(@"Current: %@, setting: %@", [self sortDescriptors], sortDescriptors);
|
||||
[[[self undoManager] prepareWithInvocationTarget:self] setSortDescriptors:[self sortDescriptors]];
|
||||
|
||||
//Cheap hack so the index column isn't sorted
|
||||
if (([sortDescriptors count] != 0) && [[[sortDescriptors objectAtIndex:0] key] caseInsensitiveCompare:@"index"] == NSOrderedSame)
|
||||
|
@ -533,8 +517,6 @@
|
|||
|
||||
- (void)setFilterPredicate:(NSPredicate *)filterPredicate
|
||||
{
|
||||
[[[self undoManager] prepareWithInvocationTarget:self] setFilterPredicate:[self filterPredicate]];
|
||||
|
||||
[super setFilterPredicate:filterPredicate];
|
||||
|
||||
[self updateIndexesFromRow:0];
|
||||
|
|
|
@ -23,7 +23,7 @@ typedef enum {
|
|||
- (void)addURLs:(NSArray *)urls sort:(BOOL)sort;
|
||||
- (void)addURL:(NSURL *)url;
|
||||
- (void)insertURLs:(NSArray *)urls atIndex:(int)index sort:(BOOL)sort;
|
||||
- (void)undoAdd:(NSIndexSet *)undoEntries;
|
||||
|
||||
//save playlist, auto-determines type based on extension. Uses m3u if it cannot be determined.
|
||||
- (BOOL)save:(NSString *)filename;
|
||||
- (BOOL)save:(NSString *)filename asType:(PlaylistType)type;
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
@interface PlaylistView : NSTableView {
|
||||
IBOutlet PlaybackController *playbackController;
|
||||
IBOutlet PlaylistController *playlistController;
|
||||
|
||||
|
||||
NSMenu *headerContextMenu;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue