Added AMRemoveableTableColumns to aid with hiding/showing playlist columns.

CQTexperiment
vspader 2007-02-17 18:29:20 +00:00
parent ff98fd44f0
commit 838dd31a64
10 changed files with 522 additions and 106 deletions

View File

@ -94,6 +94,10 @@
8E757B5709F326710080F1EE /* OggFLAC.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E75773809F31F1F0080F1EE /* OggFLAC.framework */; };
8E757C7C09F32F070080F1EE /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E757C7A09F32F070080F1EE /* AudioToolbox.framework */; };
8E757C7D09F32F070080F1EE /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E757C7B09F32F070080F1EE /* AudioUnit.framework */; };
8E76ED760B877C0700494D51 /* AMRemovableColumnsTableView.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E76ED720B877C0700494D51 /* AMRemovableColumnsTableView.h */; };
8E76ED770B877C0700494D51 /* AMRemovableColumnsTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E76ED730B877C0700494D51 /* AMRemovableColumnsTableView.m */; };
8E76ED780B877C0700494D51 /* AMRemovableTableColumn.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E76ED740B877C0700494D51 /* AMRemovableTableColumn.h */; };
8E76ED790B877C0700494D51 /* AMRemovableTableColumn.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E76ED750B877C0700494D51 /* AMRemovableTableColumn.m */; };
8E7A0F1A0A8FEB4A00F27EE8 /* add_blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F060A8FEB4A00F27EE8 /* add_blue.png */; };
8E7A0F1B0A8FEB4A00F27EE8 /* add_gray.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F070A8FEB4A00F27EE8 /* add_gray.png */; };
8E7A0F1C0A8FEB4A00F27EE8 /* info_blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F080A8FEB4A00F27EE8 /* info_blue.png */; };
@ -186,6 +190,8 @@
8E07AB780AAC930B00A4B32F /* PreferencesController.h in CopyFiles */,
8E7C2B160AACE0F2009B4EAD /* NDHotKeyEvent.h in CopyFiles */,
171678BF0AC8C39E00C28CF3 /* SmartFolderNode.h in CopyFiles */,
8E76ED760B877C0700494D51 /* AMRemovableColumnsTableView.h in CopyFiles */,
8E76ED780B877C0700494D51 /* AMRemovableTableColumn.h in CopyFiles */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -319,6 +325,10 @@
8E75775309F31F750080F1EE /* WavPack.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WavPack.framework; path = Libraries/WavPack/build/Release/WavPack.framework; sourceTree = "<group>"; };
8E757C7A09F32F070080F1EE /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = "<absolute>"; };
8E757C7B09F32F070080F1EE /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; };
8E76ED720B877C0700494D51 /* AMRemovableColumnsTableView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AMRemovableColumnsTableView.h; sourceTree = "<group>"; };
8E76ED730B877C0700494D51 /* AMRemovableColumnsTableView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AMRemovableColumnsTableView.m; sourceTree = "<group>"; };
8E76ED740B877C0700494D51 /* AMRemovableTableColumn.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AMRemovableTableColumn.h; sourceTree = "<group>"; };
8E76ED750B877C0700494D51 /* AMRemovableTableColumn.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AMRemovableTableColumn.m; sourceTree = "<group>"; };
8E7A0F060A8FEB4A00F27EE8 /* add_blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = add_blue.png; sourceTree = "<group>"; };
8E7A0F070A8FEB4A00F27EE8 /* add_gray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = add_gray.png; sourceTree = "<group>"; };
8E7A0F080A8FEB4A00F27EE8 /* info_blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = info_blue.png; sourceTree = "<group>"; };
@ -522,6 +532,10 @@
8E75751A09F31D5A0080F1EE /* Custom */ = {
isa = PBXGroup;
children = (
8E76ED720B877C0700494D51 /* AMRemovableColumnsTableView.h */,
8E76ED730B877C0700494D51 /* AMRemovableColumnsTableView.m */,
8E76ED740B877C0700494D51 /* AMRemovableTableColumn.h */,
8E76ED750B877C0700494D51 /* AMRemovableTableColumn.m */,
8E75751B09F31D5A0080F1EE /* ClickField.h */,
8E75751C09F31D5A0080F1EE /* ClickField.m */,
8E75751D09F31D5A0080F1EE /* InfoView.h */,
@ -886,6 +900,8 @@
8E07AB790AAC930B00A4B32F /* PreferencesController.m in Sources */,
8E7C2B170AACE0F2009B4EAD /* NDHotKeyEvent.m in Sources */,
171678C00AC8C39E00C28CF3 /* SmartFolderNode.m in Sources */,
8E76ED770B877C0700494D51 /* AMRemovableColumnsTableView.m in Sources */,
8E76ED790B877C0700494D51 /* AMRemovableTableColumn.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@ -0,0 +1,39 @@
//
// AMRemovableColumnsTableView.h
// HebX
//
// Created by Andreas on 26.08.05.
// Copyright 2005 Andreas Mayer. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface AMRemovableColumnsTableView : NSTableView {
IBOutlet id obligatoryColumnIdentifiers; // NSArray
NSSet *allTableColumns;
NSSet *obligatoryTableColumns;
BOOL am_respondsToControlDidBecomeFirstResponder;
}
- (NSSet *)allTableColumns;
- (NSSet *)visibleTableColumns;
- (NSSet *)hiddenTableColumns;
// obligatory columns are automatically retrieved from obligatoryColumnIdentifiers if not nil;
// use setter otherwise
- (NSSet *)obligatoryTableColumns;
- (void)setObligatoryTableColumns:(NSSet *)newObligatoryTableColumns;
- (BOOL)isObligatoryColumn:(NSTableColumn *)column;
// use these to show and hide columns:
- (BOOL)hideTableColumn:(NSTableColumn *)column;
- (BOOL)showTableColumn:(NSTableColumn *)column;
@end

View File

@ -0,0 +1,299 @@
//
// AMRemovableColumnsTableView.m
// HebX
//
// Created by Andreas on 26.08.05.
// Copyright 2005 Andreas Mayer. All rights reserved.
//
#import "AMRemovableColumnsTableView.h"
#import "AMRemovableTableColumn.h"
@interface NSTableView (ApplePrivate)
- (void)_readPersistentTableColumns;
- (void)_writePersistentTableColumns;
@end
@interface AMRemovableColumnsTableView (Private)
- (NSString *)columnVisibilitySaveName;
- (void)setAllTableColumns:(NSSet *)newAllTableColumns;
- (void)am_hideTableColumn:(NSTableColumn *)column;
- (void)am_showTableColumn:(NSTableColumn *)column;
- (void)readPersistentTableColumns;
- (void)writePersistentTableColumns;
- (void)am_readPersistentTableColumns;
- (void)am_writePersistentTableColumns;
@end
@implementation AMRemovableColumnsTableView
static BOOL AMRemovableColumnsTableView_readPersistentTableColumnsIsPublic = NO;
+ (void)initialize
{
// should the framework support readPersistentTableColumns/writePersistentTableColumns, use the public methods
AMRemovableColumnsTableView_readPersistentTableColumnsIsPublic = [NSTableColumn instancesRespondToSelector:@selector(readPersistentTableColumns)];
}
- (void)awakeFromNib
{
am_respondsToControlDidBecomeFirstResponder = [[self delegate] respondsToSelector:@selector(controlDidBecomeFirstResponder:)];
// set main table view for columns
NSEnumerator *enumerator = [[self tableColumns] objectEnumerator];
AMRemovableTableColumn *column;
while (column = [enumerator nextObject]) {
[column setMainTableView:self];
}
// if there's an array of the names of obligatory columns, update the obligatoryTableColumns set
if (obligatoryColumnIdentifiers) {
NSMutableSet *columns = (NSMutableSet *)[NSMutableSet setWithSet:[self allTableColumns]];
NSEnumerator *enumerator = [columns objectEnumerator];
NSTableColumn *column;
while (column = [enumerator nextObject]) {
if (![(NSArray *)obligatoryColumnIdentifiers containsObject:[column identifier]]) {
[columns removeObject:column];
}
}
[self setObligatoryTableColumns:columns];
}
}
- (void)dealloc
{
[obligatoryColumnIdentifiers release];
[super dealloc];
}
- (NSSet *)allTableColumns
{
return allTableColumns;
}
- (void)setAllTableColumns:(NSSet *)newAllTableColumns
{
if (allTableColumns != newAllTableColumns) {
[newAllTableColumns retain];
[allTableColumns release];
allTableColumns = newAllTableColumns;
}
}
- (NSSet *)visibleTableColumns
{
NSMutableSet *result = [NSMutableSet set];
[result addObjectsFromArray:[self tableColumns]];
return result;
}
- (NSSet *)hiddenTableColumns
{
NSMutableSet *result = [NSMutableSet setWithSet:[self allTableColumns]];
[result minusSet:[self visibleTableColumns]];
return result;
}
- (NSSet *)obligatoryTableColumns
{
return obligatoryTableColumns;
}
- (void)setObligatoryTableColumns:(NSSet *)newObligatoryTableColumns
{
if (obligatoryTableColumns != newObligatoryTableColumns) {
[newObligatoryTableColumns retain];
[obligatoryTableColumns release];
obligatoryTableColumns = newObligatoryTableColumns;
}
}
- (BOOL)hideTableColumn:(NSTableColumn *)column
{
BOOL result = NO;
if (![(AMRemovableTableColumn *)column isHidden] && ![self isObligatoryColumn:column]) {
[(AMRemovableTableColumn *)column setHidden:YES];
result = YES;
}
return result;
}
- (BOOL)showTableColumn:(NSTableColumn *)column
{
BOOL result = NO;
if ([(AMRemovableTableColumn *)column isHidden]) {
[(AMRemovableTableColumn *)column setHidden:NO];
result = YES;
}
return result;
}
- (BOOL)isObligatoryColumn:(NSTableColumn *)column
{
return [(NSArray *)obligatoryColumnIdentifiers containsObject:[column identifier]] ;
}
// ============================================================
#pragma mark -
#pragma marktable view methods
// ============================================================
- (NSTableColumn *)tableColumnWithIdentifier:(id)identifier
{
NSTableColumn *result = nil;
NSEnumerator *enumerator = [[self allTableColumns] objectEnumerator];
NSTableColumn *column;
while (column = [enumerator nextObject]) {
if ([[column identifier] isEqualToString:identifier]) {
result = column;
break;
}
}
return result;
}
- (void)setDelegate:(id)anObject
{
am_respondsToControlDidBecomeFirstResponder = [anObject respondsToSelector:@selector(controlDidBecomeFirstResponder:)];
[super setDelegate:anObject];
}
// ============================================================
#pragma mark -
#pragma markview methods
// ============================================================
- (void)viewWillMoveToWindow:(NSWindow *)newWindow
{
//NSLog(@"AMRemovableColumnsTableView - viewWillMoveToWindow:%@", newWindow);
[self am_readPersistentTableColumns];
[super viewWillMoveToWindow:newWindow];
}
// ============================================================
#pragma mark -
#pragma markresponder methods
// ============================================================
- (BOOL)becomeFirstResponder
{
BOOL result = [super becomeFirstResponder];
if (result && am_respondsToControlDidBecomeFirstResponder) {
[[self delegate] performSelector:@selector(controlDidBecomeFirstResponder:) withObject:self];
}
return result;
}
// ============================================================
#pragma mark -
#pragma markprivate table view methods
// ============================================================
- (void)_readPersistentTableColumns
{
//NSLog(@"_readPersistentTableColumns");
if (!AMRemovableColumnsTableView_readPersistentTableColumnsIsPublic) {
[self setAllTableColumns:[NSSet setWithArray:[self tableColumns]]];
// restore visible columns
[self am_readPersistentTableColumns];
} // else readPersistentTableColumns will be used
[super _readPersistentTableColumns];
}
- (void)_writePersistentTableColumns
{
//NSLog(@"_writePersistentTableColumns");
[super _writePersistentTableColumns];
// save visible columns
if (!AMRemovableColumnsTableView_readPersistentTableColumnsIsPublic) {
[self am_writePersistentTableColumns];
} // else writePersistentTableColumns will be used
}
// just in case these methods should become public:
- (void)readPersistentTableColumns
{
//NSLog(@"_readPersistentTableColumns");
[self setAllTableColumns:[NSSet setWithArray:[self tableColumns]]];
// restore visible columns
[self am_readPersistentTableColumns];
[(id)super readPersistentTableColumns]; // cast to avoid compiler warning
}
- (void)writePersistentTableColumns
{
//NSLog(@"_writePersistentTableColumns");
[(id)super writePersistentTableColumns]; // cast to avoid compiler warning
// save visible columns
[self am_writePersistentTableColumns];
}
// ============================================================
#pragma mark -
#pragma markprivate methods
// ============================================================
- (NSString *)columnVisibilitySaveName
{
NSString *autosaveName = [self autosaveName];
if (!autosaveName) {
NSLog(@"AMRemovableColumnsTableView: autosave name missing for table view: %@", self);
autosaveName = @"no-autosave-name-set";
}
return [@"AMRemovableColumnsTableView VisibleColumns " stringByAppendingString:autosaveName];
}
- (void)am_readPersistentTableColumns
{
// restore visible columns
NSArray *visibleColumnIdentifiers = [[NSUserDefaults standardUserDefaults] objectForKey:[self columnVisibilitySaveName]];
if (visibleColumnIdentifiers) {
NSSet *allColumns = [self allTableColumns];
NSEnumerator *enumerator = [allColumns objectEnumerator];
NSTableColumn *column;
while (column = [enumerator nextObject]) {
if (![visibleColumnIdentifiers containsObject:[column identifier]]) {
[(AMRemovableTableColumn *)column setMainTableView:self];
[self removeTableColumn:column];
}
}
}
}
- (void)am_writePersistentTableColumns
{
NSMutableArray *visibleColumnIdentifiers = [NSMutableArray array];
NSEnumerator *enumerator = [[self visibleTableColumns] objectEnumerator];
NSTableColumn *column;
while (column = [enumerator nextObject]) {
[visibleColumnIdentifiers addObject:[column identifier]];
}
[[NSUserDefaults standardUserDefaults] setObject:visibleColumnIdentifiers forKey:[self columnVisibilitySaveName]];
}
- (void)am_hideTableColumn:(NSTableColumn *)column
{
[(AMRemovableTableColumn *)column setMainTableView:self];
[self removeTableColumn:column];
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(am_writePersistentTableColumns) object:nil];
[self performSelector:@selector(am_writePersistentTableColumns) withObject:nil afterDelay:0.0];
}
- (void)am_showTableColumn:(NSTableColumn *)column
{
[self addTableColumn:column];
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(am_writePersistentTableColumns) object:nil];
[self performSelector:@selector(am_writePersistentTableColumns) withObject:nil afterDelay:0.0];
}
@end

View File

@ -0,0 +1,24 @@
//
// AMRemovableTableColumn.h
// HebX
//
// Created by Andreas on 28.08.05.
// Copyright 2005 Andreas Mayer. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "AMRemovableColumnsTableView.h"
@interface AMRemovableTableColumn : NSTableColumn {
IBOutlet AMRemovableColumnsTableView *mainTableView;
}
- (AMRemovableColumnsTableView *)mainTableView;
- (void)setMainTableView:(AMRemovableColumnsTableView *)newMainTableView;
- (BOOL)isHidden;
- (void)setHidden:(BOOL)flag;
@end

View File

@ -0,0 +1,63 @@
//
// AMRemovableTableColumn.m
// HebX
//
// Created by Andreas on 28.08.05.
// Copyright 2005 Andreas Mayer. All rights reserved.
//
#import "AMRemovableTableColumn.h"
@interface AMRemovableColumnsTableView (Private)
- (void)am_hideTableColumn:(NSTableColumn *)column;
- (void)am_showTableColumn:(NSTableColumn *)column;
@end
@implementation AMRemovableTableColumn
static BOOL AMRemovableTableColumn_frameworkDoesSupportHiddenColumns = NO;
+ (void)initialize
{
// should the framework support isHidden/setHidden:, use the build-in methods
AMRemovableTableColumn_frameworkDoesSupportHiddenColumns = [NSTableColumn instancesRespondToSelector:@selector(setHidden:)];
}
- (AMRemovableColumnsTableView *)mainTableView
{
return mainTableView;
}
- (void)setMainTableView:(AMRemovableColumnsTableView *)newMainTableView
{
// do not retain
mainTableView = newMainTableView;
}
- (BOOL)isHidden
{
if (AMRemovableTableColumn_frameworkDoesSupportHiddenColumns) {
return [(id)super isHidden]; // cast to id to avoid compiler warning
} else {
return ([self tableView] != mainTableView);
}
}
- (void)setHidden:(BOOL)flag
{
if (AMRemovableTableColumn_frameworkDoesSupportHiddenColumns) {
[(id)super setHidden:flag]; // cast to id to avoid compiler warning
} else {
if (flag) {
[(AMRemovableColumnsTableView *)[self tableView] am_hideTableColumn:self];
} else {
[mainTableView am_showTableColumn:self];
}
}
}
@end

View File

@ -1,5 +1,17 @@
{
IBClasses = (
{
CLASS = AMRemovableColumnsTableView;
LANGUAGE = ObjC;
OUTLETS = {obligatoryColumnIdentifiers = id; };
SUPERCLASS = NSTableView;
},
{
CLASS = AMRemovableTableColumn;
LANGUAGE = ObjC;
OUTLETS = {mainTableView = AMRemovableColumnsTableView; };
SUPERCLASS = NSTableColumn;
},
{
ACTIONS = {
addFiles = id;
@ -109,13 +121,14 @@
ACTIONS = {
shufflePlaylist = id;
sortByPath = id;
takeBoolForAlbum = id;
takeBoolForArtist = id;
takeBoolForGenre = id;
takeBoolForLength = id;
takeBoolForTitle = id;
takeBoolForTrack = id;
takeBoolForYear = id;
toggleColumnForAlbum = id;
toggleColumnForArtist = id;
toggleColumnForGenre = id;
toggleColumnForIndex = id;
toggleColumnForLength = id;
toggleColumnForTitle = id;
toggleColumnForTrack = id;
toggleColumnForYear = id;
};
CLASS = PlaylistView;
LANGUAGE = ObjC;
@ -123,7 +136,7 @@
playbackController = PlaybackController;
playlistController = PlaylistController;
};
SUPERCLASS = NSTableView;
SUPERCLASS = AMRemovableColumnsTableView;
},
{
ACTIONS = {showPrefs = id; };

View File

@ -3,7 +3,7 @@
<plist version="1.0">
<dict>
<key>IBDocumentLocation</key>
<string>33 358 639 388 0 0 1024 746 </string>
<string>38 327 639 388 0 0 1024 746 </string>
<key>IBEditorPositions</key>
<dict>
<key>1063</key>
@ -11,7 +11,7 @@
<key>1156</key>
<string>233 341 241 366 0 0 1024 746 </string>
<key>29</key>
<string>65 680 383 44 0 0 1024 746 </string>
<string>73 702 383 44 0 0 1024 746 </string>
<key>463</key>
<string>358 380 308 279 0 0 1024 746 </string>
<key>513</key>
@ -32,11 +32,12 @@
<integer>4</integer>
<key>IBOpenObjects</key>
<array>
<integer>513</integer>
<integer>29</integer>
<integer>21</integer>
<integer>463</integer>
</array>
<key>IBSystem Version</key>
<string>8J135</string>
<string>8L127</string>
</dict>
</plist>

Binary file not shown.

View File

@ -12,25 +12,25 @@
#import "PlaybackController.h"
#import "PlaylistController.h"
@interface PlaylistView : NSTableView {
#import "AMRemovableColumnsTableView.h"
@interface PlaylistView : AMRemovableColumnsTableView {
IBOutlet PlaybackController *playbackController;
IBOutlet PlaylistController *playlistController;
NSArray *_tableColumnsCache;
NSMutableArray *_removedColumns;
}
- (IBAction)sortByPath:(id)sender;
- (IBAction)shufflePlaylist:(id)sender;
- (IBAction)takeBoolForTitle:(id)sender;
- (IBAction)takeBoolForArtist:(id)sender;
- (IBAction)takeBoolForAlbum:(id)sender;
- (IBAction)takeBoolForLength:(id)sender;
- (IBAction)takeBoolForYear:(id)sender;
- (IBAction)takeBoolForGenre:(id)sender;
- (IBAction)takeBoolForTrack:(id)sender;
- (IBAction)toggleColumnForIndex:(id)sender;
- (IBAction)toggleColumnForTitle:(id)sender;
- (IBAction)toggleColumnForArtist:(id)sender;
- (IBAction)toggleColumnForAlbum:(id)sender;
- (IBAction)toggleColumnForLength:(id)sender;
- (IBAction)toggleColumnForYear:(id)sender;
- (IBAction)toggleColumnForGenre:(id)sender;
- (IBAction)toggleColumnForTrack:(id)sender;
@end

View File

@ -16,14 +16,16 @@
- (void)awakeFromNib
{
id c;
[super awakeFromNib];
NSControlSize s = NSSmallControlSize;
NSEnumerator *oe = [[self tableColumns] objectEnumerator];
NSEnumerator *oe = [[self allTableColumns] objectEnumerator];
NSFont *f = [NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:s]];
[self setRowHeight:[f defaultLineHeightForFont]];
//Resize the fonts
id c;
while (c = [oe nextObject])
{
[[c dataCell] setControlSize:s];
@ -40,108 +42,67 @@
[self setHeaderView:customTableHeaderView];
[self setVerticalMotionCanBeginDrag:YES];
}
- (void)toggleColumn:(id)sender withIdentifier:(NSString *)identifier
{
NSTableColumn *tc = [super tableColumnWithIdentifier:identifier];
//Hack for bindings and columns
_tableColumnsCache = [[NSArray alloc] initWithArray:[self tableColumns] copyItems:NO];
}
- (IBAction)takeBoolForTitle:(id)sender
{
[self showColumn:sender withIdentifier:@"title"];
}
- (IBAction)takeBoolForArtist:(id)sender
{
[self showColumn:sender withIdentifier:@"artist"];
}
- (IBAction)takeBoolForAlbum:(id)sender
{
[self showColumn:sender withIdentifier:@"album"];
}
- (IBAction)takeBoolForLength:(id)sender
{
[self showColumn:sender withIdentifier:@"length"];
}
- (IBAction)takeBoolForYear:(id)sender
{
[self showColumn:sender withIdentifier:@"year"];
}
- (IBAction)takeBoolForGenre:(id)sender
{
[self showColumn:sender withIdentifier:@"genre"];
}
- (IBAction)takeBoolForTrack:(id)sender
{
[self showColumn:sender withIdentifier:@"track"];
}
- (void)showColumn:(id)sender withIdentifier:(NSString *)identifier
{
if ([sender state] == NSOffState)
{
[sender setState:NSOnState];
[self showColumnWithIdentifier:identifier];
[self showTableColumn:tc];
}
else
{
[sender setState:NSOffState];
[self hideColumnWithIdentifier:identifier];
[self hideTableColumn:tc];
}
}
- (void)hideColumnWithIdentifier:(NSString *)identifier
- (IBAction)toggleColumnForIndex:(id)sender
{
NSTableColumn *tc = [super tableColumnWithIdentifier:identifier];
if (!tc)
return;
[self removeTableColumn:tc];
[self toggleColumn:sender withIdentifier:@"index"];
}
- (void)showColumnWithIdentifier:(NSString *)identifier
- (IBAction)toggleColumnForTitle:(id)sender
{
if ([super tableColumnWithIdentifier:identifier])
return;
NSEnumerator *e = [_tableColumnsCache objectEnumerator];
NSTableColumn *t = nil;
while (t = [e nextObject])
{
// Locate cached version if there is one.
if ([[t identifier] isEqualToString:identifier])
// Remove it from the array and release the array if it isn't needed any more.
[self addTableColumn:t];
}
[self toggleColumn:sender withIdentifier:@"title"];
}
//FUN HACKS SO COLUMNS DONT DISAPPEAR WHEN THE TABLE IS AUTOSAVED
- (NSTableColumn *)tableColumnWithIdentifier:(id)anObject
- (IBAction)toggleColumnForArtist:(id)sender
{
NSTableColumn *tc = [super tableColumnWithIdentifier:anObject];
if (!tc)
{
NSEnumerator *e = [_tableColumnsCache objectEnumerator];
NSTableColumn *t = nil;
while (t = [e nextObject])
{
// Locate cached version if there is one.
if ([[t identifier] isEqual:anObject])
// Remove it from the array and release the array if it isn't needed any more.
return t;
}
}
return tc;
[self toggleColumn:sender withIdentifier:@"artist"];
}
- (IBAction)toggleColumnForAlbum:(id)sender
{
[self toggleColumn:sender withIdentifier:@"album"];
}
- (IBAction)toggleColumnForLength:(id)sender
{
[self toggleColumn:sender withIdentifier:@"length"];
}
- (IBAction)toggleColumnForYear:(id)sender
{
[self toggleColumn:sender withIdentifier:@"year"];
}
- (IBAction)toggleColumnForGenre:(id)sender
{
[self toggleColumn:sender withIdentifier:@"genre"];
}
- (IBAction)toggleColumnForTrack:(id)sender
{
[self toggleColumn:sender withIdentifier:@"track"];
}
- (BOOL)acceptsFirstResponder
{
return YES;