X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fthecheat;a=blobdiff_plain;f=VariableTable.m;fp=VariableTable.m;h=283b1e856ddf06c0e208a597cd0f4e9ade294954;hp=0000000000000000000000000000000000000000;hb=d27548f80fe411fda2ee69c74a24eab4292267e9;hpb=e8d51183acdd2410a38dcf8f0efbf7c30cd6c581 diff --git a/VariableTable.m b/VariableTable.m new file mode 100644 index 0000000..283b1e8 --- /dev/null +++ b/VariableTable.m @@ -0,0 +1,132 @@ +// +// VariableTable.m +// The Cheat +// +// Created by Chaz McGarvey on 12/28/04. +// Copyright 2004 Chaz McGarvey. All rights reserved. +// + +#import "VariableTable.h" + + +@interface VariableTable ( PrivateAPI ) + +- (void)_setVisibleRows:(NSRange)rows; + +@end + + +@implementation VariableTable + + +- (void)awakeFromNib +{ + NSScrollView *scrollView = (NSScrollView *)[(NSClipView *)[self superview] superview]; + NSScroller *oldScroller = [[scrollView verticalScroller] retain]; + + TrackerScroller *scroller = [[TrackerScroller alloc] initWithFrame:[oldScroller frame]]; + + [scroller setControlSize:[oldScroller controlSize]]; + [scroller setFloatValue:[oldScroller floatValue] knobProportion:[oldScroller knobProportion]]; + [scroller setControlTint:[oldScroller controlTint]]; + + // set the new scroller + [scrollView setHasVerticalScroller:NO]; + [scrollView setVerticalScroller:scroller]; + [scrollView setHasVerticalScroller:YES]; + + [scroller setDelegate:self]; + [scroller release]; + [oldScroller release]; + + /*if ( [super respondsToSelector:@selector(awakeFromNib)] ) { + [super awakeFromNib]; + }*/ +} + + +- (NSRange)visibleRows +{ + return _visibleRows; +} + +- (void)_setVisibleRows:(NSRange)rows +{ + _visibleRows = rows; +} + + +- (void)reloadData +{ + if ( _dontUpdate ) { + _updatePending = YES; + return; + } + + [super reloadData]; + + NSRange range = [self rowsInRect:[(NSClipView *)[self superview] documentVisibleRect]]; + id delegate = [self delegate]; + + if ( !NSEqualRanges( range, _visibleRows ) ) { + [self _setVisibleRows:range]; + if ( [delegate respondsToSelector:@selector(tableView:didChangeVisibleRows:)] ) { + [delegate tableView:self didChangeVisibleRows:range]; + } + } +} + + +- (void)keyDown:(NSEvent *)theEvent +{ + _dontUpdate = YES; + [super keyDown:theEvent]; +} + +- (void)keyUp:(NSEvent *)theEvent +{ + NSRange range = [self rowsInRect:[(NSClipView *)[self superview] documentVisibleRect]]; + id delegate = [self delegate]; + + [super keyUp:theEvent]; + + _dontUpdate = NO; + + if ( !NSEqualRanges( range, _visibleRows ) ) { + [self _setVisibleRows:range]; + if ( [delegate respondsToSelector:@selector(tableView:didChangeVisibleRows:)] ) { + [delegate tableView:self didChangeVisibleRows:range]; + } + } + else if ( _updatePending ) { + [self reloadData]; + _updatePending = NO; + } +} + +- (void)scrollerDidStartScrolling:(TrackerScroller *)scroller +{ + _dontUpdate = YES; +} + +- (void)scrollerDidStopScrolling:(TrackerScroller *)scroller +{ + NSRange range = [self rowsInRect:[(NSClipView *)[self superview] documentVisibleRect]]; + id delegate = [self delegate]; + + _dontUpdate = NO; + + if ( !NSEqualRanges( range, _visibleRows ) ) { + [self _setVisibleRows:range]; + if ( [delegate respondsToSelector:@selector(tableView:didChangeVisibleRows:)] ) { + [delegate tableView:self didChangeVisibleRows:range]; + } + } + else if ( _updatePending ) { + [self reloadData]; + _updatePending = NO; + } +} + + +@end