xbmc/xbmc — pull request #3584 by Montellese (2013-11-06 18:16:49+00:00)
Title: settings: lists

This is a more generic approach at setting list types than #3436 which is special cased for string lists. It adds a new setting type implementation CSettingList and can represent a list containing any of the existing setting types. In the XML definition the type is defined as
```
type="list[string]"
```
and it is possible to use all the tags from the element type and in addition it is possible to specify a delimiter. The settings values are stored as a single string using the specified delimiter.

There are a few things I don't particularly like about this implementation but neither @jmarshallnz nor me had any better ideas:
* GetValue() and SetValue() operate on a vector of CSetting pointers which doesn't make them very convenient.
* GetValues() and SetValues(), the more convenient versions of GetValue() and SetValue() operate on a vector of CVariant objects which is an XBMC-specific class. Same goes for CSettingsManager/CSettings::GetList()/SetList()
* The user is able to choose less/more items in the multiselect dialog than is supported by the actual setting. Closing the dialog with an invalid selection will simply revert the value of the setting without any feedback.

The last of these points can certainly be improved but I'm out of ideas for the first two. The second actually is an improvement for the first but it's not ideal either.