Changeset 1308

Show
Ignore:
Timestamp:
05/22/04 12:05:18 (5 years ago)
Author:
morris
Message:

move type-ahead to generic WCTableView

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • WiredClient/trunk/WCChat.h

    r1297 r1308  
    1 /* $Id: WCChat.h,v 1.12 2004/05/21 21:03:18 morris Exp $ */ 
     1/* $Id: WCChat.h,v 1.13 2004/05/22 10:05:18 morris Exp $ */ 
    22 
    33/* 
     
    2929#import "WCWindowController.h" 
    3030 
    31 @class WCConnection, WCSplitView, WCTextView, WCTypeAheadTableView; 
     31@class WCConnection, WCSplitView, WCTextView, WCTableView; 
    3232 
    3333@protocol WCTableViewMenuValidation, WCTableViewInfoCopying; 
     
    5050        IBOutlet WCSplitView                    *_userListSplitView; 
    5151        IBOutlet NSView                                 *_userListView; 
    52         IBOutlet WCTypeAheadTableView *_userListTableView; 
     52        IBOutlet WCTableView                  *_userListTableView; 
    5353         
    5454        IBOutlet NSButton                               *_privateMessageButton; 
  • WiredClient/trunk/WCChat.m

    r1298 r1308  
    1 /* $Id: WCChat.m,v 1.45 2004/05/22 02:18:09 morris Exp $ */ 
     1/* $Id: WCChat.m,v 1.46 2004/05/22 10:05:18 morris Exp $ */ 
    22 
    33/* 
     
    4545#import "WCSplitView.h" 
    4646#import "WCStats.h" 
     47#import "WCTableView.h" 
    4748#import "WCTextView.h" 
    48 #import "WCTypeAheadTableView.h" 
    4949#import "WCUser.h" 
    5050#import "WCUserInfo.h" 
  • WiredClient/trunk/WCFiles.h

    r1275 r1308  
    1 /* $Id: WCFiles.h,v 1.6 2004/05/20 03:55:13 morris Exp $ */ 
     1/* $Id: WCFiles.h,v 1.7 2004/05/22 10:05:18 morris Exp $ */ 
    22 
    33/* 
     
    2929#import "WCWindowController.h" 
    3030 
    31 @class WCConnection, WCFile
     31@class WCConnection, WCFile, WCTableView
    3232 
    3333@protocol WCGetInfoValidation, WCTableViewInfoCopying, WCTableViewOptionsSelection; 
     34@protocol WCTableViewTypingAhead; 
    3435 
    35 @interface WCFiles : WCWindowController <WCGetInfoValidation, WCTableViewInfoCopying, WCTableViewOptionsSelection> { 
    36         IBOutlet NSTableView                  *_filesTableView; 
     36@interface WCFiles : WCWindowController <WCGetInfoValidation, WCTableViewInfoCopying, WCTableViewOptionsSelection, WCTableViewTypingAhead> { 
     37        IBOutlet WCTableView                  *_filesTableView; 
    3738        IBOutlet NSScrollView                   *_filesScrollView; 
    3839 
  • WiredClient/trunk/WCFiles.m

    r1301 r1308  
    1 /* $Id: WCFiles.m,v 1.33 2004/05/22 08:06:45 morris Exp $ */ 
     1/* $Id: WCFiles.m,v 1.34 2004/05/22 10:05:18 morris Exp $ */ 
    22 
    33/* 
     
    4444#import "WCServer.h" 
    4545#import "WCSettings.h" 
     46#import "WCTableView.h" 
    4647#import "WCTextCell.h" 
    4748#import "WCTransfers.h" 
     
    147148        // --- double-click 
    148149        [_filesTableView setDoubleAction:@selector(open:)]; 
     150         
     151        // --- type-ahead 
     152        [_filesTableView setTypeAhead:YES]; 
    149153         
    150154        // --- get the sort images 
     
    957961 
    958962 
    959 - (id)tableView:(NSTableView *)sender objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row { 
     963- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row { 
    960964        NSImage         *icon; 
    961965        NSString        *extension, *identifier; 
     
    10331037         
    10341038        return NULL; 
     1039} 
     1040 
     1041 
     1042 
     1043- (NSString *)tableView:(NSTableView *)tableView stringValueForRow:(int)row { 
     1044        WCFile          *file; 
     1045        int                     i; 
     1046         
     1047        i               = _sortDescending ? [_shownFiles count] - (unsigned int) row - 1 : (unsigned int) row; 
     1048        file    = [_shownFiles objectAtIndex:i]; 
     1049         
     1050        return [file name]; 
    10351051} 
    10361052 
  • WiredClient/trunk/WCMessages.h

    r1179 r1308  
    1 /* $Id: WCMessages.h,v 1.5 2004/05/16 05:13:27 morris Exp $ */ 
     1/* $Id: WCMessages.h,v 1.6 2004/05/22 10:05:18 morris Exp $ */ 
    22 
    33/* 
     
    2929#import "WCWindowController.h" 
    3030 
    31 @class WCSplitView, WCMessage, WCConnection, WCTextView
     31@class WCSplitView, WCMessage, WCConnection, WCTextView, WCTableView
    3232 
    3333@interface WCMessages : WCWindowController { 
    3434        IBOutlet WCSplitView            *_messageSplitView; 
    35     IBOutlet NSTableView              *_messageListTableView; 
     35    IBOutlet WCTableView              *_messageListTableView; 
    3636    IBOutlet WCTextView                 *_messageTextView; 
    3737 
  • WiredClient/trunk/WCMessages.m

    r1298 r1308  
    1 /* $Id: WCMessages.m,v 1.19 2004/05/22 02:18:09 morris Exp $ */ 
     1/* $Id: WCMessages.m,v 1.20 2004/05/22 10:05:18 morris Exp $ */ 
    22 
    33/* 
     
    3838#import "WCSettings.h" 
    3939#import "WCSplitView.h" 
     40#import "WCTableView.h" 
    4041#import "WCTextView.h" 
    4142#import "WCToolbar.h" 
     
    113114        // --- use a smaller font for the message list 
    114115        font = [NSFont systemFontOfSize:[NSFont smallSystemFontSize]]; 
    115  
    116116        [[_nickTableColumn dataCell] setFont:font]; 
    117117        [[_timeTableColumn dataCell] setFont:font]; 
  • WiredClient/trunk/WCPrivateChat.m

    r1298 r1308  
    1 /* $Id: WCPrivateChat.m,v 1.16 2004/05/22 02:18:09 morris Exp $ */ 
     1/* $Id: WCPrivateChat.m,v 1.17 2004/05/22 10:05:18 morris Exp $ */ 
    22 
    33/* 
     
    3636#import "WCSettings.h" 
    3737#import "WCSplitView.h" 
     38#import "WCTableView.h" 
    3839#import "WCTextView.h" 
    39 #import "WCTypeAheadTableView.h" 
    4040#import "WCUser.h" 
    4141 
  • WiredClient/trunk/WCPublicChat.m

    r1298 r1308  
    1 /* $Id: WCPublicChat.m,v 1.28 2004/05/22 02:18:09 morris Exp $ */ 
     1/* $Id: WCPublicChat.m,v 1.29 2004/05/22 10:05:18 morris Exp $ */ 
    22 
    33/* 
     
    4141#import "WCSettings.h" 
    4242#import "WCSplitView.h" 
     43#import "WCTableView.h" 
    4344#import "WCTextView.h" 
    4445#import "WCToolbar.h" 
    45 #import "WCTypeAheadTableView.h" 
    4646#import "WCUser.h" 
    4747 
  • WiredClient/trunk/WCTableView.h

    r1206 r1308  
    1 /* $Id: WCTableView.h,v 1.3 2004/05/17 16:46:32 morris Exp $ */ 
     1/* $Id: WCTableView.h,v 1.4 2004/05/22 10:05:18 morris Exp $ */ 
    22 
    33/* 
     
    2929@protocol WCTableViewInfoCopying 
    3030 
    31 - (void)                        tableViewShouldCopyInfo:(NSTableView *)sender; 
     31- (void)                                       tableViewShouldCopyInfo:(NSTableView *)sender; 
    3232 
    3333@end 
    3434 
    3535 
    36 @interface WCTableView : NSTableView 
     36@protocol WCTableViewTypingAhead 
     37 
     38- (NSString *)                          tableView:(NSTableView *)tableView stringValueForRow:(int)row; 
    3739 
    3840@end 
     41 
     42 
     43@interface WCTableView : NSTableView { 
     44        NSMutableString                 *_typeAheadString; 
     45        NSCharacterSet                  *_typeAheadCharacterSet; 
     46        BOOL                                    _typeAhead; 
     47} 
     48 
     49 
     50- (void)                                        setTypeAhead:(BOOL)value; 
     51- (BOOL)                                        typeAhead; 
     52 
     53@end 
  • WiredClient/trunk/WCTableView.m

    r1100 r1308  
    1 /* $Id: WCTableView.m,v 1.4 2004/03/28 22:14:22 morris Exp $ */ 
     1/* $Id: WCTableView.m,v 1.5 2004/05/22 10:05:18 morris Exp $ */ 
    22 
    33/* 
     
    2727 */ 
    2828 
     29#import "WCFiles.h" 
     30#import "WCIconCell.h" 
    2931#import "WCTableView.h" 
    3032 
    3133@implementation WCTableView 
     34 
     35- (id)initWithCoder:(NSCoder *)coder { 
     36        NSMutableCharacterSet   *characterSet; 
     37         
     38        self = [super initWithCoder:coder]; 
     39         
     40        // --- string for type-ahead 
     41        _typeAheadString = [[NSMutableString alloc] init]; 
     42         
     43        // --- character set of legal characters 
     44        characterSet = [[NSCharacterSet alphanumericCharacterSet] mutableCopy]; 
     45        [characterSet formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]]; 
     46        [characterSet formUnionWithCharacterSet:[NSCharacterSet whitespaceCharacterSet]]; 
     47        _typeAheadCharacterSet = [characterSet copy]; 
     48        [characterSet release]; 
     49         
     50        return self; 
     51} 
     52 
     53 
     54 
     55- (void)dealloc { 
     56        [_typeAheadString release]; 
     57        [_typeAheadCharacterSet release]; 
     58         
     59        [super dealloc]; 
     60} 
     61 
     62 
     63 
     64#pragma mark - 
    3265 
    3366- (NSMenu *)menuForEvent:(NSEvent *)event { 
     
    5689        if(key == NSEnterCharacter || key == NSCarriageReturnCharacter) 
    5790                [super doCommandBySelector:[super doubleAction]]; 
     91        else if(_typeAhead && [_typeAheadCharacterSet characterIsMember:key]) 
     92                [self interpretKeyEvents:[NSArray arrayWithObject:event]]; 
    5893        else 
    5994                [super keyDown:event]; 
     95         
     96} 
     97 
     98 
     99 
     100- (void)insertText:(NSString *)string { 
     101        static NSDate                   *lastDate; 
     102        NSString                                *value; 
     103        NSDate                                  *date; 
     104        int                                             i, rows; 
     105         
     106        // --- get values 
     107        rows    = [self numberOfRows]; 
     108        date    = [NSDate date]; 
     109         
     110        // --- compare with previous time 
     111        if([date timeIntervalSinceDate:lastDate] < 0.5) 
     112                [_typeAheadString appendString:string]; 
     113        else 
     114                [_typeAheadString setString:string]; 
     115         
     116        // --- save this time 
     117        [lastDate release]; 
     118        lastDate = [date retain]; 
     119         
     120        // --- find the first row that matches 
     121        for(i = 0; i < rows; i++) { 
     122                value = [[self dataSource] tableView:self stringValueForRow:i]; 
     123                 
     124                if([value compare:_typeAheadString options:NSCaseInsensitiveSearch] > NSOrderedAscending) { 
     125                        [self selectRow:i byExtendingSelection:NO]; 
     126                        [self scrollRowToVisible:i]; 
     127                         
     128                        break; 
     129                } 
     130        } 
     131} 
     132 
     133 
     134 
     135- (void)moveLeft:(id)sender { 
     136        if([[self delegate] respondsToSelector:@selector(back:)]) 
     137           [[self delegate] back:sender]; 
     138} 
     139 
     140 
     141 
     142- (void)moveRight:(id)sender { 
     143        if([[self delegate] respondsToSelector:@selector(forward:)]) 
     144           [[self delegate] forward:sender]; 
    60145} 
    61146 
     
    76161} 
    77162 
     163 
     164 
     165#pragma mark - 
     166 
     167- (void)setTypeAhead:(BOOL)value { 
     168        if(![[self delegate] conformsToProtocol:@protocol(WCTableViewTypingAhead)]) 
     169                _typeAhead = value; 
     170} 
     171 
     172 
     173 
     174- (BOOL)typeAhead { 
     175        return _typeAhead; 
     176} 
     177 
    78178@end