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);
- }
}
}