#if UNITY_EDITOR
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
using System.Collections.Generic;
|
|
|
|
namespace U3DExtends {
|
|
static public class ContextMenu
|
|
{
|
|
static List<string> mEntries = new List<string>();
|
|
static GenericMenu mMenu;
|
|
|
|
static public void AddItem(string item, bool isChecked, GenericMenu.MenuFunction callback)
|
|
{
|
|
if (callback != null)
|
|
{
|
|
if (mMenu == null) mMenu = new GenericMenu();
|
|
int count = 0;
|
|
|
|
for (int i = 0; i < mEntries.Count; ++i)
|
|
{
|
|
string str = mEntries[i];
|
|
if (str == item) ++count;
|
|
}
|
|
mEntries.Add(item);
|
|
|
|
if (count > 0) item += " [" + count + "]";
|
|
mMenu.AddItem(new GUIContent(item), isChecked, callback);
|
|
}
|
|
else AddDisabledItem(item);
|
|
}
|
|
|
|
static public void AddItemWithArge(string item, bool isChecked, GenericMenu.MenuFunction2 callback, object arge)
|
|
{
|
|
if (callback != null)
|
|
{
|
|
if (mMenu == null) mMenu = new GenericMenu();
|
|
int count = 0;
|
|
|
|
for (int i = 0; i < mEntries.Count; ++i)
|
|
{
|
|
string str = mEntries[i];
|
|
if (str == item) ++count;
|
|
}
|
|
mEntries.Add(item);
|
|
|
|
if (count > 0) item += " [" + count + "]";
|
|
mMenu.AddItem(new GUIContent(item), isChecked, callback, arge);
|
|
}
|
|
else AddDisabledItem(item);
|
|
}
|
|
|
|
static public void Show()
|
|
{
|
|
if (mMenu != null)
|
|
{
|
|
mMenu.ShowAsContext();
|
|
mMenu = null;
|
|
mEntries.Clear();
|
|
}
|
|
}
|
|
|
|
//增加几种对齐菜单
|
|
static public void AddAlignMenu()
|
|
{
|
|
AddItem("对齐/左对齐 ←", false, AlignTool.AlignInHorziontalLeft);
|
|
AddItem("对齐/右对齐 →", false, AlignTool.AlignInHorziontalRight);
|
|
AddItem("对齐/上对齐 ↑", false, AlignTool.AlignInVerticalUp);
|
|
AddItem("对齐/下对齐 ↓", false, AlignTool.AlignInVerticalDown);
|
|
AddItem("对齐/水平均匀 |||", false, AlignTool.UniformDistributionInHorziontal);
|
|
AddItem("对齐/垂直均匀 ☰", false, AlignTool.UniformDistributionInVertical);
|
|
AddItem("对齐/一样大 ■", false, AlignTool.ResizeMax);
|
|
AddItem("对齐/一样小 ●", false, AlignTool.ResizeMin);
|
|
}
|
|
|
|
//增加层次菜单
|
|
static public void AddPriorityMenu()
|
|
{
|
|
AddItem("层次/最里层 ↑↑↑", false, PriorityTool.MoveToTopWidget);
|
|
AddItem("层次/最外层 ↓↓↓", false, PriorityTool.MoveToBottomWidget);
|
|
AddItem("层次/往里挤 ↑", false, PriorityTool.MoveUpWidget);
|
|
AddItem("层次/往外挤 ↓", false, PriorityTool.MoveDownWidget);
|
|
}
|
|
|
|
//增加UI控件菜单
|
|
static public void AddUIMenu()
|
|
{
|
|
AddItem("添加控件/Empty", false, UIEditorHelper.CreateEmptyObj);
|
|
AddItem("添加控件/Image", false, UIEditorHelper.CreateImageObj);
|
|
AddItem("添加控件/RawImage", false, UIEditorHelper.CreateRawImageObj);
|
|
AddItem("添加控件/Button", false, UIEditorHelper.CreateButtonObj);
|
|
AddItem("添加控件/Text", false, UIEditorHelper.CreateTextObj);
|
|
AddItem("添加控件/AdaptiveText", false, UIEditorHelper.CreateAdaptiveTextObj);
|
|
AddItem("添加控件/HScroll", false, UIEditorHelper.CreateHScrollViewObj);
|
|
AddItem("添加控件/VScroll", false, UIEditorHelper.CreateVScrollViewObj);
|
|
}
|
|
|
|
//增加UI组件菜单
|
|
static public void AddUIComponentMenu()
|
|
{
|
|
AddItem("添加组件/Image", false, UIEditorHelper.AddImageComponent);
|
|
//AddItem("添加组件/RawImage", false, UIEditorHelper.CreateRawImageObj);
|
|
//AddItem("添加组件/Button", false, UIEditorHelper.CreateButtonObj);
|
|
//AddItem("添加组件/Text", false, UIEditorHelper.CreateTextObj);
|
|
AddItem("添加组件/HLayout", false, UIEditorHelper.AddHorizontalLayoutComponent);
|
|
AddItem("添加组件/VLayout", false, UIEditorHelper.AddVerticalLayoutComponent);
|
|
AddItem("添加组件/GridLayout", false, UIEditorHelper.AddGridLayoutGroupComponent);
|
|
|
|
}
|
|
|
|
//增加显示隐藏菜单
|
|
static public void AddShowOrHideMenu()
|
|
{
|
|
bool hasHideWidget = false;
|
|
foreach (var item in Selection.gameObjects)
|
|
{
|
|
if (!item.activeSelf)
|
|
{
|
|
hasHideWidget = true;
|
|
break;
|
|
}
|
|
}
|
|
if (hasHideWidget)
|
|
AddItem("显示", false, UILayoutTool.ShowAllSelectedWidgets);
|
|
else
|
|
AddItem("隐藏", false, UILayoutTool.HideAllSelectedWidgets);
|
|
}
|
|
|
|
static public void AddCommonItems(GameObject[] targets)
|
|
{
|
|
if (targets == null || targets.Length <= 0)
|
|
{
|
|
AddItem("新建", false, UIEditorHelper.CreatNewLayoutForMenu);
|
|
AddItem("打开界面", false, UIEditorHelper.LoadLayout);
|
|
AddItem("打开文件夹", false, UIEditorHelper.LoadLayoutWithFolder);
|
|
}
|
|
if (targets != null && targets.Length > 0)
|
|
{
|
|
AddItem("保存", false, UIEditorHelper.SaveLayoutForMenu);
|
|
AddItem("打开界面", false, UIEditorHelper.LoadLayout);
|
|
AddItem("另存为", false, UIEditorHelper.SaveAnotherLayoutContextMenu);
|
|
AddItem("重新加载", false, UIEditorHelper.ReLoadLayoutForMenu);
|
|
|
|
AddSeparator("///");
|
|
AddItem("复制选中控件名", false, UIEditorHelper.CopySelectWidgetName);
|
|
|
|
//如果选中超过1个节点的话
|
|
if (targets.Length > 1)
|
|
{
|
|
AddAlignMenu();
|
|
AddItem("同流合污", false, UILayoutTool.MakeGroup);
|
|
}
|
|
AddSeparator("///");
|
|
if (targets.Length == 1)
|
|
{
|
|
AddUIMenu();
|
|
AddUIComponentMenu();
|
|
AddPriorityMenu();
|
|
|
|
if (UIEditorHelper.IsNodeCanDivide(targets[0]))
|
|
AddItem("分道扬镖", false, UILayoutTool.UnGroup);
|
|
Decorate uiBase = targets[0].GetComponent<Decorate>();
|
|
if (uiBase != null)
|
|
{
|
|
if (uiBase.gameObject.hideFlags == HideFlags.NotEditable)
|
|
{
|
|
AddItem("解锁", false, UIEditorHelper.UnLockWidget);
|
|
}
|
|
else
|
|
{
|
|
AddItem("锁定", false, UIEditorHelper.LockWidget);
|
|
}
|
|
}
|
|
}
|
|
|
|
AddShowOrHideMenu();
|
|
|
|
AddSeparator("///");
|
|
|
|
AddItem("添加参考图", false, UIEditorHelper.CreateDecorate);
|
|
if (targets.Length == 1 && targets[0].transform.childCount > 0)
|
|
AddItem("优化层级", false, UILayoutTool.OptimizeBatchForMenu);
|
|
|
|
}
|
|
AddItem("排序所有界面", false, UILayoutTool.ResortAllLayout);
|
|
AddItem("清空界面", false, UIEditorHelper.ClearAllCanvas);
|
|
}
|
|
|
|
static public void AddSeparator(string path)
|
|
{
|
|
if (mMenu == null) mMenu = new GenericMenu();
|
|
|
|
if (Application.platform != RuntimePlatform.OSXEditor)
|
|
mMenu.AddSeparator(path);
|
|
}
|
|
|
|
static public void AddDisabledItem(string item)
|
|
{
|
|
if (mMenu == null) mMenu = new GenericMenu();
|
|
mMenu.AddDisabledItem(new GUIContent(item));
|
|
}
|
|
}
|
|
}
|
|
#endif
|