1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
//
// MQTableView.m
// MySQL QueryBrowser
//
// Created by Alfredo Kojima on 4/29/05.
// Copyright 2005 MySQL AB. All rights reserved.
//
#import "MQTableView.h"
#import "MQResultSetCell.h"
@implementation MQTableView
- (void)drawRect:(NSRect)aRect
{
[super drawRect:aRect];
if (_highlight)
{
[[NSColor alternateSelectedControlColor] set];
[NSBezierPath setDefaultLineWidth:4];
[NSBezierPath strokeRect:aRect];
}
}
#if 0
- (void)drawGridInClipRect:(NSRect)aRect
{
NSRange columns= [self columnsInRect:clipRect];
NSRange rows= [self rowsInRect:clipRect];
[[self gridColor] set];
//XXX
}
#endif
- (void)mouseDown:(NSEvent*)event
{
NSPoint point= [self convertPoint:[event locationInWindow]
fromView:nil];
theColumn= [self columnAtPoint:point];
[self setNeedsDisplay];
[super mouseDown:event];
[[self delegate] performSelector:@selector(tableViewWasClicked:) withObject:self];
}
- (void)keyDown:(NSEvent *)theEvent
{
if ([theEvent type] == NSKeyDown)
{
unichar key= [[theEvent characters] characterAtIndex:0];
if (key == NSLeftArrowFunctionKey)
{
if (theColumn > 1) // we don't want to select the indicator
theColumn--;
[self setNeedsDisplay];
[self scrollColumnToVisible:theColumn];
}
else if (key == NSRightArrowFunctionKey)
{
if (theColumn < [self numberOfColumns]-1)
theColumn++;
[self setNeedsDisplay];
[self scrollColumnToVisible:theColumn];
}
}
[super keyDown:theEvent];
}
- (void)editColumn:(int)columnIndex row:(int)rowIndex withEvent:(NSEvent *)theEvent select:(BOOL)flag
{
theColumn= [self editedColumn];
[self setNeedsDisplay];
[super editColumn:columnIndex row:rowIndex withEvent:theEvent select:flag];
}
// highlighting is done in the cell itself because the highlight is drawn
// before the cell, so the cell's background color will be drawn over the
// selection highlight
- (id)_highlightColorForCell:(NSCell *)cell
{
return nil;
}
- (int)lastClickedColumn
{
return theColumn;
}
- (void)selectCellAtRow:(unsigned int)row
column:(unsigned int)column
{
theColumn= column;
[self selectRow:row byExtendingSelection:NO];
}
- (void)setDragHandlers:(NSDictionary*)handlers
target:(id)target
{
if (_handlers != handlers)
{
_handlerTarget= target;
[_handlers release];
_handlers= [handlers retain];
}
}
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
{
// _highlight= YES;
// [self setNeedsDisplay];
return NSDragOperationCopy;
}
- (NSDragOperation)draggingUpdated:(id <NSDraggingInfo>)sender
{
return NSDragOperationCopy;
}
- (void)draggingExited:(id <NSDraggingInfo>)sender
{
// _highlight= NO;
// [self setNeedsDisplay];
}
- (void)concludeDragOperation:(id <NSDraggingInfo>)sender
{
_highlight= NO;
[self setNeedsDisplay];
}
- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender
{
return YES;
}
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
{
NSPasteboard *pboard= [sender draggingPasteboard];
NSArray *types= [pboard types];
unsigned int i, c= [types count];
for (i= 0; i < c; i++)
{
id type= [types objectAtIndex:i];
NSString *handler= [_handlers objectForKey:type];
if (handler)
{
if ([_handlerTarget performSelector:NSSelectorFromString(handler)
withObject:self
withObject:sender])
return YES;
break;
}
}
return NO;
}
@end
|