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>