Skip to content

Commit 9f3c8b2

Browse files
Change DebugUIMenuElement
1 parent 63ebd27 commit 9f3c8b2

File tree

6 files changed

+84
-63
lines changed

6 files changed

+84
-63
lines changed

Assets/UGF.DebugTools.Runtime.Tests/Resources/DebugUIMenuElement.asset

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,10 @@ MonoBehaviour:
1313
m_Name: DebugUIMenuElement
1414
m_EditorClassIdentifier:
1515
m_displayName: Debug Menu
16-
m_elements:
17-
- m_guid:
18-
serializedVersion: 2
19-
Hash: 0fa65e93e3ad3684183f9a1f295f2f61
20-
m_asset: {fileID: 11400000, guid: 0fa65e93e3ad3684183f9a1f295f2f61, type: 2}
21-
- m_guid:
22-
serializedVersion: 2
23-
Hash: f86c269d4588ce7458554c74e06f9b54
24-
m_asset: {fileID: 11400000, guid: f86c269d4588ce7458554c74e06f9b54, type: 2}
25-
- m_guid:
26-
serializedVersion: 2
27-
Hash: e2589b9ae1a2a1b43b869efdfc789269
28-
m_asset: {fileID: 11400000, guid: e2589b9ae1a2a1b43b869efdfc789269, type: 2}
16+
m_menu:
17+
- m_name: Log
18+
m_element: {fileID: 11400000, guid: 0fa65e93e3ad3684183f9a1f295f2f61, type: 2}
19+
- m_name: Test 1
20+
m_element: {fileID: 11400000, guid: f86c269d4588ce7458554c74e06f9b54, type: 2}
21+
- m_name: Test 2
22+
m_element: {fileID: 11400000, guid: e2589b9ae1a2a1b43b869efdfc789269, type: 2}

Packages/UGF.DebugTools/Editor/UI/DebugUIMenuElementAssetEditor.cs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using UGF.DebugTools.Runtime.UI;
2-
using UGF.EditorTools.Editor.Assets;
32
using UGF.EditorTools.Editor.IMGUI;
43
using UGF.EditorTools.Editor.IMGUI.Scopes;
54
using UnityEditor;
@@ -10,27 +9,27 @@ namespace UGF.DebugTools.Editor.UI
109
internal class DebugUIMenuElementAssetEditor : UnityEditor.Editor
1110
{
1211
private SerializedProperty m_propertyDisplayName;
13-
private AssetIdReferenceListDrawer m_listElements;
14-
private ReorderableListSelectionDrawerByPath m_listElementsSelection;
12+
private ReorderableListKeyAndValueDrawer m_listMenu;
13+
private ReorderableListSelectionDrawerByPath m_listMenuSelection;
1514

1615
private void OnEnable()
1716
{
1817
m_propertyDisplayName = serializedObject.FindProperty("m_displayName");
19-
m_listElements = new AssetIdReferenceListDrawer(serializedObject.FindProperty("m_elements"));
18+
m_listMenu = new ReorderableListKeyAndValueDrawer(serializedObject.FindProperty("m_menu"), "m_name", "m_element");
2019

21-
m_listElementsSelection = new ReorderableListSelectionDrawerByPath(m_listElements, "m_asset")
20+
m_listMenuSelection = new ReorderableListSelectionDrawerByPath(m_listMenu, "m_element")
2221
{
2322
Drawer = { DisplayTitlebar = true }
2423
};
2524

26-
m_listElements.Enable();
27-
m_listElementsSelection.Enable();
25+
m_listMenu.Enable();
26+
m_listMenuSelection.Enable();
2827
}
2928

3029
private void OnDisable()
3130
{
32-
m_listElements.Disable();
33-
m_listElementsSelection.Disable();
31+
m_listMenu.Disable();
32+
m_listMenuSelection.Disable();
3433
}
3534

3635
public override void OnInspectorGUI()
@@ -41,8 +40,8 @@ public override void OnInspectorGUI()
4140

4241
EditorGUILayout.PropertyField(m_propertyDisplayName);
4342

44-
m_listElements.DrawGUILayout();
45-
m_listElementsSelection.DrawGUILayout();
43+
m_listMenu.DrawGUILayout();
44+
m_listMenuSelection.DrawGUILayout();
4645
}
4746
}
4847
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using System;
2+
3+
namespace UGF.DebugTools.Runtime.UI
4+
{
5+
public readonly struct DebugUIMenu
6+
{
7+
public string Name { get; }
8+
public DebugUIElement Element { get; }
9+
10+
public DebugUIMenu(string name, DebugUIElement element)
11+
{
12+
if (string.IsNullOrEmpty(name)) throw new ArgumentException("Value cannot be null or empty.", nameof(name));
13+
14+
Name = name;
15+
Element = element ?? throw new ArgumentNullException(nameof(element));
16+
}
17+
}
18+
}

