diff --git a/src/UI/UIFactory.cs b/src/UI/UIFactory.cs index 3a5f927..fc3e526 100644 --- a/src/UI/UIFactory.cs +++ b/src/UI/UIFactory.cs @@ -409,56 +409,49 @@ namespace UnityExplorer.UI /// /// Create a Toggle control. /// - public static GameObject CreateToggle(GameObject parent, string name, out Toggle toggle, out Text text, Color bgColor = default) + public static GameObject CreateToggle(GameObject parent, string name, out Toggle toggle, out Text text, Color bgColor = default, + int checkWidth = 20, int checkHeight = 20) { + // Main obj GameObject toggleObj = CreateUIObject(name, parent, _smallElementSize); - - GameObject bgObj = CreateUIObject("Background", toggleObj); - GameObject checkObj = CreateUIObject("Checkmark", bgObj); - GameObject labelObj = CreateUIObject("Label", toggleObj); - + SetLayoutGroup(toggleObj, false, false, true, true, 5, 0,0,0,0, childAlignment: TextAnchor.MiddleLeft); toggle = toggleObj.AddComponent(); toggle.isOn = true; + SetDefaultSelectableColors(toggle); + // need a second reference so we can use it inside the lambda, since 'toggle' is an out var. + Toggle t2 = toggle; + toggle.onValueChanged.AddListener((bool _) => { t2.OnDeselect(null); }); - // second reference so we can use it inside the lambda, 'toggle' is an out var. - Toggle toggleComp = toggle; - toggle.onValueChanged.AddListener(Deselect); - void Deselect(bool _) - { - toggleComp.OnDeselect(null); - } + // Check mark background - Image bgImage = bgObj.AddComponent(); + GameObject checkBgObj = CreateUIObject("Background", toggleObj); + Image bgImage = checkBgObj.AddComponent(); bgImage.color = bgColor == default ? new Color(0.04f, 0.04f, 0.04f, 0.75f) : bgColor; - Image checkImage = checkObj.AddComponent(); + SetLayoutGroup(checkBgObj, true, true, true, true, 0, 2, 2, 2, 2); + SetLayoutElement(checkBgObj, minWidth: checkWidth, flexibleWidth: 0, minHeight: checkHeight, flexibleHeight: 0); + + // Check mark image + + GameObject checkMarkObj = CreateUIObject("Checkmark", checkBgObj); + Image checkImage = checkMarkObj.AddComponent(); checkImage.color = new Color(0.8f, 1, 0.8f, 0.3f); + // Label + + GameObject labelObj = CreateUIObject("Label", toggleObj); text = labelObj.AddComponent(); - text.text = "Toggle"; + text.text = ""; + text.alignment = TextAnchor.MiddleLeft; SetDefaultTextValues(text); + SetLayoutElement(labelObj, minWidth: 0, flexibleWidth: 0, minHeight: checkHeight, flexibleHeight: 0); + + // References + toggle.graphic = checkImage; toggle.targetGraphic = bgImage; - SetDefaultSelectableColors(toggle); - RectTransform bgRect = bgObj.GetComponent(); - bgRect.anchorMin = new Vector2(0f, 1f); - bgRect.anchorMax = new Vector2(0f, 1f); - bgRect.anchoredPosition = new Vector2(13f, -13f); - bgRect.sizeDelta = new Vector2(20f, 20f); - - RectTransform checkRect = checkObj.GetComponent(); - checkRect.anchorMin = new Vector2(0.5f, 0.5f); - checkRect.anchorMax = new Vector2(0.5f, 0.5f); - checkRect.anchoredPosition = Vector2.zero; - checkRect.sizeDelta = new Vector2(14f, 14f); - - RectTransform labelRect = labelObj.GetComponent(); - labelRect.anchorMin = new Vector2(0f, 0f); - labelRect.anchorMax = new Vector2(1f, 1f); - labelRect.offsetMin = new Vector2(28f, 2f); - labelRect.offsetMax = new Vector2(-5f, -5f); return toggleObj; } diff --git a/src/UI/Widgets/TransformTree/TransformCell.cs b/src/UI/Widgets/TransformTree/TransformCell.cs index 94d8e6d..c15bba2 100644 --- a/src/UI/Widgets/TransformTree/TransformCell.cs +++ b/src/UI/Widgets/TransformTree/TransformCell.cs @@ -17,6 +17,7 @@ namespace UnityExplorer.UI.Widgets private bool m_enabled; public Action OnExpandToggled; + public Action OnEnableToggled; public Action OnGameObjectClicked; public CachedTransform cachedTransform; @@ -27,15 +28,20 @@ namespace UnityExplorer.UI.Widgets public ButtonRef ExpandButton; public ButtonRef NameButton; + public Toggle EnabledToggle; public LayoutElement spacer; - public void OnMainButtonClicked() + public void Enable() { - if (cachedTransform.Value) - OnGameObjectClicked?.Invoke(cachedTransform.Value.gameObject); - else - ExplorerCore.LogWarning("The object was destroyed!"); + m_enabled = true; + UIRoot.SetActive(true); + } + + public void Disable() + { + m_enabled = false; + UIRoot.SetActive(false); } public void ConfigureCell(CachedTransform cached, int cellIndex) @@ -59,6 +65,8 @@ namespace UnityExplorer.UI.Widgets NameButton.ButtonText.text = cached.Value.name; NameButton.ButtonText.color = cached.Value.gameObject.activeSelf ? Color.white : Color.grey; + EnabledToggle.Set(cached.Value.gameObject.activeSelf, false); + int childCount = cached.Value.childCount; if (childCount > 0) { @@ -82,16 +90,12 @@ namespace UnityExplorer.UI.Widgets } } - public void Disable() + public void OnMainButtonClicked() { - m_enabled = false; - UIRoot.SetActive(false); - } - - public void Enable() - { - m_enabled = true; - UIRoot.SetActive(true); + if (cachedTransform.Value) + OnGameObjectClicked?.Invoke(cachedTransform.Value.gameObject); + else + ExplorerCore.LogWarning("The object was destroyed!"); } public void OnExpandClicked() @@ -99,10 +103,15 @@ namespace UnityExplorer.UI.Widgets OnExpandToggled?.Invoke(cachedTransform); } + private void OnEnableClicked(bool value) + { + OnEnableToggled?.Invoke(cachedTransform); + } + public GameObject CreateContent(GameObject parent) { UIRoot = UIFactory.CreateUIObject("TransformCell", parent); - UIFactory.SetLayoutGroup(UIRoot, true, true, true, true, 2, childAlignment: TextAnchor.MiddleCenter); + UIFactory.SetLayoutGroup(UIRoot, false, false, true, true, 2, childAlignment: TextAnchor.MiddleCenter); Rect = UIRoot.GetComponent(); Rect.anchorMin = new Vector2(0, 1); Rect.anchorMax = new Vector2(0, 1); @@ -114,9 +123,19 @@ namespace UnityExplorer.UI.Widgets UIFactory.SetLayoutElement(spacerObj, minWidth: 0, flexibleWidth: 0, minHeight: 0, flexibleHeight: 0); this.spacer = spacerObj.GetComponent(); + // Expand arrow + ExpandButton = UIFactory.CreateButton(this.UIRoot, "ExpandButton", "►"); UIFactory.SetLayoutElement(ExpandButton.Component.gameObject, minWidth: 15, flexibleWidth: 0, minHeight: 25, flexibleHeight: 0); + // Enabled toggle + + var toggleObj = UIFactory.CreateToggle(UIRoot, "BehaviourToggle", out EnabledToggle, out var behavText, default, 17, 17); + UIFactory.SetLayoutElement(toggleObj, minHeight: 17, flexibleHeight: 0, minWidth: 17); + EnabledToggle.onValueChanged.AddListener(OnEnableClicked); + + // Name button + NameButton = UIFactory.CreateButton(this.UIRoot, "NameButton", "Name", null); UIFactory.SetLayoutElement(NameButton.Component.gameObject, flexibleWidth: 9999, minHeight: 25, flexibleHeight: 0); var nameLabel = NameButton.Component.GetComponentInChildren(); diff --git a/src/UI/Widgets/TransformTree/TransformTree.cs b/src/UI/Widgets/TransformTree/TransformTree.cs index c5050a2..3d025e8 100644 --- a/src/UI/Widgets/TransformTree/TransformTree.cs +++ b/src/UI/Widgets/TransformTree/TransformTree.cs @@ -60,8 +60,9 @@ namespace UnityExplorer.UI.Widgets public void OnCellBorrowed(TransformCell cell) { - cell.OnExpandToggled += ToggleExpandCell; + cell.OnExpandToggled += OnCellExpandToggled; cell.OnGameObjectClicked += OnGameObjectClicked; + cell.OnEnableToggled += OnCellEnableToggled; } private void OnGameObjectClicked(GameObject obj) @@ -72,6 +73,24 @@ namespace UnityExplorer.UI.Widgets InspectorManager.Inspect(obj); } + public void OnCellExpandToggled(CachedTransform cache) + { + var instanceID = cache.InstanceID; + if (expandedInstanceIDs.Contains(instanceID)) + expandedInstanceIDs.Remove(instanceID); + else + expandedInstanceIDs.Add(instanceID); + + RefreshData(true); + } + + public void OnCellEnableToggled(CachedTransform cache) + { + cache.Value.gameObject.SetActive(!cache.Value.gameObject.activeSelf); + + RefreshData(true); + } + public void Init() { ScrollPool.Initialize(this); @@ -261,16 +280,5 @@ namespace UnityExplorer.UI.Widgets else cell.Disable(); } - - public void ToggleExpandCell(CachedTransform cache) - { - var instanceID = cache.InstanceID; - if (expandedInstanceIDs.Contains(instanceID)) - expandedInstanceIDs.Remove(instanceID); - else - expandedInstanceIDs.Add(instanceID); - - RefreshData(true); - } } }