Cleaned up outline view indentation code, and added parentForItem:.

Reviewed by me.
This commit is contained in:
Francisco Ryan Tolmasky I
2009-09-10 17:02:47 -07:00
parent 5b0876b7ed
commit fd62233960
2 changed files with 37 additions and 87 deletions
+30 -76
View File
@@ -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
+7 -11
View File
@@ -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)