From c6942daf74f71ad6be990c3259dc6020f4cbc0e2 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 6 Feb 2015 17:11:06 -0800 Subject: [PATCH 1/5] Fixed: compilation warning for NSTableHeaderView.j Previously, there was a warning when compiling the file NSTableHeaderView.j --- Tools/nib2cib/NSTableHeaderView.j | 2 -- 1 file changed, 2 deletions(-) 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; From c5db6776631c58c1f7a746bb2ddd5ed74de93a43 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sat, 7 Feb 2015 20:17:19 +0100 Subject: [PATCH 2/5] Style, typos, tabs. --- AppKit/CPTableHeaderView.j | 31 +++++---- AppKit/CPTableView.j | 133 ++++++++++++++++++------------------- 2 files changed, 80 insertions(+), 84 deletions(-) diff --git a/AppKit/CPTableHeaderView.j b/AppKit/CPTableHeaderView.j index a20f50561..87f58cded 100644 --- a/AppKit/CPTableHeaderView.j +++ b/AppKit/CPTableHeaderView.j @@ -123,7 +123,7 @@ - (CPFont)font { - return [self currentValueForThemeAttribute:@"font"] + return [self currentValueForThemeAttribute:@"font"]; } - (void)setAlignment:(CPTextAlignment)alignment @@ -133,7 +133,7 @@ - (CPTextAlignment)alignment { - return [self currentValueForThemeAttribute:@"text-alignment"] + return [self currentValueForThemeAttribute:@"text-alignment"]; } - (void)setLineBreakMode:(CPLineBreakMode)mode @@ -143,7 +143,7 @@ - (CPLineBreakMode)lineBreakMode { - return [self currentValueForThemeAttribute:@"line-break-mode"] + return [self currentValueForThemeAttribute:@"line-break-mode"]; } - (void)setTextColor:(CPColor)aColor @@ -153,7 +153,7 @@ - (CPColor)textColor { - return [self currentValueForThemeAttribute:@"text-color"] + return [self currentValueForThemeAttribute:@"text-color"]; } - (void)setTextShadowColor:(CPColor)aColor @@ -163,20 +163,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 +209,7 @@ var _CPTableColumnHeaderViewStringValueKey = @"_CPTableColumnHeaderViewStringValueKey", _CPTableColumnHeaderViewFontKey = @"_CPTableColumnHeaderViewFontKey", - _CPTableColumnHeaderViewImageKey = @"_CPTableColumnHeaderViewImageKey"; + _CPTableColumnHeaderViewImageKey = @"_CPTableColumnHeaderViewImageKey", _CPTableColumnHeaderViewIsDraggingKey = @"_CPTableColumnHeaderViewIsDraggingKey"; @implementation _CPTableColumnHeaderView (CPCoding) @@ -222,7 +222,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 d95072415..431bc7513 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]; @@ -3513,7 +3513,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad [self _enqueueReusableDataView:dataView]; }]; - } +} /*! @ignore @@ -3555,7 +3555,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 +3565,42 @@ 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]; 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 +3635,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad { [view setFrame:[self frameOfDataViewAtColumn:column row:row]]; }]; - } +} /*! @ignore @@ -4759,10 +4758,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 +4769,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]; @@ -5150,7 +5147,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]; } @@ -5656,7 +5653,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]]; } /*! @@ -5666,7 +5663,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]]; } /*! @@ -5676,7 +5673,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]]; } /* @@ -6272,7 +6269,7 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", //[tableView drawBackgroundInClipRect:bounds]; if (tableView._draggedColumnIsSelected) -{ + { CGContextSetFillColor(context, [tableView selectionHighlightColor]); CGContextFillRect(context, bounds); } From cae78622f65be763600b8742de4493d61f11dfe5 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Sun, 8 Feb 2015 22:36:25 -0800 Subject: [PATCH 3/5] Fixed comiling warning for the class CPTableHeaderView --- AppKit/CPTableHeaderView.j | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/AppKit/CPTableHeaderView.j b/AppKit/CPTableHeaderView.j index a20f50561..b4065f22d 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 From 6b235ab083156c5fdd82689d02199a3f9e75bd7a Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 10 Feb 2015 22:58:03 -0800 Subject: [PATCH 4/5] Fixed: CPPopover position does not update each time Previously, when the frame of a superview of the targetedView would update, the popover did not update its position. Now it does by observing each frame of each superviews of the targetedView. --- AppKit/_CPPopoverWindow.j | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) 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]; + } } /*! From bf05155c5e263a0bf93c0ae9615d5f829eb6f625 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 12 Feb 2015 16:01:38 -0800 Subject: [PATCH 5/5] [FIXED] Merge issues MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit During a previous merge the call to ..willDisplayView:.. and …willRemoveView:.. for delegate methods were removed from CPTableView and CPOutlineView --- AppKit/CPTableView.j | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 431bc7513..db922aa75 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -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,7 +3512,8 @@ 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]; }]; } @@ -3591,8 +3593,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad [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; }