Index: generic/predefined.h =================================================================== diff -u -r7121883918ed2a2591a63630bd465cd1d98eaa26 -r4ce2a0659cf44b3dbb7262f63fadb3333c968751 --- generic/predefined.h (.../predefined.h) (revision 7121883918ed2a2591a63630bd465cd1d98eaa26) +++ generic/predefined.h (.../predefined.h) (revision 4ce2a0659cf44b3dbb7262f63fadb3333c968751) @@ -157,6 +157,9 @@ "lappend opts required}\n" "if {[$slot exists type]} {\n" "lappend opts [$slot type]}\n" +"if {[$slot exists multivalued] && [$slot multivalued]} {\n" +"if {!([$slot exists type] && [$slot type] eq \"relation\")} {\n" +"lappend opts multivalued} else {}}\n" "if {[$slot exists arg]} {\n" "lappend opts arg=[$slot arg]}\n" "if {[$slot exists default]} {\n" @@ -377,14 +380,11 @@ "\\[list [::xotcl::self] __value_from_cmd \\[::xotcl::self\\] [list [set :valuecmd]]\\]\"}\n" "set valueParam [lindex [::xotcl::parameterFromSlot [self] \"value\"] 0]\n" "if {$valueParam ne \"value\" && [string first : $valueParam] > -1} {\n" +":method assign [list obj var $valueParam] {::xotcl::setinstvar $obj $var $value}\n" "if {[set :multivalued]} {\n" -":method check_single_value [list $valueParam] {return 1}\n" -":method check_multiple_values list {foreach a $list {:check_single_value $a}}\n" -"puts stderr \"adding multiple assignmethod for [self] with $valueParam\"\n" -":method assign [list obj var value] {\n" -":check_multiple_values $value\n" -"::xotcl::setinstvar $obj $var $value}} else {\n" -":method assign [list obj var $valueParam] {::xotcl::setinstvar $obj $var $value}}}\n" +"regsub ,multivalued $valueParam \"\" param\n" +"puts stderr \"adding add method for [self] with $param\"\n" +":method add [list obj prop $param {pos 0}] {next}}}\n" "if {[:exists valuechangedcmd]} {\n" "append __initcmd \":trace add variable [list ${:name}] write \\\n" "\\[list [::xotcl::self] __value_changed_cmd \\[::xotcl::self\\] [list [set :valuechangedcmd]]\\]\"}\n" @@ -438,25 +438,19 @@ "foreach arg $arglist {\n" "set l [llength $arg]\n" "set name [lindex $arg 0]\n" +"set opts [list]\n" "set colonPos [string first : $name]\n" "if {$colonPos > -1} {\n" "set properties [string range $name [expr {$colonPos+1}] end]\n" "set name [string range $name 0 [expr {$colonPos -1}]]\n" "foreach property [split $properties ,] {\n" "if {$property eq \"required\"} {\n" -"set required 1} elseif {[string match arg=* $property]} {\n" -"set argument [string range $property 4 end]} else {\n" -"set type $property}}}\n" -"set cmd [list ::xotcl::Attribute create [::xotcl::self]::slot::$name]\n" -"if {[info exists type]} {\n" -"lappend cmd -type $type\n" -"unset type}\n" -"if {[info exists argument]} {\n" -"lappend cmd -arg $argument\n" -"unset argument}\n" -"if {[info exists required]} {\n" -"lappend cmd -required 1\n" -"unset required}\n" +"lappend opts -required 1} elseif {$property eq \"multivalued\"} {\n" +"lappend opts -multivalued 1} elseif {[string match arg=* $property]} {\n" +"set argument [string range $property 4 end]\n" +"lappend opts -arg $argument} else {\n" +"lappend opts -type $property}}}\n" +"set cmd [list ::xotcl::Attribute create [::xotcl::self]::slot::$name {*}$opts]\n" "if {$l == 1} {\n" "eval $cmd} elseif {$l == 2} {\n" "lappend cmd -default [lindex $arg 1]\n"