Singularity/Library/PackageCache/com.unity.2d.animation@7.0.10/Editor/SkinningModule/VisibilityTool/VisibilityToolBase.cs
2024-05-06 11:45:45 -07:00

125 lines
4.0 KiB
C#

using System;
using UnityEditor.IMGUI.Controls;
using UnityEngine;
using UnityEngine.UIElements;
namespace UnityEditor.U2D.Animation
{
internal interface IVisibilityTool
{
VisualElement view { get; }
string name { get; }
void Activate();
void Deactivate();
bool isAvailable { get; }
void SetAvailabilityChangeCallback(Action callback);
void Setup();
void Dispose();
}
internal class VisibilityToolViewBase : VisualElement
{
IMGUIContainer m_Container;
SearchField m_SearchField;
protected IMGUI.Controls.TreeView m_TreeView;
protected TreeViewState m_TreeViewState = new TreeViewState();
public Action<float> SetOpacityValue = null;
public Func<float> GetOpacityValue = null;
protected static class Styles
{
public static readonly GUIStyle preLabel = "preLabel";
public static readonly GUIStyle preSlider = "preSlider";
public static readonly GUIStyle preSliderThumb = "preSliderThumb";
}
public VisibilityToolViewBase()
{
m_Container = new IMGUIContainer(OnGUI);
this.Add(m_Container);
m_TreeViewState.searchString = "";
}
protected void SetupSearchField()
{
m_SearchField = new SearchField();
m_SearchField.downOrUpArrowKeyPressed += m_TreeView.SetFocusAndEnsureSelectedItem;
}
void DoSearchField()
{
m_SearchField.downOrUpArrowKeyPressed += m_TreeView.SetFocusAndEnsureSelectedItem;
GUILayout.BeginHorizontal(EditorStyles.toolbar);
m_TreeView.searchString = m_SearchField.OnToolbarGUI(m_TreeView.searchString);
GUILayout.EndHorizontal();
}
void DoOpacitySlider()
{
if (GetOpacityValue != null && SetOpacityValue != null)
{
GUILayout.BeginHorizontal(EditorStyles.toolbar);
EditorGUI.BeginChangeCheck();
var opacity = GUILayout.HorizontalSlider(GetOpacityValue(), 0, 1, Styles.preSlider, Styles.preSliderThumb);
if (EditorGUI.EndChangeCheck())
SetOpacityValue(opacity);
GUILayout.EndHorizontal();
}
}
void OnGUI()
{
GUILayout.BeginVertical();
DoSearchField();
GUILayout.EndVertical();
Rect rect = GUILayoutUtility.GetRect(0, 100000, 0, 100000);
m_TreeView.OnGUI(rect);
DoOpacitySlider();
}
}
internal class TreeViewItemBase<T> : TreeViewItem
{
public T customData;
public TreeViewItemBase(int id, int depth, string name, T data) : base(id, depth, name)
{
customData = data;
}
}
internal class VisibilityTreeViewBase : IMGUI.Controls.TreeView
{
static internal class VisibilityIconStyle
{
public static readonly GUIContent visibilityOnIcon = new GUIContent(IconUtility.LoadIconResource("Visibility_Tool", IconUtility.k_LightIconResourcePath, IconUtility.k_DarkIconResourcePath), L10n.Tr("On"));
public static readonly GUIContent visibilityOffIcon = new GUIContent(IconUtility.LoadIconResource("Visibility_Hidded", IconUtility.k_LightIconResourcePath, IconUtility.k_DarkIconResourcePath), L10n.Tr("Off"));
}
public VisibilityTreeViewBase(TreeViewState treeViewState, MultiColumnHeader multiColumn)
: base(treeViewState, multiColumn)
{
Init();
}
public VisibilityTreeViewBase(TreeViewState treeViewState)
: base(treeViewState)
{
Init();
}
void Init()
{
this.showAlternatingRowBackgrounds = true;
this.useScrollView = true;
}
protected override TreeViewItem BuildRoot()
{
return new TreeViewItem { id = 0, depth = -1 };
}
}
}