using NEG.UI.UnityUi.Buttons; using NEG.Utils.Serialization; using UnityEditor; using UnityEditor.UIElements; using UnityEngine.UI; using UnityEngine.UIElements; using ObjectField = UnityEditor.Search.ObjectField; using Toggle = UnityEngine.UIElements.Toggle; namespace NEG.UI.UnityUi.Editor { [CustomPropertyDrawer(typeof(OverridableNavigation))] public class OverridableNavigationDrawer: PropertyDrawer { public override VisualElement CreatePropertyGUI(SerializedProperty property) { var container = new VisualElement() { style = { paddingLeft = 3, paddingRight = -2, flexDirection = FlexDirection.Row, justifyContent = Justify.SpaceBetween } }; string name = property.name; if (name.Length > 0) { name = $"{char.ToUpper(name[0])}{name[1..]}"; } var innerContainer = new VisualElement() { style = { flexDirection = FlexDirection.Row, justifyContent = Justify.SpaceBetween, marginRight = 2, flexGrow = 1 } }; var label = new Label(name) { style = { // } }; var enabler = new Toggle(); enabler.BindProperty(property.FindPropertyRelative("k__BackingField")); var field = new ObjectField() { style = { flexGrow = 100 } }; var selectableField = property.FindAutoPropertyRelative(nameof(OverridableNavigation.Selectable)); field.BindProperty(selectableField); field.objectType = typeof(Selectable); innerContainer.Add(label); innerContainer.Add(enabler); container.Add(innerContainer); container.Add(field); container.RegisterCallback(_ => { var panel = container.panel; var size = panel.visualTree.contentRect.size; // magic value measured with ruler, may change in the future! field.style.maxWidth = size.x * 0.55f + 15; }); field.SetEnabled(enabler.value); enabler.RegisterValueChangedCallback(v => { field.SetEnabled(v.newValue); }); return container; } } }