There is a remotely operated device / toy / drone, which has a number of “functions”: various lights, sound effects and so on. There is a remote control with a number of physical buttons. This remote control can be configured with a GUI so the user can set which button operates which functions. By the press of a button, the remote control sends a command containing the states of all the functions.
It seems simple at first: if we have 4 functions to be controlled for a specific button, we could just have a list of checkboxes:
download bmml source – Wireframes created with Balsamiq Mockups
This will turn functions 2 and 3 on, and functions 1 and 4 off, on the press of the button.
However, we would like to have a possibility to not touch a specific function. For example, we want the user to be able to specify the following: “turn on function 1, turn off function 2, and leave the others as they were” (because they might have been activated by another button and we don’t want to undo that).
I fear that an undetermined (tri-state) checkbox won’t be clear enough:
We want to clearly indicate that it’s a “turn on” command, a “turn off” command, or there is no command.
Another straightforward way would be to use drop-down lists:
The problem with this is that the vast majority of the userbase is not computer-savvy at all, and might get confused. Checkboxes in the first example were so simple…
But having two checkboxes per row (one for “affect this function?” and the next for the actual command, which is greyed out if the first is unchecked), would be even more confusing.