Merge remote-tracking branch 'upstream/master' into CPTableView-issue2310

This commit is contained in:
cacaodev
2015-02-15 18:44:32 +01:00
4 changed files with 102 additions and 92 deletions
+17 -17
View File
@@ -21,11 +21,12 @@
*/
@import "CPTableColumn.j"
@import "CPTableView.j"
@import "CPView.j"
@import "CPCursor.j"
@import "_CPImageAndTextView.j"
@class CPTableView
@global CPApp
@implementation _CPTableColumnHeaderView : CPView
@@ -123,7 +124,7 @@
- (CPFont)font
{
return [self currentValueForThemeAttribute:@"font"]
return [self currentValueForThemeAttribute:@"font"];
}
- (void)setAlignment:(CPTextAlignment)alignment
@@ -133,7 +134,7 @@
- (CPTextAlignment)alignment
{
return [self currentValueForThemeAttribute:@"text-alignment"]
return [self currentValueForThemeAttribute:@"text-alignment"];
}
- (void)setLineBreakMode:(CPLineBreakMode)mode
@@ -143,7 +144,7 @@
- (CPLineBreakMode)lineBreakMode
{
return [self currentValueForThemeAttribute:@"line-break-mode"]
return [self currentValueForThemeAttribute:@"line-break-mode"];
}
- (void)setTextColor:(CPColor)aColor
@@ -153,7 +154,7 @@
- (CPColor)textColor
{
return [self currentValueForThemeAttribute:@"text-color"]
return [self currentValueForThemeAttribute:@"text-color"];
}
- (void)setTextShadowColor:(CPColor)aColor
@@ -163,20 +164,20 @@
- (CPColor)textShadowColor
{
return [self currentValueForThemeAttribute:@"text-shadow-color"]
return [self currentValueForThemeAttribute:@"text-shadow-color"];
}
- (void)_setIndicatorImage:(CPImage)anImage
{
if (anImage)
{
[_textField setImage:anImage];
[_textField setImagePosition:CPImageRight];
}
else
{
[_textField setImagePosition:CPNoImage];
}
if (anImage)
{
[_textField setImage:anImage];
[_textField setImagePosition:CPImageRight];
}
else
{
[_textField setImagePosition:CPNoImage];
}
}
- (CPImage)_indicatorImage
@@ -209,7 +210,7 @@
var _CPTableColumnHeaderViewStringValueKey = @"_CPTableColumnHeaderViewStringValueKey",
_CPTableColumnHeaderViewFontKey = @"_CPTableColumnHeaderViewFontKey",
_CPTableColumnHeaderViewImageKey = @"_CPTableColumnHeaderViewImageKey";
_CPTableColumnHeaderViewImageKey = @"_CPTableColumnHeaderViewImageKey",
_CPTableColumnHeaderViewIsDraggingKey = @"_CPTableColumnHeaderViewIsDraggingKey";
@implementation _CPTableColumnHeaderView (CPCoding)
@@ -222,7 +223,6 @@ var _CPTableColumnHeaderViewStringValueKey = @"_CPTableColumnHeaderViewStringVal
[self _setIndicatorImage:[aCoder decodeObjectForKey:_CPTableColumnHeaderViewImageKey]];
[self setStringValue:[aCoder decodeObjectForKey:_CPTableColumnHeaderViewStringValueKey]];
[self setFont:[aCoder decodeObjectForKey:_CPTableColumnHeaderViewFontKey]];
[self setFont:[aCoder decodeObjectForKey:_CPTableColumnHeaderViewFontKey]];
}
return self;
+69 -71
View File
@@ -321,15 +321,15 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5;
SEL _viewForTableColumnRowSelector;
CPInteger _draggedColumnIndex;
BOOL _draggedColumnIsSelected;
BOOL _needsDifferedTableColumnRemove;
CPInteger _draggedColumnIndex;
BOOL _draggedColumnIsSelected;
BOOL _needsDifferedTableColumnRemove;
CPArray _differedColumnDataToRemove;
Function _BlockDeselectView;
Function _BlockSelectView;
Function _BlockDeselectView;
Function _BlockSelectView;
CPView _observedClipView;
CPView _observedClipView;
}
/*!
@@ -1445,7 +1445,7 @@ NOT YET IMPLEMENTED
if (_selectionHighlightStyle !== CPTableViewSelectionHighlightStyleNone)
[self _enumerateViewsInRows:newRows columns:_exposedColumns usingBlock:_BlockSelectView];
}
}
/*!
@ignore
@@ -1453,7 +1453,7 @@ NOT YET IMPLEMENTED
- (void)_updateHighlightWithOldColumns:(CPIndexSet)oldColumns newColumns:(CPIndexSet)newColumns
{
var blockDeselectHeader = function(column, stop)
{
{
var headerView = [_tableColumns[column] headerView];
[headerView unsetThemeState:CPThemeStateSelected];
};
@@ -1464,15 +1464,15 @@ NOT YET IMPLEMENTED
[oldColumns enumerateIndexesUsingBlock:blockDeselectHeader];
if (_selectionHighlightStyle !== CPTableViewSelectionHighlightStyleNone)
{
{
[self _enumerateViewsInRows:_exposedRows columns:newColumns usingBlock:_BlockSelectView];
[newColumns enumerateIndexesUsingBlock:function(column, stop)
{
{
var headerView = [_tableColumns[column] headerView];
[headerView setThemeState:CPThemeStateSelected];
}];
}
}
}
}
/*!
Returns the index of the last selected column.
@@ -1644,7 +1644,7 @@ NOT YET IMPLEMENTED
if (_dataSource)
CPLog(@"no content binding established and data source " + [_dataSource description] + " does not implement numberOfRowsInTableView:");
numberOfRows = 0;
}
}
return numberOfRows;
}
@@ -2095,45 +2095,45 @@ NOT YET IMPLEMENTED
if (aView && [aView isKindOfClass:[CPView class]] && ![aView isKindOfClass:[CPTableView class]])
{
var cellView = aView,
contentView = [[self window] contentView],
var cellView = aView,
contentView = [[self window] contentView],
found = NO,
max_rec = 100;
max_rec = 100;
while (max_rec--)
{
if (!cellView || cellView === contentView)
{
found = NO;
break;
}
else
{
var superview = [cellView superview];
if ([superview isKindOfClass:[CPTableView class]])
while (max_rec--)
{
found = YES;
break;
if (!cellView || cellView === contentView)
{
found = NO;
break;
}
else
{
var superview = [cellView superview];
if ([superview isKindOfClass:[CPTableView class]])
{
found = YES;
break;
}
cellView = superview;
}
}
cellView = superview;
}
}
if (found)
{
{
[self _enumerateViewsInRows:_exposedRows columns:_exposedColumns usingBlock:function(view, row, column, stop)
{
if (view === cellView)
{
{
columnResult = column;
rowResult = row;
stop(YES);
}
}
}];
}
}
}
if (columnRef)
@@ -3465,7 +3465,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
if (columnIdx !== CPNotFound)
[removeIndexes addIndex:columnIdx];
}
}
var rowIndexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self numberOfRows])];
[self _unloadDataViewsInRows:rowIndexes columns:removeIndexes];
@@ -3504,6 +3504,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
[self _resignEditedView];
var tableColumns = [_tableColumns objectsAtIndexes:columnIndexes];
[self _enumerateViewsInRows:rowIndexes tableColumns:tableColumns usingBlock:function(dataView, row, tableColumn, stop)
{
var dataViewsForRows = _dataViewsForRows[row],
@@ -3511,9 +3512,10 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
delete (dataViewsForRows[tableColumnUID]);
[self _enqueueReusableDataView:dataView];
[self _sendDelegateWillRemoveView:dataView forTableColumn:tableColumn row:row];
[self _enqueueReusableDataView:dataView];
}];
}
}
/*!
@ignore
@@ -3555,7 +3557,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
}
- (CPView)preparedViewAtColumn:(CPInteger)column row:(CPInteger)row
{
{
return [self _preparedViewAtColumn:column row:row isRowSelected:[self isRowSelected:row]];
}
@@ -3565,43 +3567,41 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
tableColumnUID = [tableColumn UID],
dataView = [self _newDataViewForRow:row tableColumn:tableColumn];
[dataView setFrame:[self frameOfDataViewAtColumn:column row:row]];
[dataView setFrame:[self frameOfDataViewAtColumn:column row:row]];
[self _setObjectValueForTableColumn:tableColumn row:row forView:dataView];
[self _setObjectValueForTableColumn:tableColumn row:row forView:dataView];
if (_selectionHighlightStyle !== CPTableViewSelectionHighlightStyleNone &&
(isRowSelected || [self isColumnSelected:column]))
if (_selectionHighlightStyle !== CPTableViewSelectionHighlightStyleNone && (isRowSelected || [self isColumnSelected:column]))
_BlockSelectView(dataView, row, column);
else
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_)
{
{
if ([_delegate tableView:self isGroupRow:row])
{
[_groupRows addIndex:row];
[dataView setThemeState:CPThemeStateGroupRow];
}
else
{
[_groupRows removeIndexesInRange:CPMakeRange(row, 1)];
[dataView unsetThemeState:CPThemeStateGroupRow];
}
[_groupRows addIndex:row];
[dataView setThemeState:CPThemeStateGroupRow];
}
else
{
[_groupRows removeIndexesInRange:CPMakeRange(row, 1)];
[dataView unsetThemeState:CPThemeStateGroupRow];
}
[self setNeedsDisplay:YES];
[self setNeedsDisplay:YES];
}
if (_implementedDelegateMethods & CPTableViewDelegate_tableView_willDisplayView_forTableColumn_row_)
[_delegate tableView:self willDisplayView:dataView forTableColumn:tableColumn row:row];
[self _sendDelegateWillDisplayView:dataView forTableColumn:tableColumn row:row];
return dataView;
}
}
- (void)_setObjectValueForTableColumn:(CPTableColumn)aTableColumn row:(CPInteger)aRow forView:(CPView)aDataView
{
{
[self _setObjectValueForTableColumn:aTableColumn row:aRow forView:aDataView useCache:!_invalidateObjectValuesCache];
}
}
- (void)_setObjectValueForTableColumn:(CPTableColumn)aTableColumn row:(CPInteger)aRow forView:(CPView)aDataView useCache:(BOOL)useCache
{
@@ -3636,7 +3636,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
{
[view setFrame:[self frameOfDataViewAtColumn:column row:row]];
}];
}
}
/*!
@ignore
@@ -4759,10 +4759,10 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
if (_retargetedDropRow !== nil)
row = _retargetedDropRow;
if (_retargetedDropOperation !== nil)
dropOperation = _retargetedDropOperation;
if (dropOperation === CPTableViewDropOn && row >= numberOfRows)
row = numberOfRows - 1;
@@ -4770,10 +4770,8 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
if (row === -1)
rect = [self exposedRect];
else if (dropOperation === CPTableViewDropAbove)
rect = [self _rectForDropHighlightViewBetweenUpperRow:row - 1 andLowerRow:row offset:location];
else
rect = [self _rectForDropHighlightViewOnRow:row];
@@ -5151,7 +5149,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
[self _commitDataViewObjectValue:textField];
}
else
[textField setBezeled:NO];
[textField setBezeled:NO];
[self _resignFirstResponderWithoutSendingAction:textField];
}
@@ -5657,7 +5655,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
- (void)_sendDelegateDidClickTableColumn:(CPInteger)column
{
if (_implementedDelegateMethods & CPTableViewDelegate_tableView_didClickTableColumn_)
[_delegate tableView:self didClickTableColumn:_tableColumns[column]];
[_delegate tableView:self didClickTableColumn:_tableColumns[column]];
}
/*!
@@ -5667,7 +5665,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
- (void)_sendDelegateDidDragTableColumn:(CPInteger)column
{
if (_implementedDelegateMethods & CPTableViewDelegate_tableView_didDragTableColumn_)
[_delegate tableView:self didDragTableColumn:_tableColumns[column]];
[_delegate tableView:self didDragTableColumn:_tableColumns[column]];
}
/*!
@@ -5677,7 +5675,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
- (void)_sendDelegateMouseDownInHeaderOfTableColumn:(CPInteger)column
{
if (_implementedDelegateMethods & CPTableViewDelegate_tableView_mouseDownInHeaderOfTableColumn_)
[_delegate tableView:self mouseDownInHeaderOfTableColumn:_tableColumns[column]];
[_delegate tableView:self mouseDownInHeaderOfTableColumn:_tableColumns[column]];
}
/*
@@ -6273,7 +6271,7 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey",
//[tableView drawBackgroundInClipRect:bounds];
if (tableView._draggedColumnIsSelected)
{
{
CGContextSetFillColor(context, [tableView selectionHighlightColor]);
CGContextFillRect(context, bounds);
}
+16 -2
View File
@@ -181,7 +181,14 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4,
return;
_isObservingFrame = YES;
[_targetView addObserver:self forKeyPath:@"frame" options:0 context:nil];
var view = _targetView;
while (view)
{
[view addObserver:self forKeyPath:@"frame" options:0 context:nil];
view = [view superview];
}
}
/*!
@@ -194,7 +201,14 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4,
return;
_isObservingFrame = NO;
[_targetView removeObserver:self forKeyPath:@"frame"];
var view = _targetView;
while (view)
{
[view removeObserver:self forKeyPath:@"frame"];
view = [view superview];
}
}
/*!
-2
View File
@@ -43,8 +43,6 @@
_bounds.size.height = height;
_frame.size.height = height;
}
_drawsColumnLines = YES;
}
return self;