Index: generic/predefined.h =================================================================== diff -u -r4ce2a0659cf44b3dbb7262f63fadb3333c968751 -r5524b83ed5dda30e55f7a02e4c22d26783688954 --- generic/predefined.h (.../predefined.h) (revision 4ce2a0659cf44b3dbb7262f63fadb3333c968751) +++ generic/predefined.h (.../predefined.h) (revision 5524b83ed5dda30e55f7a02e4c22d26783688954) @@ -151,41 +151,50 @@ "::xotcl::MetaSlot create ::xotcl::Slot\n" "::xotcl::MetaSlot __invalidateobjectparameter\n" "proc ::xotcl::parameterFromSlot {slot name} {\n" -"set parameterdefinition $name\n" -"set opts [list]\n" +"set objparamdefinition $name\n" +"set methodparamdefinition \"\"\n" +"set objopts [list]\n" +"set methodopts [list]\n" "if {[$slot exists required] && [$slot required]} {\n" -"lappend opts required}\n" +"lappend objopts required\n" +"lappend methodopts required}\n" "if {[$slot exists type]} {\n" -"lappend opts [$slot type]}\n" +"lappend objopts [$slot type]\n" +"lappend methodopts [$slot type]}\n" "if {[$slot exists multivalued] && [$slot multivalued]} {\n" "if {!([$slot exists type] && [$slot type] eq \"relation\")} {\n" -"lappend opts multivalued} else {}}\n" +"lappend objopts multivalued} else {}}\n" "if {[$slot exists arg]} {\n" -"lappend opts arg=[$slot arg]}\n" +"lappend objopts arg=[$slot arg]\n" +"lappend methodopts arg=[$slot arg]}\n" "if {[$slot exists default]} {\n" "set arg [::xotcl::setinstvar $slot default]\n" "if {[string match {*\\[*\\]*} $arg]} {\n" -"lappend opts substdefault}} elseif {[$slot exists initcmd]} {\n" +"lappend objopts substdefault}} elseif {[$slot exists initcmd]} {\n" "set arg [::xotcl::setinstvar $slot initcmd]\n" -"lappend opts initcmd}\n" +"lappend objopts initcmd}\n" "if {[$slot exists methodname]} {\n" "set methodname [$slot methodname]\n" "set slotname [$slot name]\n" "if {$methodname ne $slotname} {\n" -"lappend opts arg=$methodname}}\n" -"if {[llength $opts] > 0} {\n" -"append parameterdefinition :[join $opts ,]}\n" +"lappend objopts arg=$methodname\n" +"lappend methodopts arg=$methodname}}\n" +"if {[llength $objopts] > 0} {\n" +"append objparamdefinition :[join $objopts ,]}\n" +"if {[llength $methodopts] > 0} {\n" +"set methodparamdefinition [join $methodopts ,]}\n" "if {[info exists arg]} {\n" -"lappend parameterdefinition $arg}\n" -"return $parameterdefinition}\n" +"lappend objparamdefinition $arg}\n" +"return [list oparam $objparamdefinition mparam $methodparamdefinition]}\n" "proc ::xotcl::parametersFromSlots {obj} {\n" "set parameterdefinitions [list]\n" "set slots [::xotcl2::objectInfo slotobjects $obj]\n" "foreach slot $slots {\n" "if {[::xotcl::is $obj type ::xotcl::Object] &&\n" "([$slot name] eq \"mixin\" || [$slot name] eq \"filter\")} continue\n" "set name [namespace tail $slot]\n" -"lappend parameterdefinitions -[::xotcl::parameterFromSlot $slot $name]}\n" +"array set \"\" [::xotcl::parameterFromSlot $slot $name]\n" +"lappend parameterdefinitions -$(oparam)}\n" "return $parameterdefinitions}\n" "::xotcl2::Object protected method objectparameter {} {\n" "set parameterdefinitions [::xotcl::parametersFromSlots [self]]\n" @@ -378,13 +387,12 @@ "\\[list [::xotcl::self] __default_from_cmd \\[::xotcl::self\\] [list [set :initcmd]]\\]\\n\"} elseif [:exists valuecmd] {\n" "append __initcmd \":trace add variable [list ${:name}] read \\\n" "\\[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" -"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" +"array set \"\" [::xotcl::parameterFromSlot [self] \"value\"]\n" +"if {$(mparam) ne \"\"} {\n" +"if {[info exists :multivalued] && ${:multivalued}} {\n" +":method assign [list obj var value:$(mparam),multivalued] {::xotcl::setinstvar $obj $var $value}\n" +":method add [list obj prop value:$(mparam) {pos 0}] {next}} else {\n" +":method assign [list obj var value:$(mparam)] {::xotcl::setinstvar $obj $var $value}}}\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"