41 CPArray _tableDelegates;
45 BOOL _delegateSupportsImages;
49 BOOL _allowsMultipleSelection;
50 BOOL _allowsEmptySelection;
52 Class _tableViewClass;
57 float _minColumnWidth;
58 float _defaultColumnWidth;
60 CPArray _columnWidths;
77 - (id)initWithFrame:(CGRect)aFrame
79 if (
self = [super initWithFrame:aFrame])
90 _defaultColumnWidth = 140.0;
91 _minColumnWidth = 80.0;
99 _allowsMultipleSelection = YES;
100 _allowsEmptySelection = YES;
101 _tableViewClass = [_CPBrowserTableView class];
103 _prototypeView = [[
CPTextField alloc] initWithFrame:CGRectMakeZero()];
104 [_prototypeView setVerticalAlignment:CPCenterVerticalTextAlignment];
105 [_prototypeView setValue:[
CPColor whiteColor] forThemeAttribute:"text-color" inState:CPThemeStateSelectedDataView];
106 [_prototypeView setLineBreakMode:CPLineBreakByTruncatingTail];
108 _horizontalScrollView = [[
CPScrollView alloc] initWithFrame:[
self bounds]];
110 [_horizontalScrollView setHasVerticalScroller:NO];
111 [_horizontalScrollView setAutohidesScrollers:YES];
112 [_horizontalScrollView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable];
114 _contentView = [[
CPView alloc] initWithFrame:CGRectMake(0, 0, 0, CGRectGetHeight([
self bounds]))];
115 [_contentView setAutoresizingMask:CPViewHeightSizable];
117 [_horizontalScrollView setDocumentView:_contentView];
119 [
self addSubview:_horizontalScrollView];
122 - (void)setPrototypeView:(
CPView)aPrototypeView
134 - (void)setDelegate:(
id)anObject
136 _delegate = anObject;
137 _delegateSupportsImages = [_delegate respondsToSelector:@selector(browser:imageValueForItem:)];
149 return _tableViews[index];
154 return [_tableViews indexOfObject:aTableView];
157 - (void)loadColumnZero
159 if ([_delegate respondsToSelector:
@selector(rootItemForBrowser:)])
160 _rootItem = [_delegate rootItemForBrowser:self];
168 - (void)setLastColumn:(CPInteger)columnIndex
170 if (columnIndex >= _tableViews.length)
173 var oldValue = _tableViews.length - 1,
174 indexPlusOne = columnIndex + 1;
177 [_tableViews[columnIndex - 1] setNeedsDisplay:YES];
179 [_tableViews[columnIndex] setNeedsDisplay:YES];
181 [[_tableViews.slice(indexPlusOne) valueForKey:"enclosingScrollView"]
182 makeObjectsPerformSelector:@selector(removeFromSuperview)];
184 _tableViews = _tableViews.slice(0, indexPlusOne);
185 _tableDelegates = _tableDelegates.slice(0, indexPlusOne);
187 if ([_delegate respondsToSelector:
@selector(browser:didChangeLastColumn:toColumn:)])
188 [_delegate browser:self didChangeLastColumn:oldValue toColumn:columnIndex];
195 return _tableViews.length - 1;
201 lastColumn = _tableViews[lastIndex],
202 selectionIndexes = [
lastColumn selectedRowIndexes];
204 if (lastIndex >= 0 && [selectionIndexes count] > 1)
206 reason:"Can't add column, column "+lastIndex+" has invalid selection."];
208 var index = lastIndex + 1,
209 item = index === 0 ? _rootItem : [_tableDelegates[lastIndex] childAtIndex:[selectionIndexes firstIndex]];
211 if (index > 0 && item && [
self isLeafItem:item])
214 var table = [[_tableViewClass alloc] initWithFrame:CGRectMakeZero() browser:self];
216 [table setHeaderView:nil];
217 [table setCornerView:nil];
218 [table setAllowsMultipleSelection:_allowsMultipleSelection];
219 [table setAllowsEmptySelection:_allowsEmptySelection];
220 [table registerForDraggedTypes:[
self registeredDraggedTypes]];
222 [
self _addTableColumnsToTableView:table forColumnIndex:index];
224 var delegate = [[_CPBrowserTableDelegate alloc] init];
231 _tableViews[index] = table;
232 _tableDelegates[index] = delegate;
234 [table setDelegate:delegate];
235 [table setDataSource:delegate];
236 [table setTarget:delegate];
237 [table setAction:@selector(_tableViewClicked:)];
238 [table setDoubleAction:@selector(_tableViewDoubleClicked:)];
239 [table setDraggingDestinationFeedbackStyle:CPTableViewDraggingDestinationFeedbackStyleRegular];
241 var scrollView = [[_CPBrowserScrollView alloc] initWithFrame:CGRectMakeZero()];
242 [scrollView _setBrowser:self];
243 [scrollView setDocumentView:table];
244 [scrollView setHasHorizontalScroller:NO];
245 [scrollView setAutoresizingMask:CPViewHeightSizable];
247 [_contentView addSubview:scrollView];
254 - (void)_addTableColumnsToTableView:(
CPTableView)aTableView forColumnIndex:(
unsigned)index
256 if (_delegateSupportsImages)
258 var column = [[
CPTableColumn alloc] initWithIdentifier:@"Image"],
259 view = [[
CPImageView alloc] initWithFrame:CGRectMakeZero()];
261 [view setImageScaling:CPImageScaleProportionallyDown];
263 [column setDataView:view];
264 [column setResizingMask:CPTableColumnNoResizing];
266 [aTableView addTableColumn:column];
269 var column = [[
CPTableColumn alloc] initWithIdentifier:@"Content"];
271 [column setDataView:_prototypeView];
272 [column setResizingMask:CPTableColumnNoResizing];
274 [aTableView addTableColumn:column];
276 var column = [[
CPTableColumn alloc] initWithIdentifier:@"Leaf"],
277 view = [[_CPBrowserLeafView alloc] initWithFrame:CGRectMakeZero()];
279 [view setBranchImage:[
self valueForThemeAttribute:@"image-control-leaf"]];
280 [view setHighlightedBranchImage:[
self valueForThemeAttribute:@"image-control-leaf-pressed"]];
282 [column setDataView:view];
283 [column setResizingMask:CPTableColumnNoResizing];
285 [aTableView addTableColumn:column];
288 - (void)reloadColumn:(CPInteger)column
297 height = CGRectGetHeight([_contentView bounds]);
299 for (var i = 0, count = _tableViews.length; i < count; i++)
301 var tableView = _tableViews[i],
302 scrollView = [tableView enclosingScrollView],
304 tableHeight = CGRectGetHeight([tableView bounds]);
306 [[tableView tableColumnWithIdentifier:"Image"] setWidth:_imageWidth];
308 [[tableView tableColumnWithIdentifier:"Leaf"] setWidth:_leafWidth];
310 [tableView setRowHeight:_rowHeight];
311 [tableView setFrameSize:CGSizeMake(width - scrollerWidth, tableHeight)];
312 [scrollView setFrameOrigin:CGPointMake(xOrigin, 0)];
313 [scrollView setFrameSize:CGSizeMake(width, height)];
318 [_contentView setFrameSize:CGSizeMake(xOrigin, height)];
321 - (unsigned)rowAtPoint:(CGPoint)aPoint
327 var tableView = _tableViews[column];
328 return [tableView rowAtPoint:[tableView convertPoint:aPoint fromView:self]];
331 - (unsigned)columnAtPoint:(CGPoint)aPoint
333 var adjustedPoint = [_contentView convertPoint:aPoint fromView:self];
335 for (var i = 0, count = _tableViews.length; i < count; i++)
337 var
frame = [[_tableViews[i] enclosingScrollView] frame];
338 if (CGRectContainsPoint(frame, adjustedPoint))
345 - (CGRect)rectOfRow:(
unsigned)aRow inColumn:(
unsigned)aColumn
347 var tableView = _tableViews[aColumn],
348 rect = [tableView rectOfRow:aRow];
350 rect.origin = [
self convertPoint:rect.origin fromView:tableView];
356 - (id)itemAtRow:(CPInteger)row inColumn:(CPInteger)column
358 return [_tableDelegates[column] childAtIndex:row];
361 - (BOOL)isLeafItem:(
id)item
363 return [_delegate respondsToSelector:@selector(browser:isLeafItem:)] && [_delegate browser:self isLeafItem:item];
366 - (id)parentForItemsInColumn:(CPInteger)column
368 return [_tableDelegates[column] _item];
371 - (CPSet)selectedItems
376 index = [selectedIndexes firstIndex];
381 index = [selectedIndexes indexGreaterThanIndex:index];
401 - (void)_column:(
unsigned)columnIndex clickedRow:(
unsigned)rowIndex
403 [
self setLastColumn:columnIndex];
416 - (void)doClick:(
id)sender
421 - (void)doDoubleClick:(
id)sender
428 var key = [anEvent charactersIgnoringModifiers],
438 var previousColumn = column - 1,
447 [_tableViews[column] keyDown:anEvent];
452 - (float)columnContentWidthForColumnWidth:(
float)aWidth
454 var columnSpacing = [_tableViews[0] intercellSpacing].width;
455 return aWidth - (_leafWidth + columnSpacing + (_delegateSupportsImages ? _imageWidth + columnSpacing : 0)) - columnSpacing - [
CPScroller scrollerWidth];
458 - (float)columnWidthForColumnContentWidth:(
float)aWidth
460 var columnSpacing = [_tableViews[0] intercellSpacing].width;
461 return aWidth + (_leafWidth + columnSpacing + (_delegateSupportsImages ? _imageWidth + columnSpacing: 0)) + columnSpacing + [
CPScroller scrollerWidth];
464 - (void)setImageWidth:(
float)aWidth
466 _imageWidth = aWidth;
475 - (void)setMinColumnWidth:(
float)minWidth
477 _minColumnWidth = minWidth;
481 - (float)minColumnWidth
483 return _minColumnWidth;
486 - (void)setWidth:(
float)aWidth ofColumn:(
unsigned)column
488 _columnWidths[column] = aWidth;
490 if ([_delegate respondsToSelector:
@selector(browser:didResizeColumn:)])
491 [_delegate browser:
self didResizeColumn:column];
496 - (float)widthOfColumn:(
unsigned)column
498 var
width = _columnWidths[column];
501 width = _defaultColumnWidth;
506 - (void)setRowHeight:(
float)aHeight
508 _rowHeight = aHeight;
518 - (void)scrollColumnToVisible:(
unsigned)columnIndex
520 [_contentView scrollRectToVisible:[[[
self tableViewInColumn:columnIndex] enclosingScrollView] frame]];
523 - (void)scrollRowToVisible:(
unsigned)rowIndex inColumn:(
unsigned)columnIndex
529 - (BOOL)autohidesScroller
531 return [_horizontalScrollView autohidesScrollers];
534 - (void)setAutohidesScroller:(BOOL)shouldHide
536 [_horizontalScrollView setAutohidesScrollers:shouldHide];
541 - (unsigned)selectedRowInColumn:(
unsigned)columnIndex
543 if (columnIndex > [
self lastColumn] || columnIndex < 0)
546 return [_tableViews[columnIndex] selectedRow];
549 - (unsigned)selectedColumn
560 - (void)selectRow:(
unsigned)row inColumn:(
unsigned)column
566 - (BOOL)allowsMultipleSelection
568 return _allowsMultipleSelection;
571 - (void)setAllowsMultipleSelection:(BOOL)shouldAllow
573 if (_allowsMultipleSelection === shouldAllow)
576 _allowsMultipleSelection = shouldAllow;
577 [_tableViews makeObjectsPerformSelector:@selector(setAllowsMultipleSelection:) withObject:shouldAllow];
580 - (BOOL)allowsEmptySelection
582 return _allowsEmptySelection;
585 - (void)setAllowsEmptySelection:(BOOL)shouldAllow
587 if (_allowsEmptySelection === shouldAllow)
590 _allowsEmptySelection = shouldAllow;
591 [_tableViews makeObjectsPerformSelector:@selector(setAllowsEmptySelection:) withObject:shouldAllow];
596 if (column < 0 || column > [
self lastColumn] +1)
602 - (void)selectRowIndexes:(
CPIndexSet)indexSet inColumn:(
unsigned)column
604 if (column < 0 || column > [
self lastColumn] + 1)
607 if ([_delegate respondsToSelector:
@selector(browser:selectionIndexesForProposedSelection:inColumn:)])
608 indexSet = [_delegate browser:self selectionIndexesForProposedSelection:indexSet inColumn:column];
610 if ([_delegate respondsToSelector:
@selector(browser:shouldSelectRowIndexes:inColumn:)] &&
611 ![_delegate browser:
self shouldSelectRowIndexes:indexSet inColumn:column])
614 if ([_delegate respondsToSelector:
@selector(browserSelectionIsChanging:)])
615 [_delegate browserSelectionIsChanging:self];
617 if (column > [
self lastColumn])
622 [[
self tableViewInColumn:column] selectRowIndexes:indexSet byExtendingSelection:NO];
626 if ([_delegate respondsToSelector:
@selector(browserSelectionDidChange:)])
627 [_delegate browserSelectionDidChange:self];
632 [
super setBackgroundColor:aColor];
633 [_contentView setBackgroundColor:aColor];
636 - (BOOL)acceptsFirstResponder
643 - (void)registerForDraggedTypes:(CPArray)types
645 [
super registerForDraggedTypes:types];
646 [_tableViews makeObjectsPerformSelector:@selector(registerForDraggedTypes:) withObject:types];
649 - (BOOL)canDragRowsWithIndexes:(
CPIndexSet)rowIndexes inColumn:(CPInteger)columnIndex withEvent:(
CPEvent)dragEvent
651 if ([_delegate respondsToSelector:
@selector(browser:canDragRowsWithIndexes:inColumn:withEvent:)])
652 return [_delegate browser:self canDragRowsWithIndexes:rowIndexes inColumn:columnIndex withEvent:dragEvent];
657 - (
CPImage)draggingImageForRowsWithIndexes:(
CPIndexSet)rowIndexes inColumn:(CPInteger)columnIndex withEvent:(
CPEvent)dragEvent offset:(CGPoint)dragImageOffset
659 if ([_delegate respondsToSelector:
@selector(browser:draggingImageForRowsWithIndexes:inColumn:withEvent:offset:)])
660 return [_delegate browser:self draggingImageForRowsWithIndexes:rowIndexes inColumn:columnIndex withEvent:dragEvent offset:dragImageOffset];
665 - (
CPView)draggingViewForRowsWithIndexes:(
CPIndexSet)rowIndexes inColumn:(CPInteger)columnIndex withEvent:(
CPEvent)dragEvent offset:(CGPoint)dragImageOffset
667 if ([_delegate respondsToSelector:
@selector(browser:draggingViewForRowsWithIndexes:inColumn:withEvent:offset:)])
668 return [_delegate browser:self draggingViewForRowsWithIndexes:rowIndexes inColumn:columnIndex withEvent:dragEvent offset:dragImageOffset];
685 _allowsEmptySelection = [aCoder decodeBoolForKey:@"CPBrowserAllowsEmptySelectionKey"];
686 _allowsMultipleSelection = [aCoder decodeBoolForKey:@"CPBrowserAllowsMultipleSelectionKey"];
687 _prototypeView = [aCoder decodeObjectForKey:@"CPBrowserPrototypeViewKey"];
688 _rowHeight = [aCoder decodeFloatForKey:@"CPBrowserRowHeightKey"];
689 _imageWidth = [aCoder decodeFloatForKey:@"CPBrowserImageWidthKey"];
690 _minColumnWidth = [aCoder decodeFloatForKey:@"CPBrowserMinColumnWidthKey"];
691 _columnWidths = [aCoder decodeObjectForKey:@"CPBrowserColumnWidthsKey"];
693 [
self setDelegate:[aCoder decodeObjectForKey:@"CPBrowserDelegateKey"]];
703 var actualSubviews = _subviews;
706 _subviews = actualSubviews;
708 [aCoder encodeBool:[
self autohidesScroller] forKey:@"CPBrowserAutohidesScrollerKey"];
709 [aCoder encodeBool:_allowsEmptySelection forKey:@"CPBrowserAllowsEmptySelectionKey"];
710 [aCoder encodeBool:_allowsMultipleSelection forKey:@"CPBrowserAllowsMultipleSelectionKey"];
711 [aCoder encodeObject:_delegate forKey:@"CPBrowserDelegateKey"];
712 [aCoder encodeObject:_prototypeView forKey:@"CPBrowserPrototypeViewKey"];
713 [aCoder encodeFloat:_rowHeight forKey:@"CPBrowserRowHeightKey"];
714 [aCoder encodeFloat:_imageWidth forKey:@"CPBrowserImageWidthKey"];
715 [aCoder encodeFloat:_minColumnWidth forKey:@"CPBrowserMinColumnWidthKey"];
716 [aCoder encodeObject:_columnWidths forKey:@"CPBrowserColumnWidthsKey"];
722 @implementation _CPBrowserResizeControl :
CPView
730 - (id)initWithFrame:(CGRect)aFrame
732 if (
self = [super initWithFrame:aFrame])
742 - (void)mouseDown:(
CPEvent)anEvent
744 _mouseDownX = [anEvent locationInWindow].x;
745 _browser = [[
self superview] _browser];
746 _index = [_browser columnOfTableView:[[
self superview] documentView]];
747 _width = [_browser widthOfColumn:_index];
750 - (void)mouseDragged:(
CPEvent)anEvent
752 var deltaX = [anEvent locationInWindow].x - _mouseDownX;
753 [_browser setWidth:_width + deltaX ofColumn:_index];
756 - (void)mouseUp:(
CPEvent)anEvent
764 _CPBrowserResizeControl _resizeControl;
768 - (id)initWithFrame:(CGRect)aFrame
770 if (
self = [super initWithFrame:aFrame])
772 _resizeControl = [[_CPBrowserResizeControl alloc] initWithFrame:CGRectMakeZero()];
773 [
self addSubview:_resizeControl];
779 - (void)reflectScrolledClipView:(
CPClipView)aClipView
781 [
super reflectScrolledClipView:aClipView];
783 var
frame = [_verticalScroller frame];
784 frame.size.height = CGRectGetHeight([
self bounds]) - 14.0 -
frame.origin.y;
785 [_verticalScroller setFrameSize:frame.size];
787 var resizeFrame = CGRectMake(CGRectGetMinX(
frame), CGRectGetMaxY(
frame), [
CPScroller scrollerWidth], 14.0);
788 [_resizeControl setFrame:resizeFrame];
798 - (id)initWithFrame:(CGRect)aFrame browser:(
CPBrowser)aBrowser
800 if (
self = [super initWithFrame:aFrame])
806 - (BOOL)acceptsFirstResponder
811 - (void)mouseDown:(
CPEvent)anEvent
813 [
super mouseDown:anEvent];
814 [[
self window] makeFirstResponder:_browser];
827 return ([super _isFocused] || [_browser tableViewInColumn:[_browser selectedColumn]] ===
self);
830 - (BOOL)canDragRowsWithIndexes:(
CPIndexSet)rowIndexes atPoint:(CGPoint)mouseDownPoint
832 return [_browser canDragRowsWithIndexes:rowIndexes inColumn:[_browser columnOfTableView:self] withEvent:[CPApp currentEvent]];
835 - (
CPImage)dragImageForRowsWithIndexes:(
CPIndexSet)dragRows tableColumns:(CPArray)theTableColumns event:(
CPEvent)dragEvent offset:(CGPoint)dragImageOffset
837 return [_browser draggingImageForRowsWithIndexes:dragRows inColumn:[_browser columnOfTableView:self] withEvent:dragEvent offset:dragImageOffset] ||
838 [
super dragImageForRowsWithIndexes:dragRows tableColumns:theTableColumns event:dragEvent offset:dragImageOffset];
841 - (
CPView)dragViewForRowsWithIndexes:(
CPIndexSet)dragRows tableColumns:(CPArray)theTableColumns event:(
CPEvent)dragEvent offset:(CGPoint)dragViewOffset
843 var count = theTableColumns.length;
846 if ([theTableColumns[count] identifier] ===
"Leaf")
847 [theTableColumns removeObject:theTableColumns[count]];
850 return [_browser draggingViewForRowsWithIndexes:dragRows inColumn:[_browser columnOfTableView:self] withEvent:dragEvent offset:dragViewOffset] ||
851 [
super dragViewForRowsWithIndexes:dragRows tableColumns:theTableColumns event:dragEvent offset:dragViewOffset];
858 @implementation _CPBrowserTableDelegate :
CPObject
866 - (unsigned)numberOfRowsInTableView:(
CPTableView)aTableView
868 return [_delegate browser:_browser numberOfChildrenOfItem:_item];
873 if ([column identifier] ===
"Image")
874 return [_delegate browser:_browser imageValueForItem:[
self childAtIndex:row]];
875 else if ([column identifier] ===
"Leaf")
876 return ![_browser isLeafItem:[
self childAtIndex:row]];
878 return [_delegate browser:_browser objectValueForItem:[
self childAtIndex:row]];
881 - (void)_tableViewDoubleClicked:(
CPTableView)aTableView
883 [_browser doDoubleClick:self];
888 var selectedIndexes = [aTableView selectedRowIndexes];
889 [_browser _column:_index clickedRow:[selectedIndexes count] === 1 ? [selectedIndexes firstIndex] : -1];
894 var selectedIndexes = [[aNotification
object] selectedRowIndexes];
895 [_browser selectRowIndexes:selectedIndexes inColumn:_index];
898 - (id)childAtIndex:(CPUInteger)index
900 return [_delegate browser:_browser child:index ofItem:_item];
903 - (BOOL)tableView:(
CPTableView)aTableView acceptDrop:(
id)info row:(CPInteger)row dropOperation:(CPTableViewDropOperation)operation
905 if ([_delegate respondsToSelector:
@selector(browser:acceptDrop:atRow:column:dropOperation:)])
906 return [_delegate browser:_browser acceptDrop:info atRow:row column:_index dropOperation:operation];
911 - (CPDragOperation)tableView:(
CPTableView)aTableView validateDrop:(
id)info proposedRow:(CPInteger)row proposedDropOperation:(CPTableViewDropOperation)operation
913 if ([_delegate respondsToSelector:
@selector(browser:validateDrop:proposedRow:column:dropOperation:)])
914 return [_delegate browser:_browser validateDrop:info proposedRow:row column:_index dropOperation:operation];
921 if ([_delegate respondsToSelector:
@selector(browser:writeRowsWithIndexes:inColumn:toPasteboard:)])
922 return [_delegate browser:_browser writeRowsWithIndexes:rowIndexes inColumn:_index toPasteboard:pboard];
927 - (BOOL)respondsToSelector:(
SEL)aSelector
929 if (aSelector ===
@selector(browser:writeRowsWithIndexes:inColumn:toPasteboard:))
930 return [_delegate respondsToSelector:@selector(browser:writeRowsWithIndexes:inColumn:toPasteboard:)];
932 return [
super respondsToSelector:aSelector];
937 @implementation _CPBrowserLeafView :
CPView
941 CPImage _highlightedBranchImage;
949 - (void)setObjectValue:(
id)aValue
952 [
self setNeedsLayout];
955 - (CGRect)rectForEphemeralSubviewNamed:(
CPString)aName
957 if (aName ===
"image-view")
958 return CGRectInset([
self bounds], 1, 1);
960 return [
super rectForEphemeralSubviewNamed:aName];
965 if (aName ===
"image-view")
966 return [[
CPImageView alloc] initWithFrame:CGRectMakeZero()];
968 return [
super createEphemeralSubviewNamed:aName];
971 - (void)layoutSubviews
973 var imageView = [
self layoutEphemeralSubviewNamed:@"image-view"
974 positioned:CPWindowAbove
975 relativeToEphemeralSubviewNamed:nil],
976 isHighlighted = [
self themeState] & CPThemeStateSelectedDataView;
978 [imageView setImage: _isLeaf ? (isHighlighted ? _highlightedBranchImage : _branchImage) : nil];
979 [imageView setImageScaling:CPImageScaleNone];
982 - (void)encodeWithCoder:(
CPCoder)aCoder
984 [
super encodeWithCoder:aCoder];
986 [aCoder encodeBool:_isLeaf forKey:"_CPBrowserLeafViewIsLeafKey"];
987 [aCoder encodeObject:_branchImage forKey:"_CPBrowserLeafViewBranchImageKey"];
988 [aCoder encodeObject:_highlightedBranchImage forKey:"_CPBrowserLeafViewHighlightedBranchImageKey"];
991 - (id)initWithCoder:(
CPCoder)aCoder
993 if (
self = [super initWithCoder:aCoder])
995 _isLeaf = [aCoder decodeBoolForKey:"_CPBrowserLeafViewIsLeafKey"];
996 _branchImage = [aCoder decodeObjectForKey:"_CPBrowserLeafViewBranchImageKey"];
997 _highlightedBranchImage = [aCoder decodeObjectForKey:"_CPBrowserLeafViewHighlightedBranchImageKey"];
1012 return _doubleAction;
1018 - (void)setDoubleAction:(
SEL)aValue
1020 _doubleAction = aValue;
1026 - (Class)tableViewClass
1028 return _tableViewClass;
1034 - (void)setTableViewClass:(Class)aValue
1036 _tableViewClass = aValue;
1042 - (float)defaultColumnWidth
1044 return _defaultColumnWidth;
1050 - (void)setDefaultColumnWidth:(
float)aValue
1052 _defaultColumnWidth = aValue;