-
Notifications
You must be signed in to change notification settings - Fork 0
/
BuildToolsManagerWindow.cs
105 lines (87 loc) · 3.01 KB
/
BuildToolsManagerWindow.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
using System.Collections.Generic;
using CHARK.BuildTools.Editor.Elements;
using CHARK.BuildTools.Editor.Utilities;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
namespace CHARK.BuildTools.Editor
{
/// <summary>
/// Window used to manage build settings.
/// </summary>
internal sealed class BuildToolsManagerWindow : EditorWindow
{
[SerializeField]
private StyleSheet styleSheet;
private readonly List<BuildConfiguration> buildConfigurations = new();
private BuildConfigurationList listView;
[MenuItem(
MenuItemConstants.BaseWindowItemName + "/Build Tools",
priority = MenuItemConstants.BaseWindowPriority
)]
private static void ShowWindow()
{
var sceneManagerWindow = GetWindow<BuildToolsManagerWindow>();
sceneManagerWindow.titleContent = new GUIContent("Build Tools");
var minSize = sceneManagerWindow.minSize;
minSize.x = 100f;
minSize.y = 100f;
sceneManagerWindow.minSize = minSize;
sceneManagerWindow.Show();
}
private void OnEnable()
{
BuildToolsEditorUtilities.OnEditorStateChanged += OnEditorStateChanged;
BindUIElements();
SetupElements();
SetupStyleSheets();
}
private void OnDisable()
{
BuildToolsEditorUtilities.OnEditorStateChanged -= OnEditorStateChanged;
}
private void SetupElements()
{
rootVisualElement.AddToClassList("content");
listView = new BuildConfigurationList(buildConfigurations);
listView.OnSortOrderChanged += OnListViewSortOrderChanged;
listView.OnBuildButtonClicked += OnListViewBuildButtonClicked;
rootVisualElement.AddToClassList("window-content");
rootVisualElement.Add(listView);
}
private void SetupStyleSheets()
{
rootVisualElement.styleSheets.Add(styleSheet);
}
private void BindUIElements()
{
BindListView();
}
private void BindListView()
{
buildConfigurations.Clear();
buildConfigurations.AddRange(BuildToolsEditorUtilities.GetBuildConfigurations());
listView?.RefreshItems();
}
private void OnEditorStateChanged()
{
BindUIElements();
}
private void OnListViewSortOrderChanged()
{
for (var index = 0; index < buildConfigurations.Count; index++)
{
var configuration = buildConfigurations[index];
if (configuration.GetDisplayOrder() == index)
{
continue;
}
configuration.SetDisplayOrder(index);
}
}
private static void OnListViewBuildButtonClicked(BuildConfiguration configuration)
{
PlayerBuilder.BuildAndLog(configuration);
}
}
}