141 lines
5.0 KiB
C#
141 lines
5.0 KiB
C#
using UnityEngine;
|
|
using UnityEditor;
|
|
using UnityEditorInternal;
|
|
|
|
namespace ThinkingAnalytics.Editors
|
|
{
|
|
[CustomEditor(typeof(ThinkingAnalyticsAPI))]
|
|
[CanEditMultipleObjects]
|
|
public class TD_Inspectors : Editor
|
|
{
|
|
private ReorderableList _stringArray;
|
|
|
|
public void OnEnable()
|
|
{
|
|
|
|
var appId = this.serializedObject.FindProperty("tokens");
|
|
|
|
_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();
|
|
}
|
|
}
|
|
}
|