private static void ShowButtons(SerializedProperty list, int index, LayoutListOptions options)
        {
            if (GUILayout.Button(moveButtonContent, EditorStyles.miniButtonLeft, miniButtonWidth))
            {
                list.MoveArrayElement(index, index + 1);
            }
            if (GUILayout.Button(duplicateButtonContent, EditorStyles.miniButtonMid, miniButtonWidth))
            {
                list.InsertArrayElementAtIndex(index);
            }
            if (GUILayout.Button(deleteButtonContent, EditorStyles.miniButtonRight, miniButtonWidth))
            {
                list.DeleteArrayElementAtIndex(index);
            }

            GUI.backgroundColor = Color.green;
            if (GUILayout.Button(applyButtonContent, EditorStyles.miniButton, actionButtonWidth))
            {
                LayoutState layoutState = list.serializedObject.targetObject as LayoutState;
                layoutState.layouts[index].Save(layoutState.objectsReference);
            }

            GUI.backgroundColor = Color.yellow;
            if (GUILayout.Button(showButtonContent, EditorStyles.miniButton, actionButtonWidth))
            {
                LayoutState layoutState = list.serializedObject.targetObject as LayoutState;
                layoutState.layouts[index].Load(layoutState.objectsReference);
            }
            GUI.backgroundColor = Color.white;
        }
        private static void ShowElements(SerializedProperty list, LayoutListOptions options)
        {
            for (int i = 0; i < list.arraySize; i++)
            {
                EditorGUILayout.BeginHorizontal();

                SerializedProperty elementList = list.GetArrayElementAtIndex(i);
                EditorGUILayout.PropertyField(list.GetArrayElementAtIndex(i), true);

                ShowButtons(list, i, options);
                EditorGUILayout.EndHorizontal();
            }

            if (list.arraySize == 0 && GUILayout.Button(addButtonContent, EditorStyles.miniButton))
            {
                list.arraySize += 1;
            }
        }
        public static void Show(SerializedProperty list, LayoutListOptions options = LayoutListOptions.Default)
        {
            if (!list.isArray)
            {
                EditorGUILayout.HelpBox(list.name + " is neither an array nor a list!", MessageType.Error);
                return;
            }

            EditorGUILayout.PropertyField(list);
            EditorGUI.indentLevel += 1;

            if (list.isExpanded)
            {
                if ((options & LayoutListOptions.Size) != 0)
                {
                    EditorGUILayout.PropertyField(list.FindPropertyRelative("Array.size"), true);
                }

                ShowElements(list, options);
            }

            EditorGUI.indentLevel -= 1;
        }