From fd62233960a8a22653e2da15d190a8d9972c308e Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Thu, 10 Sep 2009 17:02:47 -0700 Subject: [PATCH] Cleaned up outline view indentation code, and added parentForItem:. Reviewed by me. --- AppKit/CPOutlineView.j | 106 ++++++++++++----------------------------- AppKit/CPTableView.j | 18 +++---- 2 files changed, 37 insertions(+), 87 deletions(-) diff --git a/AppKit/CPOutlineView.j b/AppKit/CPOutlineView.j index ee4cddac4..1aa53d683 100644 --- a/AppKit/CPOutlineView.j +++ b/AppKit/CPOutlineView.j @@ -244,7 +244,7 @@ var CPOutlineViewDataSource_outlineView_setObjectValue_forTableColumn_byItem_ var itemInfo = _itemInfosForItems[[anItem UID]]; - if (typeof itemInfo === "undefined") + if (!itemInfo) return CPNotFound; return itemInfo.level; @@ -271,35 +271,43 @@ var CPOutlineViewDataSource_outlineView_setObjectValue_forTableColumn_byItem_ return _indentationPerLevel; } +- (id)parentForItem:(id)anItem +{ + if (!anItem) + return nil; + + var itemInfo = _itemInfosForItems[[anItem UID]]; + + if (!itemInfo) + return nil; + + return itemInfo.parent; +} + +- (CGRect)frameOfOutlineDataViewAtColumn:(CPInteger)aColumn row:(CPInteger)aRow +{ + var frame = [super frameOfDataViewAtColumn:aColumn row:aRow], + indentationWidth = [self levelForRow:aRow] * [self indentationPerLevel]; + + frame.origin.x += indentationWidth; + frame.size.width -= indentationWidth; + + return frame; +} + - (void)reloadData { [self reloadItem:nil reloadChildren:YES]; } -- (void)_enqueueReusableDataView:(CPView)aDataView +- (CGRect)frameOfDataViewAtColumn:(CPInteger)aColumn row:(CPInteger)aRow { - if ([aDataView isKindOfClass:[_CPOutlineViewHierarchicalView class]]) - { - [aDataView removeFromSuperview]; - [super _enqueueReusableDataView:[aDataView dataView]]; - } - else - [super _enqueueReusableDataView:aDataView]; -} + var tableColumn = [self tableColumns][aColumn]; -- (CPView)_newDataViewForRow:(CPInteger)aRow tableColumn:(CPTableColumn)aTableColumn -{ - var dataView = [super _newDataViewForRow:aRow tableColumn:aTableColumn]; + if (tableColumn === _outlineTableColumn) + return [self frameOfOutlineDataViewAtColumn:aColumn row:aRow]; - if (aTableColumn !== _outlineTableColumn) - return dataView; - - var hierarchicalView = [[_CPOutlineViewHierarchicalView alloc] init]; - - [hierarchicalView setIndentationWidth:[self levelForRow:aRow] * [self indentationPerLevel]]; - [hierarchicalView setDataView:dataView]; - - return hierarchicalView; + return [super frameOfDataViewAtColumn:aColumn row:aRow]; } @end @@ -436,57 +444,3 @@ var _loadItemInfoForItem = function(/*CPOutlineView*/ anOutlineView, /*id*/ anIt @end -@implementation _CPOutlineViewHierarchicalView : CPView -{ - float _indentationWidth; - CPView _dataView; -} - -- (void)updateDataViewFrame -{ - var size = [self bounds].size; - - [_dataView setFrame:_CGRectMake(_indentationWidth, 0.0, size.width - _indentationWidth, size.height)]; -} - -- (void)setIndentationWidth:(float)aWidth -{ - if (_indentationWidth === aWidth) - return; - - _indentationWidth = aWidth; - - [self updateDataViewFrame]; -} - -- (void)setDataView:(CPView)aDataView -{ - if (_dataView === aDataView) - return; - - [_dataView removeFromSuperview]; - - _dataView = aDataView; - - [self updateDataViewFrame]; - - [self addSubview:_dataView]; -} - -- (CPView)dataView -{ - return _dataView; -} - -- (void)setObjectValue:(id)anObjectValue -{ - [_dataView setObjectValue:anObjectValue]; -} - -- (void)setFrameSize:(CGSize)aSize -{ - [super setFrameSize:aSize]; - [self updateDataViewFrame]; -} - -@end diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 65fc07074..f3724bc5c 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -888,10 +888,10 @@ CPTableViewSolidHorizontalGridLineMask = 1 << 1; return row; } -- (CGRect)frameOfDataViewAtColumn:(CPInteger)aColumnIndex row:(CPInteger)aRowIndex +- (CGRect)frameOfDataViewAtColumn:(CPInteger)aColumn row:(CPInteger)aRow { - var tableColumnRange = _tableColumns[aColumnIndex], - rectOfRow = [self rectOfRow:aRowIndex]; + var tableColumnRange = _tableColumnRanges[aColumn], + rectOfRow = [self rectOfRow:aRow]; return _CGRectMake(tableColumnRange.location, _CGRectGetMinY(rectOfRow), tableColumnRange.length, _CGRectGetHeight(rectOfRow)); } @@ -1291,9 +1291,9 @@ CPTableViewSolidHorizontalGridLineMask = 1 << 1; { var column = columnArray[columnIndex], tableColumn = _tableColumns[column], - tableColumnUID = [tableColumn UID], + tableColumnUID = [tableColumn UID];/*, tableColumnRange = _tableColumnRanges[column]; - +*/ if (!_dataViewsForTableColumns[tableColumnUID]) _dataViewsForTableColumns[tableColumnUID] = []; @@ -1303,13 +1303,9 @@ CPTableViewSolidHorizontalGridLineMask = 1 << 1; for (; rowIndex < rowsCount; ++rowIndex) { var row = rowArray[rowIndex], - dataView = [self _newDataViewForRow:row tableColumn:tableColumn], - rectOfRow = rowRects[row]; + dataView = [self _newDataViewForRow:row tableColumn:tableColumn]; - if (!rectOfRow) - rectOfRow = rowRects[row] = [self rectOfRow:row]; - - [dataView setFrame:_CGRectMake(tableColumnRange.location, _CGRectGetMinY(rectOfRow), tableColumnRange.length, _CGRectGetHeight(rectOfRow))]; + [dataView setFrame:[self frameOfDataViewAtColumn:column row:row]]; [dataView setObjectValue:[self _objectValueForTableColumn:tableColumn row:row]]; if ([dataView superview] !== self)