I just started looking at using the TristateCheckbox for the new TCP Sampler "close connection" checkbox.
AFAICT, configuration settings are handled by saving the config element values in the sampler property map, these are then replaced by the values from the sampler element. In the case of a StringProperty, there is special processing to ensure that empty values are ignored, i.e. they are not saved. This means that if the sampler element contains a value for a boolean property, it will be used in preference to the config value. However if the sampler does not have an entry for a boolean property, the config value (if any) will be used. The sampler code determines whether a missing value is true or false by applying the appropriate default to the property value. I think this means that a missing entry is equivalent to an indeterminate value. This would mean that we could show the indeterminate marker for any missing <boolProp> entries, and equally, remove the property from the map when saving indeterminate values. Now we currently omit *some* boolProp entries if they are the same as the default, whether that is true or false. These would both show up as indeterminate on both config and sampler screens, whereas previously they would show up as the default value. I suppose this might be initially confusing for some users, so we would have to make sure the defaults were clearly documented. If we continue to omit entries where the value is the same as default, I think the effect will be the same, even if the display has changed. Does this make sense? Or have I overlooked something? We could apply this behaviour to the TCP Sampler initially to see how it works. Note: I've not looked at the TestBean implementations - they will need further investigation.
