diff --git a/AppKit/CPTableHeaderView.j b/AppKit/CPTableHeaderView.j index a20f50561..8badaef34 100644 --- a/AppKit/CPTableHeaderView.j +++ b/AppKit/CPTableHeaderView.j @@ -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; diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index eb7596e1a..d1e0a6110 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -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); } diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 27d160e17..e836fea73 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -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]; + } } /*! diff --git a/Tools/nib2cib/NSTableHeaderView.j b/Tools/nib2cib/NSTableHeaderView.j index 48b0eab71..3e245d572 100644 --- a/Tools/nib2cib/NSTableHeaderView.j +++ b/Tools/nib2cib/NSTableHeaderView.j @@ -43,8 +43,6 @@ _bounds.size.height = height; _frame.size.height = height; } - - _drawsColumnLines = YES; } return self;