FIXED: CPTabView -insertTabViewItem:atIndex:

Before this commit, the tabViewItems and the segments were 2 different
collections. Any indexed change in the tabViewItems asked to re-sync
the segments making it difficult to maintain any persistent state. Now
the tabView items are the segments content.

Also fixed the selection update when items are removed.
See CPTabViewTest.j  and manual test Manual/CPTabViewNib/
This commit is contained in:
cacaodev
2015-03-27 14:27:46 +01:00
parent 7179a2995d
commit 7378d06bfd
6 changed files with 333 additions and 301 deletions
+14 -2
View File
@@ -115,8 +115,7 @@ CPSegmentSwitchTrackingMomentary = 2;
/*! @ignore */
- (void)setSegments:(CPArray)segments
{
[_segments removeAllObjects];
[_themeStates removeAllObjects];
[self removeSegmentsAtIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self segmentCount])]];
[self insertSegments:segments atIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [segments count])]];
}
@@ -135,6 +134,9 @@ CPSegmentSwitchTrackingMomentary = 2;
[_segments insertObjects:segments atIndexes:indices];
[_themeStates insertObjects:newStates atIndexes:indices];
if (_selectedSegment >= [indices firstIndex])
_selectedSegment += [indices count];
}
/*! @ignore */
@@ -143,6 +145,16 @@ CPSegmentSwitchTrackingMomentary = 2;
if ([indices count] == 0)
return;
[indices enumerateIndexesUsingBlock:function(idx, stop)
{
[[_segments objectAtIndex:idx] setSelected:NO];
}];
if ([indices containsIndex:_selectedSegment])
_selectedSegment = -1;
else if ([indices lastIndex] < _selectedSegment)
_selectedSegment -= [indices count];
[_segments removeObjectsAtIndexes:indices];
[_themeStates removeObjectsAtIndexes:indices];
}
+107 -81
View File
@@ -66,7 +66,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
CPSegmentedControl _tabs;
CPBox _box;
CPNumber _selectedIndex;
CPTabViewItem _selectedTabViewItem;
CPTabViewType _type;
CPFont _font;
@@ -79,9 +79,8 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
{
if (self = [super initWithFrame:aFrame])
{
_items = [CPArray array];
[self _init];
_selectedTabViewItem = nil;
[self setTabViewType:CPTopTabsBezelBorder];
}
@@ -90,10 +89,9 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
- (void)_init
{
_selectedIndex = CPNotFound;
_tabs = [[CPSegmentedControl alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
_tabs = [[CPSegmentedControl alloc] initWithFrame:CGRectMakeZero()];
[_tabs setHitTests:NO];
[_tabs setSegments:[CPArray array]];
var height = [_tabs valueForThemeAttribute:@"min-size"].height;
[_tabs setFrameSize:CGSizeMake(0, height)];
@@ -105,6 +103,11 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
[self addSubview:_tabs];
}
- (CPArray)items
{
return [_tabs segments];
}
// Adding and Removing Tabs
/*!
Adds a CPTabViewItem to the tab view.
@@ -112,7 +115,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (void)addTabViewItem:(CPTabViewItem)aTabViewItem
{
[self insertTabViewItem:aTabViewItem atIndex:[_items count]];
[self insertTabViewItem:aTabViewItem atIndex:[self numberOfTabViewItems]];
}
/*!
@@ -122,15 +125,18 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (void)insertTabViewItem:(CPTabViewItem)aTabViewItem atIndex:(CPUInteger)anIndex
{
[_items insertObject:aTabViewItem atIndex:anIndex];
[self _insertTabViewItems:[aTabViewItem] atIndexes:[CPIndexSet indexSetWithIndex:anIndex]];
}
[self _updateItems];
[self _repositionTabs];
- (void)_insertTabViewItems:(CPArray)tabViewItems atIndexes:(CPIndexSet)indexes
{
[_tabs insertSegments:tabViewItems atIndexes:indexes];
[tabViewItems makeObjectsPerformSelector:@selector(_setTabView:) withObject:self];
[aTabViewItem _setTabView:self];
[self tileWithChangedItem:[tabViewItems firstObject]];
[self _reverseSetContent];
if (_delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector)
[_delegate tabViewDidChangeNumberOfTabViewItems:self];
[self _sendDelegateTabViewDidChangeNumberOfTabViewItems];
}
/*!
@@ -139,23 +145,38 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (void)removeTabViewItem:(CPTabViewItem)aTabViewItem
{
var count = [_items count];
for (var i = 0; i < count; i++)
{
if ([_items objectAtIndex:i] === aTabViewItem)
{
[_items removeObjectAtIndex:i];
break;
}
}
var idx = [[self items] indexOfObjectIdenticalTo:aTabViewItem];
[self _updateItems];
[self _repositionTabs];
if (idx == CPNotFound)
return;
[_tabs removeSegmentsAtIndexes:[CPIndexSet indexSetWithIndex:idx]];
[aTabViewItem _setTabView:nil];
if (_delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector)
[_delegate tabViewDidChangeNumberOfTabViewItems:self];
[self tileWithChangedItem:nil];
[self _didRemoveTabViewItem:aTabViewItem atIndex:idx];
[self _reverseSetContent];
[self _sendDelegateTabViewDidChangeNumberOfTabViewItems];
}
- (void)_didRemoveTabViewItem:(CPTabViewItem)aTabViewItem atIndex:(CPInteger)idx
{
if ([self selectedIndexBinder])
return;
if (_selectedTabViewItem == aTabViewItem)
{
var didSelect = NO;
if (idx > 0)
didSelect = [self selectTabViewItemAtIndex:idx - 1];
else if ([self numberOfTabViewItems] > 0)
didSelect = [self selectTabViewItemAtIndex:0];
if (didSelect == NO)
_selectedTabViewItem == nil;
}
}
// Accessing Tabs
@@ -166,7 +187,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (int)indexOfTabViewItem:(CPTabViewItem)aTabViewItem
{
return [_items indexOfObjectIdenticalTo:aTabViewItem];
return [[self items] indexOfObjectIdenticalTo:aTabViewItem];
}
/*!
@@ -176,11 +197,10 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (int)indexOfTabViewItemWithIdentifier:(CPString)anIdentifier
{
for (var index = [_items count]; index >= 0; index--)
if ([[_items[index] identifier] isEqual:anIdentifier])
return index;
return CPNotFound;
return [[self items] indexOfObjectPassingTest:function(item, idx, stop)
{
[[item identifier] isEqual:anIdentifier];
}];
}
/*!
@@ -189,7 +209,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (unsigned)numberOfTabViewItems
{
return [_items count];
return [[self items] count];
}
/*!
@@ -198,7 +218,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (CPTabViewItem)tabViewItemAtIndex:(CPUInteger)anIndex
{
return [_items objectAtIndex:anIndex];
return [[self items] objectAtIndex:anIndex];
}
/*!
@@ -207,7 +227,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (CPArray)tabViewItems
{
return [_items copy]; // Copy?
return [[self items] copy]; // Copy?
}
// Selecting a Tab
@@ -217,7 +237,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (void)selectFirstTabViewItem:(id)aSender
{
if ([_items count] === 0)
if ([self numberOfTabViewItems] === 0)
return; // throw?
[self selectTabViewItemAtIndex:0];
@@ -229,10 +249,10 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (void)selectLastTabViewItem:(id)aSender
{
if ([_items count] === 0)
if ([self numberOfTabViewItems] === 0)
return; // throw?
[self selectTabViewItemAtIndex:[_items count] - 1];
[self selectTabViewItemAtIndex:[self numberOfTabViewItems] - 1];
}
/*!
@@ -241,12 +261,12 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (void)selectNextTabViewItem:(id)aSender
{
if (_selectedIndex === CPNotFound)
if (_selectedTabViewItem === nil)
return;
var nextIndex = _selectedIndex + 1;
var nextIndex = [self indexOfTabViewItem:_selectedTabViewItem] + 1;
if (nextIndex === [_items count])
if (nextIndex === [self numberOfTabViewItems])
// does nothing. According to spec at (http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Reference/ApplicationKit/Classes/NSTabView_Class/Reference/Reference.html#//apple_ref/occ/instm/NSTabView/selectNextTabViewItem:)
return;
@@ -259,10 +279,10 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (void)selectPreviousTabViewItem:(id)aSender
{
if (_selectedIndex === CPNotFound)
if (_selectedTabViewItem === nil)
return;
var previousIndex = _selectedIndex - 1;
var previousIndex = [self indexOfTabViewItem:_selectedTabViewItem] - 1;
if (previousIndex < 0)
return; // does nothing. See above.
@@ -285,22 +305,32 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (BOOL)selectTabViewItemAtIndex:(CPUInteger)anIndex
{
if (anIndex === _selectedIndex)
return;
if (![self _selectTabViewItemAtIndex:anIndex])
return NO;
//[self _reverseSetSelectedIndex];
return YES;
}
- (BOOL)_selectTabViewItemAtIndex:(CPUInteger)anIndex
{
var aTabViewItem = [self tabViewItemAtIndex:anIndex];
if (aTabViewItem == _selectedTabViewItem)
return NO;
if ((_delegateSelectors & CPTabViewShouldSelectTabViewItemSelector) && ![_delegate tabView:self shouldSelectTabViewItem:aTabViewItem])
return NO;
if (_delegateSelectors & CPTabViewWillSelectTabViewItemSelector)
[_delegate tabView:self willSelectTabViewItem:aTabViewItem];
[_tabs selectSegmentWithTag:anIndex];
[self _setSelectedIndex:anIndex];
[_tabs setSelectedSegment:anIndex];
_selectedTabViewItem = aTabViewItem;
if (_delegateSelectors & CPTabViewDidSelectTabViewItemSelector)
[_delegate tabView:self didSelectTabViewItem:aTabViewItem];
[self _displayItemView:[aTabViewItem view]];
[self _sendDelegateDidSelectTabViewItem:aTabViewItem];
return YES;
}
@@ -311,10 +341,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (CPTabViewItem)selectedTabViewItem
{
if (_selectedIndex != CPNotFound)
return [_items objectAtIndex:_selectedIndex];
return nil;
return _selectedTabViewItem;
}
// Modifying the font
@@ -375,6 +402,14 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
[self setNeedsLayout];
}
- (void)tileWithChangedItem:(CPTabViewItem)aTabViewItem
{
var segment = aTabViewItem ? [self indexOfTabViewItem:aTabViewItem] : 0;
[_tabs tileWithChangedSegment:segment];
[self setNeedsLayout];
}
- (void)layoutSubviews
{
// Even if CPTabView's autoresizesSubviews is NO, _tabs and _box has to be laid out.
@@ -392,7 +427,6 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
[_box setFrame:CGRectMake(0, origin, CGRectGetWidth(aFrame),
CGRectGetHeight(aFrame) - segmentedHeight / 2)];
[self _updateItems];
[self _repositionTabs];
}
}
@@ -470,30 +504,23 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
[_tabs setCenter:CGPointMake(horizontalCenterOfSelf, verticalCenterOfTabs)];
}
- (void)_setSelectedIndex:(CPNumber)index
- (void)_displayItemView:(CPView)aView
{
_selectedIndex = index;
[self _setContentViewFromItem:[_items objectAtIndex:_selectedIndex]];
[_box setContentView:aView];
}
- (void)_setContentViewFromItem:(CPTabViewItem)anItem
// DELEGATE METHODS
- (void)_sendDelegateDidSelectTabViewItem:(CPTabViewItem)aTabViewItem
{
[_box setContentView:[anItem view]];
if (_delegateSelectors & CPTabViewDidSelectTabViewItemSelector)
[_delegate tabView:self didSelectTabViewItem:aTabViewItem];
}
- (void)_updateItems
- (void)_sendDelegateTabViewDidChangeNumberOfTabViewItems
{
var count = [_items count];
[_tabs setSegmentCount:count];
for (var i = 0; i < count; i++)
{
[_tabs setLabel:[[_items objectAtIndex:i] label] forSegment:i];
[_tabs setTag:i forSegment:i];
}
if (_selectedIndex === CPNotFound)
[self selectFirstTabViewItem:self];
if (_delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector)
[_delegate tabViewDidChangeNumberOfTabViewItems:self];
}
@end
@@ -515,12 +542,12 @@ var CPTabViewItemsKey = "CPTabViewItemsKey",
_font = [aCoder decodeObjectForKey:CPTabViewFontKey];
[_tabs setFont:_font];
_items = [aCoder decodeObjectForKey:CPTabViewItemsKey];
[_items makeObjectsPerformSelector:@selector(_setTabView:) withObject:self];
var items = [aCoder decodeObjectForKey:CPTabViewItemsKey] || [CPArray array];
[self _insertTabViewItems:items atIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [items count])]];
[self setDelegate:[aCoder decodeObjectForKey:CPTabViewDelegateKey]];
self.selectOnAwake = [aCoder decodeObjectForKey:CPTabViewSelectedItemKey];
_selectedTabViewItem = [aCoder decodeObjectForKey:CPTabViewSelectedItemKey];
_type = [aCoder decodeIntForKey:CPTabViewTypeKey];
}
@@ -531,12 +558,13 @@ var CPTabViewItemsKey = "CPTabViewItemsKey",
{
// This cannot be run in initWithCoder because it might call selectTabViewItem:, which is
// not safe to call before the views of the tab views items are fully decoded.
[self _updateItems];
if (self.selectOnAwake)
if (_selectedTabViewItem)
{
[self selectTabViewItem:self.selectOnAwake];
delete self.selectOnAwake;
var idx = [self indexOfTabViewItem:_selectedTabViewItem];
if (idx !== CPNotFound)
[self selectTabViewItemAtIndex:idx];
}
var type = _type;
@@ -558,9 +586,7 @@ var CPTabViewItemsKey = "CPTabViewItemsKey",
[aCoder encodeObject:_items forKey:CPTabViewItemsKey];
var selected = [self selectedTabViewItem];
if (selected)
[aCoder encodeObject:selected forKey:CPTabViewSelectedItemKey];
[aCoder encodeConditionalObject:_selectedTabViewItem forKey:CPTabViewSelectedItemKey];
[aCoder encodeInt:_type forKey:CPTabViewTypeKey];
[aCoder encodeObject:_font forKey:CPTabViewFontKey];
+5 -2
View File
@@ -55,6 +55,7 @@ CPPressedTab = 2;
{
id _identifier;
CPString _label;
CPInteger _tag @accessors(property=tag);
CPView _view;
CPView _auxiliaryView;
@@ -114,8 +115,11 @@ CPPressedTab = 2;
*/
- (void)setLabel:(CPString)aLabel
{
if ([aLabel isEqualToString:_label])
return;
_label = aLabel;
[_tabView setNeedsLayout];
[_tabView tileWithChangedItem:self];
}
/*!
@@ -187,7 +191,6 @@ CPPressedTab = 2;
_view = aView;
if ([_tabView selectedTabViewItem] == self)
[_tabView _setContentViewFromItem:self];
}
/*!
+44
View File
@@ -39,6 +39,8 @@
[_tabView addTabViewItem:_tabItem1];
[_tabView addTabViewItem:_tabItem2];
[[CPRunLoop currentRunLoop] performSelectors];
}
- (void)testCreate
@@ -93,4 +95,46 @@
[self assertNull:[_tabItem1 tabView]];
}
- (void)testInsertTabViewItem
{
[_tabView selectTabViewItem:_tabItem2];
[self assert:[_tabView numberOfTabViewItems] equals:2];
[self assert:[_tabView selectedTabViewItem] equals:_tabItem2];
var tabItem3 = [[CPTabViewItem alloc] initWithIdentifier:@"insert"];
[tabItem3 setLabel:@"insert"];
[_tabView insertTabViewItem:tabItem3 atIndex:0];
[self assert:[_tabView numberOfTabViewItems] equals:3];
[self assert:[_tabView selectedTabViewItem] equals:_tabItem2];
[self assert:[_tabView indexOfTabViewItem:tabItem3] equals:0];
}
- (void)testRemoveSelectedTabViewItem
{
[_tabView selectTabViewItem:_tabItem2];
[self assert:[_tabView numberOfTabViewItems] equals:2];
[self assert:[_tabView selectedTabViewItem] equals:_tabItem2];
[_tabView removeTabViewItem:_tabItem2];
[self assert:[_tabView numberOfTabViewItems] equals:1];
[self assert:[_tabView selectedTabViewItem] equals:_tabItem1];
}
- (void)testRemoveSelectedFirstTabViewItem
{
[_tabView selectTabViewItem:_tabItem1];
[self assert:[_tabView numberOfTabViewItems] equals:2];
[self assert:[_tabView selectedTabViewItem] equals:_tabItem1];
[_tabView removeTabViewItem:_tabItem1];
[self assert:[_tabView numberOfTabViewItems] equals:1];
[self assert:[_tabView selectedTabViewItem] equals:_tabItem2];
}
@end
+160 -213
View File
@@ -1,39 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1050</int>
<string key="IBDocument.SystemVersion">11D50</string>
<string key="IBDocument.InterfaceBuilderVersion">2166</string>
<string key="IBDocument.AppKitVersion">1138.32</string>
<string key="IBDocument.HIToolboxVersion">568.00</string>
<string key="IBDocument.SystemVersion">14C109</string>
<string key="IBDocument.InterfaceBuilderVersion">6751</string>
<string key="IBDocument.AppKitVersion">1344.72</string>
<string key="IBDocument.HIToolboxVersion">757.30</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="NS.object.0">2166</string>
<string key="NS.object.0">6751</string>
</object>
<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>NSTabViewItem</string>
<string>NSView</string>
<string>NSWindowTemplate</string>
<string>NSTabView</string>
<array key="IBDocument.IntegratedClassDependencies">
<string>NSButton</string>
<string>NSButtonCell</string>
<string>NSCustomObject</string>
<string>NSSlider</string>
<string>NSSliderCell</string>
<string>NSTabView</string>
<string>NSTabViewItem</string>
<string>NSTextField</string>
<string>NSTextFieldCell</string>
<string>NSSlider</string>
<string>NSButtonCell</string>
<string>NSButton</string>
<string>NSCustomObject</string>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>NSView</string>
<string>NSWindowTemplate</string>
</array>
<array key="IBDocument.PluginDependencies">
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</object>
</array>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
<integer value="1" key="NS.object.0"/>
</object>
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
<bool key="EncodedWithXMLCoder">YES</bool>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
<object class="NSCustomObject" id="1021">
<string key="NSClassName">NSApplication</string>
</object>
@@ -55,24 +52,20 @@
<object class="NSView" key="NSWindowView" id="439893737">
<reference key="NSNextResponder"/>
<int key="NSvFlags">274</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSTabView" id="979039271">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">286</int>
<string key="NSFrame">{{13, 40}, {454, 344}}</string>
<string key="NSFrame">{{13, 40.000000383795708}, {454, 344}}</string>
<reference key="NSSuperview" ref="439893737"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="18873805"/>
<object class="NSMutableArray" key="NSTabViewItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<array class="NSMutableArray" key="NSTabViewItems">
<object class="NSTabViewItem" id="488469955">
<string key="NSIdentifier">1</string>
<object class="NSView" key="NSView" id="378428221">
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSSlider" id="974764906">
<reference key="NSNextResponder" ref="378428221"/>
<int key="NSvFlags">301</int>
@@ -81,7 +74,7 @@
<reference key="NSNextKeyView" ref="979039271"/>
<bool key="NSEnabled">YES</bool>
<object class="NSSliderCell" key="NSCell" id="600801425">
<int key="NSCellFlags">-2080244224</int>
<int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents"/>
<object class="NSFont" key="NSSupport">
@@ -99,8 +92,9 @@
<bool key="NSAllowsTickMarkValuesOnly">NO</bool>
<bool key="NSVertical">NO</bool>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</object>
</array>
<string key="NSFrame">{{10, 33}, {434, 298}}</string>
<reference key="NSNextKeyView" ref="974764906"/>
</object>
@@ -119,7 +113,7 @@
<object class="NSTabViewItem" id="256931374">
<object class="NSView" key="NSView" id="18873805">
<reference key="NSNextResponder" ref="979039271"/>
<int key="NSvFlags">256</int>
<int key="NSvFlags">274</int>
<string key="NSFrame">{{10, 33}, {434, 298}}</string>
<reference key="NSSuperview" ref="979039271"/>
<reference key="NSWindow"/>
@@ -134,8 +128,7 @@
<object class="NSView" key="NSView" id="802661891">
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSTextField" id="160623561">
<reference key="NSNextResponder" ref="802661891"/>
<int key="NSvFlags">301</int>
@@ -143,11 +136,11 @@
<reference key="NSSuperview" ref="802661891"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="46991665">
<int key="NSCellFlags">-1804468671</int>
<int key="NSCellFlags">-1804599231</int>
<int key="NSCellFlags2">272630784</int>
<string key="NSContents"/>
<object class="NSFont" key="NSSupport" id="447530061">
<string key="NSName">LucidaGrande</string>
<bool key="IBIsSystemFont">YES</bool>
<double key="NSSize">13</double>
<int key="NSfFlags">1044</int>
</object>
@@ -172,8 +165,10 @@
</object>
</object>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
</object>
</object>
</array>
<string key="NSFrame">{{10, 33}, {434, 298}}</string>
<reference key="NSNextKeyView" ref="160623561"/>
</object>
@@ -181,26 +176,23 @@
<reference key="NSColor" ref="199260378"/>
<reference key="NSTabView" ref="979039271"/>
</object>
</object>
</array>
<reference key="NSSelectedTabViewItem" ref="256931374"/>
<reference key="NSFont" ref="447530061"/>
<int key="NSTvFlags">0</int>
<bool key="NSAllowTruncatedLabels">YES</bool>
<bool key="NSDrawsBackground">YES</bool>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<array class="NSMutableArray" key="NSSubviews">
<reference ref="18873805"/>
</object>
</array>
</object>
<object class="NSTabView" id="513383460">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">283</int>
<string key="NSFrame">{{478, 40}, {454, 344}}</string>
<string key="NSFrame">{{478, 40.000000383795708}, {453.99999982220186, 344}}</string>
<reference key="NSSuperview" ref="439893737"/>
<reference key="NSWindow"/>
<object class="NSMutableArray" key="NSTabViewItems">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<array class="NSMutableArray" key="NSTabViewItems"/>
<reference key="NSFont" ref="447530061"/>
<int key="NSTvFlags">0</int>
<bool key="NSAllowTruncatedLabels">YES</bool>
@@ -212,11 +204,10 @@
<string key="NSFrame">{{594, 14}, {222, 17}}</string>
<reference key="NSSuperview" ref="439893737"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<string key="NSReuseIdentifierKey">_NS:3944</string>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="822028531">
<int key="NSCellFlags">68288064</int>
<int key="NSCellFlags">68157504</int>
<int key="NSCellFlags2">272630784</int>
<string key="NSContents">A Tab View Item Sould be Selected</string>
<reference key="NSSupport" ref="447530061"/>
@@ -230,6 +221,8 @@
<reference key="NSColor" ref="920544310"/>
</object>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
</object>
<object class="NSButton" id="1045251964">
<reference key="NSNextResponder" ref="439893737"/>
@@ -241,21 +234,22 @@
<string key="NSReuseIdentifierKey">_NS:687</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="299997884">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">Replace Current View</string>
<reference key="NSSupport" ref="447530061"/>
<string key="NSCellIdentifier">_NS:687</string>
<reference key="NSControlView" ref="1045251964"/>
<int key="NSButtonFlags">-2038284033</int>
<int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</object>
</array>
<string key="NSFrameSize">{950, 390}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
@@ -268,10 +262,9 @@
<object class="NSCustomObject" id="635946545">
<string key="NSClassName">AppController</string>
</object>
</object>
</array>
<object class="IBObjectContainer" key="IBDocument.Objects">
<object class="NSMutableArray" key="connectionRecords">
<bool key="EncodedWithXMLCoder">YES</bool>
<array key="connectionRecords">
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
@@ -328,116 +321,105 @@
</object>
<int key="connectionID">487</int>
</object>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
<bool key="EncodedWithXMLCoder">YES</bool>
<array key="orderedObjects">
<object class="IBObjectRecord">
<int key="objectID">0</int>
<object class="NSArray" key="object" id="1049">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<array key="object" id="0"/>
<reference key="children" ref="1048"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="1021"/>
<reference key="parent" ref="1049"/>
<reference key="parent" ref="0"/>
<string key="objectName">File's Owner</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="1014"/>
<reference key="parent" ref="1049"/>
<reference key="parent" ref="0"/>
<string key="objectName">First Responder</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-3</int>
<reference key="object" ref="1050"/>
<reference key="parent" ref="1049"/>
<reference key="parent" ref="0"/>
<string key="objectName">Application</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">371</int>
<reference key="object" ref="972006081"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<array class="NSMutableArray" key="children">
<reference ref="439893737"/>
</object>
<reference key="parent" ref="1049"/>
</array>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">372</int>
<reference key="object" ref="439893737"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<array class="NSMutableArray" key="children">
<reference ref="513383460"/>
<reference ref="405808750"/>
<reference ref="1045251964"/>
<reference ref="979039271"/>
</object>
</array>
<reference key="parent" ref="972006081"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">450</int>
<reference key="object" ref="635946545"/>
<reference key="parent" ref="1049"/>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">460</int>
<reference key="object" ref="979039271"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<array class="NSMutableArray" key="children">
<reference ref="488469955"/>
<reference ref="767904222"/>
<reference ref="256931374"/>
</object>
</array>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">461</int>
<reference key="object" ref="488469955"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<array class="NSMutableArray" key="children">
<reference ref="378428221"/>
</object>
</array>
<reference key="parent" ref="979039271"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">462</int>
<reference key="object" ref="767904222"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<array class="NSMutableArray" key="children">
<reference ref="802661891"/>
</object>
</array>
<reference key="parent" ref="979039271"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">463</int>
<reference key="object" ref="802661891"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<array class="NSMutableArray" key="children">
<reference ref="160623561"/>
</object>
</array>
<reference key="parent" ref="767904222"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">464</int>
<reference key="object" ref="378428221"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<array class="NSMutableArray" key="children">
<reference ref="974764906"/>
</object>
</array>
<reference key="parent" ref="488469955"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">452</int>
<reference key="object" ref="974764906"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<array class="NSMutableArray" key="children">
<reference ref="600801425"/>
</object>
</array>
<reference key="parent" ref="378428221"/>
</object>
<object class="IBObjectRecord">
@@ -448,10 +430,9 @@
<object class="IBObjectRecord">
<int key="objectID">456</int>
<reference key="object" ref="160623561"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<array class="NSMutableArray" key="children">
<reference ref="46991665"/>
</object>
</array>
<reference key="parent" ref="802661891"/>
</object>
<object class="IBObjectRecord">
@@ -462,18 +443,15 @@
<object class="IBObjectRecord">
<int key="objectID">465</int>
<reference key="object" ref="513383460"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<array class="NSMutableArray" key="children"/>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">475</int>
<reference key="object" ref="405808750"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<array class="NSMutableArray" key="children">
<reference ref="822028531"/>
</object>
</array>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
@@ -484,10 +462,9 @@
<object class="IBObjectRecord">
<int key="objectID">479</int>
<reference key="object" ref="1045251964"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<array class="NSMutableArray" key="children">
<reference ref="299997884"/>
</object>
</array>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
@@ -498,10 +475,9 @@
<object class="IBObjectRecord">
<int key="objectID">488</int>
<reference key="object" ref="256931374"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<array class="NSMutableArray" key="children">
<reference ref="18873805"/>
</object>
</array>
<reference key="parent" ref="979039271"/>
</object>
<object class="IBObjectRecord">
@@ -509,144 +485,115 @@
<reference key="object" ref="18873805"/>
<reference key="parent" ref="256931374"/>
</object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>-1.IBPluginDependency</string>
<string>-2.IBPluginDependency</string>
<string>-3.IBPluginDependency</string>
<string>371.IBPluginDependency</string>
<string>371.IBWindowTemplateEditedContentRect</string>
<string>371.NSWindowTemplate.visibleAtLaunch</string>
<string>372.IBPluginDependency</string>
<string>450.IBPluginDependency</string>
<string>452.IBPluginDependency</string>
<string>453.IBPluginDependency</string>
<string>456.IBPluginDependency</string>
<string>457.IBPluginDependency</string>
<string>460.IBPluginDependency</string>
<string>461.IBPluginDependency</string>
<string>462.IBPluginDependency</string>
<string>463.IBPluginDependency</string>
<string>464.IBPluginDependency</string>
<string>465.IBPluginDependency</string>
<string>475.IBPluginDependency</string>
<string>476.IBPluginDependency</string>
<string>479.IBPluginDependency</string>
<string>480.IBPluginDependency</string>
<string>488.IBPluginDependency</string>
<string>489.IBPluginDependency</string>
</object>
<object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{209, 447}, {480, 360}}</string>
<integer value="1"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</object>
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference key="dict.sortedKeys" ref="1049"/>
<reference key="dict.values" ref="1049"/>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="371.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="371.IBWindowTemplateEditedContentRect">{{209, 447}, {480, 360}}</string>
<integer value="1" key="371.NSWindowTemplate.visibleAtLaunch"/>
<string key="372.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="450.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="452.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="453.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="456.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="457.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="460.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="461.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="462.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="463.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="464.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="465.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="475.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="476.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="479.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="480.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="488.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="489.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
<nil key="activeLocalization"/>
<object class="NSMutableDictionary" key="localizations">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference key="dict.sortedKeys" ref="1049"/>
<reference key="dict.values" ref="1049"/>
</object>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">489</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<bool key="EncodedWithXMLCoder">YES</bool>
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
<string key="className">AppController</string>
<string key="superclassName">NSObject</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">changeView:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string key="NS.key.0">changeView:</string>
<object class="IBActionInfo" key="NS.object.0">
<dictionary class="NSMutableDictionary" key="actions">
<string key="changeView:">id</string>
<string key="insertTabViewItem:">id</string>
<string key="removeTabViewItem:">id</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="actionInfosByName">
<object class="IBActionInfo" key="changeView:">
<string key="name">changeView:</string>
<string key="candidateClassName">id</string>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>nibTabView</string>
<string>nibTabViewEmpty</string>
<object class="IBActionInfo" key="insertTabViewItem:">
<string key="name">insertTabViewItem:</string>
<string key="candidateClassName">id</string>
</object>
<object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>NSTabView</string>
<string>NSTabView</string>
<object class="IBActionInfo" key="removeTabViewItem:">
<string key="name">removeTabViewItem:</string>
<string key="candidateClassName">id</string>
</object>
</object>
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>nibTabView</string>
<string>nibTabViewEmpty</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="fromViewController">NSButton</string>
<string key="insertStepper">NSStepper</string>
<string key="nibTabView">NSTabView</string>
<string key="nibTabViewEmpty">NSTabView</string>
<string key="removeStepper">NSStepper</string>
<string key="viewController">NSViewController</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="fromViewController">
<string key="name">fromViewController</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBToOneOutletInfo">
<string key="name">nibTabView</string>
<string key="candidateClassName">NSTabView</string>
</object>
<object class="IBToOneOutletInfo">
<string key="name">nibTabViewEmpty</string>
<string key="candidateClassName">NSTabView</string>
</object>
<object class="IBToOneOutletInfo" key="insertStepper">
<string key="name">insertStepper</string>
<string key="candidateClassName">NSStepper</string>
</object>
</object>
<object class="IBToOneOutletInfo" key="nibTabView">
<string key="name">nibTabView</string>
<string key="candidateClassName">NSTabView</string>
</object>
<object class="IBToOneOutletInfo" key="nibTabViewEmpty">
<string key="name">nibTabViewEmpty</string>
<string key="candidateClassName">NSTabView</string>
</object>
<object class="IBToOneOutletInfo" key="removeStepper">
<string key="name">removeStepper</string>
<string key="candidateClassName">NSStepper</string>
</object>
<object class="IBToOneOutletInfo" key="viewController">
<string key="name">viewController</string>
<string key="candidateClassName">NSViewController</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/AppController.h</string>
<string key="minorKey">../.XcodeSupport/AppController.h</string>
</object>
</object>
</object>
</array>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<bool key="IBDocument.previouslyAttemptedUpgradeToXcode5">NO</bool>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
<integer value="1050" key="NS.object.0"/>
</object>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
<integer value="3000" key="NS.object.0"/>
<integer value="4600" key="NS.object.0"/>
</object>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
+3 -3
View File
@@ -35,9 +35,9 @@
_type = flags & 0x7;
_items = [aCoder decodeObjectForKey:@"NSTabViewItems"];
_selectedIndex = [_items indexOfObject:[aCoder decodeObjectForKey:@"NSSelectedTabViewItem"]];
_font = [aCoder decodeObjectForKey:@"NSFont"];
_items = [aCoder decodeObjectForKey:@"NSTabViewItems"];
_selectedTabViewItem = [aCoder decodeObjectForKey:@"NSSelectedTabViewItem"];
_font = [aCoder decodeObjectForKey:@"NSFont"];
//_delegate = [aCoder decodeObjectForKey:@""];