6 BOOL _hasResizeControl;
7 BOOL _resizeControlIsLeftAligned;
13 var button = [[
CPButton alloc] initWithFrame:CGRectMake(0, 0, 35, 25)],
16 [button setBordered:NO];
17 [button setImage:image];
18 [button setImagePosition:CPImageOnly];
25 var button = [[
CPButton alloc] initWithFrame:CGRectMake(0, 0, 35, 25)],
28 [button setBordered:NO];
29 [button setImage:image];
30 [button setImagePosition:CPImageOnly];
35 + (id)actionPopupButton
40 [button addItemWithTitle:nil];
41 [[button lastItem] setImage:image];
42 [button setImagePosition:CPImageOnly];
43 [button setValue:CGInsetMake(0, 0, 0, 0) forThemeAttribute:"content-inset"];
45 [button setPullsDown:YES];
58 forKeys:[@"resize-control-inset", @"resize-control-size", @"resize-control-color", @"bezel-color", @"button-bezel-color", @"button-text-color"]];
61 - (id)initWithFrame:(CGRect)aFrame
83 var viewIndex = [[view subviews] indexOfObject:subview];
84 [view setButtonBar:self forDividerAtIndex:viewIndex];
90 view = [view superview];
98 for (var i = 0, count = [_buttons count]; i < count; i++)
99 [_buttons[i] setBordered:YES];
109 - (void)setHasResizeControl:(BOOL)shouldHaveResizeControl
111 if (_hasResizeControl === shouldHaveResizeControl)
114 _hasResizeControl = !!shouldHaveResizeControl;
118 - (BOOL)hasResizeControl
120 return _hasResizeControl;
123 - (void)setResizeControlIsLeftAligned:(BOOL)shouldBeLeftAligned
125 if (_resizeControlIsLeftAligned === shouldBeLeftAligned)
128 _resizeControlIsLeftAligned = !!shouldBeLeftAligned;
132 - (BOOL)resizeControlIsLeftAligned
134 return _resizeControlIsLeftAligned;
137 - (CGRect)resizeControlFrame
141 currentSize = [
self bounds],
142 leftOrigin = _resizeControlIsLeftAligned ? 0 : currentSize.size.width - size.width - inset.right - inset.left;
144 return CGRectMake(leftOrigin, 0, size.width + inset.left + inset.right, size.height + inset.top + inset.bottom);
147 - (CGRect)rectForEphemeralSubviewNamed:(
CPString)aName
149 if (aName ===
"resize-control-view")
153 currentSize = [
self bounds];
155 if (_resizeControlIsLeftAligned)
156 return CGRectMake(inset.left, inset.top, size.width, size.height);
158 return CGRectMake(currentSize.size.width - size.width - inset.right, inset.top, size.width, size.height);
166 if (aName ===
"resize-control-view")
167 return [[
CPView alloc] initWithFrame:CGRectMakeZero()];
172 - (void)layoutSubviews
182 count = [buttonsNotHidden count];
185 if ([buttonsNotHidden[count] isHidden])
186 [buttonsNotHidden removeObject:buttonsNotHidden[count]];
188 var currentButtonOffset = _resizeControlIsLeftAligned ? CGRectGetMaxX([
self bounds]) + 1 : -1,
190 height = CGRectGetHeight(bounds) - 1,
191 frameWidth = CGRectGetWidth(bounds),
193 resizeWidth = CGRectGetWidth(resizeRect),
194 availableWidth = frameWidth - resizeWidth - 1;
196 for (var i = 0, count = [buttonsNotHidden count]; i < count; i++)
198 var button = buttonsNotHidden[i],
201 if (availableWidth > width)
202 availableWidth -=
width;
206 if (_resizeControlIsLeftAligned)
208 [button setFrame:CGRectMake(currentButtonOffset - width, 1, width, height)];
209 currentButtonOffset -= width - 1;
213 [button setFrame:CGRectMake(currentButtonOffset, 1, width, height)];
214 currentButtonOffset += width - 1;
217 [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:CPThemeStateNormal | CPThemeStateBordered];
218 [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:CPThemeStateHighlighted | CPThemeStateBordered];
219 [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:CPThemeStateDisabled | CPThemeStateBordered];
220 [button setValue:textColor forThemeAttribute:@"text-color" inState:CPThemeStateBordered];
223 [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:CPThemeStateNormal | CPThemeStateBordered | CPPopUpButtonStatePullsDown];
224 [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:CPThemeStateHighlighted | CPThemeStateBordered | CPPopUpButtonStatePullsDown];
225 [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:CPThemeStateDisabled | CPThemeStateBordered | CPPopUpButtonStatePullsDown];
230 if (_hasResizeControl)
236 [resizeControlView setAutoresizingMask: _resizeControlIsLeftAligned ? CPViewMaxXMargin : CPViewMinXMargin];
241 - (void)setFrameSize:(CGSize)aSize
259 [aCoder encodeBool:_hasResizeControl forKey:CPButtonBarHasResizeControlKey];
260 [aCoder encodeBool:_resizeControlIsLeftAligned forKey:CPButtonBarResizeControlIsLeftAlignedKey];
261 [aCoder encodeObject:_buttons forKey:CPButtonBarButtonsKey];
266 if (
self = [super initWithCoder:aCoder])
268 _buttons = [aCoder decodeObjectForKey:CPButtonBarButtonsKey] || [];
269 _hasResizeControl = [aCoder decodeBoolForKey:CPButtonBarHasResizeControlKey];
270 _resizeControlIsLeftAligned = [aCoder decodeBoolForKey:CPButtonBarResizeControlIsLeftAlignedKey];