LocalizeDropdownInspector.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEditor;
  4. using UnityEditorInternal;
  5. using UnityEngine;
  6. namespace I2.Loc
  7. {
  8. #if !UNITY_5_0 && !UNITY_5_1
  9. [CustomEditor(typeof(LocalizeDropdown))]
  10. public class LocalizeDropdownInspector : Editor
  11. {
  12. private ReorderableList mList;
  13. private List<string> terms;
  14. private ReorderableList getList(SerializedObject serObject)
  15. {
  16. if (mList == null) {
  17. mList = new ReorderableList (serObject, serObject.FindProperty ("_Terms"), true, true, true, true);
  18. mList.drawElementCallback = drawElementCallback;
  19. mList.drawHeaderCallback = drawHeaderCallback;
  20. mList.onAddCallback = addElementCallback;
  21. mList.onRemoveCallback = removeElementCallback;
  22. }
  23. else
  24. {
  25. mList.serializedProperty = serObject.FindProperty ("_Terms");
  26. }
  27. return mList;
  28. }
  29. private void addElementCallback( ReorderableList list )
  30. {
  31. serializedObject.ApplyModifiedProperties();
  32. var objParams = target as LocalizeDropdown;
  33. objParams._Terms.Add(string.Empty);
  34. list.index = objParams._Terms.Count - 1;
  35. serializedObject.Update();
  36. }
  37. private void removeElementCallback( ReorderableList list )
  38. {
  39. if (list.index < 0)
  40. return;
  41. serializedObject.ApplyModifiedProperties();
  42. var objParams = target as LocalizeDropdown;
  43. objParams._Terms.RemoveAt(list.index);
  44. serializedObject.Update();
  45. }
  46. private void drawHeaderCallback(Rect rect)
  47. {
  48. GUI.Label(rect, "Terms:");
  49. }
  50. private void drawElementCallback(Rect rect, int index, bool isActive, bool isFocused)
  51. {
  52. var serializedElement = mList.serializedProperty.GetArrayElementAtIndex (index);
  53. EditorGUI.BeginChangeCheck ();
  54. var prvIndex = serializedElement.stringValue == "-" || serializedElement.stringValue == "" ? terms.Count - 1 :
  55. serializedElement.stringValue == " " ? terms.Count - 2 :
  56. terms.IndexOf(serializedElement.stringValue);
  57. var newIndex = EditorGUI.Popup(rect, prvIndex, terms.ToArray());
  58. if (EditorGUI.EndChangeCheck ())
  59. {
  60. if (newIndex == terms.Count - 1)
  61. serializedElement.stringValue = "-";
  62. else
  63. if (newIndex < 0 || newIndex == terms.Count - 2)
  64. serializedElement.stringValue = string.Empty;
  65. else
  66. serializedElement.stringValue = terms[newIndex];
  67. }
  68. }
  69. void OnEnable()
  70. {
  71. mList = getList(serializedObject);
  72. }
  73. public override void OnInspectorGUI()
  74. {
  75. #if UNITY_5_6_OR_NEWER
  76. serializedObject.UpdateIfRequiredOrScript();
  77. #else
  78. serializedObject.UpdateIfDirtyOrScript();
  79. #endif
  80. terms = LocalizationManager.GetTermsList ();
  81. terms.Sort(StringComparer.OrdinalIgnoreCase);
  82. terms.Add("");
  83. terms.Add("<inferred from text>");
  84. terms.Add("<none>");
  85. GUI.backgroundColor = Color.Lerp (Color.black, Color.gray, 1);
  86. GUILayout.BeginVertical(LocalizeInspector.GUIStyle_Background);
  87. GUI.backgroundColor = Color.white;
  88. if (GUILayout.Button("Localize DropDown", LocalizeInspector.GUIStyle_Header))
  89. {
  90. Application.OpenURL(LocalizeInspector.HelpURL_Documentation);
  91. }
  92. GUILayout.Space(5);
  93. mList.DoLayoutList();
  94. GUILayout.Space (10);
  95. GUITools.OnGUI_Footer("I2 Localization", LocalizationManager.GetVersion(), LocalizeInspector.HelpURL_forum, LocalizeInspector.HelpURL_Documentation, LocalizeInspector.HelpURL_AssetStore);
  96. EditorGUIUtility.labelWidth = 0;
  97. GUILayout.EndVertical();
  98. serializedObject.ApplyModifiedProperties();
  99. terms = null;
  100. }
  101. }
  102. #endif
  103. }