00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 @import "CPImageView.j"
00024 @import "CPTabViewItem.j"
00025 @import "CPView.j"
00026
00027 #include "CoreGraphics/CGGeometry.h"
00028
00029
00030
00031
00032
00033
00034
00035 CPTopTabsBezelBorder = 0;
00036
00037
00038
00039
00040
00041
00042
00043
00044 CPNoTabsBezelBorder = 4;
00045
00046
00047
00048
00049
00050 CPNoTabsLineBorder = 5;
00051
00052
00053
00054
00055
00056 CPNoTabsNoBorder = 6;
00057
00058 var CPTabViewBezelBorderLeftImage = nil,
00059 CPTabViewBackgroundCenterImage = nil,
00060 CPTabViewBezelBorderRightImage = nil,
00061 CPTabViewBezelBorderColor = nil,
00062 CPTabViewBezelBorderBackgroundColor = nil;
00063
00064 var LEFT_INSET = 7.0,
00065 RIGHT_INSET = 7.0;
00066
00067 var CPTabViewDidSelectTabViewItemSelector = 1,
00068 CPTabViewShouldSelectTabViewItemSelector = 2,
00069 CPTabViewWillSelectTabViewItemSelector = 4,
00070 CPTabViewDidChangeNumberOfTabViewItemsSelector = 8;
00071
00080 @implementation CPTabView : CPView
00081 {
00082 CPView _labelsView;
00083 CPView _backgroundView;
00084 CPView _separatorView;
00085
00086 CPView _auxiliaryView;
00087 CPView _contentView;
00088
00089 CPArray _tabViewItems;
00090 CPTabViewItem _selectedTabViewItem;
00091
00092 CPTabViewType _tabViewType;
00093
00094 id _delegate;
00095 unsigned _delegateSelectors;
00096 }
00097
00098
00099
00100
00101 + (void)initialize
00102 {
00103 if (self != CPTabView)
00104 return;
00105
00106 var bundle = [CPBundle bundleForClass:self],
00107
00108 emptyImage = [[CPImage alloc] initByReferencingFile:@"" size:CGSizeMake(7.0, 0.0)],
00109 backgroundImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/CPTabViewBezelBackgroundCenter.png"] size:CGSizeMake(1.0, 1.0)],
00110
00111 bezelBorderLeftImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/CPTabViewBezelBorderLeft.png"] size:CGSizeMake(7.0, 1.0)],
00112 bezerBorderImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/CPTabViewBezelBorder.png"] size:CGSizeMake(1.0, 1.0)],
00113 bezelBorderRightImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/CPTabViewBezelBorderRight.png"] size:CGSizeMake(7.0, 1.0)];
00114
00115 CPTabViewBezelBorderBackgroundColor = [CPColor colorWithPatternImage:[[CPNinePartImage alloc] initWithImageSlices:
00116 [
00117 emptyImage,
00118 emptyImage,
00119 emptyImage,
00120
00121 bezelBorderLeftImage,
00122 backgroundImage,
00123 bezelBorderRightImage,
00124
00125 bezelBorderLeftImage,
00126 bezerBorderImage,
00127 bezelBorderRightImage
00128 ]]];
00129
00130 CPTabViewBezelBorderColor = [CPColor colorWithPatternImage:bezerBorderImage];
00131 }
00132
00133
00134
00135
00136 + (CPColor)bezelBorderColor
00137 {
00138 return CPTabViewBezelBorderColor;
00139 }
00140
00141 - (id)initWithFrame:(CGRect)aFrame
00142 {
00143 self = [super initWithFrame:aFrame];
00144
00145 if (self)
00146 {
00147 _tabViewType = CPTopTabsBezelBorder;
00148 _tabViewItems = [];
00149 }
00150
00151 return self;
00152 }
00153
00154 - (void)viewDidMoveToWindow
00155 {
00156 if (_tabViewType != CPTopTabsBezelBorder || _labelsView)
00157 return;
00158
00159 [self _createBezelBorder];
00160 [self layoutSubviews];
00161 }
00162
00163
00164 - (void)_createBezelBorder
00165 {
00166 var bounds = [self bounds];
00167
00168 _labelsView = [[_CPTabLabelsView alloc] initWithFrame:CGRectMake(0.0, 0.0, CGRectGetWidth(bounds), 0.0)];
00169
00170 [_labelsView setTabView:self];
00171 [_labelsView setAutoresizingMask:CPViewWidthSizable];
00172
00173 [self addSubview:_labelsView];
00174
00175 _backgroundView = [[CPView alloc] initWithFrame:CGRectMakeZero()];
00176
00177 [_backgroundView setBackgroundColor:CPTabViewBezelBorderBackgroundColor];
00178
00179 [_backgroundView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable];
00180
00181 [self addSubview:_backgroundView];
00182
00183 _separatorView = [[CPView alloc] initWithFrame:CGRectMakeZero()];
00184
00185 [_separatorView setBackgroundColor:[[self class] bezelBorderColor]];
00186 [_separatorView setAutoresizingMask:CPViewWidthSizable | CPViewMaxYMargin];
00187
00188 [self addSubview:_separatorView];
00189 }
00190
00191
00192
00193
00194
00195 - (void)layoutSubviews
00196 {
00197 if (_tabViewType == CPTopTabsBezelBorder)
00198 {
00199 var backgroundRect = [self bounds],
00200 labelsViewHeight = [_CPTabLabelsView height];
00201
00202 backgroundRect.origin.y += labelsViewHeight;
00203 backgroundRect.size.height -= labelsViewHeight;
00204
00205 [_backgroundView setFrame:backgroundRect];
00206
00207 var auxiliaryViewHeight = 5.0;
00208
00209 if (_auxiliaryView)
00210 {
00211 auxiliaryViewHeight = CGRectGetHeight([_auxiliaryView frame]);
00212
00213 [_auxiliaryView setFrame:CGRectMake(LEFT_INSET, labelsViewHeight, CGRectGetWidth(backgroundRect) - LEFT_INSET - RIGHT_INSET, auxiliaryViewHeight)];
00214 }
00215
00216 [_separatorView setFrame:CGRectMake(LEFT_INSET, labelsViewHeight + auxiliaryViewHeight, CGRectGetWidth(backgroundRect) - LEFT_INSET - RIGHT_INSET, 1.0)];
00217 }
00218
00219
00220 [_contentView setFrame:[self contentRect]];
00221 }
00222
00223
00228 - (void)addTabViewItem:(CPTabViewItem)aTabViewItem
00229 {
00230 [self insertTabViewItem:aTabViewItem atIndex:[_tabViewItems count]];
00231 }
00232
00239 - (void)insertTabViewItem:(CPTabViewItem)aTabViewItem atIndex:(unsigned)anIndex
00240 {
00241 [_tabViewItems insertObject:aTabViewItem atIndex:anIndex];
00242
00243 [_labelsView tabView:self didAddTabViewItem:aTabViewItem];
00244
00245 if ([_tabViewItems count] == 1)
00246 [self selectFirstTabViewItem:self];
00247
00248 if (_delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector)
00249 [_delegate tabViewDidChangeNumberOfTabViewItems:self];
00250 }
00251
00256 - (void)removeTabViewItem:(CPTabViewItem)aTabViewItem
00257 {
00258 [_tabViewItems removeObjectIdenticalTo:aTabViewItem];
00259
00260 [_labelsView tabView:self didRemoveTabViewItem:aTabViewItem];
00261
00262 if (_delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector)
00263 [_delegate tabViewDidChangeNumberOfTabViewItems:self];
00264 }
00265
00266
00271 - (int)indexOfTabViewItem:(CPTabViewItem)aTabViewItem
00272 {
00273 return [_tabViewItems indexOfObjectIdenticalTo:aTabViewItem];
00274 }
00275
00280 - (int)indexOfTabViewItemWithIdentifier:(CPString)anIdentifier
00281 {
00282 var index = 0,
00283 count = [_tabViewItems count];
00284
00285 for (; index < count; ++index)
00286 if ([[_tabViewItems[index] identifier] isEqualTo:anIdentifier])
00287 return index;
00288
00289 return index;
00290 }
00291
00295 - (unsigned)numberOfTabViewItems
00296 {
00297 return [_tabViewItems count];
00298 }
00299
00303 - (CPTabViewItem)tabViewItemAtIndex:(unsigned)anIndex
00304 {
00305 return _tabViewItems[anIndex];
00306 }
00307
00311 - (CPArray)tabViewItems
00312 {
00313 return _tabViewItems;
00314 }
00315
00316
00321 - (void)selectFirstTabViewItem:(id)aSender
00322 {
00323 var count = [_tabViewItems count];
00324
00325 if (count)
00326 [self selectTabViewItemAtIndex:0];
00327 }
00328
00333 - (void)selectLastTabViewItem:(id)aSender
00334 {
00335 var count = [_tabViewItems count];
00336
00337 if (count)
00338 [self selectTabViewItemAtIndex:count - 1];
00339 }
00340
00345 - (void)selectNextTabViewItem:(id)aSender
00346 {
00347 if (!_selectedTabViewItem)
00348 return;
00349
00350 var index = [self indexOfTabViewItem:_selectedTabViewItem],
00351 count = [_tabViewItems count];
00352
00353 [self selectTabViewItemAtIndex:index + 1 % count];
00354 }
00355
00360 - (void)selectPreviousTabViewItem:(id)aSender
00361 {
00362 if (!_selectedTabViewItem)
00363 return;
00364
00365 var index = [self indexOfTabViewItem:_selectedTabViewItem],
00366 count = [_tabViewItems count];
00367
00368 [self selectTabViewItemAtIndex:index == 0 ? count : index - 1];
00369 }
00370
00375 - (void)selectTabViewItem:(CPTabViewItem)aTabViewItem
00376 {
00377 if ((_delegateSelectors & CPTabViewShouldSelectTabViewItemSelector) && ![_delegate tabView:self shouldSelectTabViewItem:aTabViewItem])
00378 return;
00379
00380 if (_delegateSelectors & CPTabViewWillSelectTabViewItemSelector)
00381 [_delegate tabView:self willSelectTabViewItem:aTabViewItem];
00382
00383 if (_selectedTabViewItem)
00384 {
00385 _selectedTabViewItem._tabState = CPBackgroundTab;
00386 [_labelsView tabView:self didChangeStateOfTabViewItem:_selectedTabViewItem];
00387
00388 [_contentView removeFromSuperview];
00389 [_auxiliaryView removeFromSuperview];
00390 }
00391 _selectedTabViewItem = aTabViewItem;
00392
00393 _selectedTabViewItem._tabState = CPSelectedTab;
00394
00395 _contentView = [_selectedTabViewItem view];
00396 [_contentView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable];
00397
00398 _auxiliaryView = [_selectedTabViewItem auxiliaryView];
00399 [_auxiliaryView setAutoresizingMask:CPViewWidthSizable];
00400
00401 [self addSubview:_contentView];
00402
00403 if (_auxiliaryView)
00404 [self addSubview:_auxiliaryView];
00405
00406 [_labelsView tabView:self didChangeStateOfTabViewItem:_selectedTabViewItem];
00407
00408 [self layoutSubviews];
00409
00410 if (_delegateSelectors & CPTabViewDidSelectTabViewItemSelector)
00411 [_delegate tabView:self didSelectTabViewItem:aTabViewItem];
00412 }
00413
00418 - (void)selectTabViewItemAtIndex:(unsigned)anIndex
00419 {
00420 [self selectTabViewItem:_tabViewItems[anIndex]];
00421 }
00422
00426 - (CPTabViewItem)selectedTabViewItem
00427 {
00428 return _selectedTabViewItem;
00429 }
00430
00431
00436 - (void)setTabViewType:(CPTabViewType)aTabViewType
00437 {
00438 if (_tabViewType == aTabViewType)
00439 return;
00440
00441 _tabViewType = aTabViewType;
00442
00443 if (_tabViewType == CPNoTabsBezelBorder || _tabViewType == CPNoTabsLineBorder || _tabViewType == CPNoTabsNoBorder)
00444 [_labelsView removeFromSuperview];
00445 else if (![_labelsView superview])
00446 [self addSubview:_lablesView];
00447
00448 if (_tabViewType == CPNoTabsLineBorder || _tabViewType == CPNoTabsNoBorder)
00449 [_backgroundView removeFromSuperview];
00450 else if (![_backgroundView superview])
00451 [self addSubview:_backgroundView];
00452
00453 [self layoutSubviews];
00454 }
00455
00459 - (CPTabViewType)tabViewType
00460 {
00461 return _tabViewType;
00462 }
00463
00464
00468 - (CGRect)contentRect
00469 {
00470 var contentRect = CGRectMakeCopy([self bounds]);
00471
00472 if (_tabViewType == CPTopTabsBezelBorder)
00473 {
00474 var labelsViewHeight = [_CPTabLabelsView height],
00475 auxiliaryViewHeight = _auxiliaryView ? CGRectGetHeight([_auxiliaryView frame]) : 5.0,
00476 separatorViewHeight = 1.0;
00477
00478 contentRect.origin.y += labelsViewHeight + auxiliaryViewHeight + separatorViewHeight;
00479 contentRect.size.height -= labelsViewHeight + auxiliaryViewHeight + separatorViewHeight * 2.0;
00480
00481 contentRect.origin.x += LEFT_INSET;
00482 contentRect.size.width -= LEFT_INSET + RIGHT_INSET;
00483 }
00484
00485 return contentRect;
00486 }
00487
00492 - (void)setDelegate:(id)aDelegate
00493 {
00494 if (_delegate == aDelegate)
00495 return;
00496
00497 _delegate = aDelegate;
00498
00499 _delegateSelectors = 0;
00500
00501 if ([_delegate respondsToSelector:@selector(tabView:shouldSelectTabViewItem:)])
00502 _delegateSelectors |= CPTabViewShouldSelectTabViewItemSelector;
00503
00504 if ([_delegate respondsToSelector:@selector(tabView:willSelectTabViewItem:)])
00505 _delegateSelectors |= CPTabViewWillSelectTabViewItemSelector;
00506
00507 if ([_delegate respondsToSelector:@selector(tabView:didSelectTabViewItem:)])
00508 _delegateSelectors |= CPTabViewDidSelectTabViewItemSelector;
00509
00510 if ([_delegate respondsToSelector:@selector(tabViewDidChangeNumberOfTabViewItems:)])
00511 _delegateSelectors |= CPTabViewDidChangeNumberOfTabViewItemsSelector;
00512 }
00513
00514
00515
00516 - (void)mouseDown:(CPEvent)anEvent
00517 {
00518 var location = [_labelsView convertPoint:[anEvent locationInWindow] fromView:nil],
00519 tabViewItem = [_labelsView representedTabViewItemAtPoint:location];
00520
00521 if (tabViewItem)
00522 [self selectTabViewItem:tabViewItem];
00523 }
00524
00525 @end
00526
00527 var CPTabViewItemsKey = "CPTabViewItemsKey",
00528 CPTabViewSelectedItemKey = "CPTabViewSelectedItemKey",
00529 CPTabViewTypeKey = "CPTabViewTypeKey",
00530 CPTabViewDelegateKey = "CPTabViewDelegateKey";
00531
00532 @implementation CPTabView (CPCoding)
00533
00534 - (id)initWithCoder:(CPCoder)aCoder
00535 {
00536 if (self = [super initWithCoder:aCoder])
00537 {
00538 _tabViewType = [aCoder decodeIntForKey:CPTabViewTypeKey];
00539 _tabViewItems = [];
00540
00541
00542 [self _createBezelBorder];
00543
00544 var items = [aCoder decodeObjectForKey:CPTabViewItemsKey];
00545 for (var i = 0; items && i < items.length; i++)
00546 [self insertTabViewItem:items[i] atIndex:i];
00547
00548 var selected = [aCoder decodeObjectForKey:CPTabViewSelectedItemKey];
00549 if (selected)
00550 [self selectTabViewItem:selected];
00551
00552 [self setDelegate:[aCoder decodeObjectForKey:CPTabViewDelegateKey]];
00553 }
00554
00555 return self;
00556 }
00557
00558 - (void)encodeWithCoder:(CPCoder)aCoder
00559 {
00560 var actualSubviews = _subviews;
00561 _subviews = [];
00562 [super encodeWithCoder:aCoder];
00563 _subviews = actualSubviews;
00564
00565 [aCoder encodeObject:_tabViewItems forKey:CPTabViewItemsKey];;
00566 [aCoder encodeObject:_selectedTabViewItem forKey:CPTabViewSelectedItemKey];
00567
00568 [aCoder encodeInt:_tabViewType forKey:CPTabViewTypeKey];
00569
00570 [aCoder encodeConditionalObject:_delegate forKey:CPTabViewDelegateKey];
00571 }
00572
00573 @end
00574
00575
00576 var _CPTabLabelsViewBackgroundColor = nil,
00577 _CPTabLabelsViewInsideMargin = 10.0,
00578 _CPTabLabelsViewOutsideMargin = 15.0;
00579
00580
00581 @implementation _CPTabLabelsView : CPView
00582 {
00583 CPTabView _tabView;
00584 CPDictionary _tabLabels;
00585 }
00586
00587 + (void)initialize
00588 {
00589 if (self != [_CPTabLabelsView class])
00590 return;
00591
00592 var bundle = [CPBundle bundleForClass:self];
00593
00594 _CPTabLabelsViewBackgroundColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices:
00595 [
00596 [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelsViewLeft.png"] size:CGSizeMake(12.0, 26.0)],
00597 [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelsViewCenter.png"] size:CGSizeMake(1.0, 26.0)],
00598 [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelsViewRight.png"] size:CGSizeMake(12.0, 26.0)]
00599 ] isVertical:NO]];
00600 }
00601
00602 + (float)height
00603 {
00604 return 26.0;
00605 }
00606
00607 - (id)initWithFrame:(CGRect)aFrame
00608 {
00609 self = [super initWithFrame:aFrame];
00610
00611 if (self)
00612 {
00613 _tabLabels = [];
00614
00615 [self setBackgroundColor:_CPTabLabelsViewBackgroundColor];
00616
00617 [self setFrameSize:CGSizeMake(CGRectGetWidth(aFrame), 26.0)];
00618 }
00619
00620 return self;
00621 }
00622
00623 - (void)setTabView:(CPTabView)aTabView
00624 {
00625 _tabView = aTabView;
00626 }
00627
00628 - (CPTabView)tabView
00629 {
00630 return _tabView;
00631 }
00632
00633 - (void)tabView:(CPTabView)aTabView didAddTabViewItem:(CPTabViewItem)aTabViewItem
00634 {
00635 var label = [[_CPTabLabel alloc] initWithFrame:CGRectMakeZero()];
00636
00637 [label setTabViewItem:aTabViewItem];
00638
00639 _tabLabels.push(label);
00640
00641 [self addSubview:label];
00642
00643 [self layoutSubviews];
00644 }
00645
00646 - (void)tabView:(CPTabView)aTabView didRemoveTabViewItem:(CPTabViewItem)aTabViewItem
00647 {
00648 var index = [aTabView indexOfTabViewItem:aTabViewItem],
00649 label = _tabLabels[index];
00650
00651 [_tabLabels removeObjectAtIndex:index];
00652
00653 [label removeFromSuperview];
00654
00655 [self layoutSubviews];
00656 }
00657
00658 -(void)tabView:(CPTabView)aTabView didChangeStateOfTabViewItem:(CPTabViewItem)aTabViewItem
00659 {
00660 [_tabLabels[[aTabView indexOfTabViewItem:aTabViewItem]] setTabState:[aTabViewItem tabState]];
00661 }
00662
00663 - (CPTabViewItem)representedTabViewItemAtPoint:(CGPoint)aPoint
00664 {
00665 var index = 0,
00666 count = _tabLabels.length;
00667
00668 for (; index < count; ++index)
00669 {
00670 var label = _tabLabels[index];
00671
00672 if (CGRectContainsPoint([label frame], aPoint))
00673 return [label tabViewItem];
00674 }
00675
00676 return nil;
00677 }
00678
00679 - (void)layoutSubviews
00680 {
00681 var index = 0,
00682 count = _tabLabels.length,
00683 width = (_CGRectGetWidth([self bounds]) - (count - 1) * _CPTabLabelsViewInsideMargin - 2 * _CPTabLabelsViewOutsideMargin) / count,
00684 x = _CPTabLabelsViewOutsideMargin;
00685
00686 for (; index < count; ++index)
00687 {
00688 var label = _tabLabels[index],
00689 frame = _CGRectMake(x, 8.0, width, 18.0);
00690
00691 [label setFrame:frame];
00692
00693 x = _CGRectGetMaxX(frame) + _CPTabLabelsViewInsideMargin;
00694 }
00695 }
00696
00697 - (void)setFrameSize:(CGSize)aSize
00698 {
00699 if (CGSizeEqualToSize([self frame].size, aSize))
00700 return;
00701
00702 [super setFrameSize:aSize];
00703
00704 [self layoutSubviews];
00705 }
00706
00707 @end
00708
00709 var _CPTabLabelBackgroundColor = nil,
00710 _CPTabLabelSelectedBackgroundColor = nil;
00711
00712
00713 @implementation _CPTabLabel : CPView
00714 {
00715 CPTabViewItem _tabViewItem;
00716 CPTextField _labelField;
00717 }
00718
00719 + (void)initialize
00720 {
00721 if (self != [_CPTabLabel class])
00722 return;
00723
00724 var bundle = [CPBundle bundleForClass:self];
00725
00726 _CPTabLabelBackgroundColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices:
00727 [
00728 [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelBackgroundLeft.png"] size:CGSizeMake(6.0, 18.0)],
00729 [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelBackgroundCenter.png"] size:CGSizeMake(1.0, 18.0)],
00730 [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelBackgroundRight.png"] size:CGSizeMake(6.0, 18.0)]
00731 ] isVertical:NO]];
00732
00733 _CPTabLabelSelectedBackgroundColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices:
00734 [
00735 [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelSelectedLeft.png"] size:CGSizeMake(3.0, 18.0)],
00736 [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelSelectedCenter.png"] size:CGSizeMake(1.0, 18.0)],
00737 [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelSelectedRight.png"] size:CGSizeMake(3.0, 18.0)]
00738 ] isVertical:NO]];
00739 }
00740
00741 - (id)initWithFrame:(CGRect)aFrame
00742 {
00743 self = [super initWithFrame:aFrame];
00744
00745 if (self)
00746 {
00747 _labelField = [[CPTextField alloc] initWithFrame:CGRectMakeZero()];
00748
00749 [_labelField setAlignment:CPCenterTextAlignment];
00750 [_labelField setFrame:CGRectMake(5.0, 0.0, CGRectGetWidth(aFrame) - 10.0, 20.0)];
00751 [_labelField setAutoresizingMask:CPViewWidthSizable];
00752 [_labelField setFont:[CPFont boldSystemFontOfSize:11.0]];
00753
00754 [self addSubview:_labelField];
00755
00756 [self setTabState:CPBackgroundTab];
00757 }
00758
00759 return self;
00760 }
00761
00762 - (void)setTabState:(CPTabState)aTabState
00763 {
00764 [self setBackgroundColor:aTabState == CPSelectedTab ? _CPTabLabelSelectedBackgroundColor : _CPTabLabelBackgroundColor];
00765 }
00766
00767 - (void)setTabViewItem:(CPTabViewItem)aTabViewItem
00768 {
00769 _tabViewItem = aTabViewItem;
00770
00771 [self update];
00772 }
00773
00774 - (CPTabViewItem)tabViewItem
00775 {
00776 return _tabViewItem;
00777 }
00778
00779 - (void)update
00780 {
00781 [_labelField setStringValue:[_tabViewItem label]];
00782 }
00783
00784 @end