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 BuildControlTypeList() { var types = new List <string>(); var allLayouts = InputSystem.s_Manager.m_Layouts; foreach (var layoutName in allLayouts.layoutTypes.Keys) { if (EditorInputControlLayoutCache.TryGetLayout(layoutName).hideInUI) { continue; } ////TODO: skip aliases if (typeof(InputControl).IsAssignableFrom(allLayouts.layoutTypes[layoutName]) && !typeof(InputDevice).IsAssignableFrom(allLayouts.layoutTypes[layoutName])) { types.Add(layoutName); } } // Sort alphabetically. types.Sort((a, b) => string.Compare(a, b, StringComparison.OrdinalIgnoreCase)); // Make sure "Any" is always topmost entry. types.Insert(0, "Any"); m_ControlTypeList = types.ToArray(); m_ControlTypeOptions = m_ControlTypeList.Select(x => new GUIContent(ObjectNames.NicifyVariableName(x))) .ToArray(); }
private void AddControlTreeItemsRecursive(InputControlLayout layout, DeviceDropdownItem parent, string device, string usage, bool searchable, ControlDropdownItem parentControl = null) { 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 ControlDropdownItem(parentControl, control.name, control.displayName, device, usage, searchable); child.icon = EditorInputControlLayoutCache.GetIconForLayout(control.layout); if (LayoutMatchesExpectedControlLayoutFilter(control.layout)) { parent.AddChild(child); } var controlLayout = EditorInputControlLayoutCache.TryGetLayout(control.layout); if (controlLayout != null) { AddControlTreeItemsRecursive(controlLayout, parent, device, usage, searchable, child); } } // Add optional controls for devices. var optionalControls = EditorInputControlLayoutCache.GetOptionalControlsForLayout(layout.name); if (optionalControls.Any() && layout.isDeviceLayout) { var optionalGroup = new AdvancedDropdownItem("Optional Controls"); foreach (var optionalControl in optionalControls) { if (LayoutMatchesExpectedControlLayoutFilter(optionalControl.layout)) { var child = new OptionalControlDropdownItem(optionalControl, device, usage); child.icon = EditorInputControlLayoutCache.GetIconForLayout(optionalControl.layout); optionalGroup.AddChild(child); } } if (optionalGroup.children.Any()) { var deviceName = EditorInputControlLayoutCache.TryGetLayout(device).m_DisplayName ?? ObjectNames.NicifyVariableName(device); parent.AddSeparator("Controls Present on More Specific " + deviceName.GetPlural()); parent.AddChild(optionalGroup); } } }
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); } } }
// This differs from RebindingOperation.GeneratePathForControl in that it cycles through all // layouts in the inheritance chain and generates a path for each one that contains the given control. private static IEnumerable <string> GeneratePossiblePathsForControl(InputControl control) { var builder = new StringBuilder(); var deviceLayoutName = control.device.m_Layout; do { // Skip layout if it is supposed to be hidden in the UI. var layout = EditorInputControlLayoutCache.TryGetLayout(deviceLayoutName); if (layout.hideInUI) { continue; } builder.Length = 0; yield return(control.BuildPath(deviceLayoutName, builder)); }while (InputControlLayout.s_Layouts.baseLayoutTable.TryGetValue(deviceLayoutName, out deviceLayoutName)); }
private void BuildControlsRecursive(Item parent, InputControlLayout layout, string prefix, ref int id) { foreach (var control in layout.controls) { if (control.isModifyingChildControlByPath) { continue; } // Skip variants. if (!string.IsNullOrEmpty(control.variants) && control.variants.ToLower() != "default") { continue; } var controlPath = prefix + control.name; var child = new Item { id = id++, depth = parent.depth + 1, displayName = controlPath, device = parent.layout.name, controlPath = controlPath, layout = layout }; var childLayout = EditorInputControlLayoutCache.TryGetLayout(control.layout); if (childLayout != null) { BuildControlsRecursive(parent, childLayout, controlPath + "/", ref id); } parent.AddChild(child); } if (parent.children != null) { parent.children.Sort((a, b) => string.Compare(a.displayName, b.displayName, StringComparison.Ordinal)); } }