]> Dogcows Code - chaz/thecheat/blobdiff - VariableTable.m
The Cheat 1.2
[chaz/thecheat] / VariableTable.m
diff --git a/VariableTable.m b/VariableTable.m
new file mode 100644 (file)
index 0000000..283b1e8
--- /dev/null
@@ -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
This page took 0.019328 seconds and 4 git commands to generate.