Packages/UGF.DebugTools/Runtime/UI/DebugUIMenu.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Packages/UGF.DebugTools/Runtime/UI/DebugUIMenuElement.cs

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
using System;
22
using System.Collections.Generic;
3-
using UGF.EditorTools.Runtime.Ids;
43
using UnityEngine.UIElements;
54

65
namespace UGF.DebugTools.Runtime.UI
76
{
87
public class DebugUIMenuElement : DebugUIElement
98
{
109
public string DisplayName { get; }
11-
public IDictionary<GlobalId, DebugUIElement> Menus { get; }
12-
public GlobalId Selected { get { return m_selected ?? throw new ArgumentException("Value not specified."); } }
13-
public bool HasSelected { get { return m_selected != null; } }
10+
public IReadOnlyList<DebugUIMenu> Menus { get; }
11+
public int Selected { get { return m_selected ?? throw new ArgumentException("Value not specified."); } }
12+
public bool HasSelected { get { return m_selected.HasValue; } }
1413

14+
public static string NoneMenuName { get; } = "None";
1515
public static string UssClassName { get; } = "ugf-debugtools-menu";
1616
public static string EnabledUssClassName { get; } = "ugf-debugtools-menu--enabled";
1717
public static string DisabledUssClassName { get; } = "ugf-debugtools-menu--disabled";
@@ -24,9 +24,9 @@ public class DebugUIMenuElement : DebugUIElement
2424

2525
private readonly VisualElement m_headerContent;
2626
private readonly VisualElement m_bodyContent;
27-
private GlobalId? m_selected;
27+
private int? m_selected;
2828

29-
public DebugUIMenuElement(string displayName, IDictionary<GlobalId, DebugUIElement> menus)
29+
public DebugUIMenuElement(string displayName, IReadOnlyList<DebugUIMenu> menus)
3030
{
3131
if (string.IsNullOrEmpty(displayName)) throw new ArgumentException("Value cannot be null or empty.", nameof(displayName));
3232

@@ -47,7 +47,7 @@ public DebugUIMenuElement(string displayName, IDictionary<GlobalId, DebugUIEleme
4747
};
4848

4949
var toggle = new Toggle();
50-
var selection = new PopupField<GlobalId?>(OnSelectionCreateList(), 0, OnSelectionNameFormat, OnSelectionNameFormat);
50+
var selection = new PopupField<int?>(OnSelectionCreateList(), 0, OnSelectionNameFormat, OnSelectionNameFormat);
5151

5252
Add(header);
5353
Add(body);
@@ -59,11 +59,13 @@ public DebugUIMenuElement(string displayName, IDictionary<GlobalId, DebugUIEleme
5959
m_headerContent.Add(new Label(DisplayName));
6060
m_bodyContent.Add(selection);
6161

62-
foreach ((_, DebugUIElement element) in Menus)
62+
for (int i = 0; i < Menus.Count; i++)
6363
{
64-
element.AddToClassList(BodyContentNotSelectedUssClassName);
64+
DebugUIMenu menu = Menus[i];
6565

66-
m_bodyContent.Add(element);
66+
menu.Element.AddToClassList(BodyContentNotSelectedUssClassName);
67+
68+
m_bodyContent.Add(menu.Element);
6769
}
6870

6971
toggle.RegisterValueChangedCallback(OnToggle);
@@ -79,28 +81,28 @@ public DebugUIMenuElement(string displayName, IDictionary<GlobalId, DebugUIEleme
7981
m_bodyContent.AddToClassList(BodyContentUssClassName);
8082
}
8183

82-
public void SetSelected(GlobalId id)
84+
public void SetSelected(int index)
8385
{
84-
if (!id.IsValid()) throw new ArgumentException("Value should be valid.", nameof(id));
86+
if (index < 0 || index >= Menus.Count) throw new ArgumentOutOfRangeException(nameof(index));
8587

8688
ClearSelected();
8789

88-
m_selected = id;
90+
m_selected = index;
8991

90-
DebugUIElement element = Menus[m_selected.Value];
92+
DebugUIMenu menu = Menus[m_selected.Value];
9193

92-
element.RemoveFromClassList(BodyContentNotSelectedUssClassName);
93-
element.AddToClassList(BodyContentSelectedUssClassName);
94+
menu.Element.RemoveFromClassList(BodyContentNotSelectedUssClassName);
95+
menu.Element.AddToClassList(BodyContentSelectedUssClassName);
9496
}
9597

9698
public bool ClearSelected()
9799
{
98100
if (m_selected.HasValue)
99101
{
100-
DebugUIElement element = Menus[m_selected.Value];
102+
DebugUIMenu menu = Menus[m_selected.Value];
101103

102-
element.RemoveFromClassList(BodyContentSelectedUssClassName);
103-
element.AddToClassList(BodyContentNotSelectedUssClassName);
104+
menu.Element.RemoveFromClassList(BodyContentSelectedUssClassName);
105+
menu.Element.AddToClassList(BodyContentNotSelectedUssClassName);
104106

105107
m_selected = null;
106108
return true;
@@ -118,7 +120,7 @@ private void OnToggle(ChangeEvent<bool> changeEvent)
118120
m_bodyContent.visible = changeEvent.newValue;
119121
}
120122

121-
private void OnSelectionChange(ChangeEvent<GlobalId?> changeEvent)
123+
private void OnSelectionChange(ChangeEvent<int?> changeEvent)
122124
{
123125
if (changeEvent.newValue.HasValue)
124126
{
@@ -130,18 +132,18 @@ private void OnSelectionChange(ChangeEvent<GlobalId?> changeEvent)
130132
}
131133
}
132134

133-
private string OnSelectionNameFormat(GlobalId? id)
135+
private string OnSelectionNameFormat(int? id)
134136
{
135-
return id.HasValue ? Menus[id.Value].name : "None";
137+
return id.HasValue ? Menus[id.Value].Name : NoneMenuName;
136138
}
137139

138-
private List<GlobalId?> OnSelectionCreateList()
140+
private List<int?> OnSelectionCreateList()
139141
{
140-
var list = new List<GlobalId?> { default };
142+
var list = new List<int?> { default };
141143

142-
foreach ((GlobalId id, _) in Menus)
144+
for (int i = 0; i < Menus.Count; i++)
143145
{
144-
list.Add(id);
146+
list.Add(i);
145147
}
146148

147149
return list;

Packages/UGF.DebugTools/Runtime/UI/DebugUIMenuElementAsset.cs

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
using System.Collections.Generic;
2-
using UGF.EditorTools.Runtime.Assets;
3-
using UGF.EditorTools.Runtime.Ids;
1+
using System;
2+
using System.Collections.Generic;
43
using UnityEngine;
54

65
namespace UGF.DebugTools.Runtime.UI
@@ -9,24 +8,30 @@ namespace UGF.DebugTools.Runtime.UI
98
public class DebugUIMenuElementAsset : DebugUIElementAsset
109
{
1110
[SerializeField] private string m_displayName = "Debug Menu";
12-
[SerializeField] private List<AssetIdReference<DebugUIElementAsset>> m_elements = new List<AssetIdReference<DebugUIElementAsset>>();
11+
[SerializeField] private List<MenuData> m_menu = new List<MenuData>();
1312

1413
public string DisplayName { get { return m_displayName; } set { m_displayName = value; } }
15-
public List<AssetIdReference<DebugUIElementAsset>> Elements { get { return m_elements; } }
14+
public List<MenuData> Menu { get { return m_menu; } }
1615

17-
protected override DebugUIElement OnBuild()
16+
[Serializable]
17+
public struct MenuData
1818
{
19-
var menus = new Dictionary<GlobalId, DebugUIElement>();
19+
[SerializeField] private string m_name;
20+
[SerializeField] private DebugUIElementAsset m_element;
2021

21-
for (int i = 0; i < m_elements.Count; i++)
22-
{
23-
AssetIdReference<DebugUIElementAsset> reference = m_elements[i];
22+
public string Name { get { return m_name; } set { m_name = value; } }
23+
public DebugUIElementAsset Element { get { return m_element; } set { m_element = value; } }
24+
}
2425

25-
DebugUIElement element = reference.Asset.Build();
26+
protected override DebugUIElement OnBuild()
27+
{
28+
var menus = new List<DebugUIMenu>();
2629

27-
element.name = reference.Asset.name;
30+
for (int i = 0; i < m_menu.Count; i++)
31+
{
32+
MenuData menu = m_menu[i];
2833

29-
menus.Add(reference.Guid, element);
34+
menus.Add(new DebugUIMenu(menu.Name, menu.Element.Build()));
3035
}
3136

3237
return new DebugUIMenuElement(m_displayName, menus);

0 commit comments

Comments
 (0)