Annotation of chimera/ExtendedOutlineView.mm, revision 1.2

1.2     ! macserv     1: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
        !             2: /* ***** BEGIN LICENSE BLOCK *****
        !             3: * Version: NPL 1.1/GPL 2.0/LGPL 2.1
        !             4: *
        !             5: * The contents of this file are subject to the Netscape Public License
        !             6: * Version 1.1 (the "License"); you may not use this file except in
        !             7: * compliance with the License. You may obtain a copy of the License at
        !             8: * http://www.mozilla.org/NPL/
        !             9: *
        !            10: * Software distributed under the License is distributed on an "AS IS" basis,
        !            11: * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
        !            12: * for the specific language governing rights and limitations under the
        !            13: * License.
        !            14: *
        !            15: * The Original Code is mozilla.org code.
        !            16: *
        !            17: * The Initial Developer of the Original Code is
        !            18: * Netscape Communications Corporation.
        !            19: * Portions created by the Initial Developer are Copyright (C) 2002
        !            20: * the Initial Developer. All Rights Reserved.
        !            21: *
        !            22: * Contributor(s):
        !            23: *
        !            24: * Alternatively, the contents of this file may be used under the terms of
        !            25: * either the GNU General Public License Version 2 or later (the "GPL"), or
        !            26: * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
        !            27: * in which case the provisions of the GPL or the LGPL are applicable instead
        !            28: * of those above. If you wish to allow use of your version of this file only
        !            29: * under the terms of either the GPL or the LGPL, and not to allow others to
        !            30: * use your version of this file under the terms of the NPL, indicate your
        !            31: * decision by deleting the provisions above and replace them with the notice
        !            32: * and other provisions required by the GPL or the LGPL. If you do not delete
        !            33: * the provisions above, a recipient may use your version of this file under
        !            34: * the terms of any one of the NPL, the GPL or the LGPL.
        !            35: *
        !            36: * ***** END LICENSE BLOCK ***** */
1.1       hyatt      37: 
                     38: #import "ExtendedOutlineView.h"
                     39: 
                     40: 
                     41: @implementation ExtendedOutlineView
                     42: 
                     43: - (id)initWithFrame:(NSRect)frame {
1.2     ! macserv    44:   if ( (self = [super initWithFrame:frame]) ) {
1.1       hyatt      45:     mDeleteAction = 0;
                     46:   }
                     47:   return self;
                     48: }
                     49: 
                     50: -(void)setDeleteAction: (SEL)aDeleteAction
                     51: {
                     52:   mDeleteAction = aDeleteAction;
                     53: }
                     54: 
                     55: -(SEL)deleteAction
                     56: {
                     57:   return mDeleteAction;
                     58: }
                     59: 
                     60: int kReturnKeyCode = 0x24;
                     61: int kDeleteKeyCode = 0x33;
                     62: int kLeftArrowKeyCode = 0x7B;
                     63: int kRightArrowKeyCode = 0x7C;
                     64: 
                     65: -(void)keyDown:(NSEvent*)aEvent
                     66: {
                     67:   // Check for a certain set of special keys.
                     68:   
                     69:   //NSDeleteFunctionKey
                     70:   if ([aEvent keyCode] == kDeleteKeyCode) {
                     71:     if (mDeleteAction)
                     72:       [NSApp sendAction: mDeleteAction to: [self target] from: self];
                     73:     return;
                     74:   }
                     75:   else if ([aEvent keyCode] == kReturnKeyCode) {
                     76:     // Override return to keep the goofy inline editing
                     77:     // from happening.
                     78:     if ([self numberOfSelectedRows] == 1)
                     79:       [NSApp sendAction: [self doubleAction] to: [self target] from: self];
                     80:     return;
                     81:   }
                     82:   else if ([aEvent keyCode] == kLeftArrowKeyCode ||
                     83:            [aEvent keyCode] == kRightArrowKeyCode)
                     84:   {
                     85:     BOOL expand = ([aEvent keyCode] == kRightArrowKeyCode);
                     86:     if ([self numberOfSelectedRows] == 1) {
                     87:       int index = [self selectedRow];
                     88:       if (index == -1)
                     89:         return;
                     90: 
                     91:       id item = [self itemAtRow: index];
                     92:       if (!item)
                     93:         return;
                     94: 
                     95:       if (![self isExpandable: item])
                     96:         return;
                     97:       
                     98:       if (![self isItemExpanded: item] && expand)
                     99:         [self expandItem: item];
                    100:       else if ([self isItemExpanded: item] && !expand)
                    101:         [self collapseItem: item];
                    102:     }
                    103:   }
                    104:   
                    105:   return [super keyDown: aEvent];
                    106: }
                    107: 
                    108: @end

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>