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
00082 @implementation CPTabView : CPView
00083 {
00084 CPView _labelsView;
00085 CPView _backgroundView;
00086 CPView _separatorView;
00087
00088 CPView _auxiliaryView;
00089 CPView _contentView;
00090
00091 CPArray _tabViewItems;
00092 CPTabViewItem _selectedTabViewItem;
00093
00094 CPTabViewType _tabViewType;
00095
00096 id _delegate;
00097 unsigned _delegateSelectors;
00098 }
00099
00100
00101
00102
00103 + (void)initialize
00104 {
00105 if (self != CPTabView)
00106 return;
00107
00108 var bundle = [CPBundle bundleForClass:self],
00109
00110 emptyImage = [[CPImage alloc] initByReferencingFile:@"" size:CGSizeMake(7.0, 0.0)],
00111 backgroundImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/CPTabViewBezelBackgroundCenter.png"] size:CGSizeMake(1.0, 1.0)],
00112
00113 bezelBorderLeftImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/CPTabViewBezelBorderLeft.png"] size:CGSizeMake(7.0, 1.0)],
00114 bezerBorderImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/CPTabViewBezelBorder.png"] size:CGSizeMake(1.0, 1.0)],
00115 bezelBorderRightImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/CPTabViewBezelBorderRight.png"] size:CGSizeMake(7.0, 1.0)];
00116
00117 CPTabViewBezelBorderBackgroundColor = [CPColor colorWithPatternImage:[[CPNinePartImage alloc] initWithImageSlices:
00118 [
00119 emptyImage,
00120 emptyImage,
00121 emptyImage,
00122
00123 bezelBorderLeftImage,
00124 backgroundImage,
00125 bezelBorderRightImage,
00126
00127 bezelBorderLeftImage,
00128 bezerBorderImage,
00129 bezelBorderRightImage
00130 ]]];
00131
00132 CPTabViewBezelBorderColor = [CPColor colorWithPatternImage:bezerBorderImage];
00133 }
00134
00135
00136
00137
00138 + (CPColor)bezelBorderColor
00139 {
00140 return CPTabViewBezelBorderColor;
00141 }
00142
00143 - (id)initWithFrame:(CGRect)aFrame
00144 {
00145 self = [super initWithFrame:aFrame];
00146
00147 if (self)
00148 {
00149 _tabViewType = CPTopTabsBezelBorder;
00150 _tabViewItems = [];
00151 }
00152
00153 return self;
00154 }
00155
00156 - (void)viewDidMoveToWindow
00157 {
00158 if (_tabViewType != CPTopTabsBezelBorder || _labelsView)
00159 return;
00160
00161 [self _createBezelBorder];
00162 [self layoutSubviews];
00163 }
00164
00165
00166 - (void)_createBezelBorder
00167 {
00168 var bounds = [self bounds];
00169
00170 _labelsView = [[_CPTabLabelsView alloc] initWithFrame:CGRectMake(0.0, 0.0, CGRectGetWidth(bounds), 0.0)];
00171
00172 [_labelsView setTabView:self];
00173 [_labelsView setAutoresizingMask:CPViewWidthSizable];
00174
00175 [self addSubview:_labelsView];
00176
00177 _backgroundView = [[CPView alloc] initWithFrame:CGRectMakeZero()];
00178
00179 [_backgroundView setBackgroundColor:CPTabViewBezelBorderBackgroundColor];
00180
00181 [_backgroundView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable];
00182
00183 [self addSubview:_backgroundView];
00184
00185 _separatorView = [[CPView alloc] initWithFrame:CGRectMakeZero()];
00186
00187 [_separatorView setBackgroundColor:[[self class] bezelBorderColor]];
00188 [_separatorView setAutoresizingMask:CPViewWidthSizable | CPViewMaxYMargin];
00189
00190 [self addSubview:_separatorView];
00191 }
00192
00193
00194
00195
00196
00197 - (void)layoutSubviews
00198 {
00199 if (_tabViewType == CPTopTabsBezelBorder)
00200 {
00201 var backgroundRect = [self bounds],
00202 labelsViewHeight = [_CPTabLabelsView height];
00203
00204 backgroundRect.origin.y += labelsViewHeight;
00205 backgroundRect.size.height -= labelsViewHeight;
00206
00207 [_backgroundView setFrame:backgroundRect];
00208
00209 var auxiliaryViewHeight = 5.0;
00210
00211 if (_auxiliaryView)
00212 {
00213 auxiliaryViewHeight = CGRectGetHeight([_auxiliaryView frame]);
00214
00215 [_auxiliaryView setFrame:CGRectMake(LEFT_INSET, labelsViewHeight, CGRectGetWidth(backgroundRect) - LEFT_INSET - RIGHT_INSET, auxiliaryViewHeight)];
00216 }
00217
00218 [_separatorView setFrame:CGRectMake(LEFT_INSET, labelsViewHeight + auxiliaryViewHeight, CGRectGetWidth(backgroundRect) - LEFT_INSET - RIGHT_INSET, 1.0)];
00219 }
00220
00221
00222 [_contentView setFrame:[self contentRect]];
00223 }
00224
00225
00230 - (void)addTabViewItem:(CPTabViewItem)aTabViewItem
00231 {
00232 [self insertTabViewItem:aTabViewItem atIndex:[_tabViewItems count]];
00233 }
00234
00241 - (void)insertTabViewItem:(CPTabViewItem)aTabViewItem atIndex:(unsigned)anIndex
00242 {
00243 if (!_labelsView && _tabViewType == CPTopTabsBezelBorder)
00244 [self _createBezelBorder];
00245
00246 [_tabViewItems insertObject:aTabViewItem atIndex:anIndex];
00247
00248 [_labelsView tabView:self didAddTabViewItem:aTabViewItem];
00249
00250 [aTabViewItem _setTabView:self];
00251
00252 if ([_tabViewItems count] == 1)
00253 [self selectFirstTabViewItem:self];
00254
00255 if (_delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector)
00256 [_delegate tabViewDidChangeNumberOfTabViewItems:self];
00257 }
00258
00263 - (void)removeTabViewItem:(CPTabViewItem)aTabViewItem
00264 {
00265 var index = [self indexOfTabViewItem:aTabViewItem];
00266
00267 [_tabViewItems removeObjectIdenticalTo:aTabViewItem];
00268
00269 [_labelsView tabView:self didRemoveTabViewItemAtIndex:index];
00270
00271 [aTabViewItem _setTabView:nil];
00272
00273 if (_delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector)
00274 [_delegate tabViewDidChangeNumberOfTabViewItems:self];
00275 }
00276
00277
00282 - (int)indexOfTabViewItem:(CPTabViewItem)aTabViewItem
00283 {
00284 return [_tabViewItems indexOfObjectIdenticalTo:aTabViewItem];
00285 }
00286
00291 - (int)indexOfTabViewItemWithIdentifier:(CPString)anIdentifier
00292 {
00293 var index = 0,
00294 count = [_tabViewItems count];
00295
00296 for (; index < count; ++index)
00297 if ([[_tabViewItems[index] identifier] isEqual:anIdentifier])
00298 return index;
00299
00300 return index;
00301 }
00302
00306 - (unsigned)numberOfTabViewItems
00307 {
00308 return [_tabViewItems count];
00309 }
00310
00314 - (CPTabViewItem)tabViewItemAtIndex:(unsigned)anIndex
00315 {
00316 return _tabViewItems[anIndex];
00317 }
00318
00322 - (CPArray)tabViewItems
00323 {
00324 return _tabViewItems;
00325 }
00326
00327
00332 - (void)selectFirstTabViewItem:(id)aSender
00333 {
00334 var count = [_tabViewItems count];
00335
00336 if (count)
00337 [self selectTabViewItemAtIndex:0];
00338 }
00339
00344 - (void)selectLastTabViewItem:(id)aSender
00345 {
00346 var count = [_tabViewItems count];
00347
00348 if (count)
00349 [self selectTabViewItemAtIndex:count - 1];
00350 }
00351
00356 - (void)selectNextTabViewItem:(id)aSender
00357 {
00358 if (!_selectedTabViewItem)
00359 return;
00360
00361 var index = [self indexOfTabViewItem:_selectedTabViewItem],
00362 count = [_tabViewItems count];
00363
00364 [self selectTabViewItemAtIndex:index + 1 % count];
00365 }
00366
00371 - (void)selectPreviousTabViewItem:(id)aSender
00372 {
00373 if (!_selectedTabViewItem)
00374 return;
00375
00376 var index = [self indexOfTabViewItem:_selectedTabViewItem],
00377 count = [_tabViewItems count];
00378
00379 [self selectTabViewItemAtIndex:index == 0 ? count : index - 1];
00380 }
00381
00386 - (void)selectTabViewItem:(CPTabViewItem)aTabViewItem
00387 {
00388 if ((_delegateSelectors & CPTabViewShouldSelectTabViewItemSelector) && ![_delegate tabView:self shouldSelectTabViewItem:aTabViewItem])
00389 return;
00390
00391 if (_delegateSelectors & CPTabViewWillSelectTabViewItemSelector)
00392 [_delegate tabView:self willSelectTabViewItem:aTabViewItem];
00393
00394 if (_selectedTabViewItem)
00395 {
00396 _selectedTabViewItem._tabState = CPBackgroundTab;
00397 [_labelsView tabView:self didChangeStateOfTabViewItem:_selectedTabViewItem];
00398
00399 [_contentView removeFromSuperview];
00400 [_auxiliaryView removeFromSuperview];
00401 }
00402 _selectedTabViewItem = aTabViewItem;
00403
00404 _selectedTabViewItem._tabState = CPSelectedTab;
00405
00406 _contentView = [_selectedTabViewItem view];
00407 [_contentView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable];
00408
00409 _auxiliaryView = [_selectedTabViewItem auxiliaryView];
00410 [_auxiliaryView setAutoresizingMask:CPViewWidthSizable];
00411
00412 [self addSubview:_contentView];
00413
00414 if (_auxiliaryView)
00415 [self addSubview:_auxiliaryView];
00416
00417 [_labelsView tabView:self didChangeStateOfTabViewItem:_selectedTabViewItem];
00418
00419 [self layoutSubviews];
00420
00421 if (_delegateSelectors & CPTabViewDidSelectTabViewItemSelector)
00422 [_delegate tabView:self didSelectTabViewItem:aTabViewItem];
00423 }
00424
00429 - (void)selectTabViewItemAtIndex:(unsigned)anIndex
00430 {
00431 [self selectTabViewItem:_tabViewItems[anIndex]];
00432 }
00433
00437 - (CPTabViewItem)selectedTabViewItem
00438 {
00439 return _selectedTabViewItem;
00440 }
00441
00442
00447 - (void)setTabViewType:(CPTabViewType)aTabViewType
00448 {
00449 if (_tabViewType == aTabViewType)
00450 return;
00451
00452 _tabViewType = aTabViewType;
00453
00454 if (_tabViewType == CPNoTabsBezelBorder || _tabViewType == CPNoTabsLineBorder || _tabViewType == CPNoTabsNoBorder)
00455 [_labelsView removeFromSuperview];
00456 else if (![_labelsView superview])
00457 [self addSubview:_labelsView];
00458
00459 if (_tabViewType == CPNoTabsLineBorder || _tabViewType == CPNoTabsNoBorder)
00460 [_backgroundView removeFromSuperview];
00461 else if (![_backgroundView superview])
00462 [self addSubview:_backgroundView];
00463
00464 [self layoutSubviews];
00465 }
00466
00470 - (CPTabViewType)tabViewType
00471 {
00472 return _tabViewType;
00473 }
00474
00475
00479 - (CGRect)contentRect
00480 {
00481 var contentRect = CGRectMakeCopy([self bounds]);
00482
00483 if (_tabViewType == CPTopTabsBezelBorder)
00484 {
00485 var labelsViewHeight = [_CPTabLabelsView height],
00486 auxiliaryViewHeight = _auxiliaryView ? CGRectGetHeight([_auxiliaryView frame]) : 5.0,
00487 separatorViewHeight = 1.0;
00488
00489 contentRect.origin.y += labelsViewHeight + auxiliaryViewHeight + separatorViewHeight;
00490 contentRect.size.height -= labelsViewHeight + auxiliaryViewHeight + separatorViewHeight * 2.0;
00491
00492 contentRect.origin.x += LEFT_INSET;
00493 contentRect.size.width -= LEFT_INSET + RIGHT_INSET;
00494 }
00495
00496 return contentRect;
00497 }
00498
00502 - (id)delegate
00503 {
00504 return _delegate;
00505 }
00506
00511 - (void)setDelegate:(id)aDelegate
00512 {
00513 if (_delegate == aDelegate)
00514 return;
00515
00516 _delegate = aDelegate;
00517
00518 _delegateSelectors = 0;
00519
00520 if ([_delegate respondsToSelector:@selector(tabView:shouldSelectTabViewItem:)])
00521 _delegateSelectors |= CPTabViewShouldSelectTabViewItemSelector;
00522
00523 if ([_delegate respondsToSelector:@selector(tabView:willSelectTabViewItem:)])
00524 _delegateSelectors |= CPTabViewWillSelectTabViewItemSelector;
00525
00526 if ([_delegate respondsToSelector:@selector(tabView:didSelectTabViewItem:)])
00527 _delegateSelectors |= CPTabViewDidSelectTabViewItemSelector;
00528
00529 if ([_delegate respondsToSelector:@selector(tabViewDidChangeNumberOfTabViewItems:)])
00530 _delegateSelectors |= CPTabViewDidChangeNumberOfTabViewItemsSelector;
00531 }
00532
00533
00534
00535 - (void)mouseDown:(CPEvent)anEvent
00536 {
00537 var location = [_labelsView convertPoint:[anEvent locationInWindow] fromView:nil],
00538 tabViewItem = [_labelsView representedTabViewItemAtPoint:location];
00539
00540 if (tabViewItem)
00541 [self selectTabViewItem:tabViewItem];
00542 }
00543
00544 @end
00545
00546 var CPTabViewItemsKey = "CPTabViewItemsKey",
00547 CPTabViewSelectedItemKey = "CPTabViewSelectedItemKey",
00548 CPTabViewTypeKey = "CPTabViewTypeKey",
00549 CPTabViewDelegateKey = "CPTabViewDelegateKey";
00550
00551 @implementation CPTabView (CPCoding)
00552
00553 - (id)initWithCoder:(CPCoder)aCoder
00554 {
00555 if (self = [super initWithCoder:aCoder])
00556 {
00557 _tabViewType = [aCoder decodeIntForKey:CPTabViewTypeKey];
00558 _tabViewItems = [];
00559
00560
00561 [self _createBezelBorder];
00562
00563 var items = [aCoder decodeObjectForKey:CPTabViewItemsKey];
00564 for (var i = 0; items && i < items.length; i++)
00565 [self insertTabViewItem:items[i] atIndex:i];
00566
00567 var selected = [aCoder decodeObjectForKey:CPTabViewSelectedItemKey];
00568 if (selected)
00569 [self selectTabViewItem:selected];
00570
00571 [self setDelegate:[aCoder decodeObjectForKey:CPTabViewDelegateKey]];
00572 }
00573
00574 return self;
00575 }
00576
00577 - (void)encodeWithCoder:(CPCoder)aCoder
00578 {
00579 var actualSubviews = _subviews;
00580 _subviews = [];
00581 [super encodeWithCoder:aCoder];
00582 _subviews = actualSubviews;
00583
00584 [aCoder encodeObject:_tabViewItems forKey:CPTabViewItemsKey];;
00585 [aCoder encodeObject:_selectedTabViewItem forKey:CPTabViewSelectedItemKey];
00586
00587 [aCoder encodeInt:_tabViewType forKey:CPTabViewTypeKey];
00588
00589 [aCoder encodeConditionalObject:_delegate forKey:CPTabViewDelegateKey];
00590 }
00591
00592 @end
00593
00594
00595 var _CPTabLabelsViewBackgroundColor = nil,
00596 _CPTabLabelsViewInsideMargin = 10.0,
00597 _CPTabLabelsViewOutsideMargin = 15.0;
00598
00599
00600 @implementation _CPTabLabelsView : CPView
00601 {
00602 CPTabView _tabView;
00603 CPDictionary _tabLabels;
00604 }
00605
00606 + (void)initialize
00607 {
00608 if (self != [_CPTabLabelsView class])
00609 return;
00610
00611 var bundle = [CPBundle bundleForClass:self];
00612
00613 _CPTabLabelsViewBackgroundColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices:
00614 [
00615 [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelsViewLeft.png"] size:CGSizeMake(12.0, 26.0)],
00616 [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelsViewCenter.png"] size:CGSizeMake(1.0, 26.0)],
00617 [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelsViewRight.png"] size:CGSizeMake(12.0, 26.0)]
00618 ] isVertical:NO]];
00619 }
00620
00621 + (float)height
00622 {
00623 return 26.0;
00624 }
00625
00626 - (id)initWithFrame:(CGRect)aFrame
00627 {
00628 self = [super initWithFrame:aFrame];
00629
00630 if (self)
00631 {
00632 _tabLabels = [];
00633
00634 [self setBackgroundColor:_CPTabLabelsViewBackgroundColor];
00635
00636 [self setFrameSize:CGSizeMake(CGRectGetWidth(aFrame), 26.0)];
00637 }
00638
00639 return self;
00640 }
00641
00642 - (void)setTabView:(CPTabView)aTabView
00643 {
00644 _tabView = aTabView;
00645 }
00646
00647 - (CPTabView)tabView
00648 {
00649 return _tabView;
00650 }
00651
00652 - (void)tabView:(CPTabView)aTabView didAddTabViewItem:(CPTabViewItem)aTabViewItem
00653 {
00654 var label = [[_CPTabLabel alloc] initWithFrame:CGRectMakeZero()];
00655
00656 [label setTabViewItem:aTabViewItem];
00657
00658 _tabLabels.push(label);
00659
00660 [self addSubview:label];
00661
00662 [self layoutSubviews];
00663 }
00664
00665 - (void)tabView:(CPTabView)aTabView didRemoveTabViewItemAtIndex:(unsigned)index
00666 {
00667 var label = _tabLabels[index];
00668
00669 [_tabLabels removeObjectAtIndex:index];
00670
00671 [label removeFromSuperview];
00672
00673 [self layoutSubviews];
00674 }
00675
00676 -(void)tabView:(CPTabView)aTabView didChangeStateOfTabViewItem:(CPTabViewItem)aTabViewItem
00677 {
00678 [_tabLabels[[aTabView indexOfTabViewItem:aTabViewItem]] setTabState:[aTabViewItem tabState]];
00679 }
00680
00681 - (CPTabViewItem)representedTabViewItemAtPoint:(CGPoint)aPoint
00682 {
00683 var index = 0,
00684 count = _tabLabels.length;
00685
00686 for (; index < count; ++index)
00687 {
00688 var label = _tabLabels[index];
00689
00690 if (CGRectContainsPoint([label frame], aPoint))
00691 return [label tabViewItem];
00692 }
00693
00694 return nil;
00695 }
00696
00697 - (void)layoutSubviews
00698 {
00699 var index = 0,
00700 count = _tabLabels.length,
00701 width = (_CGRectGetWidth([self bounds]) - (count - 1) * _CPTabLabelsViewInsideMargin - 2 * _CPTabLabelsViewOutsideMargin) / count,
00702 x = _CPTabLabelsViewOutsideMargin;
00703
00704 for (; index < count; ++index)
00705 {
00706 var label = _tabLabels[index],
00707 frame = _CGRectMake(x, 8.0, width, 18.0);
00708
00709 [label setFrame:frame];
00710
00711 x = _CGRectGetMaxX(frame) + _CPTabLabelsViewInsideMargin;
00712 }
00713 }
00714
00715 - (void)setFrameSize:(CGSize)aSize
00716 {
00717 if (CGSizeEqualToSize([self frame].size, aSize))
00718 return;
00719
00720 [super setFrameSize:aSize];
00721
00722 [self layoutSubviews];
00723 }
00724
00725 @end
00726
00727 var _CPTabLabelBackgroundColor = nil,
00728 _CPTabLabelSelectedBackgroundColor = nil;
00729
00730
00731 @implementation _CPTabLabel : CPView
00732 {
00733 CPTabViewItem _tabViewItem;
00734 CPTextField _labelField;
00735 }
00736
00737 + (void)initialize
00738 {
00739 if (self != [_CPTabLabel class])
00740 return;
00741
00742 var bundle = [CPBundle bundleForClass:self];
00743
00744 _CPTabLabelBackgroundColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices:
00745 [
00746 [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelBackgroundLeft.png"] size:CGSizeMake(6.0, 18.0)],
00747 [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelBackgroundCenter.png"] size:CGSizeMake(1.0, 18.0)],
00748 [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelBackgroundRight.png"] size:CGSizeMake(6.0, 18.0)]
00749 ] isVertical:NO]];
00750
00751 _CPTabLabelSelectedBackgroundColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices:
00752 [
00753 [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelSelectedLeft.png"] size:CGSizeMake(3.0, 18.0)],
00754 [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelSelectedCenter.png"] size:CGSizeMake(1.0, 18.0)],
00755 [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelSelectedRight.png"] size:CGSizeMake(3.0, 18.0)]
00756 ] isVertical:NO]];
00757 }
00758
00759 - (id)initWithFrame:(CGRect)aFrame
00760 {
00761 self = [super initWithFrame:aFrame];
00762
00763 if (self)
00764 {
00765 _labelField = [[CPTextField alloc] initWithFrame:CGRectMakeZero()];
00766
00767 [_labelField setAlignment:CPCenterTextAlignment];
00768 [_labelField setFrame:CGRectMake(5.0, 0.0, CGRectGetWidth(aFrame) - 10.0, 20.0)];
00769 [_labelField setAutoresizingMask:CPViewWidthSizable];
00770 [_labelField setFont:[CPFont boldSystemFontOfSize:11.0]];
00771
00772 [self addSubview:_labelField];
00773
00774 [self setTabState:CPBackgroundTab];
00775 }
00776
00777 return self;
00778 }
00779
00780 - (void)setTabState:(CPTabState)aTabState
00781 {
00782 [self setBackgroundColor:aTabState == CPSelectedTab ? _CPTabLabelSelectedBackgroundColor : _CPTabLabelBackgroundColor];
00783 }
00784
00785 - (void)setTabViewItem:(CPTabViewItem)aTabViewItem
00786 {
00787 _tabViewItem = aTabViewItem;
00788
00789 [self update];
00790 }
00791
00792 - (CPTabViewItem)tabViewItem
00793 {
00794 return _tabViewItem;
00795 }
00796
00797 - (void)update
00798 {
00799 [_labelField setStringValue:[_tabViewItem label]];
00800 }
00801
00802 @end