private int?DisplayFlags(Property.Data data) { GUILayout.BeginVertical(); int?flag_value = Property.Data.GetInt(data); if (!flag_value.HasValue) { flag_value = 0; } System.Type enum_type = System.Type.GetType(data.associatedEnumType); string[] names = Enum.GetNames(enum_type); int[] values = (int[])Enum.GetValues(enum_type); for (int j = 0; j < names.Length; j++) { flag_value = Flags.Toogle(flag_value.Value, values[j], GUILayout.Toggle(Flags.IsSet(flag_value.Value, values[j]), names[j].Replace("_", " "))); } GUILayout.EndVertical(); return(flag_value); }
private bool DisplayMenuItem(Property.Data data, bool enabled) { bool changed = false; if (enabled) { string value = data.currentValue; switch (data.propertyType) { case Property.Type.BOOL: bool?toogle_value = Property.Data.GetBool(data); if (toogle_value.HasValue) { value = GUILayout.Toggle(toogle_value.Value, data.optionText).ToString(); } else { value = Boolean.FalseString; } break; case Property.Type.FLAG: int?flag_value = DisplayFlags(data); if (flag_value.HasValue) { value = ((int)flag_value.Value).ToString(); } break; case Property.Type.INT: case Property.Type.FLOAT: GUILayout.BeginHorizontal(); GUILayout.Label(data.optionText); value = GUILayout.TextField(data.currentValue, GUILayout.Width(75)); GUILayout.EndHorizontal(); break; case Property.Type.STRING: GUILayout.BeginHorizontal(); GUILayout.Label(data.optionText); List <string> value_list = List.Parse(data.currentValue); GUILayout.FlexibleSpace(); GUILayout.BeginVertical(); List.DisplayConfiguration(value_list, GUILayout.Width(75)); GUILayout.EndVertical(); value = List.Serialize(value_list); GUILayout.EndHorizontal(); break; case Property.Type.MATRIX: const int size = 9; List <string> values_str = List.Parse(data.currentValue); if (values_str.Count != size) { Debug.LogError(values_str.Count); values_str = new List <string> { "0", "0", "0", "0", "0", "0", "1", "1", "1" }; } GUILayout.BeginHorizontal(); GUILayout.BeginVertical(); GUILayout.Label("Position"); GUILayout.Label("Rotation"); GUILayout.Label("Scale"); GUILayout.EndVertical(); GUILayout.BeginVertical(); for (int j = 0; j < size; j++) { if (j % 3 == 0) { GUILayout.BeginHorizontal(); } values_str[j] = GUILayout.TextField(values_str[j], GUILayout.Width(50)); if (j % 3 == 2) { GUILayout.EndHorizontal(); } } GUILayout.EndVertical(); GUILayout.EndHorizontal(); value = List.Serialize(values_str); break; } if (data.currentValue.CompareTo(value) != 0) { data.currentValue = value; changed = true; } } return(changed); }