Index: library/nx/nx.tcl =================================================================== diff -u -rd2ca26551bfd5194f4ef22792fd62291f6f52d15 -r470bd5f54e0da47e4eda094ee9f4aa2ba7af18f1 --- library/nx/nx.tcl (.../nx.tcl) (revision d2ca26551bfd5194f4ef22792fd62291f6f52d15) +++ library/nx/nx.tcl (.../nx.tcl) (revision 470bd5f54e0da47e4eda094ee9f4aa2ba7af18f1) @@ -2037,8 +2037,11 @@ set slotObj "slot=[::nsf::self]" # lappend options_single slot=[::nsf::self] if {$slotObj ni $options_single} {lappend options_single $slotObj} - set args [list obj prop [:namedParameterSpec {} value $options_single] {pos 0}] - :public object method value=add $args {::nsf::next} + set vspec [:namedParameterSpec {} value $options_single] + set addArgs [list obj prop $vspec {pos 0}] + :public object method value=add $addArgs {::nsf::next [list $obj $prop $value $pos]} + set delArgs [list -nocomplain:switch obj prop $vspec] + :public object method value=delete $delArgs {::nsf::next [list -nocomplain=$nocomplain $obj $prop $value]} } else { # TODO should we deactivate add/delete? } Index: tests/parameters.test =================================================================== diff -u -rdaa771f51afaa25dcdc99d371c313099cb1516e4 -r470bd5f54e0da47e4eda094ee9f4aa2ba7af18f1 --- tests/parameters.test (.../parameters.test) (revision daa771f51afaa25dcdc99d371c313099cb1516e4) +++ tests/parameters.test (.../parameters.test) (revision 470bd5f54e0da47e4eda094ee9f4aa2ba7af18f1) @@ -1258,18 +1258,7 @@ nx::test case slot-specfic-converter { nx::Class create Person { - # :property -accessor public sex { - # :type "sex" - # :convert true - # :object method type=sex {name value} { - # #puts stderr "[self] slot specific converter" - # switch -glob $value { - # m* {return m} - # f* {return f} - # default {error "expected sex but got $value"} - # } - # } - # } + :property -accessor public sex:sex,convert { :object method type=sex {name value} { #puts stderr "[self] slot specific converter" @@ -1281,6 +1270,16 @@ } } + :property -accessor public sexes:sex,0..*,convert { + :object method type=sex {name value} { + #puts stderr "[self] sexes slot specific converter" + switch -glob $value { + m* {return m} + f* {return f} + default {error "expected sex but got $value"} + } + } + } } Person create p1 -sex male @@ -1289,6 +1288,20 @@ Person public method foo {s:sex,slot=::Person::slot::sex,convert} {return $s} ? {p1 foo male} m ? {p1 sex set male} m + + Person create p2 -sexes {male female} + ? {p2 cget -sexes} {m f} + ? {p2 sexes get} {m f} + ? {p2 sexes add female} {f m f} + ? {p2 sexes set {male female male}} {m f m} + + set count [nx::test cget -count] + nx::test configure -count 1 + ? {p2 sexes delete female} {m m} + nx::test configure -count $count + + Person public method bar {s:sex,0..*,slot=::Person::slot::sexes,convert} {return $s} + ? {p2 bar {female male female}} {f m f} } #######################################################