diff --git a/src/Hooks/GenericHookHandler.cs b/src/UI/Widgets/EvaluateWidget/GenericConstructorWidget.cs similarity index 73% rename from src/Hooks/GenericHookHandler.cs rename to src/UI/Widgets/EvaluateWidget/GenericConstructorWidget.cs index a0df2e6..c790e53 100644 --- a/src/Hooks/GenericHookHandler.cs +++ b/src/UI/Widgets/EvaluateWidget/GenericConstructorWidget.cs @@ -6,53 +6,48 @@ using System.Text; using UnityEngine; using UnityEngine.UI; using UnityExplorer.UI.Panels; -using UnityExplorer.UI.Widgets; using UniverseLib.UI; using UniverseLib.UI.Models; using UniverseLib.UI.ObjectPool; using UniverseLib.Utility; -namespace UnityExplorer.Hooks +namespace UnityExplorer.UI.Widgets { - public class GenericHookHandler + public class GenericConstructorWidget { - static GenericArgumentHandler[] handlers; + GenericArgumentHandler[] handlers; - static Type[] currentGenericParameters; - static Action currentOnSubmit; - static Action currentOnCancel; + Type[] currentGenericParameters; + Action currentOnSubmit; + Action currentOnCancel; - static Text Title; - static GameObject ArgsHolder; + public GameObject UIRoot; + Text Title; + GameObject ArgsHolder; - // UI - internal static GameObject UIRoot; - - public static void Show(Action onSubmit, Action onCancel, Type genericTypeDefinition) + public void Show(Action onSubmit, Action onCancel, Type genericTypeDefinition) { Title.text = $"Setting generic arguments for {SignatureHighlighter.Parse(genericTypeDefinition, false)}..."; OnShow(onSubmit, onCancel, genericTypeDefinition.GetGenericArguments()); } - public static void Show(Action onSubmit, Action onCancel, MethodInfo genericMethodDefinition) + public void Show(Action onSubmit, Action onCancel, MethodInfo genericMethodDefinition) { Title.text = $"Setting generic arguments for {SignatureHighlighter.HighlightMethod(genericMethodDefinition)}..."; OnShow(onSubmit, onCancel, genericMethodDefinition.GetGenericArguments()); } - static void OnShow(Action onSubmit, Action onCancel, Type[] genericParameters) + void OnShow(Action onSubmit, Action onCancel, Type[] genericParameters) { - HookManagerPanel.Instance.SetPage(HookManagerPanel.Pages.GenericArgsSelector); - currentOnSubmit = onSubmit; currentOnCancel = onCancel; SetGenericParameters(genericParameters); } - static void SetGenericParameters(Type[] genericParameters) + void SetGenericParameters(Type[] genericParameters) { currentGenericParameters = genericParameters; @@ -67,15 +62,20 @@ namespace UnityExplorer.Hooks } } - public static void TrySubmit() + public void TrySubmit() { Type[] args = new Type[currentGenericParameters.Length]; for (int i = 0; i < args.Length; i++) { GenericArgumentHandler handler = handlers[i]; - Type arg = handler.Evaluate(); - if (arg == null) + Type arg; + try + { + arg = handler.Evaluate(); + if (arg == null) throw new Exception(); + } + catch { ExplorerCore.LogWarning($"Generic argument '{handler.inputField.Text}' is not a valid type."); return; @@ -87,21 +87,24 @@ namespace UnityExplorer.Hooks currentOnSubmit(args); } - public static void Cancel() + public void Cancel() { OnClose(); - currentOnCancel(); + currentOnCancel?.Invoke(); } - static void OnClose() + void OnClose() { - foreach (GenericArgumentHandler widget in handlers) + if (handlers != null) { - widget.OnReturned(); - Pool.Return(widget); + foreach (GenericArgumentHandler widget in handlers) + { + widget.OnReturned(); + Pool.Return(widget); + } + handlers = null; } - handlers = null; } // UI Construction