mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-05-31 18:50:48 +00:00
* Headers/Additions/GNUstepGUI/GSModelLoaderFactory.h,
* Source/GSModelLoaderFactory.m: Add new method +supportedTypes. * Source/NSBundleAdditions.m: Use this new method to implement NIB resource detection on top of the base methods instead of doing it here. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@37421 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
935c45f00e
commit
ca6ec91a49
4 changed files with 61 additions and 45 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2013-12-01 Fred Kiefer <FredKiefer@gmx.de>
|
||||||
|
|
||||||
|
* Headers/Additions/GNUstepGUI/GSModelLoaderFactory.h,
|
||||||
|
* Source/GSModelLoaderFactory.m: Add new method +supportedTypes.
|
||||||
|
* Source/NSBundleAdditions.m: Use this new method to implement NIB
|
||||||
|
resource detection on top of the base methods instead of doing it here.
|
||||||
|
|
||||||
2013-11-24 Fred Kiefer <FredKiefer@gmx.de>
|
2013-11-24 Fred Kiefer <FredKiefer@gmx.de>
|
||||||
|
|
||||||
* Source/NSGradient.m: Rearrange code to avoid duplicate
|
* Source/NSGradient.m: Rearrange code to avoid duplicate
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#import <Foundation/NSObject.h>
|
#import <Foundation/NSObject.h>
|
||||||
#import <Foundation/NSZone.h>
|
#import <Foundation/NSZone.h>
|
||||||
|
|
||||||
|
@class NSArray;
|
||||||
@class NSData;
|
@class NSData;
|
||||||
@class NSDictionary;
|
@class NSDictionary;
|
||||||
@class NSString;
|
@class NSString;
|
||||||
|
@ -51,10 +52,11 @@
|
||||||
|
|
||||||
@interface GSModelLoaderFactory : NSObject
|
@interface GSModelLoaderFactory : NSObject
|
||||||
+ (void) registerModelLoaderClass: (Class)aClass;
|
+ (void) registerModelLoaderClass: (Class)aClass;
|
||||||
+ (Class)classForType: (NSString *)type;
|
+ (Class) classForType: (NSString *)type;
|
||||||
|
+ (NSArray *) supportedTypes;
|
||||||
+ (NSString *) supportedModelFileAtPath: (NSString *)modelPath;
|
+ (NSString *) supportedModelFileAtPath: (NSString *)modelPath;
|
||||||
+ (GSModelLoader *)modelLoaderForFileType: (NSString *)type;
|
+ (GSModelLoader *) modelLoaderForFileType: (NSString *)type;
|
||||||
+ (GSModelLoader *)modelLoaderForFileName: (NSString *)modelPath;
|
+ (GSModelLoader *) modelLoaderForFileName: (NSString *)modelPath;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -130,6 +130,23 @@ static NSMutableDictionary *_modelMap = nil;
|
||||||
return [_modelMap objectForKey: type];
|
return [_modelMap objectForKey: type];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
+ (NSArray *) supportedTypes
|
||||||
|
{
|
||||||
|
NSArray *objectArray = [_modelMap allValues];
|
||||||
|
NSArray *sortedArray = [objectArray sortedArrayUsingSelector:
|
||||||
|
@selector(_comparePriority:)];
|
||||||
|
NSEnumerator *oen = [sortedArray objectEnumerator];
|
||||||
|
Class cls = nil;
|
||||||
|
NSMutableArray *types = [[NSMutableArray alloc] init];
|
||||||
|
|
||||||
|
while ((cls = [oen nextObject]) != nil)
|
||||||
|
{
|
||||||
|
[types addObject: [cls type]];
|
||||||
|
}
|
||||||
|
|
||||||
|
return AUTORELEASE(types);
|
||||||
|
}
|
||||||
|
|
||||||
+ (NSString *) supportedModelFileAtPath: (NSString *)modelPath
|
+ (NSString *) supportedModelFileAtPath: (NSString *)modelPath
|
||||||
{
|
{
|
||||||
NSString *result = nil;
|
NSString *result = nil;
|
||||||
|
@ -168,7 +185,7 @@ static NSMutableDictionary *_modelMap = nil;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (GSModelLoader *)modelLoaderForFileType: (NSString *)type
|
+ (GSModelLoader *) modelLoaderForFileType: (NSString *)type
|
||||||
{
|
{
|
||||||
Class aClass = [GSModelLoaderFactory classForType: type];
|
Class aClass = [GSModelLoaderFactory classForType: type];
|
||||||
GSModelLoader *loader = nil;
|
GSModelLoader *loader = nil;
|
||||||
|
@ -186,7 +203,7 @@ static NSMutableDictionary *_modelMap = nil;
|
||||||
return loader;
|
return loader;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (GSModelLoader *)modelLoaderForFileName: (NSString *)modelPath
|
+ (GSModelLoader *) modelLoaderForFileName: (NSString *)modelPath
|
||||||
{
|
{
|
||||||
NSString *path = [GSModelLoaderFactory supportedModelFileAtPath: modelPath];
|
NSString *path = [GSModelLoaderFactory supportedModelFileAtPath: modelPath];
|
||||||
GSModelLoader *result = nil;
|
GSModelLoader *result = nil;
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#import <Foundation/NSArray.h>
|
#import <Foundation/NSArray.h>
|
||||||
#import <Foundation/NSBundle.h>
|
#import <Foundation/NSBundle.h>
|
||||||
#import <Foundation/NSCoder.h>
|
#import <Foundation/NSCoder.h>
|
||||||
|
#import <Foundation/NSDebug.h>
|
||||||
#import <Foundation/NSDictionary.h>
|
#import <Foundation/NSDictionary.h>
|
||||||
#import <Foundation/NSEnumerator.h>
|
#import <Foundation/NSEnumerator.h>
|
||||||
#import <Foundation/NSException.h>
|
#import <Foundation/NSException.h>
|
||||||
|
@ -281,53 +282,42 @@
|
||||||
|
|
||||||
- (NSString *) pathForNibResource: (NSString *)fileName
|
- (NSString *) pathForNibResource: (NSString *)fileName
|
||||||
{
|
{
|
||||||
NSMutableArray *array = [NSMutableArray arrayWithCapacity: 8];
|
NSEnumerator *enumerator;
|
||||||
NSArray *languages;
|
NSArray *types = [GSModelLoaderFactory supportedTypes];
|
||||||
NSString *rootPath = [self bundlePath];
|
NSString *ext = [fileName pathExtension];
|
||||||
NSString *primary;
|
|
||||||
NSString *language;
|
|
||||||
NSEnumerator *enumerator;
|
|
||||||
|
|
||||||
languages = [[NSUserDefaults standardUserDefaults]
|
NSDebugLLog(@"NIB", @"Path for NIB file %@", fileName);
|
||||||
stringArrayForKey: @"NSLanguages"];
|
if ((ext == nil) || [ext isEqualToString:@""])
|
||||||
|
|
||||||
/*
|
|
||||||
* Build an array of resource paths that differs from the normal order -
|
|
||||||
* we want a localized file in preference to a generic one.
|
|
||||||
*/
|
|
||||||
primary = [rootPath stringByAppendingPathComponent: @"Resources"];
|
|
||||||
enumerator = [languages objectEnumerator];
|
|
||||||
while ((language = [enumerator nextObject]))
|
|
||||||
{
|
{
|
||||||
NSString *langDir;
|
NSString *type;
|
||||||
|
|
||||||
langDir = [NSString stringWithFormat: @"%@.lproj", language];
|
enumerator = [types objectEnumerator];
|
||||||
[array addObject: [primary stringByAppendingPathComponent: langDir]];
|
while ((type = [enumerator nextObject]))
|
||||||
|
{
|
||||||
|
NSDebugLLog(@"NIB", @"Checking type %@", fileName);
|
||||||
|
NSString *path = [self pathForResource: fileName
|
||||||
|
ofType: type];
|
||||||
|
if (path != nil)
|
||||||
|
{
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
[array addObject: primary];
|
else
|
||||||
primary = rootPath;
|
|
||||||
enumerator = [languages objectEnumerator];
|
|
||||||
while ((language = [enumerator nextObject]))
|
|
||||||
{
|
{
|
||||||
NSString *langDir;
|
if ([types containsObject: ext])
|
||||||
|
{
|
||||||
langDir = [NSString stringWithFormat: @"%@.lproj", language];
|
NSString *path = [self pathForResource:
|
||||||
[array addObject: [primary stringByAppendingPathComponent: langDir]];
|
[fileName stringByDeletingPathExtension]
|
||||||
}
|
ofType: ext];
|
||||||
[array addObject: primary];
|
if (path != nil)
|
||||||
|
{
|
||||||
enumerator = [array objectEnumerator];
|
return path;
|
||||||
while ((rootPath = [enumerator nextObject]) != nil)
|
}
|
||||||
{
|
}
|
||||||
NSString *modelPath = [rootPath stringByAppendingPathComponent: fileName];
|
|
||||||
NSString *path = [GSModelLoaderFactory supportedModelFileAtPath: modelPath];
|
|
||||||
|
|
||||||
if (path != nil)
|
|
||||||
{
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NSDebugLLog(@"NIB", @"Did not find NIB resource %@", fileName);
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue