// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. using System; using System.Globalization; using UnityEditor; using UnityEngine; namespace HoloToolkit.Unity { /// <summary> /// Extensions for the UnityEditor.EditorGUILayout class. /// </summary> public static class EditorGUILayoutExtensions { public static bool Button(string text, params GUILayoutOption[] options) { return Button(text, GUI.skin.button, options); } public static bool Button(string text, GUIStyle style, params GUILayoutOption[] options) { EditorGUILayout.BeginHorizontal(); GUILayout.Space(EditorGUIExtensions.Indent); bool pressed = GUILayout.Button(text, style, options); EditorGUILayout.EndHorizontal(); return pressed; } public static void Label(string text, params GUILayoutOption[] options) { Label(text, EditorStyles.label, options); } public static void Label(string text, GUIStyle style, params GUILayoutOption[] options) { EditorGUILayout.BeginHorizontal(); GUILayout.Space(EditorGUIExtensions.Indent); GUILayout.Label(text, style, options); EditorGUILayout.EndHorizontal(); } public static T ObjectField<T>(GUIContent guiContent, T value, bool allowSceneObjects = false, GUILayoutOption[] guiLayoutOptions = null) { object objValue = value; if (objValue == null) { // We want to return null so we can display our blank field. return (T)objValue; } Type valueType = objValue.GetType(); if (valueType == typeof(Material)) { objValue = EditorGUILayout.ObjectField(guiContent, (Material)objValue, typeof(Material), allowSceneObjects, guiLayoutOptions); } else if (valueType == typeof(SceneAsset)) { objValue = EditorGUILayout.ObjectField(guiContent, (SceneAsset)objValue, typeof(SceneAsset), allowSceneObjects, guiLayoutOptions); } else if (objValue is UnityEngine.Object) { objValue = EditorGUILayout.ObjectField(guiContent, (UnityEngine.Object)objValue, valueType, allowSceneObjects, guiLayoutOptions); } else { throw new ArgumentException( string.Format( CultureInfo.InvariantCulture, "Unimplemented value type: {0}.", valueType), "value"); } return (T)objValue; } } }