You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
226 lines
9.2 KiB
226 lines
9.2 KiB
using UnityEngine; |
|
using UnityEditor; |
|
using FairyGUI; |
|
|
|
namespace FairyGUIEditor |
|
{ |
|
/// <summary> |
|
/// |
|
/// </summary> |
|
[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(); |
|
} |
|
} |
|
}
|
|
|