125 lines
4.0 KiB
C#
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 };
|
||
|
}
|
||
|
}
|
||
|
}
|