xbmc/xbmc — pull request #3060 by Montellese (2013-08-06 13:25:46+00:00)
Title: settings: dynamically show/hide settings

Based on the request in the team to be able to dynamically show/hide settings based on the (changed) value of another setting I have implemented that feature. Up until now visibility of a setting (control) was a static decision and was made when the list of visible settings was retrieved. To be able to do this dynamically all the potentially visible settings of a category need to be present (but some of the settings may be hidden) so I had to change the functionality of the tag in the settings XML definition.
I decided to split the original tag into a new (complex) tag and a (simple) tag. The new tag simply takes a boolean value ("true" or "false") and is static but is very useful to hide specific settings or groups for a specific platform. The new tag basically works exactly the same as the old tag and can make use of HAS_FOO variables etc (which are requirements for a setting to make sense, hence the name of the new tag).
Dynamic visibility of settings is solved using the existing tags with the new type "visible" which can be defined for a setting and can reference a static/dynamic variable or depend upon the value of another setting. Changing the value of a setting will trigger dependency checks on all other settings in the current category and will update their state (enabled/disabled, visible/hidden, ...) if necessary.

With this it should be easily possible to define that a setting should only be visible if another setting has the value X etc.

Note: needs xcode project monkey work.