mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-09-09 12:17:13 +00:00
Merge remote-tracking branch 'slevenbits/slevenbits-editable-tokenfield-fix' into slevenbits
This commit is contained in:
@@ -308,6 +308,11 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder");
|
||||
if (shouldBeEditable)
|
||||
_isSelectable = YES;
|
||||
|
||||
if (_isEditable)
|
||||
[self setThemeState:CPThemeStateEditable];
|
||||
else
|
||||
[self unsetThemeState:CPThemeStateEditable];
|
||||
|
||||
// We only allow first responder status if the field is editable and enabled.
|
||||
if (!shouldBeEditable && [[self window] firstResponder] === self)
|
||||
[[self window] makeFirstResponder:nil];
|
||||
|
||||
+44
-1
@@ -570,6 +570,7 @@ var CPScrollDestinationNone = 0,
|
||||
[newToken setTokenField:self];
|
||||
[newToken setRepresentedObject:tokenObject];
|
||||
[newToken setStringValue:tokenValue];
|
||||
[newToken setEditable:[self isEditable]];
|
||||
[contentView addSubview:newToken];
|
||||
}
|
||||
|
||||
@@ -615,6 +616,13 @@ var CPScrollDestinationNone = 0,
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setEditable:(BOOL)shouldBeEditable
|
||||
{
|
||||
[super setEditable:shouldBeEditable];
|
||||
|
||||
[[self _tokens] makeObjectsPerformSelector:@selector(setEditable:) withObject:shouldBeEditable];
|
||||
}
|
||||
|
||||
- (void)sendAction:(SEL)anAction to:(id)anObject
|
||||
{
|
||||
_shouldNotifyTarget = NO;
|
||||
@@ -1284,6 +1292,11 @@ var CPScrollDestinationNone = 0,
|
||||
return "tokenfield-token";
|
||||
}
|
||||
|
||||
- (BOOL)acceptsFirstResponder
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (id)initWithFrame:(CPRect)frame
|
||||
{
|
||||
if (self = [super initWithFrame:frame])
|
||||
@@ -1319,6 +1332,34 @@ var CPScrollDestinationNone = 0,
|
||||
_representedObject = representedObject;
|
||||
}
|
||||
|
||||
- (void)setEditable:(BOOL)shouldBeEditable
|
||||
{
|
||||
[super setEditable:shouldBeEditable];
|
||||
[self setNeedsLayout];
|
||||
}
|
||||
|
||||
- (BOOL)setThemeState:(CPThemeState)aState
|
||||
{
|
||||
var r = [super setThemeState:aState];
|
||||
|
||||
// Share hover state with the delete button.
|
||||
if (r && aState === CPThemeStateHovered)
|
||||
[_deleteButton setThemeState:aState];
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
- (BOOL)unsetThemeState:(CPThemeState)aState
|
||||
{
|
||||
var r = [super unsetThemeState:aState];
|
||||
|
||||
// Share hover state with the delete button.
|
||||
if (r && aState === CPThemeStateHovered)
|
||||
[_deleteButton unsetThemeState:aState];
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
- (CGSize)_minimumFrameSize
|
||||
{
|
||||
var size = _CGSizeMakeZero(),
|
||||
@@ -1344,6 +1385,7 @@ var CPScrollDestinationNone = 0,
|
||||
{
|
||||
[_deleteButton setTarget:self];
|
||||
[_deleteButton setAction:@selector(_delete:)];
|
||||
[_deleteButton setEnabled:[self isEditable]];
|
||||
|
||||
var frame = [bezelView frame],
|
||||
buttonOffset = [_deleteButton currentValueForThemeAttribute:@"offset"],
|
||||
@@ -1365,7 +1407,8 @@ var CPScrollDestinationNone = 0,
|
||||
|
||||
- (void)_delete:(id)sender
|
||||
{
|
||||
[_tokenField _deleteToken:self];
|
||||
if ([self isEditable])
|
||||
[_tokenField _deleteToken:self];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -1089,7 +1089,7 @@ var themedButtonValues = nil,
|
||||
[@"text-color", textHighlightedColor, CPThemeStateHighlighted],
|
||||
|
||||
[@"bezel-inset", CGInsetMakeZero(), CPThemeStateBezeled],
|
||||
[@"content-inset", CGInsetMake(2.0, 22.0, 2.0, 15.0), CPThemeStateBezeled],
|
||||
[@"content-inset", CGInsetMake(2.0, 20.0, 2.0, 20.0), CPThemeStateBezeled],
|
||||
|
||||
// Minimum height == maximum height since tokens are fixed height.
|
||||
[@"min-size", CGSizeMake(0.0, 19.0)],
|
||||
@@ -1112,16 +1112,17 @@ var themedButtonValues = nil,
|
||||
|
||||
themeValues =
|
||||
[
|
||||
[@"bezel-color", bezelColor, CPThemeStateBordered],
|
||||
[@"bezel-color", bezelHighlightedColor, CPThemeStateBordered | CPThemeStateHighlighted],
|
||||
[@"bezel-color", bezelColor, CPThemeStateBordered | CPThemeStateHovered],
|
||||
[@"bezel-color", [bezelColor colorWithAlphaComponent:0], CPThemeStateBordered | CPThemeStateDisabled],
|
||||
[@"bezel-color", bezelHighlightedColor, CPThemeStateBordered | CPThemeStateHighlighted],
|
||||
|
||||
[@"min-size", CGSizeMake(8.0, 8.0)],
|
||||
[@"max-size", CGSizeMake(8.0, 8.0)],
|
||||
|
||||
[@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateBordered],
|
||||
[@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateBordered | CPThemeStateHighlighted],
|
||||
[@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateBordered],
|
||||
[@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateBordered | CPThemeStateHighlighted],
|
||||
|
||||
[@"offset", CGPointMake(17, 6), CPThemeStateBordered]
|
||||
[@"offset", CGPointMake(17, 6), CPThemeStateBordered]
|
||||
];
|
||||
|
||||
[self registerThemeValues:themeValues forView:button];
|
||||
|
||||
Reference in New Issue
Block a user