From e156badef62677e6155a487f20223f669e100107 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Thu, 25 Sep 2014 23:14:54 +0200 Subject: [PATCH] FIXED: After a column removal, columns were not at the right place and non exposed views from the removed column were not removed --- AppKit/CPTableView.j | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 49015bd8e..0d16a5ba7 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -320,6 +320,7 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; CPInteger _draggedColumnIndex; BOOL _draggedColumnIsSelected; + BOOL _needsDifferedTableColumnRemove; CPArray _differedColumnDataToRemove; Function _BlockDeselectView; @@ -474,6 +475,7 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; _sourceListInactiveTopLineColor = [CPColor colorWithCalibratedRed:(173.0/255.0) green:(187.0/255.0) blue:(209.0/255.0) alpha:1.0]; _sourceListInactiveBottomLineColor = [CPColor colorWithCalibratedRed:(150.0/255.0) green:(161.0/255.0) blue:(183.0/255.0) alpha:1.0];*/ _differedColumnDataToRemove = []; + _needsDifferedTableColumnRemove = NO; _implementsCustomDrawRow = [self implementsSelector:@selector(drawRow:clipRect:)]; if (!_sortDescriptors) @@ -1125,6 +1127,7 @@ NOT YET IMPLEMENTED // we defer the actual removal until the end of the runloop in order to keep a reference to the column. [_differedColumnDataToRemove addObject:{"column":aTableColumn, "shouldBeHidden": [aTableColumn isHidden]}]; + _needsDifferedTableColumnRemove = YES; [aTableColumn setHidden:YES]; [aTableColumn setTableView:nil]; @@ -3479,11 +3482,11 @@ 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 - var removeCount = [_differedColumnDataToRemove count]; - if (removeCount) + if (_needsDifferedTableColumnRemove) { - var removeIndexes = [CPIndexSet indexSet]; + var removeCount = [_differedColumnDataToRemove count], + removeIndexes = [CPIndexSet indexSet]; for (var i = 0; i < removeCount; i++) { @@ -3495,12 +3498,16 @@ Your delegate can implement this method to avoid subclassing the tableview to ad [removeIndexes addIndex:columnIdx]; } - // FIXME: do we also need to remove non exposed rows that may stay in the cache ? - [self _unloadDataViewsInRows:_exposedRows columns:removeIndexes]; + var rowIndexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self numberOfRows])]; + [self _unloadDataViewsInRows:rowIndexes columns:removeIndexes]; [_tableColumns removeObjectsAtIndexes:removeIndexes]; + _dirtyTableColumnRangeIndex = 0; + [self _recalculateTableColumnRanges]; + [_differedColumnDataToRemove removeAllObjects]; + _needsDifferedTableColumnRemove = NO; } // Now clear all the leftovers