Code style

Rename _numberOfRowsDidChange -> _dataViewsNeedReloadAfterContentChange.
Subclasses use this method to tell if a full view reloading is needed
when calling -reloadData.
Currently CPOutlineView returns YES - this is the previous behavior.

Added private - (void)_reloadDataForRowIndexes:(CPIndexSet)rowIndexes
columnIndexes:(CPIndexSet)columnIndexes
This is the internal method for reloading objectValues only.
This commit is contained in:
cacaodev
2014-04-19 09:10:51 +02:00
parent 57408d18ae
commit 45a59f9aec
2 changed files with 36 additions and 17 deletions
+11 -5
View File
@@ -337,7 +337,7 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0,
if ([_outlineViewDataSource respondsToSelector:@selector(outlineView:sortDescriptorsDidChange:)])
_implementedOutlineViewDataSourceMethods |= CPOutlineViewDataSource_outlineView_sortDescriptorsDidChange_;
[self _reloadDataViews];
[self reloadData];
}
/*!
@@ -630,7 +630,7 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0,
_outlineTableColumn = aTableColumn;
// FIXME: efficiency.
[self _reloadDataViews];
[self reloadData];
}
/*!
@@ -689,7 +689,7 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0,
_indentationPerLevel = anIndentationWidth;
// FIXME: efficiency!!!!
[self _reloadDataViews];
[self reloadData];
}
/*!
@@ -717,7 +717,7 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0,
_indentationMarkerFollowsDataView = indentationMarkerShouldFollowDataView;
// !!!!
[self _reloadDataViews];
[self reloadData];
}
/*!
@@ -1091,7 +1091,13 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0,
_disclosureControlQueue = [];
// FIXME: really?
[self _reloadDataViews];
[self reloadData];
}
- (BOOL)_dataViewsNeedReloadAfterContentChange
{
// Alternatively, check if the current tree of views mactches the current tree in the data source.
return YES;
}
/*!
+25 -12
View File
@@ -614,6 +614,7 @@ NOT YET IMPLEMENTED
*/
- (void)reloadData
{
// Empty the data cache.
_objectValues = { };
[self reloadDataForRowIndexes:_exposedRows columnIndexes:_exposedColumns];
}
@@ -625,20 +626,28 @@ NOT YET IMPLEMENTED
*/
- (void)reloadDataForRowIndexes:(CPIndexSet)rowIndexes columnIndexes:(CPIndexSet)columnIndexes
{
if ([self _numberOfRowsDidChange])
if ([self _dataViewsNeedReloadAfterContentChange])
[self _reloadDataViewsImmediately];
else
[self _enumerateViewsInRows:rowIndexes columns:columnIndexes usingBlock:function(view, row, column, stop)
{
[self _setObjectValueForTableColumn:_tableColumns[column] row:row forView:view useCache:NO];
}];
[self _reloadDataForRowIndexes:rowIndexes columnIndexes:columnIndexes];
}
- (BOOL)_numberOfRowsDidChange
// Reloads the data, not the views
- (void)_reloadDataForRowIndexes:(CPIndexSet)rowIndexes columnIndexes:(CPIndexSet)columnIndexes
{
[self _enumerateViewsInRows:rowIndexes columns:columnIndexes usingBlock:function(view, row, column, stop)
{
var tableColumn = [_tableColumns objectAtIndex:column];
[self _setObjectValueForTableColumn:tableColumn row:row forView:view useCache:NO];
}];
}
- (BOOL)_dataViewsNeedReloadAfterContentChange
{
return (_numberOfRows !== [self _numberOfRows]);
}
// Reloads the views AND the data
- (void)_reloadDataViews
{
//if (!_dataSource)
@@ -3484,11 +3493,13 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
[self setNeedsDisplay:YES];
// if we have any columns to remove do that here
if ([_differedColumnDataToRemove count])
var removeCount = [_differedColumnDataToRemove count];
if (removeCount)
{
var removeIndexes = [CPIndexSet indexSet];
for (var i = 0; i < _differedColumnDataToRemove.length; i++)
for (var i = 0; i < removeCount; i++)
{
var data = _differedColumnDataToRemove[i],
tableColumn = data.column,
@@ -3497,7 +3508,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
if (columnIdx !== CPNotFound)
[removeIndexes addIndex:columnIdx];
}
// FIXME: do we also need to remove non exposed rows that may stay in the cache ?
[self _unloadDataViewsInRows:_exposedRows columns:removeIndexes];
[_differedColumnDataToRemove removeAllObjects];
}
@@ -3592,9 +3603,11 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
[self _setObjectValueForTableColumn:tableColumn row:row forView:dataView];
var applyThemeStateBlock = (_selectionHighlightStyle !== CPTableViewSelectionHighlightStyleNone && (isRowSelected || [self isColumnSelected:column])) ? _BlockSelectView : _BlockDeselectView;
applyThemeStateBlock(dataView, row, column);
if (_selectionHighlightStyle !== CPTableViewSelectionHighlightStyleNone &&
(isRowSelected || [self isColumnSelected:column]))
_BlockSelectView(dataView, row, column);
else
_BlockDeselectView(dataView, row, column);
// FIX ME: for performance reasons we might consider diverging from cocoa and moving this to the reloadData method
if (_implementedDelegateMethods & CPTableViewDelegate_tableView_isGroupRow_)