private static VariableValue DrawList(Rect rect, VariableValue value, ListVariableConstraint constraint, bool drawStores) { var itemDefinition = constraint != null ? ValueDefinition.Create(constraint.ItemType, constraint.ItemConstraint) : ValueDefinition.Create(VariableType.Empty); var remove = -1; for (var i = 0; i < value.List.Count; i++) { if (i != 0) { RectHelper.TakeVerticalSpace(ref rect); } var item = value.List.GetVariable(i); var height = GetHeight(item, itemDefinition, drawStores); var itemRect = RectHelper.TakeHeight(ref rect, height); var removeRect = RectHelper.TakeTrailingIcon(ref itemRect); item = Draw(itemRect, GUIContent.none, item, itemDefinition, drawStores); value.List.SetVariable(i, item); if (GUI.Button(removeRect, _removeListButton.Content, GUIStyle.none)) { remove = i; } } var addRect = RectHelper.TakeTrailingIcon(ref rect); if (GUI.Button(addRect, _addListButton.Content, GUIStyle.none)) { value.List.AddVariable(itemDefinition.Generate(null)); } if (remove >= 0) { value.List.RemoveVariable(remove); } return(value); }
private static void DrawListConstraint(Rect rect, ref VariableConstraint constraint) { if (!(constraint is ListVariableConstraint listConstraint)) { listConstraint = new ListVariableConstraint { ItemType = VariableType.Empty, ItemConstraint = null }; constraint = listConstraint; } var typeRect = RectHelper.TakeLine(ref rect); listConstraint.ItemType = (VariableType)EditorGUI.EnumPopup(typeRect, listConstraint.ItemType); if (HasConstraint(listConstraint.ItemType, listConstraint.ItemConstraint, false)) { DrawConstraint(rect, listConstraint.ItemType, false, ref listConstraint.ItemConstraint, false); } }
public static float GetListHeight(VariableValue value, ListVariableConstraint constraint, bool drawStores) { var height = EditorGUIUtility.singleLineHeight; var itemDefinition = constraint != null ? ValueDefinition.Create(constraint.ItemType, constraint.ItemConstraint) : ValueDefinition.Create(VariableType.Empty); for (var i = 0; i < value.List.Count; i++) { if (i != 0) { height += EditorGUIUtility.standardVerticalSpacing; } var item = value.List.GetVariable(i); height += GetHeight(item, itemDefinition, drawStores); } return(height); }