* Adium is the legal property of its developers, whose names are listed in the copyright file included * with this source distribution. * This program is free software; you can redistribute it and/or modify it under the terms of the GNU * General Public License as published by the Free Software Foundation; either version 2 of the License, * or (at your option) any later version. * This program 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 General * Public License for more details. * You should have received a copy of the GNU General Public License along with this program; if not, * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #import "AICreateCommand.h" #import "NSStringScriptingAdditions.h" @interface NSScriptObjectSpecifier(NSPrivate) + (NSScriptObjectSpecifier *)_objectSpecifierFromDescriptor:(NSAppleEventDescriptor *)desc inCommandConstructionContext:(id)context; @implementation AICreateCommand * @brief Overrides default NSCreateCommand behavior when creating an object; rather than calling alloc/init, calls make<Key>WithProperties: * make<Key>WithProperties: is responsible for parsing all options passed to it during creation. * As well, it must insert the new object into the correct container, looking at the Location key if necessary. - (id)performDefaultImplementation NSScriptClassDescription *newObjectDescription = [self createClassDescription]; id target = [self subjectsSpecifier]; NSString *methodName = [NSString stringWithFormat:@"make%@WithProperties:",[[newObjectDescription className] camelCase]]; SEL customMethod = NSSelectorFromString(methodName); if ([target respondsToSelector:customMethod]) { //this can do the insert, based on the parameters, methinks. NSMethodSignature *method = [target methodSignatureForSelector:customMethod]; NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:method]; [invocation setSelector:customMethod]; NSDictionary *resolvedKeyDictionary = [self evaluatedArguments]; [invocation setArgument:&resolvedKeyDictionary atIndex:2]; [invocation invokeWithTarget:target]; [invocation getReturnValue:&r]; r = [super performDefaultImplementation]; if ([r isKindOfClass:[NSScriptObjectSpecifier class]]) return [r objectSpecifier]; * @brief returns the object in the 'subj' key in this apple event. NSAppleEventDescriptor *subjDesc = [[self appleEvent] attributeDescriptorForKeyword: 'subj']; if ([subjDesc aeDesc] && [subjDesc aeDesc]->descriptorType == typeNull) NSScriptObjectSpecifier *subjSpec = [NSScriptObjectSpecifier objectSpecifierWithDescriptor:subjDesc]; return [subjSpec objectsByEvaluatingSpecifier];