ro-webgl/Assets/Editor/UI/LoopListViewEditor.cs
2021-12-21 09:40:39 +08:00

134 lines
6.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEditor;
using UnityEditorInternal;
namespace SuperScrollView
{
[CustomEditor(typeof(LoopListView))]
public class LoopListViewEditor : Editor
{
SerializedProperty mStartPadding;
SerializedProperty mEndPadding;
SerializedProperty mSupportScrollBar;
SerializedProperty mItemSnapEnable;
SerializedProperty mArrangeType;
SerializedProperty mItemPrefabDataList;
SerializedProperty mItemSnapPivot;
SerializedProperty mViewPortSnapPivot;
SerializedProperty mAutoAdapterSize;
GUIContent mStartPaddingContent = new GUIContent("StartPadding");
GUIContent mEndPaddingContent = new GUIContent("EndPadding");
GUIContent mSupportScrollBarContent = new GUIContent("SupportScrollBar");
GUIContent mItemSnapEnableContent = new GUIContent("ItemSnapEnable");
GUIContent mArrangeTypeGuiContent = new GUIContent("ArrangeType");
GUIContent mItemPrefabListContent = new GUIContent("ItemPrefabList");
GUIContent mItemSnapPivotContent = new GUIContent("ItemSnapPivot");
GUIContent mViewPortSnapPivotContent = new GUIContent("ViewPortSnapPivot");
GUIContent mAutoAdapterSizeContent = new GUIContent("AutoAdapterSize", "如果LoopListView是大小是可变的并且需要影响到LoopListViewItem则可勾选这个");
protected virtual void OnEnable()
{
mStartPadding = serializedObject.FindProperty("mStartPadding");
mEndPadding = serializedObject.FindProperty("mEndPadding");
mSupportScrollBar = serializedObject.FindProperty("mSupportScrollBar");
mItemSnapEnable = serializedObject.FindProperty("mItemSnapEnable");
mArrangeType = serializedObject.FindProperty("mArrangeType");
mItemPrefabDataList = serializedObject.FindProperty("mItemPrefabDataList");
mItemSnapPivot = serializedObject.FindProperty("mItemSnapPivot");
mViewPortSnapPivot = serializedObject.FindProperty("mViewPortSnapPivot");
mAutoAdapterSize = serializedObject.FindProperty("mAutoAdapterSize");
}
void ShowItemPrefabDataList(LoopListView listView)
{
EditorGUILayout.PropertyField(mItemPrefabDataList, mItemPrefabListContent);
if (mItemPrefabDataList.isExpanded == false)
{
return;
}
EditorGUI.indentLevel += 1;
if (GUILayout.Button("Add New"))
{
mItemPrefabDataList.InsertArrayElementAtIndex(mItemPrefabDataList.arraySize);
if (mItemPrefabDataList.arraySize > 0)
{
SerializedProperty itemData = mItemPrefabDataList.GetArrayElementAtIndex(mItemPrefabDataList.arraySize - 1);
SerializedProperty mItemPrefab = itemData.FindPropertyRelative("mItemPrefab");
mItemPrefab.objectReferenceValue = null;
}
}
int removeIndex = -1;
EditorGUILayout.PropertyField(mItemPrefabDataList.FindPropertyRelative("Array.size"));
for (int i = 0; i < mItemPrefabDataList.arraySize; i++)
{
SerializedProperty itemData = mItemPrefabDataList.GetArrayElementAtIndex(i);
SerializedProperty mInitCreateCount = itemData.FindPropertyRelative("mInitCreateCount");
SerializedProperty mItemPrefab = itemData.FindPropertyRelative("mItemPrefab");
SerializedProperty mItemPrefabPadding = itemData.FindPropertyRelative("mPadding");
SerializedProperty mItemStartPosOffset = itemData.FindPropertyRelative("mStartPosOffset");
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PropertyField(itemData);
if (GUILayout.Button("Remove"))
{
removeIndex = i;
}
EditorGUILayout.EndHorizontal();
if (itemData.isExpanded == false)
{
continue;
}
mItemPrefab.objectReferenceValue = EditorGUILayout.ObjectField("ItemPrefab", mItemPrefab.objectReferenceValue, typeof(GameObject), true);
mItemPrefabPadding.floatValue = EditorGUILayout.FloatField("ItemPadding", mItemPrefabPadding.floatValue);
if (listView.ArrangeType == ListItemArrangeType.TopToBottom || listView.ArrangeType == ListItemArrangeType.BottomToTop)
{
mItemStartPosOffset.floatValue = EditorGUILayout.FloatField("XPosOffset", mItemStartPosOffset.floatValue);
}
else
{
mItemStartPosOffset.floatValue = EditorGUILayout.FloatField("YPosOffset", mItemStartPosOffset.floatValue);
}
mInitCreateCount.intValue = EditorGUILayout.IntField("InitCreateCount", mInitCreateCount.intValue);
EditorGUILayout.Space();
EditorGUILayout.Space();
}
if (removeIndex >= 0)
{
mItemPrefabDataList.DeleteArrayElementAtIndex(removeIndex);
}
EditorGUI.indentLevel -= 1;
}
public override void OnInspectorGUI()
{
serializedObject.Update();
LoopListView tListView = serializedObject.targetObject as LoopListView;
if (tListView == null)
{
return;
}
ShowItemPrefabDataList(tListView);
EditorGUILayout.Space();
EditorGUILayout.PropertyField(mStartPadding, mStartPaddingContent);
EditorGUILayout.PropertyField(mEndPadding, mEndPaddingContent);
EditorGUILayout.PropertyField(mSupportScrollBar, mSupportScrollBarContent);
EditorGUILayout.PropertyField(mItemSnapEnable, mItemSnapEnableContent);
EditorGUILayout.PropertyField(mAutoAdapterSize, mAutoAdapterSizeContent);
if (mItemSnapEnable.boolValue == true)
{
EditorGUILayout.PropertyField(mItemSnapPivot, mItemSnapPivotContent);
EditorGUILayout.PropertyField(mViewPortSnapPivot, mViewPortSnapPivotContent);
}
EditorGUILayout.PropertyField(mArrangeType, mArrangeTypeGuiContent);
serializedObject.ApplyModifiedProperties();
}
}
}