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

100 lines
4.1 KiB
C#

using System;
using UnityEngine;
using UnityEngine.UIElements;
namespace UnityEditor.U2D.Animation
{
internal class MeshToolbar : Toolbar
{
private const string k_UxmlPath = "SkinningModule/MeshToolbar.uxml";
private const string k_ToolbarId = "MeshToolbar";
private const string k_SelectGeometryId = "SelectGeometry";
private const string k_CreateVertexId = "CreateVertex";
private const string k_CreateEdgeId = "CreateEdge";
private const string k_SplitEdgeId = "SplitEdge";
private const string k_GenerateGeometryId = "GenerateGeometry";
public class MeshToolbarFactory : UxmlFactory<MeshToolbar, MeshToolbarUxmlTraits> {}
public class MeshToolbarUxmlTraits : UxmlTraits {}
public event Action<Tools> SetMeshTool = (mode) => {};
public SkinningCache skinningCache { get; set; }
public static MeshToolbar GenerateFromUXML()
{
var clone = GetClone(k_UxmlPath, k_ToolbarId) as MeshToolbar;
clone.BindElements();
clone.SetupShortcutUtility();
clone.LocalizeTextInChildren();
clone.AddShortcutsToToolTips();
return clone;
}
public MeshToolbar()
{
styleSheets.Add(ResourceLoader.Load<StyleSheet>("SkinningModule/MeshToolbarStyle.uss"));
}
private void BindElements()
{
var button = this.Q<Button>(k_SelectGeometryId);
button.clickable.clicked += () => { SetMeshTool(Tools.EditGeometry); };
button = this.Q<Button>(k_CreateVertexId);
button.clickable.clicked += () => { SetMeshTool(Tools.CreateVertex); };
button = this.Q<Button>(k_CreateEdgeId);
button.clickable.clicked += () => { SetMeshTool(Tools.CreateEdge); };
button = this.Q<Button>(k_SplitEdgeId);
button.clickable.clicked += () => { SetMeshTool(Tools.SplitEdge); };
button = this.Q<Button>(k_GenerateGeometryId);
button.clickable.clicked += () => { SetMeshTool(Tools.GenerateGeometry); };
}
private void SetupShortcutUtility()
{
m_ShortcutUtility = new ShortcutUtility(ShortcutIds.editGeometry,
ShortcutIds.createVertex,
ShortcutIds.createEdge,
ShortcutIds.splitEdge,
ShortcutIds.autoGeometry);
m_ShortcutUtility.OnShortcutChanged = () =>
{
RestoreButtonTooltips(k_UxmlPath, k_ToolbarId);
AddShortcutsToToolTips();
};
}
public void UpdateToggleState()
{
//TODO: Make UI not be aware of BaseTool, Cache, etc. Use Tool enum
var button = this.Q<Button>(k_SelectGeometryId);
SetButtonChecked(button, skinningCache.GetTool(Tools.EditGeometry).isActive);
button = this.Q<Button>(k_CreateVertexId);
SetButtonChecked(button, skinningCache.GetTool(Tools.CreateVertex).isActive);
button = this.Q<Button>(k_CreateEdgeId);
SetButtonChecked(button, skinningCache.GetTool(Tools.CreateEdge).isActive);
button = this.Q<Button>(k_SplitEdgeId);
SetButtonChecked(button, skinningCache.GetTool(Tools.SplitEdge).isActive);
button = this.Q<Button>(k_GenerateGeometryId);
SetButtonChecked(button, skinningCache.GetTool(Tools.GenerateGeometry).isActive);
}
private void AddShortcutsToToolTips()
{
m_ShortcutUtility.AddShortcutToButtonTooltip(this, k_SelectGeometryId, ShortcutIds.editGeometry);
m_ShortcutUtility.AddShortcutToButtonTooltip(this, k_CreateVertexId, ShortcutIds.createVertex);
m_ShortcutUtility.AddShortcutToButtonTooltip(this, k_CreateEdgeId, ShortcutIds.createEdge);
m_ShortcutUtility.AddShortcutToButtonTooltip(this, k_SplitEdgeId, ShortcutIds.splitEdge);
m_ShortcutUtility.AddShortcutToButtonTooltip(this, k_GenerateGeometryId, ShortcutIds.autoGeometry);
}
}
}