private static void AddDeviceTreeItem(InputControlLayout layout, TreeViewItem parent) { // Ignore devices that have no controls. We're looking at fully merged layouts here so // we're also taking inherited controls into account. if (layout.controls.Count == 0) { return; } var deviceItem = new DeviceTreeViewItem(layout) { depth = parent.depth + 1 }; AddControlTreeItemsRecursive(layout, deviceItem, "", layout.name, null); parent.AddChild(deviceItem); foreach (var commonUsage in layout.commonUsages) { var commonUsageGroup = new DeviceTreeViewItem(layout, commonUsage) { depth = parent.depth + 1 }; parent.AddChild(commonUsageGroup); AddControlTreeItemsRecursive(layout, commonUsageGroup, "", layout.name, commonUsage); } }
private void AddDeviceTreeItem(InputControlLayout layout, AdvancedDropdownItem parent) { // Ignore devices that have no controls. We're looking at fully merged layouts here so // we're also taking inherited controls into account. if (layout.controls.Count == 0) { return; } var deviceItem = new DeviceTreeViewItem(layout); AddControlTreeItemsRecursive(layout, deviceItem, "", layout.name, null); if (deviceItem.children.Any()) { parent.AddChild(deviceItem); } foreach (var commonUsage in layout.commonUsages) { var commonUsageGroup = new DeviceTreeViewItem(layout, commonUsage); AddControlTreeItemsRecursive(layout, commonUsageGroup, "", layout.name, commonUsage); if (commonUsageGroup.children.Any()) { parent.AddChild(commonUsageGroup); } } }
private AdvancedDropdownItem BuildTreeForSpecificDevices() { var mainGroup = new AdvancedDropdownItem("Specific Devices"); foreach (var layout in EditorInputControlLayoutCache.allProductLayouts.OrderBy(a => a.name)) { var rootLayoutName = InputControlLayout.s_Layouts.GetRootLayoutName(layout.name).ToString(); if (string.IsNullOrEmpty(rootLayoutName)) { rootLayoutName = "Other"; } else { rootLayoutName = rootLayoutName.GetPlural(); } var rootLayoutGroup = mainGroup.children.Any() ? mainGroup.children.FirstOrDefault(x => x.name == rootLayoutName) : null; if (rootLayoutGroup == null) { rootLayoutGroup = new DeviceTreeViewItem(layout) { name = rootLayoutName, id = rootLayoutName.GetHashCode(), }; } AddDeviceTreeItem(layout, rootLayoutGroup); if (rootLayoutGroup.children.Any() && !mainGroup.children.Contains(rootLayoutGroup)) { mainGroup.AddChild(rootLayoutGroup); } } return(mainGroup); }
private void AddDeviceTreeItem(InputControlLayout layout, AdvancedDropdownItem parent) { // Ignore devices that have no controls. We're looking at fully merged layouts here so // we're also taking inherited controls into account. // EXCEPTION: We're okay with empty devices if we're picking devices and not controls. if (layout.controls.Count == 0 && m_Mode != Mode.PickDevice) { return; } var deviceItem = new DeviceTreeViewItem(layout); // If we have a device filter, see if we should ignore the device. if (m_DeviceFilter != null) { var matchesAnyInDeviceFilter = false; foreach (var entry in m_DeviceFilter) { if (entry == layout.name || InputControlLayout.s_Layouts.IsBasedOn(new InternedString(entry), layout.name)) { matchesAnyInDeviceFilter = true; } else { ////FIXME: this also needs to work for full control paths and not just stuff like "<Gamepad>" var expectedLayout = InputControlPath.TryGetDeviceLayout(entry); if (!string.IsNullOrEmpty(expectedLayout) && (expectedLayout == layout.name || InputControlLayout.s_Layouts.IsBasedOn(new InternedString(expectedLayout), layout.name))) { matchesAnyInDeviceFilter = true; } } } if (!matchesAnyInDeviceFilter) { return; } } if (m_Mode != Mode.PickDevice) { AddControlTreeItemsRecursive(layout, deviceItem, "", layout.name, null); } if (deviceItem.children.Any() || m_Mode == Mode.PickDevice) { parent.AddChild(deviceItem); } if (m_Mode != Mode.PickDevice) { foreach (var commonUsage in layout.commonUsages) { var commonUsageGroup = new DeviceTreeViewItem(layout, commonUsage); AddControlTreeItemsRecursive(layout, commonUsageGroup, "", layout.name, commonUsage); if (commonUsageGroup.children.Any()) { parent.AddChild(commonUsageGroup); } } } }