Skip to content

Instantly share code, notes, and snippets.

@hammerdr
Created August 30, 2010 05:02
Show Gist options
  • Select an option

  • Save hammerdr/557033 to your computer and use it in GitHub Desktop.

Select an option

Save hammerdr/557033 to your computer and use it in GitHub Desktop.
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