* Source/GSXibLoader.m: Add support for the "array" and

"dictionary" elements found in newer XIB files (Version >= 8).


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@33022 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Fred Kiefer 2011-05-11 08:53:31 +00:00
parent 18a1c91c6c
commit dfa18a81da
2 changed files with 120 additions and 83 deletions

View file

@ -1,3 +1,8 @@
2011-05-11 Fred Kiefer <FredKiefer@gmx.de>
* Source/GSXibLoader.m: Add support for the "array" and
"dictionary" elements found in newer XIB files (Version >= 8).
2011-05-11 Eric Wasylishen <ewasylishen@gmail.com> 2011-05-11 Eric Wasylishen <ewasylishen@gmail.com>
* Source/Functions.m: For functions which set the fill or stroke * Source/Functions.m: For functions which set the fill or stroke

View file

@ -794,21 +794,11 @@ didStartElement: (NSString *)elementName
} }
} }
- (id) objectForXib: (GSXibElement*)element - (id) decodeObjectForXib: (GSXibElement*)element
forClassName: (NSString *)classname
withKey: (NSString *)key
{ {
NSString *elementName;
NSString *key;
if (element == nil)
return nil;
NSDebugLLog(@"XIB", @"decoding element %@", element);
key = [element attributeForKey: @"id"];
elementName = [element type];
if ([@"object" isEqualToString: elementName])
{
GSXibElement *last; GSXibElement *last;
NSString *classname = [element attributeForKey: @"class"];
Class c = [self classForClassName: classname]; Class c = [self classForClassName: classname];
id o, r; id o, r;
id delegate = [self delegate]; id delegate = [self delegate];
@ -826,9 +816,8 @@ didStartElement: (NSString *)elementName
originalClasses: nil]; originalClasses: nil];
if (c == nil) if (c == nil)
{ {
[NSException raise: [NSException raise: NSInvalidUnarchiveOperationException
NSInvalidUnarchiveOperationException format: @"[%@ -%@]: no class for name '%@'",
format: @"[%@ +%@]: no class for name '%@'",
NSStringFromClass([self class]), NSStringFromClass([self class]),
NSStringFromSelector(_cmd), NSStringFromSelector(_cmd),
classname]; classname];
@ -891,6 +880,25 @@ didStartElement: (NSString *)elementName
NSDebugLLog(@"XIB", @"decoded object %@ for key %@", o, key); NSDebugLLog(@"XIB", @"decoded object %@ for key %@", o, key);
} }
return AUTORELEASE(o); return AUTORELEASE(o);
}
- (id) objectForXib: (GSXibElement*)element
{
NSString *elementName;
NSString *key;
if (element == nil)
return nil;
NSDebugLLog(@"XIB", @"decoding element %@", element);
key = [element attributeForKey: @"id"];
elementName = [element type];
if ([@"object" isEqualToString: elementName])
{
NSString *classname = [element attributeForKey: @"class"];
return [self decodeObjectForXib: element
forClassName: classname
withKey: key];
} }
else if ([@"string" isEqualToString: elementName]) else if ([@"string" isEqualToString: elementName])
{ {
@ -998,6 +1006,30 @@ didStartElement: (NSString *)elementName
return new; return new;
} }
else if ([@"array" isEqualToString: elementName])
{
NSString *classname = [element attributeForKey: @"class"];
if (classname == nil)
{
classname = @"NSArray";
}
return [self decodeObjectForXib: element
forClassName: classname
withKey: key];
}
else if ([@"dictionary" isEqualToString: elementName])
{
NSString *classname = [element attributeForKey: @"class"];
if (classname == nil)
{
classname = @"NSDictionary";
}
return [self decodeObjectForXib: element
forClassName: classname
withKey: key];
}
else else
{ {
NSLog(@"Unknown element type %@", elementName); NSLog(@"Unknown element type %@", elementName);