63 lines
2.0 KiB
C#
63 lines
2.0 KiB
C#
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Linq;
|
||
|
using System.Reflection;
|
||
|
using Paps.UnityToolbarExtenderUIToolkit;
|
||
|
using UnityEditor;
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.UIElements;
|
||
|
|
||
|
namespace AlicizaX.Editor.Extension
|
||
|
{
|
||
|
[MainToolbarElement("EditorQuickToolBar", alignment: ToolbarAlign.Right, order: 1)]
|
||
|
public class EditorQuickToolBar : IMGUIContainer
|
||
|
{
|
||
|
private static GUIContent toolsDropBtContent;
|
||
|
|
||
|
public void InitializeElement()
|
||
|
{
|
||
|
toolsDropBtContent = EditorGUIUtility.TrTextContentWithIcon("Tools", "工具箱", "CustomTool");
|
||
|
onGUIHandler = MyGUIMethod;
|
||
|
}
|
||
|
|
||
|
private void MyGUIMethod()
|
||
|
{
|
||
|
GUILayout.BeginHorizontal();
|
||
|
if (EditorGUILayout.DropdownButton(toolsDropBtContent, FocusType.Passive, EditorStyles.toolbarPopup,
|
||
|
GUILayout.MaxWidth(90)))
|
||
|
{
|
||
|
DrawEditorToolDropdownMenus();
|
||
|
}
|
||
|
|
||
|
GUILayout.Space(5);
|
||
|
GUILayout.EndHorizontal();
|
||
|
}
|
||
|
|
||
|
static void DrawEditorToolDropdownMenus()
|
||
|
{
|
||
|
GenericMenu popMenu = new GenericMenu();
|
||
|
for (int i = 0; i < EditorToolFunctionAttributeCollector.Attributes.Count; i++)
|
||
|
{
|
||
|
var toolAttr = EditorToolFunctionAttributeCollector.Attributes[i];
|
||
|
popMenu.AddItem(new GUIContent(toolAttr.ToolMenuPath), false,
|
||
|
menuIdx => { ClickToolsSubmenu((int)menuIdx); }, i);
|
||
|
}
|
||
|
|
||
|
popMenu.ShowAsContext();
|
||
|
}
|
||
|
|
||
|
static void ClickToolsSubmenu(int menuIdx)
|
||
|
{
|
||
|
var editorTp = EditorToolFunctionAttributeCollector.Attributes[menuIdx];
|
||
|
if (editorTp.MethodInfo != null && editorTp.MethodInfo.IsStatic)
|
||
|
{
|
||
|
editorTp.MethodInfo.Invoke(null, null); // Invoke the static method
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Debug.LogError("Method is not static or not found.");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|