protected void UpdateDeviceItem(TListData listData) { var numDeviceItems = listData.DeviceComponent == null ? -1 : listData.DeviceComponent.AvailableDeviceItems.Count(); listData.DeviceItem = numDeviceItems switch { 1 => listData.DeviceComponent !.AvailableDeviceItems.First().Id, 0 => null, _ => listData.DeviceItem }; }
private void RenderDeviceItemElement(TListData listData, Rect cellRect, Action <TListData> updateAction) { // sets the item if only one coil UpdateDeviceItem(listData); var numDeviceItems = listData.DeviceComponent == null ? -1 : listData.DeviceComponent.AvailableDeviceItems.Count(); // no coils: show error if (numDeviceItems == 0) { var icon = EditorGUIUtility.IconContent("Error@2x").image; var iconRect = cellRect; iconRect.width = 20; var guiColor = GUI.color; GUI.color = Color.clear; EditorGUI.DrawTextureTransparent(iconRect, icon, ScaleMode.ScaleToFit); GUI.color = guiColor; cellRect.x += 20; var s = new GUIStyle(EditorStyles.label) { normal = { textColor = new Color(1f, 0.431f, 0.25f) } }; EditorGUI.LabelField(cellRect, "No coils!", s); return; } // only one coil with no description: show nothing if (numDeviceItems == 1 && string.IsNullOrEmpty(listData.DeviceComponent !.AvailableDeviceItems.First().Description)) { return; } // disable if nothing to select EditorGUI.BeginDisabledGroup(numDeviceItems <= 1); var currentIndex = 0; var labels = Array.Empty <string>(); IDeviceComponent <TDeviceITem> device = null; if (listData.DeviceComponent != null) { device = listData.DeviceComponent; labels = device.AvailableDeviceItems.Select(s => s.Description).ToArray(); currentIndex = device.AvailableDeviceItems.TakeWhile(s => s.Id != listData.DeviceItem).Count(); } EditorGUI.BeginChangeCheck(); var newIndex = EditorGUI.Popup(cellRect, currentIndex, labels); if (EditorGUI.EndChangeCheck() && device != null) { if (currentIndex != newIndex) { listData.DeviceItem = device.AvailableDeviceItems.ElementAt(newIndex).Id; updateAction(listData); } } EditorGUI.EndDisabledGroup(); }