33 BOOL _hasResizeControl;
34 BOOL _resizeControlIsLeftAligned;
40 var button = [[
CPButton alloc] initWithFrame:CGRectMake(0, 0, 35, 25)],
43 [button setBordered:NO];
44 [button setImage:image];
45 [button setImagePosition:CPImageOnly];
52 var button = [[
CPButton alloc] initWithFrame:CGRectMake(0, 0, 35, 25)],
55 [button setBordered:NO];
56 [button setImage:image];
57 [button setImagePosition:CPImageOnly];
62 + (id)actionPopupButton
64 var button = [[
CPPopUpButton alloc] initWithFrame:CGRectMake(0, 0, 35, 25)],
67 [button addItemWithTitle:nil];
68 [[button lastItem] setImage:image];
69 [button setImagePosition:CPImageOnly];
70 [button setValue:CGInsetMake(0, 0, 0, 0) forThemeAttribute:"content-inset" inState:CPPopUpButtonStatePullsDown];
72 [button setPullsDown:YES];
85 @"resize-control-inset": CGInsetMake(0.0, 0.0, 0.0, 0.0),
86 @"resize-control-size": CGSizeMakeZero(),
97 - (id)initWithFrame:(CGRect)aFrame
112 [
super awakeFromCib];
121 var viewIndex = [[view subviews] indexOfObject:subview];
122 [view setButtonBar:self forDividerAtIndex:viewIndex];
128 view = [view superview];
132 - (void)setButtons:(CPArray)buttons
134 for (var i = [_buttons count] - 1; i >= 0; i--)
136 [_buttons[i] removeFromSuperview];
137 [_buttons[i] removeObserver:self forKeyPath:@"hidden"];
141 _buttons = [CPArray arrayWithArray:buttons];
143 for (var i = [_buttons count] - 1; i >= 0; i--)
145 [_buttons[i] addObserver:self forKeyPath:@"hidden" options:CPKeyValueObservingOptionNew | CPKeyValueObservingOptionOld context:nil];
146 [_buttons[i] setBordered:YES];
154 return [CPArray arrayWithArray:_buttons];
157 - (void)setHasResizeControl:(BOOL)shouldHaveResizeControl
159 if (_hasResizeControl === shouldHaveResizeControl)
162 _hasResizeControl = !!shouldHaveResizeControl;
166 - (BOOL)hasResizeControl
168 return _hasResizeControl;
171 - (void)setResizeControlIsLeftAligned:(BOOL)shouldBeLeftAligned
173 if (_resizeControlIsLeftAligned === shouldBeLeftAligned)
176 _resizeControlIsLeftAligned = !!shouldBeLeftAligned;
180 - (BOOL)resizeControlIsLeftAligned
182 return _resizeControlIsLeftAligned;
185 - (CGRect)resizeControlFrame
187 var inset = [
self currentValueForThemeAttribute:@"resize-control-inset"],
188 size = [
self currentValueForThemeAttribute:@"resize-control-size"],
189 currentSize = [
self bounds],
190 leftOrigin = _resizeControlIsLeftAligned ? 0 : currentSize.size.width - size.width - inset.right - inset.left;
192 return CGRectMake(leftOrigin, 0, size.width + inset.left + inset.right, size.height + inset.top + inset.bottom);
195 - (CGRect)rectForEphemeralSubviewNamed:(
CPString)aName
197 if (aName ===
"resize-control-view")
199 var inset = [
self currentValueForThemeAttribute:@"resize-control-inset"],
200 size = [
self currentValueForThemeAttribute:@"resize-control-size"],
201 currentSize = [
self bounds];
203 if (_resizeControlIsLeftAligned)
204 return CGRectMake(inset.left, inset.top, size.width, size.height);
206 return CGRectMake(currentSize.size.width - size.width - inset.right, inset.top, size.width, size.height);
214 if (aName ===
"resize-control-view")
215 return [[
CPView alloc] initWithFrame:CGRectMakeZero()];
220 - (void)layoutSubviews
224 var normalColor = [
self valueForThemeAttribute:@"button-bezel-color" inState:CPThemeStateNormal],
225 highlightedColor = [
self valueForThemeAttribute:@"button-bezel-color" inState:CPThemeStateHighlighted],
226 disabledColor = [
self valueForThemeAttribute:@"button-bezel-color" inState:CPThemeStateDisabled],
227 textColor = [
self valueForThemeAttribute:@"button-text-color" inState:CPThemeStateNormal];
229 var buttonsNotHidden = [CPArray arrayWithArray:_buttons],
230 count = [buttonsNotHidden count];
234 var button = buttonsNotHidden[count];
238 [button removeFromSuperview];
239 [buttonsNotHidden removeObject:button];
243 var currentButtonOffset = _resizeControlIsLeftAligned ? CGRectGetMaxX([
self bounds]) + 1 : -1,
245 height = CGRectGetHeight(
bounds) - 1,
246 frameWidth = CGRectGetWidth(
bounds),
248 resizeWidth = CGRectGetWidth(resizeRect),
249 availableWidth = frameWidth - resizeWidth - 1;
251 for (var i = 0, count = [buttonsNotHidden count]; i < count; i++)
253 var button = buttonsNotHidden[i],
256 if (availableWidth >
width)
257 availableWidth -=
width;
261 if (_resizeControlIsLeftAligned)
263 [button setFrame:CGRectMake(currentButtonOffset - width, 1, width, height)];
264 currentButtonOffset -=
width - 1;
268 [button setFrame:CGRectMake(currentButtonOffset, 1, width, height)];
269 currentButtonOffset +=
width - 1;
272 [button setValue:normalColor forThemeAttribute:@"bezel-color" inStates:[CPThemeStateNormal, CPThemeStateBordered]];
273 [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inStates:[CPThemeStateHighlighted, CPThemeStateBordered, ]];
274 [button setValue:disabledColor forThemeAttribute:@"bezel-color" inStates:[CPThemeStateDisabled, CPThemeStateBordered]];
275 [button setValue:textColor forThemeAttribute:@"text-color" inState:CPThemeStateBordered];
278 [button setValue:normalColor forThemeAttribute:@"bezel-color" inStates:[CPThemeStateNormal, CPThemeStateBordered, CPPopUpButtonStatePullsDown]];
279 [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inStates:[CPThemeStateHighlighted, CPThemeStateBordered, CPPopUpButtonStatePullsDown]];
280 [button setValue:disabledColor forThemeAttribute:@"bezel-color" inStates:[CPThemeStateDisabled, CPThemeStateBordered, CPPopUpButtonStatePullsDown]];
285 if (_hasResizeControl)
291 [resizeControlView setAutoresizingMask: _resizeControlIsLeftAligned ? CPViewMaxXMargin : CPViewMinXMargin];
292 [resizeControlView setBackgroundColor:[
self currentValueForThemeAttribute:@"resize-control-color"]];
296 - (void)observeValueForKeyPath:(
CPString)keyPath ofObject:(
id)object change:(
CPDictionary)change context:(
id)context
304 - (void)setFrameSize:(CGSize)aSize
322 [aCoder encodeBool:_hasResizeControl forKey:CPButtonBarHasResizeControlKey];
323 [aCoder encodeBool:_resizeControlIsLeftAligned forKey:CPButtonBarResizeControlIsLeftAlignedKey];
324 [aCoder encodeObject:_buttons forKey:CPButtonBarButtonsKey];
329 if (
self = [super initWithCoder:aCoder])
331 _buttons = [aCoder decodeObjectForKey:CPButtonBarButtonsKey] || [];
332 _hasResizeControl = [aCoder decodeBoolForKey:CPButtonBarHasResizeControlKey];
333 _resizeControlIsLeftAligned = [aCoder decodeBoolForKey:CPButtonBarResizeControlIsLeftAlignedKey];
id initWithFrame:(CGRect aFrame)
void addSubview:(CPView aSubview)
An object representation of nil.
A mutable key-value pair collection.
CPView createEphemeralSubviewNamed:(CPString aViewName)
An immutable string (collection of characters).
void encodeWithCoder:(CPCoder aCoder)
CPKeyValueObservingOptionNew
Defines methods for use when archiving & restoring (enc/decoding).
void setBackgroundColor:(CPColor aColor)
void setFrameSize:(CGSize aSize)
id valueForAttributeWithName:forClass:(CPString aName, [forClass] id aClass)
CPView layoutEphemeralSubviewNamed:positioned:relativeToEphemeralSubviewNamed:(CPString aViewName, [positioned] CPWindowOrderingMode anOrderingMode, [relativeToEphemeralSubviewNamed] CPString relativeToViewName)
CPKeyValueObservingOptionOld
CGRect rectForEphemeralSubviewNamed:(CPString aViewName)