public ControllersAndOutputsSet BuildSelectedControllersAndOutputs()
{
ControllersAndOutputsSet result = new ControllersAndOutputsSet();
foreach (TreeNode node in controllerTree.SelectedTreeNodes) {
IControllerDevice controller = node.Tag as IControllerDevice;
int outputIndex = -1;
if (controller == null) {
if (node.Tag is int) {
outputIndex = (int) node.Tag;
controller = node.Parent.Tag as IControllerDevice;
if (controller == null) {
Logging.Error("node parent is not a controller: " + node.Name);
}
}
}
if (controller != null) {
HashSet<int> selectedOutputs;
result.TryGetValue(controller, out selectedOutputs);
if (selectedOutputs == null) {
selectedOutputs = new HashSet<int>();
result[controller] = selectedOutputs;
}
// if there wasn't a specific output that this was about, add all outputs for the controller
if (outputIndex < 0) {
for (int i = 0; i < controller.OutputCount; i++) {
selectedOutputs.Add(i);
}
} else {
selectedOutputs.Add(outputIndex);
}
} else {
Logging.Error("can't figure out what controller the node maps to: " + node.Name);
}
}
return result;
}