mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-04-23 07:00:46 +00:00
Add NSEnabled decoding. it is encoded in NSControl, but is NOT used when it is decoded, so we have to retrieve the value here in NSSwitch.
This commit is contained in:
parent
0c1ab6c756
commit
54983cef50
2 changed files with 49 additions and 30 deletions
|
@ -382,7 +382,8 @@ static NSArray *XmlBoolDefaultYes = nil;
|
|||
@"decodeDividerStyleForElement:", @"NSDividerStyle",
|
||||
@"decodeToolbarIdentifiedItemsForElement:", @"NSToolbarIBIdentifiedItems",
|
||||
@"decodeToolbarImageForElement:", @"NSToolbarItemImage",
|
||||
nil];
|
||||
@"decodeControlContentsForElement:",@"NSControlContents",
|
||||
nil];
|
||||
RETAIN(XmlKeyToDecoderSelectorMap);
|
||||
|
||||
// boolean fields that should be treated as YES when missing.
|
||||
|
@ -391,6 +392,7 @@ static NSArray *XmlBoolDefaultYes = nil;
|
|||
@"bordered",
|
||||
@"prefersToBeShown",
|
||||
@"editable",
|
||||
@"enabled",
|
||||
nil];
|
||||
}
|
||||
}
|
||||
|
@ -2726,6 +2728,19 @@ didStartElement: (NSString*)elementName
|
|||
return [self findResourceWithName: name];
|
||||
}
|
||||
|
||||
- (id) decodeControlContentsForElement: (GSXibElement *)element
|
||||
{
|
||||
NSNumber *num = [NSNumber numberWithInteger: 0];
|
||||
id obj = [element attributeForKey: @"state"];
|
||||
|
||||
if ([obj isEqualToString: @"on"])
|
||||
{
|
||||
num = [NSNumber numberWithInteger: 1];
|
||||
}
|
||||
|
||||
return num;
|
||||
}
|
||||
|
||||
- (id) objectForXib: (GSXibElement*)element
|
||||
{
|
||||
id object = [super objectForXib: element];
|
||||
|
@ -2789,32 +2804,6 @@ didStartElement: (NSString*)elementName
|
|||
else if ([object respondsToSelector: @selector(setHeaderToolTip:)])
|
||||
[object setHeaderToolTip: [element attributeForKey: @"toolTip"]];
|
||||
}
|
||||
|
||||
// Handle state for NSSwitch
|
||||
if ([element attributeForKey: @"state"])
|
||||
{
|
||||
if ([object respondsToSelector: @selector(setState:)] && [object isKindOfClass: [NSSwitch class]])
|
||||
{
|
||||
[(NSSwitch *)object setState: [[element attributeForKey: @"state"] isEqualToString: @"on"] ?
|
||||
NSControlStateValueOn : NSControlStateValueOff];
|
||||
}
|
||||
}
|
||||
|
||||
if ([element attributeForKey: @"enabled"])
|
||||
{
|
||||
if ([object respondsToSelector: @selector(setEnabled:)] && [object isKindOfClass: [NSSwitch class]])
|
||||
{
|
||||
[(NSSwitch *)object setEnabled: [[element attributeForKey: @"enabled"] isEqualToString: @"YES"] ?
|
||||
YES : NO];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ([object respondsToSelector: @selector(setEnabled:)] && [object isKindOfClass: [NSSwitch class]])
|
||||
{
|
||||
[(NSSwitch *)object setEnabled: YES];
|
||||
}
|
||||
}
|
||||
|
||||
// Process IB runtime attributes for element...
|
||||
// Ensure we don't process the placeholders...
|
||||
|
@ -2996,6 +2985,29 @@ didStartElement: (NSString*)elementName
|
|||
return object;
|
||||
}
|
||||
|
||||
- (NSInteger) decodeIntegerForKey: (NSString *)key
|
||||
{
|
||||
NSInteger i = 0;
|
||||
|
||||
if ([self containsValueForKey: key])
|
||||
{
|
||||
i = [super decodeIntegerForKey: key];
|
||||
}
|
||||
else if ([XmlKeyToDecoderSelectorMap objectForKey: key])
|
||||
{
|
||||
SEL selector = NSSelectorFromString([XmlKeyToDecoderSelectorMap objectForKey: key]);
|
||||
i = [[self performSelector: selector withObject: currentElement] integerValue];
|
||||
}
|
||||
#if DEBUG_XIB5
|
||||
else
|
||||
{
|
||||
NSWarnMLog(@"no integer for key: %@", key);
|
||||
}
|
||||
#endif
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
- (BOOL) decodeBoolForKey: (NSString *)key
|
||||
{
|
||||
BOOL flag = NO;
|
||||
|
@ -3180,6 +3192,10 @@ didStartElement: (NSString*)elementName
|
|||
hasValue = [currentElement attributeForKey: @"title"] != nil;
|
||||
hasValue |= [currentElement attributeForKey: @"image"] != nil;
|
||||
}
|
||||
else if ([@"NSControlContents" isEqualToString: key])
|
||||
{
|
||||
hasValue = [currentElement attributeForKey: @"state"] != nil;
|
||||
}
|
||||
else if ([@"NSAlternateContents" isEqualToString: key])
|
||||
{
|
||||
hasValue = [currentElement attributeForKey: @"alternateTitle"] != nil;
|
||||
|
|
|
@ -245,10 +245,13 @@
|
|||
id t = [coder decodeObjectForKey: @"NSControlTarget"];
|
||||
[self setTarget: t];
|
||||
}
|
||||
if ([coder containsValueForKey: @"NSEnabled"])
|
||||
if ([coder containsValueForKey: @"NSEnabled"])
|
||||
{
|
||||
BOOL f = [coder decodeBoolForKey: @"NSEnabled"];
|
||||
[self setEnabled: f];
|
||||
BOOL e = [coder decodeBoolForKey: @"NSEnabled"];
|
||||
|
||||
// NSControl decodes this, but does not use the value which
|
||||
// is decoded. See comment in NSControl.m initWithCoder:.
|
||||
[self setEnabled: e];
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
Loading…
Reference in a new issue