This is OICNSTableHeaderCell.m in view mode; [Download] [Up]
//************************************************************************
//
// OICNSTableHeaderCell.m
//
// by Juergen Moellenhoff <jm@oic.de>
//
//
// This code is supplied "as is" the author makes no warranty as to its
// suitability for any purpose. This code is free and may be distributed
// in accordance with the terms of the:
//
// GNU GENERAL PUBLIC LICENSE
// Version 2, June 1991
// copyright (C) 1989, 1991 Free Software Foundation, Inc.
// 675 Mass Ave, Cambridge, MA 02139, USA
//
//************************************************************************
#import "OICNSTableHeaderCell.h"
#import <AppKit/AppKit.h>
static NSString *OICHigh = @"OICHigh";
static NSString *OICLow = @"OICLow";
static NSString *OICNoOrder = @"OICNoOrder";
#define OICNSTABLEHEADERCELL_CURRENT_VERSION 3
@implementation OICNSTableHeaderCell
//
// Private Methods
//
- _createImageCell
{
NSButtonCell *cell;
cell = [[NSButtonCell alloc] initImageCell:[NSImage imageNamed:OICNoOrder]];
[cell setBordered:YES];
[cell setImagePosition:NSImageOnly];
[cell setButtonType:NSMomentaryPushButton];
return [cell autorelease];
}
- (void)_finishInitializing
{
NSString *pathForResource;
NSBundle *bundle;
NSImage *image;
bundle = [NSBundle bundleForClass:[self class]];
if ([NSImage imageNamed:OICHigh] == nil)
{
pathForResource = [bundle pathForResource:OICHigh ofType:@"tiff"];
image = [[NSImage alloc] initByReferencingFile:pathForResource];
[image setName:OICHigh];
}
if ([NSImage imageNamed:OICLow] == nil)
{
pathForResource = [bundle pathForResource:OICLow ofType:@"tiff"];
image = [[NSImage alloc] initByReferencingFile:pathForResource];
[image setName:OICLow];
}
if ([NSImage imageNamed:OICNoOrder] == nil)
{
pathForResource = [bundle pathForResource:OICNoOrder ofType:@"tiff"];
image = [[NSImage alloc] initByReferencingFile:pathForResource];
[image setName:OICNoOrder];
}
}
//
// Public methods
//
//
// This bumps the class version so that we can compatibly read
// old objects out of an archive.
//
+ (void)initialize
{
if (self == [OICNSTableHeaderCell class])
[OICNSTableHeaderCell setVersion:OICNSTABLEHEADERCELL_CURRENT_VERSION];
}
//
// Init
//
- initTextCell:(NSString *)aString
{
[super initTextCell:aString];
// Set the ButtonCell for the image
[self setOrderingCell:[self _createImageCell]];
// finish initializing :-)
[self _finishInitializing];
// Set the default sort order
[self setOrdering:NSOrderedSame];
return self;
}
//
// Destroy
//
- (void)dealloc
{
if (_orderingCell != nil)
{
[_orderingCell release];
_orderingCell = nil;
}
[super dealloc];
}
//
// NSCoding protocol
//
- (id)initWithCoder:(NSCoder *)aDecoder
{
unsigned version;
NSComparisonResult tempOrdering;
[super initWithCoder:aDecoder];
version = [aDecoder versionForClassName:@"OICNSTableHeaderCell"];
if (version < OICNSTABLEHEADERCELL_CURRENT_VERSION)
{
id dummy;
if (version == 2)
{
// read code for old version
dummy = [aDecoder decodeObject];
[aDecoder decodeValueOfObjCType:@encode(typeof(tempOrdering)) at:&tempOrdering];
}
else
{
// read code for old version
dummy = [aDecoder decodeObject];
tempOrdering = NSOrderedSame;
}
}
else
{
// read code for current version
[aDecoder decodeValueOfObjCType:@encode(typeof(tempOrdering)) at:&tempOrdering];
}
// Set the ButtonCell for the image
[self setOrderingCell:[self _createImageCell]];
// finish initializing :-)
[self _finishInitializing];
// Set the sort order
[self setOrdering:tempOrdering];
return self;
}
//
// NSCoding protocol
//
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[super encodeWithCoder:aCoder];
// It is not really necessary to encode this variable,
// but maybe I need it later for something... who knows...
[aCoder encodeValueOfObjCType:@encode(typeof(_ordering)) at:&_ordering];
}
//
// NSCopying protocol
//
- copyWithZone:(NSZone *)z
{
OICNSTableHeaderCell *theCopy;
theCopy = [super copyWithZone:z];
// Important!! I must clear the
// variable, before I can use it.
theCopy->_orderingCell = nil;
// Now I can set the value.
[theCopy setOrderingCell:[self _createImageCell]];
[theCopy setOrdering:[self ordering]];
return theCopy;
}
//
// Display
//
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
NSRect aNewRect;
aNewRect = cellFrame;
aNewRect.size.width -= aNewRect.size.height;
[super drawInteriorWithFrame:aNewRect inView:controlView];
aNewRect.origin.x = aNewRect.origin.x + aNewRect.size.width + 1.0;
aNewRect.size.width = aNewRect.size.height;
// Draw the ordering image
[[self orderingCell] drawWithFrame:aNewRect inView:controlView];
}
//
// Get/Set methods
//
- (void)setOrderingCell:theCell
{
if (_orderingCell == theCell)
return;
[_orderingCell release];
_orderingCell = nil;
_orderingCell = [theCell retain];
}
- orderingCell
{
return _orderingCell;
}
- (void)setOrdering:(NSComparisonResult)newOrdering
{
NSString *imageName = nil;
_ordering = newOrdering;
switch(_ordering)
{
case NSOrderedAscending:
imageName = OICHigh;
break;
case NSOrderedDescending:
imageName = OICLow;
break;
case NSOrderedSame:
default:
imageName = OICNoOrder;
break;
}
[[self orderingCell] setImage:[NSImage imageNamed:imageName]];
}
- (NSComparisonResult)ordering
{
return _ordering;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.