92 lines
2.8 KiB
C#
92 lines
2.8 KiB
C#
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using UnityEngine.UIElements;
|
|
using UnityEditorInternal;
|
|
|
|
namespace AlicizaX.Localization.Editor
|
|
{
|
|
internal class LocalizationSettingsProvider : UnityEditor.SettingsProvider
|
|
{
|
|
private SerializedObject _serializedObject;
|
|
private SerializedProperty _languageTypes;
|
|
private ReorderableList _languageList;
|
|
|
|
public LocalizationSettingsProvider() : base("Project/Localization Settings", SettingsScope.Project) { }
|
|
|
|
public override void OnActivate(string searchContext, VisualElement rootElement)
|
|
{
|
|
InitGUI();
|
|
}
|
|
|
|
private void InitGUI()
|
|
{
|
|
var setting = LocalizationConfiguration.Instance;
|
|
_serializedObject?.Dispose();
|
|
_serializedObject = new SerializedObject(setting);
|
|
_languageTypes = _serializedObject.FindProperty("LanguageTypes");
|
|
|
|
// 自定义 ReorderableList
|
|
_languageList = new ReorderableList(_serializedObject, _languageTypes,
|
|
draggable: false, // 禁止拖拽
|
|
displayHeader: true,
|
|
displayAddButton: true,
|
|
displayRemoveButton: true);
|
|
|
|
_languageList.drawHeaderCallback = rect =>
|
|
{
|
|
EditorGUI.LabelField(rect, "Language Types");
|
|
};
|
|
|
|
_languageList.drawElementCallback = (rect, index, isActive, isFocused) =>
|
|
{
|
|
var element = _languageTypes.GetArrayElementAtIndex(index);
|
|
rect.y += 2;
|
|
|
|
// 只显示可编辑的 string 字段
|
|
element.stringValue = EditorGUI.TextField(
|
|
new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight),
|
|
element.stringValue);
|
|
};
|
|
}
|
|
|
|
public override void OnGUI(string searchContext)
|
|
{
|
|
if (_serializedObject == null || !_serializedObject.targetObject)
|
|
{
|
|
InitGUI();
|
|
}
|
|
|
|
_serializedObject.Update();
|
|
EditorGUI.BeginChangeCheck();
|
|
|
|
// 使用 ReorderableList 绘制
|
|
_languageList.DoLayoutList();
|
|
|
|
if (EditorGUI.EndChangeCheck())
|
|
{
|
|
_serializedObject.ApplyModifiedProperties();
|
|
LocalizationConfiguration.Save();
|
|
}
|
|
}
|
|
|
|
public override void OnDeactivate()
|
|
{
|
|
base.OnDeactivate();
|
|
LocalizationConfiguration.Save();
|
|
}
|
|
|
|
static LocalizationSettingsProvider s_provider;
|
|
|
|
[SettingsProvider]
|
|
public static SettingsProvider CreateMyCustomSettingsProvider()
|
|
{
|
|
if (s_provider == null)
|
|
{
|
|
s_provider = new LocalizationSettingsProvider();
|
|
}
|
|
return s_provider;
|
|
}
|
|
}
|
|
}
|