From 7378d06bfd61368b417446e71f6dfdd3e5362b5a Mon Sep 17 00:00:00 2001 From: cacaodev Date: Tue, 24 Mar 2015 09:33:02 +0100 Subject: [PATCH] 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/ --- AppKit/CPSegmentedControl.j | 16 +- AppKit/CPTabView.j | 188 +++++---- AppKit/CPTabViewItem.j | 7 +- Tests/AppKit/CPTabViewTest.j | 44 +++ .../CPTabViewNib/Resources/MainMenu.xib | 373 ++++++++---------- Tools/nib2cib/NSTabView.j | 6 +- 6 files changed, 333 insertions(+), 301 deletions(-) diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index 99bafdfce..bc57454d4 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -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]; } diff --git a/AppKit/CPTabView.j b/AppKit/CPTabView.j index ec145d802..cf4a43232 100644 --- a/AppKit/CPTabView.j +++ b/AppKit/CPTabView.j @@ -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]; diff --git a/AppKit/CPTabViewItem.j b/AppKit/CPTabViewItem.j index 922a1b51f..113a539f6 100644 --- a/AppKit/CPTabViewItem.j +++ b/AppKit/CPTabViewItem.j @@ -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]; } /*! diff --git a/Tests/AppKit/CPTabViewTest.j b/Tests/AppKit/CPTabViewTest.j index 6d668742d..ad5b74550 100644 --- a/Tests/AppKit/CPTabViewTest.j +++ b/Tests/AppKit/CPTabViewTest.j @@ -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 diff --git a/Tests/Manual/CPTabViewNib/Resources/MainMenu.xib b/Tests/Manual/CPTabViewNib/Resources/MainMenu.xib index 22f32b7e1..8cdb134dd 100644 --- a/Tests/Manual/CPTabViewNib/Resources/MainMenu.xib +++ b/Tests/Manual/CPTabViewNib/Resources/MainMenu.xib @@ -1,39 +1,36 @@ - + 1050 - 11D50 - 2166 - 1138.32 - 568.00 + 14C109 + 6751 + 1344.72 + 757.30 com.apple.InterfaceBuilder.CocoaPlugin - 2166 + 6751 - - YES - NSTabViewItem - NSView - NSWindowTemplate - NSTabView + + NSButton + NSButtonCell + NSCustomObject + NSSlider NSSliderCell + NSTabView + NSTabViewItem NSTextField NSTextFieldCell - NSSlider - NSButtonCell - NSButton - NSCustomObject - - - YES + NSView + NSWindowTemplate + + com.apple.InterfaceBuilder.CocoaPlugin - + PluginDependencyRecalculationVersion - - YES + NSApplication @@ -55,24 +52,20 @@ 274 - - YES + 286 - {{13, 40}, {454, 344}} + {{13, 40.000000383795708}, {454, 344}} - - - YES + 1 256 - - YES + 301 @@ -81,7 +74,7 @@ YES - -2080244224 + -2080374784 0 @@ -99,8 +92,9 @@ NO NO + NO - + {{10, 33}, {434, 298}} @@ -119,7 +113,7 @@ - 256 + 274 {{10, 33}, {434, 298}} @@ -134,8 +128,7 @@ 256 - - YES + 301 @@ -143,11 +136,11 @@ YES - -1804468671 + -1804599231 272630784 - LucidaGrande + YES 13 1044 @@ -172,8 +165,10 @@ + NO + 1 - + {{10, 33}, {434, 298}} @@ -181,26 +176,23 @@ - + 0 YES YES - - YES + - + 283 - {{478, 40}, {454, 344}} + {{478, 40.000000383795708}, {453.99999982220186, 344}} - - YES - + 0 YES @@ -212,11 +204,10 @@ {{594, 14}, {222, 17}} - _NS:3944 YES - 68288064 + 68157504 272630784 A Tab View Item Sould be Selected @@ -230,6 +221,8 @@ + NO + 1 @@ -241,21 +234,22 @@ _NS:687 YES - 67239424 + 67108864 134217728 Replace Current View _NS:687 - -2038284033 + -2038284288 129 200 25 + NO - + {950, 390} @@ -268,10 +262,9 @@ AppController - + - - YES + delegate @@ -328,116 +321,105 @@ 487 - + - - YES + 0 - - YES - + -2 - + File's Owner -1 - + First Responder -3 - + Application 371 - - YES + - - + + 372 - - YES + - + 450 - + 460 - - YES + - + 461 - - YES + - + 462 - - YES + - + 463 - - YES + - + 464 - - YES + - + 452 - - YES + - + @@ -448,10 +430,9 @@ 456 - - YES + - + @@ -462,18 +443,15 @@ 465 - - YES - + 475 - - YES + - + @@ -484,10 +462,9 @@ 479 - - YES + - + @@ -498,10 +475,9 @@ 488 - - YES + - + @@ -509,144 +485,115 @@ - - - - YES - - YES - -1.IBPluginDependency - -2.IBPluginDependency - -3.IBPluginDependency - 371.IBPluginDependency - 371.IBWindowTemplateEditedContentRect - 371.NSWindowTemplate.visibleAtLaunch - 372.IBPluginDependency - 450.IBPluginDependency - 452.IBPluginDependency - 453.IBPluginDependency - 456.IBPluginDependency - 457.IBPluginDependency - 460.IBPluginDependency - 461.IBPluginDependency - 462.IBPluginDependency - 463.IBPluginDependency - 464.IBPluginDependency - 465.IBPluginDependency - 475.IBPluginDependency - 476.IBPluginDependency - 479.IBPluginDependency - 480.IBPluginDependency - 488.IBPluginDependency - 489.IBPluginDependency - - - YES - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{209, 447}, {480, 360}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - YES - - + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{209, 447}, {480, 360}} + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + - - YES - - - + 489 - - YES + AppController NSObject - - changeView: - id - - - changeView: - + + id + id + id + + + changeView: id - - - YES - - YES - nibTabView - nibTabViewEmpty + + insertTabViewItem: + id - - YES - NSTabView - NSTabView + + removeTabViewItem: + id - - - YES - - YES - nibTabView - nibTabViewEmpty + + + NSButton + NSStepper + NSTabView + NSTabView + NSStepper + NSViewController + + + + fromViewController + NSButton - - YES - - nibTabView - NSTabView - - - nibTabViewEmpty - NSTabView - + + insertStepper + NSStepper - + + nibTabView + NSTabView + + + nibTabViewEmpty + NSTabView + + + removeStepper + NSStepper + + + viewController + NSViewController + + IBProjectSource - ./Classes/AppController.h + ../.XcodeSupport/AppController.h - + 0 IBCocoaFramework + NO com.apple.InterfaceBuilder.CocoaPlugin.macosx com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 - + YES 3 diff --git a/Tools/nib2cib/NSTabView.j b/Tools/nib2cib/NSTabView.j index 920cee8f9..bac46514c 100644 --- a/Tools/nib2cib/NSTabView.j +++ b/Tools/nib2cib/NSTabView.j @@ -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:@""];