Created
August 30, 2010 05:02
-
-
Save hammerdr/557033 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j | |
| index 42e0632..7bf9d18 100644 | |
| --- a/AppKit/CPTableView.j | |
| +++ b/AppKit/CPTableView.j | |
| @@ -217,6 +217,10 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; | |
| CPTableColumn _draggedColumn; | |
| CPArray _differedColumnDataToRemove; | |
| + | |
| + CPArray _layedOutDataViews; | |
| + int _proposedDropRow; | |
| + BOOL _new; | |
| } | |
| + (CPString)themeClass | |
| @@ -236,6 +240,8 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; | |
| if (self) | |
| { | |
| + _new = true; | |
| + | |
| //Configuring Behavior | |
| _allowsColumnReordering = YES; | |
| _allowsColumnResizing = YES; | |
| @@ -339,6 +345,8 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; | |
| _sourceListInactiveBottomLineColor = [CPColor colorWithCalibratedRed:(150.0/255.0) green:(161.0/255.0) blue:(183.0/255.0) alpha:1.0];*/ | |
| _differedColumnDataToRemove = [ ]; | |
| _implementsCustomDrawRow = [self implementsSelector:@selector(drawRow:clipRect:)]; | |
| + | |
| + _layedOutDataViews = []; | |
| } | |
| /*! | |
| @@ -2303,7 +2311,8 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; | |
| var rowArray = [], | |
| rowRects = [], | |
| - columnArray = []; | |
| + columnArray = [], | |
| + _layedOutDataViews = []; | |
| [rows getIndexes:rowArray maxCount:-1 inIndexRange:nil]; | |
| [columns getIndexes:columnArray maxCount:-1 inIndexRange:nil]; | |
| @@ -2332,10 +2341,14 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; | |
| var isColumnSelected = [_selectedColumnIndexes containsIndex:column]; | |
| for (; rowIndex < rowsCount; ++rowIndex) | |
| { | |
| + if(!_layedOutDataViews[rowIndex]) _layedOutDataViews[rowIndex] = []; | |
| + | |
| var row = rowArray[rowIndex], | |
| dataView = [self _newDataViewForRow:row tableColumn:tableColumn], | |
| isButton = [dataView isKindOfClass:[CPButton class]], | |
| isTextField = [dataView isKindOfClass:[CPTextField class]]; | |
| + | |
| + _layedOutDataViews[rowIndex][columnIndex] = dataView; | |
| [dataView setFrame:[self frameOfDataViewAtColumn:column row:row]]; | |
| [dataView setObjectValue:[self _objectValueForTableColumn:tableColumn row:row]]; | |
| @@ -3163,6 +3176,8 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; | |
| if(_retargetedDropRow !== nil) | |
| row = _retargetedDropRow; | |
| + if(_proposedDropRow !== nil && _proposedDropRow === row) | |
| + return; | |
| if (dropOperation === CPTableViewDropOn && row >= [self numberOfRows]) | |
| row = [self numberOfRows] - 1; | |
| @@ -3172,10 +3187,9 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; | |
| if (row === -1) | |
| rect = exposedClipRect; | |
| - else if (dropOperation === CPTableViewDropAbove) | |
| + else if (dropOperation === CPTableViewDropAbove) { | |
| rect = [self _rectForDropHighlightViewBetweenUpperRow:row - 1 andLowerRow:row offset:location]; | |
| - | |
| - else | |
| + } else | |
| rect = [self _rectForDropHighlightViewOnRow:row]; | |
| [_dropOperationFeedbackView setDropOperation:row !== -1 ? dropOperation : CPDragOperationNone]; | |
| @@ -3184,6 +3198,51 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; | |
| [_dropOperationFeedbackView setCurrentRow:row]; | |
| [self addSubview:_dropOperationFeedbackView]; | |
| + if(!_new) { | |
| + | |
| + for(var i = _proposedDropRow, n = row; i < n; i++) | |
| + { | |
| + for(var j = 0, m = _layedOutDataViews[i].length; j < m; j++) | |
| + { | |
| + var x = function(view, y) { | |
| + var z = function() { | |
| + var aFrame = [view frame]; | |
| + aFrame.origin.y -= 2; | |
| + y -= 2; | |
| + [view setFrame:aFrame]; | |
| + if(y > 0) | |
| + [CPTimer scheduledTimerWithTimeInterval:0.01 callback:z repeats:NO]; | |
| + } | |
| + [CPTimer scheduledTimerWithTimeInterval:0.01 callback:z repeats:NO]; | |
| + } | |
| + x(_layedOutDataViews[i][j], _rowHeight); | |
| + } | |
| + } | |
| + } | |
| + else | |
| + _new = false; | |
| + | |
| + for(var i = row, n = _proposedDropRow || _layedOutDataViews.length; i < n; i++) | |
| + { | |
| + for(var j = 0, m = _layedOutDataViews[i].length; j < m; j++) | |
| + { | |
| + var x = function(view, y) { | |
| + var z = function() { | |
| + var aFrame = [view frame]; | |
| + aFrame.origin.y += 2; | |
| + y += 2; | |
| + [view setFrame:aFrame]; | |
| + if(y < _rowHeight) | |
| + [CPTimer scheduledTimerWithTimeInterval:0.01 callback:z repeats:NO]; | |
| + } | |
| + [CPTimer scheduledTimerWithTimeInterval:0.01 callback:z repeats:NO]; | |
| + } | |
| + x(_layedOutDataViews[i][j], 0); | |
| + } | |
| + } | |
| + | |
| + _proposedDropRow = row; | |
| + | |
| return dragOperation; | |
| } | |
| @@ -3219,6 +3278,8 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; | |
| */ | |
| - (void)concludeDragOperation:(id)sender | |
| { | |
| + _new = true; | |
| + _proposedDropRow = nil; | |
| [self reloadData]; | |
| } | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment