62 lines
1.7 KiB
Objective-C
62 lines
1.7 KiB
Objective-C
//
|
|
// PlaylistHeaderView.m
|
|
// Cog
|
|
//
|
|
// Created by Simon on 06-05-24.
|
|
// Copyright 2006 Vincent Spader. All rights reserved.
|
|
//
|
|
|
|
#import "PlaylistHeaderView.h"
|
|
|
|
@implementation PlaylistHeaderView
|
|
|
|
- (void)mouseDown:(NSEvent *)theEvent {
|
|
NSPoint event_location = [theEvent locationInWindow];
|
|
NSPoint local_point = [self convertPoint:event_location fromView:nil];
|
|
|
|
int column = (int)[self columnAtPoint:local_point];
|
|
|
|
if([theEvent clickCount] == 2 && column != -1) {
|
|
// compute whether the clickpoint is a column separator or not
|
|
BOOL clickedSeperator = NO;
|
|
// handle a click one pixel away at right
|
|
NSRect rect = [self headerRectOfColumn:column];
|
|
if(fabs(rect.origin.x - local_point.x) <= 1.0 && column > 0) {
|
|
--column;
|
|
clickedSeperator = YES;
|
|
}
|
|
// handle a click 3 pixels away at left
|
|
else if(fabs(rect.origin.x + rect.size.width - local_point.x) <= 3.0)
|
|
clickedSeperator = YES;
|
|
|
|
if(clickedSeperator) {
|
|
NSTableColumn *col = [[[self tableView] tableColumns] objectAtIndex:column];
|
|
|
|
// Info about the font and such
|
|
NSCell *cell = [col dataCell];
|
|
|
|
// Binding info...reaching deep!
|
|
NSDictionary *bindingInfo = [col infoForBinding:@"value"];
|
|
NSArray *boundArray = [[bindingInfo objectForKey:NSObservedObjectKey] valueForKeyPath:[bindingInfo objectForKey:NSObservedKeyPathKey]];
|
|
|
|
// find the longest string display length in that column
|
|
float max_width = -1;
|
|
for(id row in boundArray) {
|
|
[cell setObjectValue:row];
|
|
|
|
float width = [cell cellSize].width;
|
|
if(width > max_width)
|
|
max_width = width;
|
|
}
|
|
|
|
// set the new width (plus a 5 pixel extra to avoid "..." string substitution)
|
|
[col setWidth:max_width + 5];
|
|
|
|
} else
|
|
[super mouseDown:theEvent];
|
|
} else
|
|
[super mouseDown:theEvent];
|
|
}
|
|
|
|
@end
|