private static void AddControlTreeItemsRecursive(InputControlLayout layout, TreeViewItem parent, string prefix, string deviceControlId, string commonUsage) { foreach (var control in layout.controls.OrderBy(a => a.name)) { if (control.isModifyingChildControlByPath) { continue; } // Skip variants except the default variant and variants dictated by the layout itself. if (!control.variants.IsEmpty() && control.variants != InputControlLayout.DefaultVariant && (layout.variants.IsEmpty() || !InputControlLayout.VariantsMatch(layout.variants, control.variants))) { continue; } var child = new ControlTreeViewItem(control, prefix, deviceControlId, commonUsage) { depth = parent.depth + 1, }; parent.AddChild(child); var childLayout = EditorInputControlLayoutCache.TryGetLayout(control.layout); if (childLayout != null) { AddControlTreeItemsRecursive(childLayout, parent, child.controlPath, deviceControlId, commonUsage); } } }
private void AddControlTreeItemsRecursive(InputControlLayout layout, AdvancedDropdownItem parent, string prefix, string deviceControlId, string commonUsage) { foreach (var control in layout.controls.OrderBy(a => a.name)) { if (control.isModifyingChildControlByPath) { continue; } // Skip variants except the default variant and variants dictated by the layout itself. if (!control.variants.IsEmpty() && control.variants != InputControlLayout.DefaultVariant && (layout.variants.IsEmpty() || !InputControlLayout.VariantsMatch(layout.variants, control.variants))) { continue; } var child = new ControlTreeViewItem(control, prefix, deviceControlId, commonUsage); if (LayoutMatchesExpectedControlLayoutFilter(control.layout)) { parent.AddChild(child); } var childLayout = EditorInputControlLayoutCache.TryGetLayout(control.layout); if (childLayout != null) { AddControlTreeItemsRecursive(childLayout, parent, child.controlPath, deviceControlId, commonUsage); } } // Add optional layouts for devices var optionalLayouts = EditorInputControlLayoutCache.GetOptionalControlsForLayout(layout.name); if (optionalLayouts.Any() && layout.isDeviceLayout) { var optionalGroup = new AdvancedDropdownItem("Optional"); foreach (var optionalLayout in optionalLayouts) { if (LayoutMatchesExpectedControlLayoutFilter(optionalLayout.layout)) { optionalGroup.AddChild(new OptionalControlTreeViewItem(optionalLayout, deviceControlId, commonUsage)); } } if (optionalGroup.children.Any()) { parent.AddChild(optionalGroup); } } }