/Tools/nib2cib/NSCustomResource.j
http://github.com/cacaodev/cappuccino · Unknown · 137 lines · 113 code · 24 blank · 0 comment · 0 complexity · 28f6c8e5575ccf072c82408f9e9d762f MD5 · raw file
- /*
- * NSCustomResource.j
- * nib2cib
- *
- * Portions based on NSCustomResource.m (01/08/2009) in Cocotron (http://www.cocotron.org/)
- * Copyright (c) 2006-2007 Christopher J. W. Lloyd
- *
- * Created by Francisco Tolmasky.
- * Copyright 2008, 280 North, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
- @import <AppKit/_CPCibCustomResource.j>
- @import "Nib2CibException.j"
- @global CP_NSMapClassName
- var FILE = require("file"),
- imageSize = require("cappuccino/imagesize").imagesize,
- supportedTemplateImages = {
- "NSAddTemplate": "CPAddTemplate",
- "NSRemoveTemplate": "CPRemoveTemplate",
- "NSToolbarShowColors": "CPImageNameColorPanel"
- };
- @implementation _CPCibCustomResource (NSCoding)
- - (id)NS_initWithCoder:(CPCoder)aCoder
- {
- self = [super init];
- if (self)
- {
- _className = CP_NSMapClassName([aCoder decodeObjectForKey:@"NSClassName"]);
- _resourceName = [aCoder decodeObjectForKey:@"NSResourceName"];
- var size = CGSizeMakeZero(),
- framework = @"",
- bundleIdentifier = @"";
- if (_resourceName == "NSSwitch" || _resourceName == "NSRadioButton")
- return nil;
- else if (/^NS[A-Z][A-Za-z]+$/.test(_resourceName))
- {
- if (supportedTemplateImages[_resourceName])
- {
- // Defer resolving this path until runtime.
- _resourceName = supportedTemplateImages[_resourceName];
- }
- else
- [CPException raise:Nib2CibException format:@"The built in image “%@” is not supported.", _resourceName];
- }
- else
- {
- var match = /^(.+)@(.+)$/.exec(_resourceName);
- if (match)
- {
- _resourceName = match[1];
- framework = match[2];
- }
- var resourceInfo = [aCoder resourceInfoForName:_resourceName inFramework:framework];
- if (!resourceInfo)
- CPLog.warn("Resource \"" + _resourceName + "\" not found in the Resources directories");
- else
- {
- size = imageSize(FILE.canonical(resourceInfo.path)) || CGSizeMakeZero();
- framework = resourceInfo.framework;
- }
- // Account for the fact that an extension may have been inferred.
- if (resourceInfo && resourceInfo.path)
- {
- // Include subdirectories in the name
- match = /^.+\/Resources\/(.+)$/.exec(resourceInfo.path)
- _resourceName = match[1];
- }
- }
- if (resourceInfo && resourceInfo.path && resourceInfo.framework)
- {
- var frameworkPath = FILE.dirname(FILE.dirname(resourceInfo.path)),
- bundle = [CPBundle bundleWithPath:frameworkPath];
- [bundle loadWithDelegate:nil];
- bundleIdentifier = [bundle bundleIdentifier] || @"";
- }
- _properties = @{ @"size":size, @"bundleIdentifier":bundleIdentifier, @"framework":framework };
- CPLog.debug(" Resource: %s\n Framework: %s%s\n Path: %s\n Size: %d x %d",
- _resourceName,
- framework ? framework : "<none>",
- bundleIdentifier ? " (" + bundleIdentifier + ")" :
- framework ? " (<no bundle identifier>)" : "",
- resourceInfo ? FILE.canonical(resourceInfo.path) : "",
- size.width,
- size.height);
- }
- return self;
- }
- @end
- @implementation NSCustomResource : _CPCibCustomResource
- {
- }
- - (id)initWithCoder:(CPCoder)aCoder
- {
- return [self NS_initWithCoder:aCoder];
- }
- - (Class)classForKeyedArchiver
- {
- return [_CPCibCustomResource class];
- }
- @end