Skip to content

Commit

Permalink
Merge pull request #2496 from cacaodev/cptabview-initial-selection
Browse files Browse the repository at this point in the history
Fixed: CPTabView should not allow empty selection
  • Loading branch information
mrcarlberg committed Oct 21, 2016
2 parents 0eb196e + 095864d commit c4bf67d
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
13 changes: 12 additions & 1 deletion AppKit/CPTabView.j
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -136,13 +136,19 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,


- (void)_insertTabViewItems:(CPArray)tabViewItems atIndexes:(CPIndexSet)indexes - (void)_insertTabViewItems:(CPArray)tabViewItems atIndexes:(CPIndexSet)indexes
{ {
var prevItemsCount = [self numberOfTabViewItems];

[_tabs insertSegments:tabViewItems atIndexes:indexes]; [_tabs insertSegments:tabViewItems atIndexes:indexes];
[tabViewItems makeObjectsPerformSelector:@selector(_setTabView:) withObject:self]; [tabViewItems makeObjectsPerformSelector:@selector(_setTabView:) withObject:self];


[self tileWithChangedItem:[tabViewItems firstObject]]; [self tileWithChangedItem:[tabViewItems firstObject]];
[self _reverseSetContent]; [self _reverseSetContent];


[self _sendDelegateTabViewDidChangeNumberOfTabViewItems]; [self _sendDelegateTabViewDidChangeNumberOfTabViewItems];

// Do not allow empty selection if selection bindings are not enabled.
if (prevItemsCount == 0 && [self numberOfTabViewItems] > 0 && ![self _isSelectionBinded])
[self _selectTabViewItemAtIndex:0];
} }


/*! /*!
Expand All @@ -169,7 +175,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
- (void)_didRemoveTabViewItem:(CPTabViewItem)aTabViewItem atIndex:(CPInteger)idx - (void)_didRemoveTabViewItem:(CPTabViewItem)aTabViewItem atIndex:(CPInteger)idx
{ {
// If the selection is managed by bindings, let the binder do that. // If the selection is managed by bindings, let the binder do that.
if ([self binderForBinding:CPSelectionIndexesBinding] || [self binderForBinding:CPSelectedIndexBinding]) if ([self _isSelectionBinded])
return; return;


if (_selectedTabViewItem == aTabViewItem) if (_selectedTabViewItem == aTabViewItem)
Expand Down Expand Up @@ -615,6 +621,11 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
return [cls getBinding:aBinding forObject:self]; return [cls getBinding:aBinding forObject:self];
} }


- (BOOL)_isSelectionBinded
{
return [self binderForBinding:CPSelectionIndexesBinding] || [self binderForBinding:CPSelectedIndexBinding];
}

- (void)setItems:(CPArray)tabViewItems - (void)setItems:(CPArray)tabViewItems
{ {
if ([tabViewItems isEqualToArray:[_tabs segments]]) if ([tabViewItems isEqualToArray:[_tabs segments]])
Expand Down
12 changes: 12 additions & 0 deletions Tests/AppKit/CPTabViewTest.j
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -138,4 +138,16 @@
[self assert:[_tabView selectedTabViewItem] equals:_tabItem2]; [self assert:[_tabView selectedTabViewItem] equals:_tabItem2];
} }


- (void)testTabViewItemSelectionNotEmpty
{
// after insertion from empty and no explicit selection.
[self assert:[_tabView numberOfTabViewItems] equals:2];
[self assert:[_tabView selectedTabViewItem] equals:_tabItem1];

// Removes selected Item.
[_tabView removeTabViewItem:_tabItem1];
[self assert:[_tabView numberOfTabViewItems] equals:1];
[self assert:[_tabView selectedTabViewItem] equals:_tabItem2];
}

@end @end

0 comments on commit c4bf67d

Please sign in to comment.