This is OICNSTableHeaderView.m in view mode; [Download] [Up]
//************************************************************************
//
// OICNSTableHeaderView.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 "OICNSTableHeaderView.h"
#import "OICNSTableHeaderCell.h"
#import "OICNSTableColumn.h"
#import "OICNSTableView.h"
#import <AppKit/AppKit.h>
@implementation OICNSTableHeaderView
//
// Private Methods
//
- (NSTableColumn *)_columnAtIndex:(unsigned int)index
{
NSTableColumn *column;
NS_DURING
column = [[[self tableView] tableColumns] objectAtIndex:index];
NS_HANDLER
column = nil;
NS_ENDHANDLER
return column;
}
//
// Method from NSTableHeaderView. Catch the mouseDown event.
//
- (void)mouseDown:(NSEvent *)theEvent
{
NSPoint point;
int aColumnPosition;
NSRect rect;
NSTableColumn *column;
// Is it a resize operation?
if (![[NSCursor currentCursor] isEqual:_resizeCursor])
{
// It it not a resize operation
point = [theEvent locationInWindow];
point = [self convertPoint:point fromView:nil];
// Get the column
if (((aColumnPosition = [self columnAtPoint:point]) >= 0) &&
((column = [self _columnAtIndex:aColumnPosition]) != nil))
{
// Is the column and the headerCell a kind of my own classes?
if ([column isKindOfClass:[OICNSTableColumn class]] &&
[[column headerCell] isKindOfClass:[OICNSTableHeaderCell class]])
{
// Yes, it is...
rect = [self headerRectOfColumn:aColumnPosition];
rect.origin.x = rect.origin.x + rect.size.width - rect.size.height;
rect.size.width = rect.size.height;
// Mouse click on the NSButtonCell?
if (NSPointInRect(point, rect))
{
// Yes, so switch the sort order...
NSComparisonResult order;
order = [(OICNSTableColumn *)column ordering];
switch(order)
{
case NSOrderedAscending:
order = NSOrderedDescending;
break;
case NSOrderedDescending:
order = NSOrderedSame;
break;
case NSOrderedSame:
default:
order = NSOrderedAscending;
break;
}
// Set the new sort order (force a refresh of the display)
[(OICNSTableColumn *)column setOrdering:order];
return;
}
}
}
}
// Don't catch the mouseDown event...
[super mouseDown:theEvent];
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.