OldBlueWater/BlueWater/Assets/Doozy/Editor/Signals/Windows/SignalsWindow.cs
2023-08-02 15:08:03 +09:00

137 lines
5.3 KiB
C#

// Copyright (c) 2015 - 2023 Doozy Entertainment. All Rights Reserved.
// This code can only be used under the standard Unity Asset Store End User License Agreement
// A Copy of the EULA APPENDIX 1 is available at http://unity3d.com/company/legal/as_terms
using System;
using System.Collections.Generic;
using Doozy.Editor.Common.Layouts;
using Doozy.Editor.EditorUI;
using Doozy.Editor.EditorUI.Components;
using Doozy.Editor.EditorUI.Components.Internal;
using Doozy.Editor.EditorUI.Utils;
using Doozy.Editor.EditorUI.Windows.Internal;
using Doozy.Editor.Signals.Layouts;
using Doozy.Editor.UIElements;
using Doozy.Runtime.UIElements.Extensions;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
namespace Doozy.Editor.Signals.Windows
{
public class SignalsWindow : FluidWindow<SignalsWindow>
{
private const string WINDOW_TITLE = "Signals";
public const string k_WindowMenuPath = "Tools/Doozy/Signals/";
public static void Open() => InternalOpenWindow(WINDOW_TITLE);
[MenuItem("Tools/Doozy/Refresh/Signals", priority = -450)]
public static void RefreshProviders() => SignalsUtils.RefreshProviders();
private TemplateContainer templateContainer { get; set; }
private VisualElement sideMenuContainer { get; set; }
private VisualElement contentContainer { get; set; }
private FluidSideMenu sideMenu { get; set; }
protected override void OnEnable()
{
base.OnEnable();
minSize = new Vector2(600, 400);
}
private List<VisualElement> layouts { get; set; }
private StreamsConsoleWindowLayout streamsLayout { get; set; }
private SignalsConsoleWindowLayout signalsLayout { get; set; }
private CategoryNameGroupWindowLayout streamsDatabaseLayout { get; set; }
private SignalsSettingsWindowLayout settingsLayout { get; set; }
protected override void CreateGUI()
{
layouts = new List<VisualElement>();
root
.RecycleAndClear()
.Add(templateContainer = EditorLayouts.Signals.SignalsWindow.CloneTree());
templateContainer
.AddStyle(EditorUI.EditorStyles.Signals.SignalsWindow)
.SetStyleFlexGrow(1);
sideMenuContainer = templateContainer.Q<VisualElement>("SideMenuContainer");
contentContainer = templateContainer.Q<VisualElement>("ContentContainer");
sideMenuContainer.Add(sideMenu =
new FluidSideMenu()
.SetMenuLevel(FluidSideMenu.MenuLevel.Level_0));
layouts.Add(streamsLayout = streamsLayout ?? Activator.CreateInstance<StreamsConsoleWindowLayout>());
layouts.Add(signalsLayout = signalsLayout ?? Activator.CreateInstance<SignalsConsoleWindowLayout>());
layouts.Add(streamsDatabaseLayout = streamsDatabaseLayout ?? Activator.CreateInstance<StreamsDatabaseWindowLayout>());
layouts.Add(settingsLayout = settingsLayout ?? Activator.CreateInstance<SignalsSettingsWindowLayout>());
var buttonStreamsConsole =
sideMenu
.AddButton("Streams Console", streamsLayout.selectableAccentColor).SetIcon(streamsLayout.animatedIconTextures)
.SetOnValueChanged(evt =>
{
if (!evt.newValue) return;
SetLayout(streamsLayout);
});
var buttonSignalsConsole =
sideMenu
.AddButton("Signals Console", signalsLayout.selectableAccentColor).SetIcon(signalsLayout.animatedIconTextures)
.SetOnValueChanged(evt =>
{
if (!evt.newValue) return;
SetLayout(signalsLayout);
});
sideMenu.buttonsScrollViewContainer.AddSpace(0, DesignUtils.k_Spacing * 4);
var buttonStaticStreams =
sideMenu
.AddButton("Streams Database", streamsDatabaseLayout.selectableAccentColor).SetIcon(streamsDatabaseLayout.animatedIconTextures)
.SetOnValueChanged(evt =>
{
if (!evt.newValue) return;
SetLayout(streamsDatabaseLayout);
});
sideMenu.buttonsScrollViewContainer.AddSpace(0, DesignUtils.k_Spacing * 4);
// var buttonSettings =
// sideMenu
// .AddButton("Settings", settingsLayout.selectableAccentColor).SetIcon(settingsLayout.animatedIconTextures)
// .SetOnValueChanged(evt =>
// {
// if (!evt.newValue) return;
// SetLayout(settingsLayout);
// });
}
private void HideLayouts()
{
foreach (VisualElement layout in layouts)
layout.SetStyleDisplay(DisplayStyle.None);
}
private void SetLayout(VisualElement layout)
{
HideLayouts();
contentContainer.Clear();
contentContainer.AddChild(layout.SetStyleDisplay(DisplayStyle.Flex));
}
protected override void OnDestroy()
{
base.OnDestroy();
streamsLayout?.OnDestroy();
signalsLayout?.OnDestroy();
}
}
}