From 00c2564afb54d6807d24c80e854b65c0e77ce1ab Mon Sep 17 00:00:00 2001 From: gcasa Date: Thu, 31 Oct 2002 14:59:18 +0000 Subject: [PATCH] Adding logic for .gorm file directories git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@14892 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 7 ++++ Source/NSBundleAdditions.m | 73 ++++++++++++++++++++++++-------------- 2 files changed, 53 insertions(+), 27 deletions(-) diff --git a/ChangeLog b/ChangeLog index 20581e274..dd08d1b9c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2002-10-31 Gregory John Casamento + + * Source/NSBundleAdditions.m: + +[loadNibFile:externalNameTable:withZone:]: Added logic + to load .gorm directories and also maintained backwards compatibility + with .gorm files. + 2002-10-29 Pierre-Yves Rivaille * Source/NSSplitView.m ([NSSplitView -resizeSubviewsWithOldSize:]): diff --git a/Source/NSBundleAdditions.m b/Source/NSBundleAdditions.m index c80f87285..a6c4a0ea6 100644 --- a/Source/NSBundleAdditions.m +++ b/Source/NSBundleAdditions.m @@ -259,38 +259,57 @@ Class gmodel_class(void) NSDebugLog(@"Loading Nib `%@'...\n", fileName); NS_DURING { - NSData *data = [NSData dataWithContentsOfFile: fileName]; - NSDebugLog(@"Loaded data..."); - if (data != nil) - { - unarchiver = [[NSUnarchiver alloc] initForReadingWithData: data]; - if (unarchiver != nil) - { - id obj; + NSFileManager *mgr = [NSFileManager defaultManager]; + BOOL isDir = NO; - NSDebugLog(@"Invoking unarchiver"); - [unarchiver setObjectZone: zone]; - obj = [unarchiver decodeObject]; - if (obj != nil) + if([mgr fileExistsAtPath: fileName isDirectory: &isDir]) + { + NSData *data = nil; + + // if the data is in a directory, then load from objects.gorm in the directory + if(isDir == NO) + { + data = [NSData dataWithContentsOfFile: fileName]; + NSDebugLog(@"Loaded data from file..."); + } + else + { + NSString *newFileName = [fileName stringByAppendingPathComponent: @"objects.gorm"]; + data = [NSData dataWithContentsOfFile: newFileName]; + NSDebugLog(@"Loaded data from %@...",newFileName); + } + + if (data != nil) + { + unarchiver = [[NSUnarchiver alloc] initForReadingWithData: data]; + if (unarchiver != nil) { - if ([obj isKindOfClass: [GSNibContainer class]]) + id obj; + + NSDebugLog(@"Invoking unarchiver"); + [unarchiver setObjectZone: zone]; + obj = [unarchiver decodeObject]; + if (obj != nil) { - NSDebugLog(@"Calling awakeWithContext"); - [obj awakeWithContext: context]; - /* - *Ok - it's all done now - just retain the nib container - *so that it will not be released when the unarchiver - *is released, and the nib contents will persist. - */ - RETAIN(obj); - loaded = YES; - } - else - { - NSLog(@"Nib '%@' without container object!", fileName); + if ([obj isKindOfClass: [GSNibContainer class]]) + { + NSDebugLog(@"Calling awakeWithContext"); + [obj awakeWithContext: context]; + /* + *Ok - it's all done now - just retain the nib container + *so that it will not be released when the unarchiver + *is released, and the nib contents will persist. + */ + RETAIN(obj); + loaded = YES; + } + else + { + NSLog(@"Nib '%@' without container object!", fileName); + } } + RELEASE(unarchiver); } - RELEASE(unarchiver); } } }