Rev 5875 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
/** R.app : a Cocoa front end to: "R A Computer Language for Statistical Data Analysis"** R.app Copyright notes:* Copyright (C) 2004-11 The R Foundation* written by Stefano M. Iacus and Simon Urbanek*** R Copyright notes:* Copyright (C) 1995-1996 Robert Gentleman and Ross Ihaka* Copyright (C) 1998-2001 The R Development Core Team* Copyright (C) 2002-2004 The R Foundation** This program is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation; either version 2 of the License, or* (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* GNU General Public License for more details.** A copy of the GNU General Public License is available via WWW at* http://www.gnu.org/copyleft/gpl.html. You can also obtain it by* writing to the Free Software Foundation, Inc., 59 Temple Place,* Suite 330, Boston, MA 02111-1307 USA.** Code snippets were taken from http://cocotron.googlecode.com/svn/trunk/AppKit/NSTableHeaderView.m* Copyright (c) 2006-2007 Christopher J. W. Lloyd*** RDataEditorTableHeaderView.m** Created by Hans-J. Bibiko on 05/07/2011.**/#import "RDataEditorTableHeaderView.h"#import "../REditor.h"@interface RDataEditorTableHeaderView (Private)- (NSRect)_resizeRectBeforeColumn:(NSInteger)column;@end@implementation RDataEditorTableHeaderView (private)- (NSRect)_resizeRectBeforeColumn:(NSInteger)column{NSRect rect=[self headerRectOfColumn:column];rect.origin.x -= 2;rect.size.width = 6;return rect;}@end#pragma mark -@implementation RDataEditorTableHeaderView-(void)mouseDown:(NSEvent *)theEvent{// Submit pending changes of column namesif([[[NSApp keyWindow] firstResponder] isKindOfClass:[NSTextView class]])[[_tableView delegate] textView:(NSTextView*)[[NSApp keyWindow] firstResponder] doCommandBySelector:@selector(insertNewline:)];}-(void)mouseUp:(NSEvent *)theEvent{NSPoint location = [self convertPoint:[theEvent locationInWindow] fromView:nil];NSInteger clickedColumn = [self columnAtPoint:location];// check if delegate implemented tableView:mouseDownInHeaderOfTableColumn:if ([[_tableView delegate] respondsToSelector:@selector(tableView:mouseDownInHeaderOfTableColumn:)]) {if(clickedColumn != -1)[[_tableView delegate] tableView:_tableView mouseDownInHeaderOfTableColumn:[[_tableView tableColumns] objectAtIndex:clickedColumn]];if([[NSApp currentEvent] clickCount] > 1) {// deselect clicked column for editing column name and return[_tableView deselectAll:nil];return;}}// resizing modeif ([_tableView allowsColumnResizing]) {NSInteger i, count=[[_tableView tableColumns] count];// ends editingif ([_tableView editedColumn] != -1 || [_tableView editedRow] != -1)[[self window] endEditingFor:nil];for (i = 1; i < count; ++i) {if (NSMouseInRect(location, [self _resizeRectBeforeColumn:i], [self isFlipped])) {NSTableColumn *resizingColumn = [[_tableView tableColumns] objectAtIndex:i-1];if ([resizingColumn resizingMask] == NSTableColumnNoResizing)return;_resizedColumn = i - 1;location=[self convertPoint:[theEvent locationInWindow] fromView:nil];do {NSPoint newPoint;NSRect newRect;NSInteger q;CGFloat newWidth=newPoint.x;theEvent=[[self window] nextEventMatchingMask:NSLeftMouseUpMask|NSLeftMouseDraggedMask];newPoint=[self convertPoint:[theEvent locationInWindow] fromView:nil];newWidth=newPoint.x;for (q = 0; q < _resizedColumn; ++q) {newWidth -= [[[_tableView tableColumns] objectAtIndex:q] width];newWidth -= [_tableView intercellSpacing].width;}[resizingColumn setWidth:newWidth];[_tableView tile];newRect.origin=[_tableView convertPoint:newPoint fromView:self];newRect.size=NSMakeSize(10,10);[_tableView scrollRectToVisible:newRect];location=newPoint;} while ([theEvent type] != NSLeftMouseUp);[[self window] invalidateCursorRectsForView:self];_resizedColumn = -1;return;}}}// column selection including the chance to select non-continous columns via holding ⌘if ([_tableView allowsColumnSelection]) {// extend/change selectionif ([theEvent modifierFlags] & NSCommandKeyMask) {// deselect previously selected?if ([_tableView isColumnSelected:clickedColumn])[_tableView deselectColumn:clickedColumn];else if ([_tableView allowsMultipleSelection] == YES) {// add to selection[_tableView selectColumnIndexes:[NSIndexSet indexSetWithIndex:clickedColumn] byExtendingSelection:YES];}}else if ([theEvent modifierFlags] & NSShiftKeyMask) {NSInteger firstColumn = [_tableView selectedColumn];NSInteger lastColumn = clickedColumn;if (firstColumn == -1)firstColumn = 0;if (firstColumn > lastColumn) {lastColumn = firstColumn;firstColumn = clickedColumn;}[_tableView deselectAll:nil];while (firstColumn <= lastColumn)[_tableView selectColumnIndexes:[NSIndexSet indexSetWithIndex:firstColumn++] byExtendingSelection:YES];}else[_tableView selectColumnIndexes:[NSIndexSet indexSetWithIndex:clickedColumn] byExtendingSelection:NO];}}@end