/* |
File: ATBasicTableViewWindowController.m |
Abstract: Demonstrates the most basic dataSource/delegate implementation of a View Based NSTableView |
|
Version: 1.3 |
|
Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple |
Inc. ("Apple") in consideration of your agreement to the following |
terms, and your use, installation, modification or redistribution of |
this Apple software constitutes acceptance of these terms. If you do |
not agree with these terms, please do not use, install, modify or |
redistribute this Apple software. |
|
In consideration of your agreement to abide by the following terms, and |
subject to these terms, Apple grants you a personal, non-exclusive |
license, under Apple's copyrights in this original Apple software (the |
"Apple Software"), to use, reproduce, modify and redistribute the Apple |
Software, with or without modifications, in source and/or binary forms; |
provided that if you redistribute the Apple Software in its entirety and |
without modifications, you must retain this notice and the following |
text and disclaimers in all such redistributions of the Apple Software. |
Neither the name, trademarks, service marks or logos of Apple Inc. may |
be used to endorse or promote products derived from the Apple Software |
without specific prior written permission from Apple. Except as |
expressly stated in this notice, no other rights or licenses, express or |
implied, are granted by Apple herein, including but not limited to any |
patent rights that may be infringed by your derivative works or by other |
works in which the Apple Software may be incorporated. |
|
The Apple Software is provided by Apple on an "AS IS" basis. APPLE |
MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION |
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS |
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND |
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. |
|
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL |
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, |
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED |
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), |
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE |
POSSIBILITY OF SUCH DAMAGE. |
|
Copyright (C) 2012 Apple Inc. All Rights Reserved. |
|
*/ |
|
#import "ATBasicTableViewWindowController.h" |
|
/* Notes on how this demo window was created: |
|
In ATBasicTableViewWindow.xib in IB: |
The nib has the "File's Owner" Class Identity set to ATBasicTableViewWindowController (this class). |
The NSTableView in the nib has the 'delegate' and 'dataSource' outlets set to the "File's Owner" (this class). |
The first NSTableColumn in the NSTableView has the 'identifier' set to "MainCell". |
The second NSTableColumn in the NSTableView has the 'identifier' set to "SizeCell". |
The NSTableView has two reuse identifier assocations: "MainCell" and "SizeCell" are both associated with the nib ATBasicTableViewCells.xib. |
The "File's Owner" _tableView outlet was set to the nib in the window. |
|
In ATBasicTableViewCells.xib in IB: |
The nib has the "File's Owner" Class Identity set to ATBasicTableViewWindowController (this class). |
Two cells were added to the nib. |
The identifier for the first is set to "MainCell", and the second "SizeCell". |
Each NSTableCellView already had the 'textField' outlet properly set to the NSTextField in the cell by IB when the NSTableCellView wsa created. |
*/ |
|
// Sample data we will display |
static NSString *ATTableData[] = { |
@"NSQuickLookTemplate", |
@"NSBluetoothTemplate", |
@"NSIChatTheaterTemplate", |
@"NSSlideshowTemplate", |
@"NSActionTemplate", |
@"NSSmartBadgeTemplate", |
@"NSIconViewTemplate", |
@"NSListViewTemplate", |
@"NSColumnViewTemplate", |
@"NSFlowViewTemplate", |
@"NSPathTemplate", |
@"NSInvalidDataFreestandingTemplate", |
@"NSLockLockedTemplate", |
@"NSLockUnlockedTemplate", |
@"NSGoRightTemplate", |
@"NSGoLeftTemplate", |
@"NSRightFacingTriangleTemplate", |
@"NSLeftFacingTriangleTemplate", |
@"NSAddTemplate", |
@"NSRemoveTemplate", |
@"NSRevealFreestandingTemplate", |
@"NSFollowLinkFreestandingTemplate", |
@"NSEnterFullScreenTemplate", |
@"NSExitFullScreenTemplate", |
@"NSStopProgressTemplate", |
@"NSStopProgressFreestandingTemplate", |
@"NSRefreshTemplate", |
@"NSRefreshFreestandingTemplate", |
@"NSBonjour", |
@"NSComputer", |
@"NSFolderBurnable", |
@"NSFolderSmart", |
@"NSFolder", |
@"NSNetwork", |
@"NSMobileMe", |
@"NSMultipleDocuments", |
@"NSUserAccounts", |
@"NSPreferencesGeneral", |
@"NSAdvanced", |
@"NSInfo", |
@"NSFontPanel", |
@"NSColorPanel", |
@"NSUser", |
@"NSUserGroup", |
@"NSEveryone", |
@"NSUserGuest", |
@"NSMenuOnStateTemplate", |
@"NSMenuMixedStateTemplate", |
@"NSApplicationIcon", |
@"NSTrashEmpty", |
@"NSTrashFull", |
@"NSHomeTemplate", |
@"NSBookmarksTemplate", |
@"NSCaution", |
@"NSStatusAvailable", |
@"NSStatusPartiallyAvailable", |
@"NSStatusUnavailable", |
@"NSStatusNone", |
nil }; |
|
@implementation ATBasicTableViewWindowController |
|
- (NSString *)windowNibName { |
return @"ATBasicTableViewWindow"; |
} |
|
- (void)dealloc { |
[_tableContents release]; |
[super dealloc]; |
} |
|
- (void)windowDidLoad { |
[super windowDidLoad]; |
// Load up our sample data |
_tableContents = [NSMutableArray new]; |
// Walk each string in the array until we hit the end (nil) |
NSString **data = &ATTableData[0]; |
while (*data != nil) { |
NSString *name = *data; |
NSImage *image = [NSImage imageNamed:name]; |
// our model will consist of a dictionary with Name/Image key pairs |
NSDictionary *dictionary = [[[NSDictionary alloc] initWithObjectsAndKeys:name, @"Name", image, @"Image", nil] autorelease]; |
[_tableContents addObject:dictionary]; |
data++; |
} |
[_tableView reloadData]; |
} |
|
// The only essential/required tableview dataSource method |
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { |
return [_tableContents count]; |
} |
|
// This method is optional if you use bindings to provide the data |
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { |
// Group our "model" object, which is a dictionary |
NSDictionary *dictionary = [_tableContents objectAtIndex:row]; |
|
// In IB the tableColumn has the identifier set to the same string as the keys in our dictionary |
NSString *identifier = [tableColumn identifier]; |
|
if ([identifier isEqualToString:@"MainCell"]) { |
// We pass us as the owner so we can setup target/actions into this main controller object |
NSTableCellView *cellView = [tableView makeViewWithIdentifier:identifier owner:self]; |
// Then setup properties on the cellView based on the column |
cellView.textField.stringValue = [dictionary objectForKey:@"Name"]; |
cellView.imageView.objectValue = [dictionary objectForKey:@"Image"]; |
return cellView; |
} else if ([identifier isEqualToString:@"SizeCell"]) { |
NSTextField *textField = [tableView makeViewWithIdentifier:identifier owner:self]; |
NSImage *image = [dictionary objectForKey:@"Image"]; |
NSSize size = image ? [image size] : NSZeroSize; |
NSString *sizeString = [NSString stringWithFormat:@"%.0fx%.0f", size.width, size.height]; |
textField.objectValue = sizeString; |
return textField; |
} else { |
NSAssert1(NO, @"Unhandled table column identifier %@", identifier); |
} |
return nil; |
} |
|
|
@end |