Changeset 1483

Show
Ignore:
Timestamp:
08/12/04 22:11:56 (4 years ago)
Author:
morris
Message:

sync with WCTableView

Files:

Legend:

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

    r1413 r1483  
    1 /* $Id: WCOutlineView.h,v 1.4 2004/08/03 19:28:27 morris Exp $ */ 
     1/* $Id: WCOutlineView.h,v 1.5 2004/08/12 20:11:56 morris Exp $ */ 
    22 
    33/* 
     
    2727 */ 
    2828 
    29 @protocol WCOutlineViewCopyInfo 
    30  
    31 - (void)                                        outlineViewShouldCopyInfo:(NSOutlineView *)sender; 
    32  
    33 @end 
    34  
    35  
    3629@interface WCOutlineView : NSOutlineView { 
     30        NSMutableString                 *_typeAheadString; 
     31        NSCharacterSet                  *_typeAheadCharacterSet; 
     32         
    3733        NSMutableArray                  *_allTableColumns; 
     34        NSMutableDictionary             *_regions; 
     35         
     36        SEL                                             _escapeAction; 
     37        SEL                                             _deleteAction; 
     38         
     39        BOOL                                    _sortDescending; 
     40        NSImage                                 *_sortDownImage, *_sortUpImage; 
    3841} 
    3942 
    4043 
     44- (BOOL)                                        sortDescending; 
    4145- (void)                                        showViewOptions; 
    4246 
     47- (BOOL)                                        clickedHeaderView; 
     48 
     49- (void)                                        setEscapeAction:(SEL)action; 
     50- (SEL)                                         escapeAction; 
     51 
     52- (void)                                        setDeleteAction:(SEL)action; 
     53- (SEL)                                         deleteAction; 
     54 
    4355@end 
  • WiredClient/trunk/WCOutlineView.m

    r1413 r1483  
    1 /* $Id: WCOutlineView.m,v 1.4 2004/08/03 19:28:27 morris Exp $ */ 
     1/* $Id: WCOutlineView.m,v 1.5 2004/08/12 20:11:56 morris Exp $ */ 
    22 
    33/* 
     
    2727 */ 
    2828 
     29#import "WCFiles.h" 
    2930#import "WCOutlineView.h" 
    3031#import "WCTableView.h" 
     
    3334 
    3435- (id)initWithCoder:(NSCoder *)coder { 
     36        NSMutableCharacterSet   *characterSet; 
     37         
    3538        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]; 
    3649         
    3750        // --- create array for columns 
    3851        _allTableColumns = [[NSMutableArray alloc] init]; 
    3952        [_allTableColumns addObjectsFromArray:[self tableColumns]]; 
     53 
     54        // --- create dictionary for tooltips 
     55        _regions = [[NSMutableDictionary alloc] init]; 
     56 
     57        // --- get the sort images 
     58        _sortUpImage    = [[NSImage imageNamed:@"SortUp"] retain]; 
     59        _sortDownImage  = [[NSImage imageNamed:@"SortDown"] retain]; 
    4060         
    4161        return self; 
     
    4565 
    4666- (void)dealloc { 
    47         [_allTableColumns release]; 
     67        [_typeAheadString release]; 
     68        [_typeAheadCharacterSet release]; 
    4869         
    4970        [super dealloc]; 
     
    5475#pragma mark - 
    5576 
     77- (void)reloadData { 
     78        [_regions removeAllObjects]; 
     79        [self removeAllToolTips]; 
     80         
     81        [super reloadData]; 
     82} 
     83 
     84 
     85 
    5686- (NSMenu *)menuForEvent:(NSEvent *)event { 
    57         int                    row; 
     87        int             row; 
    5888         
    5989        row = [self rowAtPoint:[self convertPoint:[event locationInWindow] fromView:NULL]]; 
    6090         
    6191        if(row >= 0) { 
    62                 [self selectRow:row byExtendingSelection:NO];  
     92                if(![self isRowSelected:row]) 
     93                        [self selectRow:row byExtendingSelection:NO];  
    6394 
    6495                return [super menuForEvent:event]; 
     
    71102 
    72103- (void)keyDown:(NSEvent *)event { 
    73         unichar         key; 
     104        unichar                 key; 
     105        unsigned int    flags; 
    74106         
    75107        // --- get key 
    76         key = [[event characters] characterAtIndex:0]; 
     108        key = [[event charactersIgnoringModifiers] characterAtIndex:0]; 
     109        flags = [event modifierFlags]; 
    77110 
    78111        // --- double-click on enter/return 
    79         if(key == NSEnterCharacter || key == NSCarriageReturnCharacter) 
    80                 [super doCommandBySelector:[super doubleAction]]; 
     112        if(key == NSEnterCharacter || key == NSCarriageReturnCharacter) { 
     113                if([self doubleAction]) 
     114                        [self doCommandBySelector:[self doubleAction]]; 
     115        } 
     116        // --- delete 
     117        else if(key == NSDeleteFunctionKey) { 
     118                if([self deleteAction]) 
     119                        [self doCommandBySelector:[self deleteAction]]; 
     120        } 
     121        // --- enter type-ahead find 
     122        else if([[self dataSource] respondsToSelector:@selector(outlineView:stringValueForRow:)] && 
     123                        [_typeAheadCharacterSet characterIsMember:key]) { 
     124                [self interpretKeyEvents:[NSArray arrayWithObject:event]]; 
     125        } 
     126        // --- pass down 
     127        else { 
     128                [super keyDown:event]; 
     129        } 
     130
     131 
     132 
     133 
     134- (void)insertText:(NSString *)string { 
     135        static NSDate                   *lastDate; 
     136        NSString                                *value; 
     137        NSDate                                  *date; 
     138        int                                             i, rows; 
     139         
     140        // --- get values 
     141        rows    = [self numberOfRows]; 
     142        date    = [NSDate date]; 
     143         
     144        // --- compare with previous time 
     145        if([date timeIntervalSinceDate:lastDate] < 0.5) 
     146                [_typeAheadString appendString:string]; 
    81147        else 
    82                 [super keyDown:event]; 
     148                [_typeAheadString setString:string]; 
     149         
     150        // --- save this time 
     151        [lastDate release]; 
     152        lastDate = [date retain]; 
     153         
     154        // --- find the first row that matches 
     155        for(i = 0; i < rows; i++) { 
     156                value = [[self dataSource] tableView:self stringValueForRow:i]; 
     157                 
     158                if([value compare:_typeAheadString options:NSCaseInsensitiveSearch] > NSOrderedAscending) { 
     159                        [self selectRow:i byExtendingSelection:NO]; 
     160                        [self scrollRowToVisible:i]; 
     161                         
     162                        break; 
     163                } 
     164        } 
     165
     166 
     167 
     168 
     169- (void)moveLeft:(id)sender { 
     170        if([[self delegate] respondsToSelector:@selector(back:)]) 
     171           [[self delegate] back:sender]; 
     172
     173 
     174 
     175 
     176- (void)moveRight:(id)sender { 
     177        if([[self delegate] respondsToSelector:@selector(forward:)]) 
     178           [[self delegate] forward:sender]; 
    83179} 
    84180 
     
    86182 
    87183- (void)copy:(id)sender { 
    88         if([[self delegate] respondsToSelector:@selector(outlineViewShouldCopyInfo:)]) 
    89                 [[self delegate] outlineViewShouldCopyInfo:self]; 
    90 
    91  
    92  
    93  
    94 - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)local { 
    95         if(local) 
    96                 return NSDragOperationEvery; 
    97          
    98         return NSDragOperationGeneric; 
    99 
    100  
    101  
    102  
    103 #pragma mark - 
     184        if([[self delegate] respondsToSelector:@selector(tableViewShouldCopyInfo:)]) 
     185                [[self delegate] tableViewShouldCopyInfo:self]; 
     186
     187 
     188 
     189 
     190- (void)flagsChanged:(id)sender { 
     191        if([[self delegate] respondsToSelector:@selector(tableViewShouldCopyInfo:)]) 
     192                [[self delegate] tableViewShouldCopyInfo:self]; 
     193
     194 
     195 
     196 
     197- (void)cancelOperation:(id)sender { 
     198        if([self escapeAction]) 
     199                [self doCommandBySelector:[self escapeAction]]; 
     200
     201 
     202 
     203 
     204#pragma mark - 
     205 
     206- (void)setHighlightedTableColumn:(NSTableColumn *)tableColumn { 
     207        NSString        *key; 
     208         
     209        if([self highlightedTableColumn]) { 
     210                if([self highlightedTableColumn] == tableColumn) { 
     211                        _sortDescending = !_sortDescending; 
     212                } else { 
     213                        _sortDescending = NO; 
     214                        [self setIndicatorImage:NULL inTableColumn:[self highlightedTableColumn]]; 
     215                } 
     216        } 
     217         
     218        key = [NSString stringWithFormat:@"WCTableView %@ Selected Column", [self autosaveName]]; 
     219        [[NSUserDefaults standardUserDefaults] setObject:[tableColumn identifier] forKey:key]; 
     220 
     221        key = [NSString stringWithFormat:@"WCTableView %@ Sort Descending", [self autosaveName]]; 
     222        [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:_sortDescending] forKey:key]; 
     223 
     224        [self setIndicatorImage:_sortDescending ? _sortDownImage : _sortUpImage 
     225                           inTableColumn:tableColumn]; 
     226        [super setHighlightedTableColumn:tableColumn]; 
     227
     228 
     229 
     230 
     231- (BOOL)sortDescending { 
     232        return _sortDescending; 
     233
     234 
     235 
    104236 
    105237- (void)setAutosaveTableColumns:(BOOL)value { 
    106238        NSEnumerator    *enumerator; 
    107         NSString                *key
     239        NSString                *key, *identifier
    108240        NSArray                 *columns; 
    109241        NSTableColumn   *tableColumn; 
    110242         
    111         if([[self delegate] conformsToProtocol:@protocol(WCTableViewSelectOptions)]) { 
    112                 key = [NSString stringWithFormat:@"WCTableViewOptions %@ Columns", [self autosaveName]]; 
    113                 columns = [[NSUserDefaults standardUserDefaults] arrayForKey:key]; 
    114                 enumerator = [[self tableColumns] objectEnumerator]; 
    115                  
    116                 while((tableColumn = [enumerator nextObject])) { 
    117                         if(![columns containsObject:[tableColumn identifier]]) 
    118                                 [self removeTableColumn:tableColumn]; 
    119                 } 
    120                  
    121                 [self sizeLastColumnToFit]; 
     243        if(value) { 
     244                if([[self delegate] conformsToProtocol:@protocol(WCTableViewSelectOptions)]) { 
     245                        key = [NSString stringWithFormat:@"WCTableViewOptions %@ Columns", [self autosaveName]]; 
     246                        columns = [[NSUserDefaults standardUserDefaults] arrayForKey:key]; 
     247                        enumerator = [[self tableColumns] objectEnumerator]; 
     248                         
     249                        while((tableColumn = [enumerator nextObject])) { 
     250                                if(![columns containsObject:[tableColumn identifier]]) 
     251                                        [self removeTableColumn:tableColumn]; 
     252                        } 
     253                         
     254                        if([self autoresizesAllColumnsToFit]) 
     255                                [self sizeToFit]; 
     256                        else 
     257                                [self sizeLastColumnToFit]; 
     258                } 
     259 
     260                key = [NSString stringWithFormat:@"WCTableView %@ Selected Column", [self autosaveName]]; 
     261                identifier = [[NSUserDefaults standardUserDefaults] stringForKey:key]; 
     262                 
     263                if(identifier) 
     264                        tableColumn = [self tableColumnWithIdentifier:identifier]; 
     265                else 
     266                        tableColumn = [[self tableColumns] objectAtIndex:0];             
     267                 
     268                key = [NSString stringWithFormat:@"WCTableView %@ Sort Descending", [self autosaveName]]; 
     269                _sortDescending = [[NSUserDefaults standardUserDefaults] boolForKey:key]; 
     270                 
     271                if(tableColumn) { 
     272                        if([[self delegate] respondsToSelector:@selector(outlineView:shouldSelectTableColumn:)]) 
     273                                [[self delegate] outlineView:self shouldSelectTableColumn:tableColumn]; 
     274                } 
    122275        } 
    123276         
     
    157310        NSTableColumn   *tableColumn; 
    158311        id                              view; 
     312        unsigned int    index; 
    159313         
    160314        if(returnCode == NSRunStoppedResponse) { 
    161315                key = [NSString stringWithFormat:@"WCTableViewOptions %@ Columns", [self autosaveName]]; 
    162316                enumerator = [[[sheet contentView] subviews] objectEnumerator]; 
    163  
     317                 
    164318                array = [NSMutableArray array]; 
    165319                [array addObject:[[[self tableColumns] objectAtIndex:0] identifier]]; 
     
    179333                                                        if([identifier isEqualToString:[tableColumn identifier]]) { 
    180334                                                                [self addTableColumn:tableColumn]; 
    181                                                                 [self moveColumn:[[self tableColumns] count] - 1 
    182                                                                                 toColumn:[_allTableColumns indexOfObject:tableColumn]]; 
     335                                                                 
     336                                                                index = [_allTableColumns indexOfObject:tableColumn]; 
     337                                                                 
     338                                                                if(index < [[self tableColumns] count]) 
     339                                                                        [self moveColumn:[[self tableColumns] count] - 1 toColumn:index]; 
    183340                                                        } 
    184341                                                } 
    185342                                        } 
    186  
     343                                         
    187344                                        [array addObject:identifier]; 
    188345                                } else { 
     
    192349                } 
    193350                 
    194                 [self sizeLastColumnToFit]; 
    195  
     351                if([self autoresizesAllColumnsToFit]) 
     352                        [self sizeToFit]; 
     353                else 
     354                        [self sizeLastColumnToFit]; 
     355                 
    196356                [[NSUserDefaults standardUserDefaults] setObject:array forKey:key]; 
    197357        } 
     
    200360} 
    201361 
     362 
     363 
     364#pragma mark - 
     365 
     366- (BOOL)clickedHeaderView { 
     367        NSPoint         point; 
     368     
     369        point = [[self headerView] convertPoint:[[NSApp currentEvent] locationInWindow] 
     370                                                                   fromView:NULL]; 
     371     
     372        return ([[self headerView] hitTest:point] != NULL); 
     373} 
     374 
     375 
     376 
     377#pragma mark - 
     378 
     379- (void)setEscapeAction:(SEL)action { 
     380        _escapeAction = action; 
     381} 
     382 
     383 
     384 
     385- (SEL)escapeAction { 
     386        return _escapeAction; 
     387} 
     388 
     389 
     390 
     391#pragma mark - 
     392 
     393- (void)setDeleteAction:(SEL)action { 
     394        _deleteAction = action; 
     395} 
     396 
     397 
     398 
     399- (SEL)deleteAction { 
     400        return _deleteAction; 
     401} 
     402 
     403 
     404 
     405#pragma mark - 
     406 
     407- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)local { 
     408        if(local) 
     409                return NSDragOperationEvery; 
     410         
     411        return NSDragOperationGeneric; 
     412} 
     413 
     414 
     415 
     416- (NSRect)frameOfCellAtColumn:(int)columnIndex row:(int)rowIndex { 
     417        NSNumber        *tag; 
     418        NSString        *key; 
     419        NSRect          frame; 
     420         
     421        frame = [super frameOfCellAtColumn:columnIndex row:rowIndex]; 
     422        key = [NSString stringWithFormat:@"%d,%d", columnIndex, rowIndex]; 
     423        tag = [_regions objectForKey:key]; 
     424         
     425        if(tag) 
     426                [self removeToolTip:[tag intValue]]; 
     427         
     428        tag = [NSNumber numberWithInt:[self addToolTipRect:frame owner:self userData:NULL]]; 
     429        [_regions setObject:tag forKey:key]; 
     430         
     431        return frame; 
     432} 
     433 
     434 
     435 
     436- (NSString *)view:(NSView *)view stringForToolTip:(NSToolTipTag)tag point:(NSPoint)point userData:(void *)data { 
     437        int             row; 
     438         
     439        row = [self rowAtPoint:point]; 
     440 
     441        if(row >= 0 && [[self dataSource] respondsToSelector:@selector(tableView:toolTipForRow:)]) 
     442                return [[self dataSource] tableView:self toolTipForRow:row]; 
     443 
     444        return NULL; 
     445} 
     446 
    202447@end