/* GSWImageButton.m - GSWeb: Class GSWImageButton Copyright (C) 1999 Free Software Foundation, Inc. Written by: Manuel Guesdon Date: Jan 1999 This file is part of the GNUstep Web Library. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ static char rcsId[] = "$Id$"; #include //==================================================================== @implementation GSWImageButton //-------------------------------------------------------------------- -(id)initWithName:(NSString*)name_ associations:(NSDictionary*)associations_ contentElements:(NSArray*)_elements; { //OK NSMutableDictionary* _associations=nil; LOGObjectFnStart(); NSDebugMLLog(@"gswdync",@"name_=%@ associations_:%@ _elements=%@",name_,associations_,_elements); _associations=[NSMutableDictionary dictionaryWithDictionary:associations_]; [_associations removeObjectForKey:imageMapFileName__Key]; if (!WOStrictFlag) { [_associations removeObjectForKey:imageMapString__Key]; [_associations removeObjectForKey:imageMapRegions__Key]; }; [_associations removeObjectForKey:action__Key]; [_associations removeObjectForKey:actionClass__Key]; [_associations removeObjectForKey:directActionName__Key]; [_associations removeObjectForKey:x__Key]; [_associations removeObjectForKey:y__Key]; [_associations removeObjectForKey:filename__Key]; [_associations removeObjectForKey:framework__Key]; [_associations removeObjectForKey:src__Key]; [_associations removeObjectForKey:data__Key]; [_associations removeObjectForKey:mimeType__Key]; [_associations removeObjectForKey:key__Key]; if ((self=[super initWithName:name_ associations:_associations contentElements:_elements])) { int _imageMapDefNb=0; action = [[associations_ objectForKey:action__Key withDefaultObject:[action autorelease]] retain]; NSDebugMLLog(@"gswdync",@"action=%@",action); if ([action isValueConstant]) { ExceptionRaise0(@"GSWImageButton",@"'Action' parameter can't be a constant association"); }; imageMapFileName = [[associations_ objectForKey:imageMapFileName__Key withDefaultObject:[imageMapFileName autorelease]] retain]; if (imageMapFileName) _imageMapDefNb++; NSDebugMLLog(@"gswdync",@"imageMapFileName=%@",imageMapFileName); if (!WOStrictFlag) { imageMapString = [[associations_ objectForKey:imageMapString__Key withDefaultObject:[imageMapString autorelease]] retain]; if (imageMapString) _imageMapDefNb++; imageMapRegions = [[associations_ objectForKey:imageMapRegions__Key withDefaultObject:[imageMapRegions autorelease]] retain]; if (imageMapRegions) _imageMapDefNb++; if (_imageMapDefNb>0) { ExceptionRaise(@"GSWActiveImage",@"you can't specify %@, %@ and %@", imageMapFileName__Key, imageMapString__Key, imageMapRegions__Key); }; }; actionClass = [[associations_ objectForKey:actionClass__Key withDefaultObject:[actionClass autorelease]] retain]; NSDebugMLLog(@"gswdync",@"actionClass=%@",actionClass); directActionName = [[associations_ objectForKey:directActionName__Key withDefaultObject:[directActionName autorelease]] retain]; NSDebugMLLog(@"gswdync",@"directActionName=%@",directActionName); xAssoc = [[associations_ objectForKey:x__Key withDefaultObject:[xAssoc autorelease]] retain]; yAssoc = [[associations_ objectForKey:y__Key withDefaultObject:[yAssoc autorelease]] retain]; filename = [[associations_ objectForKey:filename__Key withDefaultObject:[filename autorelease]] retain]; framework = [[associations_ objectForKey:framework__Key withDefaultObject:[framework autorelease]] retain]; src = [[associations_ objectForKey:src__Key withDefaultObject:[src autorelease]] retain]; NSDebugMLLog(@"gswdync",@"src=%@",src); data = [[associations_ objectForKey:data__Key withDefaultObject:[data autorelease]] retain]; NSDebugMLLog(@"gswdync",@"data=%@",data); mimeType = [[associations_ objectForKey:mimeType__Key withDefaultObject:[mimeType autorelease]] retain]; key = [[associations_ objectForKey:key__Key withDefaultObject:[key autorelease]] retain]; }; return self; }; //-------------------------------------------------------------------- -(void)dealloc { DESTROY(imageMapFileName); DESTROY(imageMapString);//GSWeb only DESTROY(imageMapRegions);//GSWeb Only DESTROY(action); DESTROY(actionClass); DESTROY(directActionName); DESTROY(xAssoc); DESTROY(yAssoc); DESTROY(filename); DESTROY(framework); DESTROY(src); DESTROY(data); DESTROY(mimeType); DESTROY(key); [super dealloc]; }; //-------------------------------------------------------------------- -(NSString*)elementName { return nil;//@"ELEMENTCHOSENBYCONTEXT";//TODO }; //-------------------------------------------------------------------- -(NSString*)description { return [NSString stringWithFormat:@"<%s %p>", object_get_class_name(self), (void*)self]; }; //==================================================================== @implementation GSWImageButton (GSWImageButtonA) -(GSWAssociation*)hitTestX:(int)x_ y:(int)y_ inRegions:(NSArray*)regions_ { GSWAssociation* _assoc=nil; GSWGeometricRegion* _region=[GSWGeometricRegion hitTestX:x_ y:y_ inRegions:regions_]; if (_region) _assoc=[GSWAssociation associationWithKeyPath:[_region userDefinedString]]; else _assoc=action; return _assoc; }; @end //==================================================================== @implementation GSWImageButton (GSWImageButtonB) //-------------------------------------------------------------------- -(void)appendGSWebObjectsAssociationsToResponse:(GSWResponse*)response_ inContext:(GSWContext*)context_ { //OK NSString* _url=nil; NSString* _name=nil; BOOL _disabledInContext=NO; GSWComponent* _component=nil; GSWResourceManager* _resourceManager=nil; GSWURLValuedElementData* _dataValue=nil; NSString* _keyValue=nil; LOGObjectFnStart(); _disabledInContext=[self disabledInContext:context_]; [response_ _appendContentAsciiString:@" type=image"]; _name=[self nameInContext:context_]; NSDebugMLLog(@"gswdync",@"definition name=%@ _name=%@", [self definitionName],_name); [response_ _appendContentAsciiString:@" name=\""]; [response_ appendContentHTMLAttributeValue:_name]; [response_ appendContentCharacter:'"']; _component=[context_ component]; _resourceManager=[[GSWApplication application]resourceManager]; if (src) _url=[src valueInComponent:_component]; else { if (key) { _keyValue=[key valueInComponent:_component]; _dataValue=[_resourceManager _cachedDataForKey:_keyValue]; }; if (!_dataValue && data) { id _data=[data valueInComponent:_component]; id _mimeTypeValue=[mimeType valueInComponent:_component]; _dataValue=[[[GSWURLValuedElementData alloc] initWithData:_data mimeType:_mimeTypeValue key:_keyValue] autorelease]; [_resourceManager setURLValuedElementData:_dataValue]; } else if (filename) { id _filenameValue=nil; id _frameworkValue=nil; GSWRequest* _request=nil; NSArray* _languages=nil; NSDebugMLLog(@"gswdync",@"filename=%@",filename); _filenameValue=[filename valueInComponent:_component]; NSDebugMLLog(@"gswdync",@"_filenameValue=%@",_filenameValue); _frameworkValue=[self frameworkNameInContext:context_]; NSDebugMLLog(@"gswdync",@"_frameworkValue=%@",_frameworkValue); _request=[context_ request]; _languages=[context_ languages]; _url=[_resourceManager urlForResourceNamed:_filenameValue inFramework:_frameworkValue languages:_languages request:_request]; }; }; [response_ _appendContentAsciiString:@" src=\""]; if (src) { [response_ appendContentString:_url]; } else { if (key || data) { [_dataValue appendDataURLToResponse:response_ inContext:context_]; } else if (filename) { [response_ appendContentString:_url]; } else { GSWDynamicURLString* _componentActionURL=[context_ componentActionURL]; NSDebugMLLog(@"gswdync",@"_componentActionURL=%@",_componentActionURL); [response_ appendContentString:(NSString*)_componentActionURL]; }; }; [response_ appendContentCharacter:'"']; LOGObjectFnStop(); }; //-------------------------------------------------------------------- -(id)_imageURLInContext:(GSWContext*)context_ { LOGObjectFnNotImplemented(); //TODOFN return nil; }; //-------------------------------------------------------------------- -(void)appendToResponse:(GSWResponse*)response_ inContext:(GSWContext*)context_ { //OK GSWRequest* _request=[context_ request]; BOOL _isFromClientComponent=[_request isFromClientComponent]; BOOL _disabledInContext=[self disabledInContext:context_]; GSWSaveAppendToResponseElementID(context_);//Debug Only if (_disabledInContext) { //TODO }; [response_ _appendContentAsciiString:@"