mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-08-25 04:57:03 +00:00
Merge remote-tracking branch 'upstream/master' into CPTableView-issue2310
This commit is contained in:
+17
-17
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
|
||||
@@ -43,8 +43,6 @@
|
||||
_bounds.size.height = height;
|
||||
_frame.size.height = height;
|
||||
}
|
||||
|
||||
_drawsColumnLines = YES;
|
||||
}
|
||||
|
||||
return self;
|
||||
|
||||
Reference in New Issue
Block a user