2 Copyright (C) 2000-2005 SKYRIX Software AG
4 This file is part of SOPE.
6 SOPE is free software; you can redistribute it and/or modify it under
7 the terms of the GNU Lesser General Public License as published by the
8 Free Software Foundation; either version 2, or (at your option) any
11 SOPE is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14 License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with SOPE; see the file COPYING. If not, write to the
18 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
23 #include "WOElement+private.h"
26 @implementation WOInput
28 static BOOL takeValueDebugOn = NO;
31 return [super version] + 0 /* v2 */;
35 NSAssert2([super version] == 2,
36 @"invalid superclass (%@) version %i !",
37 NSStringFromClass([self superclass]), [super version]);
40 - (id)initWithName:(NSString *)_name
41 associations:(NSDictionary *)_associations
42 template:(WOElement *)_rootChild
44 self = [super initWithName:_name associations:_associations
47 self->containsForm = YES;
48 self->name = OWGetProperty(_associations, @"name");
49 self->value = OWGetProperty(_associations, @"value");
50 self->disabled = OWGetProperty(_associations, @"disabled");
52 /* type is defined by the element itself ... */
53 [(NSMutableDictionary *)_associations removeObjectForKey:@"type"];
55 if ([_associations objectForKey:@"NAME"]) {
56 NSLog(@"WARNING: found 'NAME' association in element %@, "
57 @"'name' is probably the right thing ..",
66 [self->value release];
67 [self->disabled release];
73 NSString *OWFormElementName(WOInput *self, WOContext *_ctx) {
76 if (self->name == nil)
77 return [_ctx elementID];
79 if ((name = [self->name stringValueInComponent:[_ctx component]]) != nil)
84 @"WARNING: in element %@, 'name' attribute configured (%@),"
85 @"but no name assigned (using elementID as name) !",
87 return [_ctx elementID];
90 /* taking form values */
92 - (id)parseFormValue:(id)_value inContext:(WOContext *)_ctx {
93 /* redefined in subclasses */
97 - (void)takeValuesFromRequest:(WORequest *)_req inContext:(WOContext *)_ctx {
101 if ([self->disabled boolValueInComponent:[_ctx component]])
104 formName = OWFormElementName(self, _ctx);
105 if ((formValue = [_req formValueForKey:formName]) == nil)
106 // TODO: is this correct?
109 if (takeValueDebugOn) {
111 @"%s(%@): form=%@ ctx=%@ value=%@ ..", __PRETTY_FUNCTION__,
112 [_ctx elementID], formName, [_ctx contextID], formValue];
115 if ([self->value isValueSettable]) {
116 formValue = [self parseFormValue:formValue inContext:_ctx];
117 [self->value setStringValue:formValue inComponent:[_ctx component]];
119 else if (self->value != nil) {
121 @"%s: form value is not settable: %@", __PRETTY_FUNCTION__,
128 - (NSString *)associationDescription {
129 NSMutableString *str;
131 str = [NSMutableString stringWithCapacity:128];
132 if (self->value) [str appendFormat:@" value=%@", self->value];
133 if (self->name) [str appendFormat:@" name=%@", self->name];
134 if (self->disabled) [str appendFormat:@" disabled=%@", self->disabled];