123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- using System;
- using System.Collections.Generic;
- using UnityEditor;
- using UnityEditorInternal;
- using UnityEngine;
- namespace I2.Loc
- {
- #if !UNITY_5_0 && !UNITY_5_1
- [CustomEditor(typeof(LocalizeDropdown))]
- public class LocalizeDropdownInspector : Editor
- {
- private ReorderableList mList;
- private List<string> terms;
- private ReorderableList getList(SerializedObject serObject)
- {
- if (mList == null) {
- mList = new ReorderableList (serObject, serObject.FindProperty ("_Terms"), true, true, true, true);
- mList.drawElementCallback = drawElementCallback;
- mList.drawHeaderCallback = drawHeaderCallback;
- mList.onAddCallback = addElementCallback;
- mList.onRemoveCallback = removeElementCallback;
- }
- else
- {
- mList.serializedProperty = serObject.FindProperty ("_Terms");
- }
- return mList;
- }
- private void addElementCallback( ReorderableList list )
- {
- serializedObject.ApplyModifiedProperties();
- var objParams = target as LocalizeDropdown;
- objParams._Terms.Add(string.Empty);
- list.index = objParams._Terms.Count - 1;
- serializedObject.Update();
- }
- private void removeElementCallback( ReorderableList list )
- {
- if (list.index < 0)
- return;
- serializedObject.ApplyModifiedProperties();
- var objParams = target as LocalizeDropdown;
- objParams._Terms.RemoveAt(list.index);
- serializedObject.Update();
- }
- private void drawHeaderCallback(Rect rect)
- {
- GUI.Label(rect, "Terms:");
- }
- private void drawElementCallback(Rect rect, int index, bool isActive, bool isFocused)
- {
- var serializedElement = mList.serializedProperty.GetArrayElementAtIndex (index);
- EditorGUI.BeginChangeCheck ();
- var prvIndex = serializedElement.stringValue == "-" || serializedElement.stringValue == "" ? terms.Count - 1 :
- serializedElement.stringValue == " " ? terms.Count - 2 :
- terms.IndexOf(serializedElement.stringValue);
- var newIndex = EditorGUI.Popup(rect, prvIndex, terms.ToArray());
- if (EditorGUI.EndChangeCheck ())
- {
- if (newIndex == terms.Count - 1)
- serializedElement.stringValue = "-";
- else
- if (newIndex < 0 || newIndex == terms.Count - 2)
- serializedElement.stringValue = string.Empty;
- else
- serializedElement.stringValue = terms[newIndex];
- }
- }
- void OnEnable()
- {
- mList = getList(serializedObject);
- }
- public override void OnInspectorGUI()
- {
- #if UNITY_5_6_OR_NEWER
- serializedObject.UpdateIfRequiredOrScript();
- #else
- serializedObject.UpdateIfDirtyOrScript();
- #endif
- terms = LocalizationManager.GetTermsList ();
- terms.Sort(StringComparer.OrdinalIgnoreCase);
- terms.Add("");
- terms.Add("<inferred from text>");
- terms.Add("<none>");
- GUI.backgroundColor = Color.Lerp (Color.black, Color.gray, 1);
- GUILayout.BeginVertical(LocalizeInspector.GUIStyle_Background);
- GUI.backgroundColor = Color.white;
- if (GUILayout.Button("Localize DropDown", LocalizeInspector.GUIStyle_Header))
- {
- Application.OpenURL(LocalizeInspector.HelpURL_Documentation);
- }
- GUILayout.Space(5);
- mList.DoLayoutList();
- GUILayout.Space (10);
- GUITools.OnGUI_Footer("I2 Localization", LocalizationManager.GetVersion(), LocalizeInspector.HelpURL_forum, LocalizeInspector.HelpURL_Documentation, LocalizeInspector.HelpURL_AssetStore);
- EditorGUIUtility.labelWidth = 0;
- GUILayout.EndVertical();
- serializedObject.ApplyModifiedProperties();
- terms = null;
- }
- }
- #endif
- }
|