141 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C#
		
	
	
	
| using UnityEngine;
 | |
| using UnityEditor;
 | |
| using UnityEditorInternal;
 | |
| 
 | |
| namespace ThinkingData.Analytics.Editors
 | |
| {
 | |
|     [CustomEditor(typeof(TDAnalytics))]
 | |
|     [CanEditMultipleObjects]
 | |
|     public class TD_Inspectors : Editor
 | |
|     {
 | |
|         private ReorderableList _stringArray;
 | |
| 
 | |
|         public void OnEnable()
 | |
|         {
 | |
| 
 | |
|             var appId = this.serializedObject.FindProperty("configs");
 | |
| 
 | |
|             _stringArray = new ReorderableList(appId.serializedObject, appId, true, true, true, true)
 | |
|             {
 | |
|                 drawHeaderCallback = DrawListHeader,
 | |
|                 drawElementCallback = DrawListElement,
 | |
|                 onRemoveCallback = RemoveListElement,
 | |
|                 onAddCallback = AddListElement
 | |
|             };
 | |
| 
 | |
|             _stringArray.elementHeight = 5 * (EditorGUIUtility.singleLineHeight + 10);
 | |
| 
 | |
|             _stringArray.serializedProperty.isExpanded = true;
 | |
|         }
 | |
| 
 | |
|         void DrawListHeader(Rect rect)
 | |
|         {
 | |
|             var arect = rect;
 | |
|             arect.height = EditorGUIUtility.singleLineHeight + 10;
 | |
|             arect.x += 14;
 | |
|             arect.width = 80;
 | |
|             GUIStyle style = new GUIStyle();
 | |
|             style.fontStyle = FontStyle.Bold;
 | |
| 
 | |
|             GUI.Label(arect, "Instance Configurations", style);
 | |
|         }
 | |
| 
 | |
|         void DrawListElement(Rect rect, int index, bool isActive, bool isFocused)
 | |
|         {
 | |
|             var spacing = 5;
 | |
|             var xSpacing = 85;
 | |
|             var arect = rect;
 | |
|             SerializedProperty item = _stringArray.serializedProperty.GetArrayElementAtIndex(index);
 | |
|             var serElem = this._stringArray.serializedProperty.GetArrayElementAtIndex(index);
 | |
|             arect.height = EditorGUIUtility.singleLineHeight;
 | |
|             arect.width = 240;
 | |
| 
 | |
|             if (index == 0)
 | |
|             {
 | |
|                 EditorGUI.PropertyField(arect, item, new GUIContent((index + 1) + " (default)"));
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 EditorGUI.PropertyField(arect, item, new GUIContent("" + (index + 1)));
 | |
| 
 | |
|             }
 | |
|             arect.y += EditorGUIUtility.singleLineHeight + spacing;
 | |
|             GUIStyle style = new GUIStyle();
 | |
|             style.fontStyle = FontStyle.Bold;
 | |
| 
 | |
| 
 | |
|             EditorGUI.LabelField(arect, "APP ID:", style);
 | |
|             arect.x += xSpacing;
 | |
|             EditorGUI.PropertyField(arect, serElem.FindPropertyRelative("appId"), GUIContent.none);
 | |
| 
 | |
|             arect.y += EditorGUIUtility.singleLineHeight + spacing;
 | |
|             arect.x -= xSpacing;
 | |
| 
 | |
|             EditorGUI.LabelField(arect, "SERVER URL:", style);
 | |
|             arect.x += xSpacing;
 | |
|             EditorGUI.PropertyField(new Rect(arect.x, arect.y, arect.width, arect.height), serElem.FindPropertyRelative("serverUrl"), GUIContent.none);
 | |
| 
 | |
|             arect.y += EditorGUIUtility.singleLineHeight + spacing;
 | |
|             arect.x -= xSpacing;
 | |
| 
 | |
|             EditorGUI.LabelField(arect, "MODE:", style);
 | |
|             arect.x += xSpacing;
 | |
|             EditorGUI.PropertyField(arect, serElem.FindPropertyRelative("mode"), GUIContent.none);
 | |
| 
 | |
|             arect.y += EditorGUIUtility.singleLineHeight + spacing;
 | |
|             arect.x -= xSpacing;
 | |
| 
 | |
|             EditorGUI.LabelField(arect, "TimeZone:", style);
 | |
|             arect.x += xSpacing;
 | |
|             var a = serElem.FindPropertyRelative("timeZone");
 | |
|             if (a.intValue == 100)
 | |
|             {
 | |
|                 EditorGUI.PropertyField(new Rect(arect.x, arect.y, 115, arect.height), a, GUIContent.none);
 | |
|                 arect.x += 125;
 | |
|                 EditorGUI.PropertyField(new Rect(arect.x, arect.y, 115, arect.height), serElem.FindPropertyRelative("timeZoneId"), GUIContent.none);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 EditorGUI.PropertyField(arect, a, GUIContent.none);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         void AddListElement(ReorderableList list)
 | |
|         {
 | |
|             if (list.serializedProperty != null)
 | |
|             {
 | |
|                 list.serializedProperty.arraySize++;
 | |
|                 list.index = list.serializedProperty.arraySize - 1;
 | |
|                 SerializedProperty item = list.serializedProperty.GetArrayElementAtIndex(list.index);
 | |
|                 item.FindPropertyRelative("appId").stringValue = "";
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 ReorderableList.defaultBehaviours.DoAddButton(list);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         void RemoveListElement(ReorderableList list)
 | |
|         {
 | |
|             if (EditorUtility.DisplayDialog("Warnning", "Do you want to remove this element?", "Remove", "Cancel"))
 | |
|             {
 | |
|                 ReorderableList.defaultBehaviours.DoRemoveButton(list);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public override void OnInspectorGUI()
 | |
|         {
 | |
|             DrawDefaultInspector();
 | |
|             this.serializedObject.Update();
 | |
|             var property = _stringArray.serializedProperty;
 | |
|             property.isExpanded = EditorGUILayout.Foldout(property.isExpanded, property.displayName);
 | |
|             if (property.isExpanded)
 | |
|             {
 | |
| 
 | |
|                 _stringArray.DoLayoutList();
 | |
|             }
 | |
|             serializedObject.ApplyModifiedProperties();
 | |
|         }
 | |
|     }
 | |
| }
 |