using UnityEngine; using UnityEditor; using FairyGUI; namespace FairyGUIEditor { /// /// /// [CustomEditor(typeof(UIConfig))] public class UIConfigEditor : Editor { string[] propertyToExclude; bool itemsFoldout; bool packagesFoldOut; int errorState; private const float kButtonWidth = 18f; void OnEnable() { propertyToExclude = new string[] { "m_Script", "Items", "PreloadPackages" }; itemsFoldout = EditorPrefs.GetBool("itemsFoldOut"); packagesFoldOut = EditorPrefs.GetBool("packagesFoldOut"); errorState = 0; } public override void OnInspectorGUI() { serializedObject.Update(); DrawPropertiesExcluding(serializedObject, propertyToExclude); UIConfig config = (UIConfig)target; EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); itemsFoldout = EditorGUILayout.Foldout(itemsFoldout, "Config Items"); if (EditorGUI.EndChangeCheck()) EditorPrefs.SetBool("itemsFoldOut", itemsFoldout); EditorGUILayout.EndHorizontal(); bool modified = false; if (itemsFoldout) { Undo.RecordObject(config, "Items"); int len = config.Items.Count; EditorGUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel("Add"); UIConfig.ConfigKey selectedKey = (UIConfig.ConfigKey)EditorGUILayout.EnumPopup((System.Enum)UIConfig.ConfigKey.PleaseSelect); if (selectedKey != UIConfig.ConfigKey.PleaseSelect) { int index = (int)selectedKey; if (index > len - 1) { for (int i = len; i < index; i++) config.Items.Add(new UIConfig.ConfigValue()); UIConfig.ConfigValue value = new UIConfig.ConfigValue(); value.valid = true; UIConfig.SetDefaultValue(selectedKey, value); config.Items.Add(value); } else { UIConfig.ConfigValue value = config.Items[index]; if (value == null) { value = new UIConfig.ConfigValue(); value.valid = true; UIConfig.SetDefaultValue(selectedKey, value); config.Items[index] = value; } else if (!value.valid) { value.valid = true; UIConfig.SetDefaultValue(selectedKey, value); } } } EditorGUILayout.EndHorizontal(); for (int i = 0; i < len; i++) { UIConfig.ConfigValue value = config.Items[i]; if (value == null || !value.valid) continue; EditorGUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel(((UIConfig.ConfigKey)i).ToString()); switch ((UIConfig.ConfigKey)i) { case UIConfig.ConfigKey.ClickDragSensitivity: case UIConfig.ConfigKey.DefaultComboBoxVisibleItemCount: case UIConfig.ConfigKey.DefaultScrollStep: case UIConfig.ConfigKey.TouchDragSensitivity: case UIConfig.ConfigKey.TouchScrollSensitivity: case UIConfig.ConfigKey.InputCaretSize: value.i = EditorGUILayout.IntField(value.i); break; case UIConfig.ConfigKey.ButtonSound: case UIConfig.ConfigKey.GlobalModalWaiting: case UIConfig.ConfigKey.HorizontalScrollBar: case UIConfig.ConfigKey.LoaderErrorSign: case UIConfig.ConfigKey.PopupMenu: case UIConfig.ConfigKey.PopupMenu_seperator: case UIConfig.ConfigKey.TooltipsWin: case UIConfig.ConfigKey.VerticalScrollBar: case UIConfig.ConfigKey.WindowModalWaiting: case UIConfig.ConfigKey.DefaultFont: value.s = EditorGUILayout.TextField(value.s); break; case UIConfig.ConfigKey.DefaultScrollBounceEffect: case UIConfig.ConfigKey.DefaultScrollTouchEffect: case UIConfig.ConfigKey.RenderingTextBrighterOnDesktop: case UIConfig.ConfigKey.AllowSoftnessOnTopOrLeftSide: case UIConfig.ConfigKey.DepthSupportForPaintingMode: value.b = EditorGUILayout.Toggle(value.b); break; case UIConfig.ConfigKey.ButtonSoundVolumeScale: value.f = EditorGUILayout.Slider(value.f, 0, 1); break; case UIConfig.ConfigKey.ModalLayerColor: case UIConfig.ConfigKey.InputHighlightColor: value.c = EditorGUILayout.ColorField(value.c); break; case UIConfig.ConfigKey.Branch: EditorGUI.BeginChangeCheck(); value.s = EditorGUILayout.TextField(value.s); if (EditorGUI.EndChangeCheck()) modified = true; break; } if (GUILayout.Button(new GUIContent("X", "Delete Item"), EditorStyles.miniButtonRight, GUILayout.Width(30))) { config.Items[i].Reset(); UIConfig.SetDefaultValue((UIConfig.ConfigKey)i, config.Items[i]); modified = true; } EditorGUILayout.EndHorizontal(); } } EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); packagesFoldOut = EditorGUILayout.Foldout(packagesFoldOut, "Preload Packages"); if (EditorGUI.EndChangeCheck()) EditorPrefs.SetBool("packagesFoldOut", packagesFoldOut); EditorGUILayout.EndHorizontal(); if (packagesFoldOut) { Undo.RecordObject(config, "PreloadPackages"); EditorToolSet.LoadPackages(); if (EditorToolSet.packagesPopupContents != null) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel("Add"); int selected = EditorGUILayout.Popup(EditorToolSet.packagesPopupContents.Length - 1, EditorToolSet.packagesPopupContents); EditorGUILayout.EndHorizontal(); if (selected != EditorToolSet.packagesPopupContents.Length - 1) { UIPackage pkg = UIPackage.GetPackages()[selected]; string tmp = pkg.assetPath.ToLower(); int pos = tmp.LastIndexOf("resources/"); if (pos != -1) { string packagePath = pkg.assetPath.Substring(pos + 10); if (config.PreloadPackages.IndexOf(packagePath) == -1) config.PreloadPackages.Add(packagePath); errorState = 0; } else { errorState = 10; } } } if (errorState > 0) { errorState--; EditorGUILayout.HelpBox("Package is not in resources folder.", MessageType.Warning); } int cnt = config.PreloadPackages.Count; int pi = 0; while (pi < cnt) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel("" + pi + "."); config.PreloadPackages[pi] = EditorGUILayout.TextField(config.PreloadPackages[pi]); if (GUILayout.Button(new GUIContent("X", "Delete Item"), EditorStyles.miniButtonRight, GUILayout.Width(30))) { config.PreloadPackages.RemoveAt(pi); cnt--; } else pi++; EditorGUILayout.EndHorizontal(); } } else errorState = 0; if (serializedObject.ApplyModifiedProperties() || modified) (target as UIConfig).ApplyModifiedProperties(); } } }