mirror of
https://github.com/GrahamKracker/UnityExplorer.git
synced 2025-01-07 09:43:37 +08:00
Implement Clipboard and Notifications, misc cleanups
This commit is contained in:
parent
c79223f537
commit
ea7b91f7fd
@ -603,7 +603,7 @@ If the game was built with Unity's stubbed netstandard 2.0 runtime, you can fix
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static readonly Dictionary<string, string> helpDict = new Dictionary<string, string>();
|
private static readonly Dictionary<string, string> helpDict = new();
|
||||||
|
|
||||||
public static void SetupHelpInteraction()
|
public static void SetupHelpInteraction()
|
||||||
{
|
{
|
||||||
@ -658,15 +658,17 @@ var x = 5;
|
|||||||
++x;
|
++x;
|
||||||
|
|
||||||
/* The following helpers are available in REPL mode:
|
/* The following helpers are available in REPL mode:
|
||||||
* GetUsing(); - prints the current using directives to the console log
|
|
||||||
* GetVars(); - prints the names and values of the REPL variables you have defined
|
|
||||||
* GetClasses(); - prints the names and members of the classes you have defined
|
|
||||||
* Log(obj); - prints a message to the console log
|
|
||||||
* CurrentTarget; - System.Object, the target of the active Inspector tab
|
* CurrentTarget; - System.Object, the target of the active Inspector tab
|
||||||
* AllTargets; - System.Object[], the targets of all Inspector tabs
|
* AllTargets; - System.Object[], the targets of all Inspector tabs
|
||||||
|
* Log(obj); - prints a message to the console log
|
||||||
* Inspect(obj); - inspect the object with the Inspector
|
* Inspect(obj); - inspect the object with the Inspector
|
||||||
* Inspect(someType); - inspect a Type with static reflection
|
* Inspect(someType); - inspect a Type with static reflection
|
||||||
* Start(enumerator); - starts the IEnumerator as a Coroutine
|
* Start(enumerator); - starts the IEnumerator as a Coroutine
|
||||||
|
* Copy(obj); - copies the object to the UnityExplorer Clipboard
|
||||||
|
* Paste(); - System.Object, the contents of the Clipboard.
|
||||||
|
* GetUsing(); - prints the current using directives to the console log
|
||||||
|
* GetVars(); - prints the names and values of the REPL variables you have defined
|
||||||
|
* GetClasses(); - prints the names and members of the classes you have defined
|
||||||
* help; - the default REPL help command, contains additional helpers.
|
* help; - the default REPL help command, contains additional helpers.
|
||||||
*/";
|
*/";
|
||||||
|
|
||||||
|
@ -6,40 +6,39 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityExplorer.Runtime;
|
using UnityExplorer.Runtime;
|
||||||
|
using UnityExplorer.UI.Panels;
|
||||||
using UniverseLib;
|
using UniverseLib;
|
||||||
|
|
||||||
namespace UnityExplorer.CSConsole
|
namespace UnityExplorer.CSConsole
|
||||||
{
|
{
|
||||||
public class ScriptInteraction : InteractiveBase
|
public class ScriptInteraction : InteractiveBase
|
||||||
{
|
{
|
||||||
|
public static object CurrentTarget
|
||||||
|
=> InspectorManager.ActiveInspector?.Target;
|
||||||
|
|
||||||
|
public static object[] AllTargets
|
||||||
|
=> InspectorManager.Inspectors.Select(it => it.Target).ToArray();
|
||||||
|
|
||||||
public static void Log(object message)
|
public static void Log(object message)
|
||||||
{
|
=> ExplorerCore.Log(message);
|
||||||
ExplorerCore.Log(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static object CurrentTarget => InspectorManager.ActiveInspector?.Target;
|
|
||||||
|
|
||||||
public static object[] AllTargets => InspectorManager.Inspectors.Select(it => it.Target).ToArray();
|
|
||||||
|
|
||||||
public static void Inspect(object obj)
|
public static void Inspect(object obj)
|
||||||
{
|
=> InspectorManager.Inspect(obj);
|
||||||
InspectorManager.Inspect(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Inspect(Type type)
|
public static void Inspect(Type type)
|
||||||
{
|
=> InspectorManager.Inspect(type);
|
||||||
InspectorManager.Inspect(type);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Start(IEnumerator ienumerator)
|
public static void Start(IEnumerator ienumerator)
|
||||||
{
|
=> RuntimeProvider.Instance.StartCoroutine(ienumerator);
|
||||||
RuntimeProvider.Instance.StartCoroutine(ienumerator);
|
|
||||||
}
|
public static void Copy(object obj)
|
||||||
|
=> ClipboardPanel.Copy(obj);
|
||||||
|
|
||||||
|
public static object Paste()
|
||||||
|
=> ClipboardPanel.Current;
|
||||||
|
|
||||||
public static void GetUsing()
|
public static void GetUsing()
|
||||||
{
|
=> Log(Evaluator.GetUsing());
|
||||||
Log(Evaluator.GetUsing());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void GetVars()
|
public static void GetVars()
|
||||||
{
|
{
|
||||||
|
@ -44,6 +44,6 @@ namespace UnityExplorer.CacheObject
|
|||||||
RefConfigElement.BoxedValue = value;
|
RefConfigElement.BoxedValue = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override bool SetCellEvaluateState(CacheObjectCell cell) => false;
|
protected override bool TryAutoEvaluateIfUnitialized(CacheObjectCell cell) => true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -92,10 +92,6 @@ namespace UnityExplorer.CacheObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected override bool SetCellEvaluateState(CacheObjectCell cell)
|
protected override bool TryAutoEvaluateIfUnitialized(CacheObjectCell cell) => true;
|
||||||
{
|
|
||||||
// not needed
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ namespace UnityExplorer.CacheObject
|
|||||||
|
|
||||||
public override bool ShouldAutoEvaluate => true;
|
public override bool ShouldAutoEvaluate => true;
|
||||||
public override bool HasArguments => false;
|
public override bool HasArguments => false;
|
||||||
public override bool CanWrite => Owner.CanWrite;
|
public override bool CanWrite => Owner?.CanWrite ?? false;
|
||||||
|
|
||||||
public void SetListOwner(InteractiveList list, int listIndex)
|
public void SetListOwner(InteractiveList list, int listIndex)
|
||||||
{
|
{
|
||||||
@ -37,11 +37,6 @@ namespace UnityExplorer.CacheObject
|
|||||||
(Owner as InteractiveList).TrySetValueToIndex(value, this.ListIndex);
|
(Owner as InteractiveList).TrySetValueToIndex(value, this.ListIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override bool TryAutoEvaluateIfUnitialized(CacheObjectCell cell) => true;
|
||||||
protected override bool SetCellEvaluateState(CacheObjectCell cell)
|
|
||||||
{
|
|
||||||
// not needed
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -95,7 +95,7 @@ namespace UnityExplorer.CacheObject
|
|||||||
private static readonly Color evalEnabledColor = new Color(0.15f, 0.25f, 0.15f);
|
private static readonly Color evalEnabledColor = new Color(0.15f, 0.25f, 0.15f);
|
||||||
private static readonly Color evalDisabledColor = new Color(0.15f, 0.15f, 0.15f);
|
private static readonly Color evalDisabledColor = new Color(0.15f, 0.15f, 0.15f);
|
||||||
|
|
||||||
protected override bool SetCellEvaluateState(CacheObjectCell objectcell)
|
protected override bool TryAutoEvaluateIfUnitialized(CacheObjectCell objectcell)
|
||||||
{
|
{
|
||||||
var cell = objectcell as CacheMemberCell;
|
var cell = objectcell as CacheMemberCell;
|
||||||
|
|
||||||
@ -126,13 +126,13 @@ namespace UnityExplorer.CacheObject
|
|||||||
SetValueState(cell, ValueStateArgs.Default);
|
SetValueState(cell, ValueStateArgs.Default);
|
||||||
cell.RefreshSubcontentButton();
|
cell.RefreshSubcontentButton();
|
||||||
|
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (State == ValueState.NotEvaluated)
|
if (State == ValueState.NotEvaluated)
|
||||||
Evaluate();
|
Evaluate();
|
||||||
|
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnEvaluateClicked()
|
public void OnEvaluateClicked()
|
||||||
@ -148,7 +148,7 @@ namespace UnityExplorer.CacheObject
|
|||||||
this.Evaluator = Pool<EvaluateWidget>.Borrow();
|
this.Evaluator = Pool<EvaluateWidget>.Borrow();
|
||||||
Evaluator.OnBorrowedFromPool(this);
|
Evaluator.OnBorrowedFromPool(this);
|
||||||
Evaluator.UIRoot.transform.SetParent((CellView as CacheMemberCell).EvaluateHolder.transform, false);
|
Evaluator.UIRoot.transform.SetParent((CellView as CacheMemberCell).EvaluateHolder.transform, false);
|
||||||
SetCellEvaluateState(CellView);
|
TryAutoEvaluateIfUnitialized(CellView);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -157,7 +157,7 @@ namespace UnityExplorer.CacheObject
|
|||||||
else
|
else
|
||||||
Evaluator.UIRoot.SetActive(true);
|
Evaluator.UIRoot.SetActive(true);
|
||||||
|
|
||||||
SetCellEvaluateState(CellView);
|
TryAutoEvaluateIfUnitialized(CellView);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -254,8 +254,8 @@ namespace UnityExplorer.CacheObject
|
|||||||
|
|
||||||
// Setting cell state from our model
|
// Setting cell state from our model
|
||||||
|
|
||||||
/// <summary>Return true if SetCell should abort, false if it should continue.</summary>
|
/// <summary>Return false if SetCell should abort, true if it should continue.</summary>
|
||||||
protected abstract bool SetCellEvaluateState(CacheObjectCell cell);
|
protected abstract bool TryAutoEvaluateIfUnitialized(CacheObjectCell cell);
|
||||||
|
|
||||||
public virtual void SetDataToCell(CacheObjectCell cell)
|
public virtual void SetDataToCell(CacheObjectCell cell)
|
||||||
{
|
{
|
||||||
@ -271,9 +271,21 @@ namespace UnityExplorer.CacheObject
|
|||||||
IValue.SetLayout();
|
IValue.SetLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SetCellEvaluateState(cell))
|
bool evaluated = TryAutoEvaluateIfUnitialized(cell);
|
||||||
|
|
||||||
|
if (cell.CopyButton != null)
|
||||||
|
{
|
||||||
|
bool hasEvaluated = State != ValueState.NotEvaluated && State != ValueState.Exception;
|
||||||
|
cell.CopyButton.Component.gameObject.SetActive(hasEvaluated);
|
||||||
|
cell.PasteButton.Component.gameObject.SetActive(hasEvaluated && this.CanWrite);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!evaluated)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// The following only executes if the object has evaluated.
|
||||||
|
// For members and properties with args, they will return by default now.
|
||||||
|
|
||||||
switch (State)
|
switch (State)
|
||||||
{
|
{
|
||||||
case ValueState.Exception:
|
case ValueState.Exception:
|
||||||
|
@ -32,11 +32,13 @@ namespace UnityExplorer.CacheObject.IValues
|
|||||||
private PropertyInfo genericIndexer;
|
private PropertyInfo genericIndexer;
|
||||||
|
|
||||||
public int ItemCount => cachedEntries.Count;
|
public int ItemCount => cachedEntries.Count;
|
||||||
private readonly List<CacheListEntry> cachedEntries = new List<CacheListEntry>();
|
private readonly List<CacheListEntry> cachedEntries = new();
|
||||||
|
|
||||||
public ScrollPool<CacheListEntryCell> ListScrollPool { get; private set; }
|
public ScrollPool<CacheListEntryCell> ListScrollPool { get; private set; }
|
||||||
|
|
||||||
public Text TopLabel;
|
public Text TopLabel;
|
||||||
|
private LayoutElement scrollLayout;
|
||||||
|
private Text NotSupportedLabel;
|
||||||
|
|
||||||
public override void OnBorrowed(CacheObjectBase owner)
|
public override void OnBorrowed(CacheObjectBase owner)
|
||||||
{
|
{
|
||||||
@ -65,6 +67,28 @@ namespace UnityExplorer.CacheObject.IValues
|
|||||||
cachedEntries.Clear();
|
cachedEntries.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// List entry scroll pool
|
||||||
|
|
||||||
|
public override void SetLayout()
|
||||||
|
{
|
||||||
|
var minHeight = 5f;
|
||||||
|
|
||||||
|
foreach (var cell in ListScrollPool.CellPool)
|
||||||
|
{
|
||||||
|
if (cell.Enabled)
|
||||||
|
minHeight += cell.Rect.rect.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.scrollLayout.minHeight = Math.Min(InspectorPanel.CurrentPanelHeight - 400f, minHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnCellBorrowed(CacheListEntryCell cell) { } // not needed
|
||||||
|
|
||||||
|
public void SetCell(CacheListEntryCell cell, int index)
|
||||||
|
{
|
||||||
|
CacheObjectControllerHelper.SetCell(cell, index, cachedEntries, null);
|
||||||
|
}
|
||||||
|
|
||||||
// Setting the List value itself to this model
|
// Setting the List value itself to this model
|
||||||
public override void SetValue(object value)
|
public override void SetValue(object value)
|
||||||
{
|
{
|
||||||
@ -212,32 +236,6 @@ namespace UnityExplorer.CacheObject.IValues
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// List entry scroll pool
|
|
||||||
|
|
||||||
public override void SetLayout()
|
|
||||||
{
|
|
||||||
var minHeight = 5f;
|
|
||||||
|
|
||||||
foreach (var cell in ListScrollPool.CellPool)
|
|
||||||
{
|
|
||||||
if (cell.Enabled)
|
|
||||||
minHeight += cell.Rect.rect.height;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.scrollLayout.minHeight = Math.Min(InspectorPanel.CurrentPanelHeight - 400f, minHeight);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OnCellBorrowed(CacheListEntryCell cell) { } // not needed
|
|
||||||
|
|
||||||
public void SetCell(CacheListEntryCell cell, int index)
|
|
||||||
{
|
|
||||||
CacheObjectControllerHelper.SetCell(cell, index, cachedEntries, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private LayoutElement scrollLayout;
|
|
||||||
|
|
||||||
private Text NotSupportedLabel;
|
|
||||||
|
|
||||||
public override GameObject CreateContent(GameObject parent)
|
public override GameObject CreateContent(GameObject parent)
|
||||||
{
|
{
|
||||||
UIRoot = UIFactory.CreateVerticalGroup(parent, "InteractiveList", true, true, true, true, 6, new Vector4(10, 3, 15, 4),
|
UIRoot = UIFactory.CreateVerticalGroup(parent, "InteractiveList", true, true, true, true, 6, new Vector4(10, 3, 15, 4),
|
||||||
|
@ -7,6 +7,7 @@ using UnityEngine.UI;
|
|||||||
using UnityExplorer.CacheObject.IValues;
|
using UnityExplorer.CacheObject.IValues;
|
||||||
using UnityExplorer.Inspectors;
|
using UnityExplorer.Inspectors;
|
||||||
using UnityExplorer.UI;
|
using UnityExplorer.UI;
|
||||||
|
using UnityExplorer.UI.Panels;
|
||||||
using UnityExplorer.UI.Widgets;
|
using UnityExplorer.UI.Widgets;
|
||||||
using UniverseLib;
|
using UniverseLib;
|
||||||
using UniverseLib.UI;
|
using UniverseLib.UI;
|
||||||
@ -47,9 +48,10 @@ namespace UnityExplorer.CacheObject.Views
|
|||||||
public LayoutElement NameLayout;
|
public LayoutElement NameLayout;
|
||||||
public GameObject RightGroupContent;
|
public GameObject RightGroupContent;
|
||||||
public LayoutElement RightGroupLayout;
|
public LayoutElement RightGroupLayout;
|
||||||
|
public GameObject SubContentHolder;
|
||||||
|
|
||||||
public Text NameLabel;
|
public Text NameLabel;
|
||||||
public InputFieldRef HiddenNameLabel;
|
public InputFieldRef HiddenNameLabel; // for selecting the name label
|
||||||
public Text TypeLabel;
|
public Text TypeLabel;
|
||||||
public Text ValueLabel;
|
public Text ValueLabel;
|
||||||
public Toggle Toggle;
|
public Toggle Toggle;
|
||||||
@ -60,7 +62,11 @@ namespace UnityExplorer.CacheObject.Views
|
|||||||
public ButtonRef SubContentButton;
|
public ButtonRef SubContentButton;
|
||||||
public ButtonRef ApplyButton;
|
public ButtonRef ApplyButton;
|
||||||
|
|
||||||
public GameObject SubContentHolder;
|
public ButtonRef CopyButton;
|
||||||
|
public ButtonRef PasteButton;
|
||||||
|
|
||||||
|
public readonly Color subInactiveColor = new(0.23f, 0.23f, 0.23f);
|
||||||
|
public readonly Color subActiveColor = new(0.23f, 0.33f, 0.23f);
|
||||||
|
|
||||||
protected virtual void ApplyClicked()
|
protected virtual void ApplyClicked()
|
||||||
{
|
{
|
||||||
@ -82,26 +88,26 @@ namespace UnityExplorer.CacheObject.Views
|
|||||||
this.Occupant.OnCellSubContentToggle();
|
this.Occupant.OnCellSubContentToggle();
|
||||||
}
|
}
|
||||||
|
|
||||||
public readonly Color subInactiveColor = new Color(0.23f, 0.23f, 0.23f);
|
protected virtual void OnCopyClicked()
|
||||||
public readonly Color subActiveColor = new Color(0.23f, 0.33f, 0.23f);
|
{
|
||||||
|
ClipboardPanel.Copy(this.Occupant.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void OnPasteClicked()
|
||||||
|
{
|
||||||
|
if (ClipboardPanel.TryPaste(this.Occupant.FallbackType, out object paste))
|
||||||
|
this.Occupant.SetUserValue(paste);
|
||||||
|
}
|
||||||
|
|
||||||
public void RefreshSubcontentButton()
|
public void RefreshSubcontentButton()
|
||||||
{
|
{
|
||||||
if (!this.SubContentHolder.activeSelf)
|
this.SubContentButton.ButtonText.text = SubContentHolder.activeSelf ? "▼" : "▲";
|
||||||
{
|
Color color = SubContentHolder.activeSelf ? subActiveColor : subInactiveColor;
|
||||||
this.SubContentButton.ButtonText.text = "▲";
|
RuntimeProvider.Instance.SetColorBlock(SubContentButton.Component, color, color * 1.3f);
|
||||||
RuntimeProvider.Instance.SetColorBlock(SubContentButton.Component, subInactiveColor, subInactiveColor * 1.3f);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.SubContentButton.ButtonText.text = "▼";
|
|
||||||
RuntimeProvider.Instance.SetColorBlock(SubContentButton.Component, subActiveColor, subActiveColor * 1.3f);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void ConstructEvaluateHolder(GameObject parent);
|
protected abstract void ConstructEvaluateHolder(GameObject parent);
|
||||||
|
|
||||||
|
|
||||||
public virtual GameObject CreateContent(GameObject parent)
|
public virtual GameObject CreateContent(GameObject parent)
|
||||||
{
|
{
|
||||||
// Main layout
|
// Main layout
|
||||||
@ -158,7 +164,7 @@ namespace UnityExplorer.CacheObject.Views
|
|||||||
|
|
||||||
TypeLabel = UIFactory.CreateLabel(rightHoriGroup, "ReturnLabel", "<notset>", TextAnchor.MiddleLeft);
|
TypeLabel = UIFactory.CreateLabel(rightHoriGroup, "ReturnLabel", "<notset>", TextAnchor.MiddleLeft);
|
||||||
TypeLabel.horizontalOverflow = HorizontalWrapMode.Wrap;
|
TypeLabel.horizontalOverflow = HorizontalWrapMode.Wrap;
|
||||||
UIFactory.SetLayoutElement(TypeLabel.gameObject, minHeight: 25, flexibleHeight: 150, minWidth: 60, flexibleWidth: 0);
|
UIFactory.SetLayoutElement(TypeLabel.gameObject, minHeight: 25, flexibleHeight: 150, minWidth: 45, flexibleWidth: 0);
|
||||||
|
|
||||||
// Bool and number value interaction
|
// Bool and number value interaction
|
||||||
|
|
||||||
@ -188,6 +194,24 @@ namespace UnityExplorer.CacheObject.Views
|
|||||||
ValueLabel.horizontalOverflow = HorizontalWrapMode.Wrap;
|
ValueLabel.horizontalOverflow = HorizontalWrapMode.Wrap;
|
||||||
UIFactory.SetLayoutElement(ValueLabel.gameObject, minHeight: 25, flexibleHeight: 150, flexibleWidth: 9999);
|
UIFactory.SetLayoutElement(ValueLabel.gameObject, minHeight: 25, flexibleHeight: 150, flexibleWidth: 9999);
|
||||||
|
|
||||||
|
// Copy and Paste buttons
|
||||||
|
|
||||||
|
var buttonHolder = UIFactory.CreateHorizontalGroup(rightHoriGroup, "CopyPasteButtons", false, false, true, true, 4,
|
||||||
|
bgColor: new(1,1,1,0), childAlignment: TextAnchor.MiddleLeft);
|
||||||
|
UIFactory.SetLayoutElement(buttonHolder, minWidth: 60, flexibleWidth: 0);
|
||||||
|
|
||||||
|
CopyButton = UIFactory.CreateButton(buttonHolder, "CopyButton", "Copy", new Color(0.13f, 0.13f, 0.13f, 1f));
|
||||||
|
UIFactory.SetLayoutElement(CopyButton.Component.gameObject, minHeight: 25, minWidth: 28, flexibleWidth: 0);
|
||||||
|
CopyButton.ButtonText.color = Color.yellow;
|
||||||
|
CopyButton.ButtonText.fontSize = 10;
|
||||||
|
CopyButton.OnClick += OnCopyClicked;
|
||||||
|
|
||||||
|
PasteButton = UIFactory.CreateButton(buttonHolder, "PasteButton", "Paste", new Color(0.13f, 0.13f, 0.13f, 1f));
|
||||||
|
UIFactory.SetLayoutElement(PasteButton.Component.gameObject, minHeight: 25, minWidth: 28, flexibleWidth: 0);
|
||||||
|
PasteButton.ButtonText.color = Color.green;
|
||||||
|
PasteButton.ButtonText.fontSize = 10;
|
||||||
|
PasteButton.OnClick += OnPasteClicked;
|
||||||
|
|
||||||
// Subcontent
|
// Subcontent
|
||||||
|
|
||||||
SubContentHolder = UIFactory.CreateUIObject("SubContent", UIRoot);
|
SubContentHolder = UIFactory.CreateUIObject("SubContent", UIRoot);
|
||||||
|
@ -38,6 +38,7 @@ namespace UnityExplorer.Config
|
|||||||
public static ConfigElement<string> OptionsPanelData;
|
public static ConfigElement<string> OptionsPanelData;
|
||||||
public static ConfigElement<string> ConsoleLogData;
|
public static ConfigElement<string> ConsoleLogData;
|
||||||
public static ConfigElement<string> HookManagerData;
|
public static ConfigElement<string> HookManagerData;
|
||||||
|
public static ConfigElement<string> ClipboardData;
|
||||||
|
|
||||||
internal static readonly Dictionary<string, IConfigElement> ConfigElements = new Dictionary<string, IConfigElement>();
|
internal static readonly Dictionary<string, IConfigElement> ConfigElements = new Dictionary<string, IConfigElement>();
|
||||||
internal static readonly Dictionary<string, IConfigElement> InternalConfigs = new Dictionary<string, IConfigElement>();
|
internal static readonly Dictionary<string, IConfigElement> InternalConfigs = new Dictionary<string, IConfigElement>();
|
||||||
@ -132,6 +133,7 @@ namespace UnityExplorer.Config
|
|||||||
OptionsPanelData = new ConfigElement<string>("OptionsPanel", "", "", true);
|
OptionsPanelData = new ConfigElement<string>("OptionsPanel", "", "", true);
|
||||||
ConsoleLogData = new ConfigElement<string>("ConsoleLog", "", "", true);
|
ConsoleLogData = new ConfigElement<string>("ConsoleLog", "", "", true);
|
||||||
HookManagerData = new ConfigElement<string>("HookManager", "", "", true);
|
HookManagerData = new ConfigElement<string>("HookManager", "", "", true);
|
||||||
|
ClipboardData = new ConfigElement<string>("Clipboard", "", "", true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ namespace UnityExplorer
|
|||||||
public static class ExplorerCore
|
public static class ExplorerCore
|
||||||
{
|
{
|
||||||
public const string NAME = "UnityExplorer";
|
public const string NAME = "UnityExplorer";
|
||||||
public const string VERSION = "4.4.5";
|
public const string VERSION = "4.5.0";
|
||||||
public const string AUTHOR = "Sinai";
|
public const string AUTHOR = "Sinai";
|
||||||
public const string GUID = "com.sinai.unityexplorer";
|
public const string GUID = "com.sinai.unityexplorer";
|
||||||
|
|
||||||
@ -67,6 +67,8 @@ namespace UnityExplorer
|
|||||||
UIManager.InitUI();
|
UIManager.InitUI();
|
||||||
|
|
||||||
Log($"{NAME} {VERSION} initialized.");
|
Log($"{NAME} {VERSION} initialized.");
|
||||||
|
|
||||||
|
//InspectorManager.Inspect(typeof(Tests.TestClass));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -241,7 +241,6 @@ namespace UnityExplorer.Inspectors
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#region UI Construction
|
#region UI Construction
|
||||||
|
|
||||||
public override GameObject CreateContent(GameObject parent)
|
public override GameObject CreateContent(GameObject parent)
|
||||||
|
@ -8,6 +8,7 @@ using UniverseLib.Input;
|
|||||||
using UnityExplorer.UI;
|
using UnityExplorer.UI;
|
||||||
using UniverseLib.UI;
|
using UniverseLib.UI;
|
||||||
using UniverseLib;
|
using UniverseLib;
|
||||||
|
using UnityExplorer.UI.Panels;
|
||||||
|
|
||||||
namespace UnityExplorer.Inspectors
|
namespace UnityExplorer.Inspectors
|
||||||
{
|
{
|
||||||
@ -51,6 +52,11 @@ namespace UnityExplorer.Inspectors
|
|||||||
ConstructTransformControls();
|
ConstructTransformControls();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnCopyClicked()
|
||||||
|
{
|
||||||
|
ClipboardPanel.Copy(this.GOTarget);
|
||||||
|
}
|
||||||
|
|
||||||
#region GO Controls
|
#region GO Controls
|
||||||
|
|
||||||
private string lastGoName;
|
private string lastGoName;
|
||||||
@ -467,6 +473,11 @@ namespace UnityExplorer.Inspectors
|
|||||||
UIFactory.SetLayoutElement(PathInput.UIRoot, minHeight: 25, minWidth: 100, flexibleWidth: 9999);
|
UIFactory.SetLayoutElement(PathInput.UIRoot, minHeight: 25, minWidth: 100, flexibleWidth: 9999);
|
||||||
PathInput.Component.lineType = InputField.LineType.MultiLineSubmit;
|
PathInput.Component.lineType = InputField.LineType.MultiLineSubmit;
|
||||||
|
|
||||||
|
var copyButton = UIFactory.CreateButton(firstRow, "CopyButton", "Copy to Clipboard", new Color(0.2f, 0.2f, 0.2f, 1));
|
||||||
|
copyButton.ButtonText.color = Color.yellow;
|
||||||
|
UIFactory.SetLayoutElement(copyButton.Component.gameObject, minHeight: 25, minWidth: 120);
|
||||||
|
copyButton.OnClick += OnCopyClicked;
|
||||||
|
|
||||||
//var pathApplyBtn = UIFactory.CreateButton(firstRow, "PathButton", "Set Parent Path", new Color(0.2f, 0.2f, 0.2f));
|
//var pathApplyBtn = UIFactory.CreateButton(firstRow, "PathButton", "Set Parent Path", new Color(0.2f, 0.2f, 0.2f));
|
||||||
//UIFactory.SetLayoutElement(pathApplyBtn.Component.gameObject, minHeight: 25, minWidth: 120);
|
//UIFactory.SetLayoutElement(pathApplyBtn.Component.gameObject, minHeight: 25, minWidth: 120);
|
||||||
//pathApplyBtn.OnClick += () => { OnPathEndEdit(PathInput.Text); };
|
//pathApplyBtn.OnClick += () => { OnPathEndEdit(PathInput.Text); };
|
||||||
|
@ -9,52 +9,49 @@ using UniverseLib.UI.Models;
|
|||||||
using UnityExplorer.UI.Widgets;
|
using UnityExplorer.UI.Widgets;
|
||||||
using UniverseLib.UI;
|
using UniverseLib.UI;
|
||||||
using UniverseLib;
|
using UniverseLib;
|
||||||
|
using UnityExplorer.UI.Panels;
|
||||||
|
|
||||||
namespace UnityExplorer.Inspectors
|
namespace UnityExplorer.Inspectors
|
||||||
{
|
{
|
||||||
public class InspectorTab : IPooledObject
|
public class InspectorTab : IPooledObject
|
||||||
{
|
{
|
||||||
public GameObject UIRoot { get; set; }
|
public GameObject UIRoot { get; set; }
|
||||||
|
|
||||||
public float DefaultHeight => 25f;
|
public float DefaultHeight => 25f;
|
||||||
|
|
||||||
public ButtonRef TabButton;
|
public ButtonRef TabButton;
|
||||||
public Text TabText;
|
public Text TabText;
|
||||||
|
|
||||||
public ButtonRef CloseButton;
|
public ButtonRef CloseButton;
|
||||||
|
|
||||||
private static readonly Color _enabledTabColor = new Color(0.15f, 0.22f, 0.15f);
|
private static readonly Color enabledTabColor = new(0.15f, 0.22f, 0.15f);
|
||||||
private static readonly Color _disabledTabColor = new Color(0.13f, 0.13f, 0.13f);
|
private static readonly Color disabledTabColor = new(0.13f, 0.13f, 0.13f);
|
||||||
|
|
||||||
public void SetTabColor(bool active)
|
public void SetTabColor(bool active)
|
||||||
{
|
{
|
||||||
if (active)
|
Color color = active ? enabledTabColor : disabledTabColor;
|
||||||
RuntimeProvider.Instance.SetColorBlock(TabButton.Component, _enabledTabColor, _enabledTabColor * 1.2f);
|
RuntimeProvider.Instance.SetColorBlock(TabButton.Component, color, color * 1.2f);
|
||||||
else
|
|
||||||
RuntimeProvider.Instance.SetColorBlock(TabButton.Component, _disabledTabColor, _disabledTabColor * 1.2f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public GameObject CreateContent(GameObject parent)
|
public GameObject CreateContent(GameObject parent)
|
||||||
{
|
{
|
||||||
UIRoot = UIFactory.CreateHorizontalGroup(parent, "TabObject", false, true, true, true, 0,
|
UIRoot = UIFactory.CreateHorizontalGroup(parent, "TabObject", false, true, true, true, 1,
|
||||||
default, new Color(0.13f, 0.13f, 0.13f), childAlignment: TextAnchor.MiddleLeft);
|
default, new Color(0.13f, 0.13f, 0.13f), childAlignment: TextAnchor.MiddleLeft);
|
||||||
UIFactory.SetLayoutElement(UIRoot, minWidth: 200, flexibleWidth: 0);
|
UIFactory.SetLayoutElement(UIRoot, minWidth: 200, flexibleWidth: 0);
|
||||||
UIRoot.AddComponent<Mask>();
|
UIRoot.AddComponent<Mask>();
|
||||||
|
UIRoot.AddComponent<Outline>();
|
||||||
|
|
||||||
TabButton = UIFactory.CreateButton(UIRoot, "TabButton", "");
|
TabButton = UIFactory.CreateButton(UIRoot, "TabButton", "");
|
||||||
UIFactory.SetLayoutElement(TabButton.Component.gameObject, minWidth: 175, flexibleWidth: 0);
|
UIFactory.SetLayoutElement(TabButton.Component.gameObject, minWidth: 173, flexibleWidth: 0);
|
||||||
UIFactory.SetLayoutGroup<HorizontalLayoutGroup>(TabButton.Component.gameObject, false, false, true, true, 0, 0, 0, 3);
|
UIFactory.SetLayoutGroup<HorizontalLayoutGroup>(TabButton.Component.gameObject, false, false, true, true, 0, 0, 0, 3);
|
||||||
|
|
||||||
TabText = TabButton.Component.GetComponentInChildren<Text>();
|
TabText = TabButton.Component.GetComponentInChildren<Text>();
|
||||||
UIFactory.SetLayoutElement(TabText.gameObject, minHeight: 25, minWidth: 175, flexibleWidth: 0);
|
UIFactory.SetLayoutElement(TabText.gameObject, minHeight: 25, minWidth: 173, flexibleWidth: 0);
|
||||||
TabText.alignment = TextAnchor.MiddleLeft;
|
TabText.alignment = TextAnchor.MiddleLeft;
|
||||||
TabText.fontSize = 12;
|
TabText.fontSize = 12;
|
||||||
TabText.horizontalOverflow = HorizontalWrapMode.Overflow;
|
TabText.horizontalOverflow = HorizontalWrapMode.Overflow;
|
||||||
|
|
||||||
CloseButton = UIFactory.CreateButton(UIRoot, "CloseButton", "X", new Color(0.2f, 0.2f, 0.2f, 1));
|
CloseButton = UIFactory.CreateButton(UIRoot, "CloseButton", "X", new Color(0.15f, 0.15f, 0.15f, 1));
|
||||||
UIFactory.SetLayoutElement(CloseButton.Component.gameObject, minHeight: 25, minWidth: 25, flexibleWidth: 0);
|
UIFactory.SetLayoutElement(CloseButton.Component.gameObject, minHeight: 25, minWidth: 25, flexibleWidth: 0);
|
||||||
var closeBtnText = CloseButton.Component.GetComponentInChildren<Text>();
|
CloseButton.ButtonText.color = Color.red;
|
||||||
closeBtnText.color = Color.red;
|
|
||||||
|
|
||||||
return UIRoot;
|
return UIRoot;
|
||||||
}
|
}
|
||||||
|
@ -327,6 +327,11 @@ namespace UnityExplorer.Inspectors
|
|||||||
cell.Occupant.IValue.SetLayout();
|
cell.Occupant.IValue.SetLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnCopyClicked()
|
||||||
|
{
|
||||||
|
ClipboardPanel.Copy(this.Target ?? this.TargetType);
|
||||||
|
}
|
||||||
|
|
||||||
// UI Construction
|
// UI Construction
|
||||||
|
|
||||||
private GameObject mainContentHolder;
|
private GameObject mainContentHolder;
|
||||||
@ -338,7 +343,10 @@ namespace UnityExplorer.Inspectors
|
|||||||
|
|
||||||
// Class name, assembly
|
// Class name, assembly
|
||||||
|
|
||||||
var titleHolder = UIFactory.CreateUIObject("TitleHolder", UIRoot);
|
var topRow = UIFactory.CreateHorizontalGroup(UIRoot, "TopRow", false, false, true, true, 4, default, new(1, 1, 1, 0), TextAnchor.MiddleLeft);
|
||||||
|
UIFactory.SetLayoutElement(topRow, minHeight: 25, flexibleWidth: 9999);
|
||||||
|
|
||||||
|
var titleHolder = UIFactory.CreateUIObject("TitleHolder", topRow);
|
||||||
UIFactory.SetLayoutElement(titleHolder, minHeight: 35, flexibleHeight: 0, flexibleWidth: 9999);
|
UIFactory.SetLayoutElement(titleHolder, minHeight: 35, flexibleHeight: 0, flexibleWidth: 9999);
|
||||||
|
|
||||||
NameText = UIFactory.CreateLabel(titleHolder, "VisibleTitle", "NotSet", TextAnchor.MiddleLeft);
|
NameText = UIFactory.CreateLabel(titleHolder, "VisibleTitle", "NotSet", TextAnchor.MiddleLeft);
|
||||||
@ -360,6 +368,11 @@ namespace UnityExplorer.Inspectors
|
|||||||
HiddenNameText.Component.textComponent.color = Color.clear;
|
HiddenNameText.Component.textComponent.color = Color.clear;
|
||||||
UIFactory.SetLayoutElement(HiddenNameText.Component.gameObject, minHeight: 35, flexibleHeight: 0, flexibleWidth: 9999);
|
UIFactory.SetLayoutElement(HiddenNameText.Component.gameObject, minHeight: 35, flexibleHeight: 0, flexibleWidth: 9999);
|
||||||
|
|
||||||
|
var copyButton = UIFactory.CreateButton(topRow, "CopyButton", "Copy to Clipboard", new Color(0.2f, 0.2f, 0.2f, 1));
|
||||||
|
copyButton.ButtonText.color = Color.yellow;
|
||||||
|
UIFactory.SetLayoutElement(copyButton.Component.gameObject, minHeight: 25, minWidth: 120, flexibleWidth: 0);
|
||||||
|
copyButton.OnClick += OnCopyClicked;
|
||||||
|
|
||||||
AssemblyText = UIFactory.CreateLabel(UIRoot, "AssemblyLabel", "not set", TextAnchor.MiddleLeft);
|
AssemblyText = UIFactory.CreateLabel(UIRoot, "AssemblyLabel", "not set", TextAnchor.MiddleLeft);
|
||||||
UIFactory.SetLayoutElement(AssemblyText.gameObject, minHeight: 25, flexibleWidth: 9999);
|
UIFactory.SetLayoutElement(AssemblyText.gameObject, minHeight: 25, flexibleWidth: 9999);
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityExplorer.Core;
|
|
||||||
using UnityExplorer.Config;
|
using UnityExplorer.Config;
|
||||||
|
|
||||||
namespace UnityExplorer.Loader.ML
|
namespace UnityExplorer.Loader.ML
|
||||||
|
@ -8,7 +8,6 @@ using UnityExplorer.Config;
|
|||||||
using UnityExplorer.Loader.STANDALONE;
|
using UnityExplorer.Loader.STANDALONE;
|
||||||
using UnityEngine.EventSystems;
|
using UnityEngine.EventSystems;
|
||||||
using UniverseLib.Input;
|
using UniverseLib.Input;
|
||||||
using UnityExplorer.Core;
|
|
||||||
#if CPP
|
#if CPP
|
||||||
using UnhollowerRuntimeLib;
|
using UnhollowerRuntimeLib;
|
||||||
#endif
|
#endif
|
||||||
|
@ -24,7 +24,10 @@ namespace UnityExplorer.Tests
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static object LiterallyAnything = null;
|
||||||
|
|
||||||
// Test enumerables
|
// Test enumerables
|
||||||
|
public static int[,,] MultiDimensionalArray = new int[45, 45, 45];
|
||||||
public static List<object> ListOfInts;
|
public static List<object> ListOfInts;
|
||||||
public static List<List<List<string>>> NestedList;
|
public static List<List<List<string>>> NestedList;
|
||||||
public static IDictionary MixedDictionary;
|
public static IDictionary MixedDictionary;
|
||||||
@ -40,7 +43,12 @@ namespace UnityExplorer.Tests
|
|||||||
public static CameraClearFlags EnumTest2;
|
public static CameraClearFlags EnumTest2;
|
||||||
public static Color Color = Color.magenta;
|
public static Color Color = Color.magenta;
|
||||||
public static Color32 Color32 = Color.red;
|
public static Color32 Color32 = Color.red;
|
||||||
public static string ALongString = new string('#', 10000);
|
public static string ALongString = new('#', 10000);
|
||||||
|
|
||||||
|
public static float[] AParseTest(ref List<float[,,]> arg0, ref float[,] arg1)
|
||||||
|
{
|
||||||
|
return new float[] { 1, 2, 3 };
|
||||||
|
}
|
||||||
|
|
||||||
public static List<object> RandomList
|
public static List<object> RandomList
|
||||||
{
|
{
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace UnityExplorer.UI
|
|
||||||
{
|
|
||||||
public static class Clipboard
|
|
||||||
{
|
|
||||||
public static object Current { get; private set; }
|
|
||||||
|
|
||||||
public static void Init()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Copy(object obj)
|
|
||||||
{
|
|
||||||
Current = obj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
55
src/UI/Notification.cs
Normal file
55
src/UI/Notification.cs
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
using UniverseLib.Input;
|
||||||
|
using UniverseLib.UI;
|
||||||
|
|
||||||
|
namespace UnityExplorer.UI
|
||||||
|
{
|
||||||
|
public static class Notification
|
||||||
|
{
|
||||||
|
private static Text popupLabel;
|
||||||
|
|
||||||
|
private static string _currentNotification;
|
||||||
|
private static float _timeOfLastNotification;
|
||||||
|
|
||||||
|
public static void Init()
|
||||||
|
{
|
||||||
|
ConstructUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ShowMessage(string message)
|
||||||
|
{
|
||||||
|
popupLabel.text = message;
|
||||||
|
_currentNotification = message;
|
||||||
|
_timeOfLastNotification = Time.realtimeSinceStartup;
|
||||||
|
|
||||||
|
popupLabel.transform.localPosition = UIManager.UIRootRect.InverseTransformPoint(InputManager.MousePosition) + (Vector3.up * 25);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Update()
|
||||||
|
{
|
||||||
|
if (_currentNotification != null)
|
||||||
|
{
|
||||||
|
if (Time.realtimeSinceStartup - _timeOfLastNotification > 2f)
|
||||||
|
{
|
||||||
|
_currentNotification = null;
|
||||||
|
popupLabel.text = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ConstructUI()
|
||||||
|
{
|
||||||
|
|
||||||
|
popupLabel = UIFactory.CreateLabel(UIManager.UIRoot, "ClipboardNotification", "", TextAnchor.MiddleCenter);
|
||||||
|
popupLabel.rectTransform.sizeDelta = new(500, 100);
|
||||||
|
popupLabel.gameObject.AddComponent<Outline>();
|
||||||
|
var popupGroup = popupLabel.gameObject.AddComponent<CanvasGroup>();
|
||||||
|
popupGroup.blocksRaycasts = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
120
src/UI/Panels/ClipboardPanel.cs
Normal file
120
src/UI/Panels/ClipboardPanel.cs
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
using UnityExplorer.CacheObject;
|
||||||
|
using UnityExplorer.CacheObject.Views;
|
||||||
|
using UnityExplorer.Config;
|
||||||
|
using UniverseLib;
|
||||||
|
using UniverseLib.Input;
|
||||||
|
using UniverseLib.UI;
|
||||||
|
using UniverseLib.UI.Widgets;
|
||||||
|
|
||||||
|
namespace UnityExplorer.UI.Panels
|
||||||
|
{
|
||||||
|
public class ClipboardPanel : UIPanel
|
||||||
|
{
|
||||||
|
public static object Current { get; private set; }
|
||||||
|
|
||||||
|
public override UIManager.Panels PanelType => UIManager.Panels.Clipboard;
|
||||||
|
public override string Name => "Clipboard";
|
||||||
|
public override int MinWidth => 500;
|
||||||
|
public override int MinHeight => 95;
|
||||||
|
public override bool CanDragAndResize => true;
|
||||||
|
public override bool NavButtonWanted => true;
|
||||||
|
public override bool ShouldSaveActiveState => true;
|
||||||
|
public override bool ShowByDefault => true;
|
||||||
|
public override string GetSaveDataFromConfigManager() => ConfigManager.ClipboardData.Value;
|
||||||
|
public override void DoSaveToConfigElement() => ConfigManager.ClipboardData.Value = this.ToSaveData();
|
||||||
|
|
||||||
|
private static Text CurrentPasteLabel;
|
||||||
|
|
||||||
|
public static void Copy(object obj)
|
||||||
|
{
|
||||||
|
Current = obj;
|
||||||
|
Notification.ShowMessage("Copied!");
|
||||||
|
UpdateCurrentPasteInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool TryPaste(Type targetType, out object paste)
|
||||||
|
{
|
||||||
|
paste = Current;
|
||||||
|
var pasteType = Current?.GetActualType();
|
||||||
|
|
||||||
|
if (Current != null && !targetType.IsAssignableFrom(pasteType))
|
||||||
|
{
|
||||||
|
Notification.ShowMessage($"Cannot assign '{pasteType.Name}' to '{targetType.Name}'!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Notification.ShowMessage("Pasted!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ClearClipboard()
|
||||||
|
{
|
||||||
|
Current = null;
|
||||||
|
UpdateCurrentPasteInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void UpdateCurrentPasteInfo()
|
||||||
|
{
|
||||||
|
CurrentPasteLabel.text = ToStringUtility.ToStringWithType(Current, typeof(object), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void InspectClipboard()
|
||||||
|
{
|
||||||
|
if (Current.IsNullOrDestroyed())
|
||||||
|
{
|
||||||
|
Notification.ShowMessage("Cannot inspect a null or destroyed object!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
InspectorManager.Inspect(Current);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected internal override void DoSetDefaultPosAndAnchors()
|
||||||
|
{
|
||||||
|
this.Rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, MinWidth);
|
||||||
|
this.Rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, MinHeight);
|
||||||
|
this.Rect.anchorMin = new Vector2(0.1f, 0.05f);
|
||||||
|
this.Rect.anchorMax = new Vector2(0.4f, 0.15f);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void ConstructPanelContent()
|
||||||
|
{
|
||||||
|
this.UIRoot.GetComponent<Image>().color = new(0.1f, 0.1f, 0.1f);
|
||||||
|
|
||||||
|
// Actual panel content
|
||||||
|
|
||||||
|
var firstRow = UIFactory.CreateHorizontalGroup(UIRoot, "FirstRow", false, false, true, true, 5, new(2,2,2,2), new(1,1,1,0));
|
||||||
|
UIFactory.SetLayoutElement(firstRow, minHeight: 25, flexibleWidth: 999);
|
||||||
|
|
||||||
|
// Title for "Current Paste:"
|
||||||
|
var currentPasteTitle = UIFactory.CreateLabel(firstRow, "CurrentPasteTitle", "Current paste:", TextAnchor.MiddleLeft, color: Color.grey);
|
||||||
|
UIFactory.SetLayoutElement(currentPasteTitle.gameObject, minHeight: 25, minWidth: 100, flexibleWidth: 999);
|
||||||
|
|
||||||
|
// Clear clipboard button
|
||||||
|
var clearButton = UIFactory.CreateButton(firstRow, "ClearPasteButton", "Clear Clipboard");
|
||||||
|
UIFactory.SetLayoutElement(clearButton.Component.gameObject, minWidth: 120, minHeight: 25, flexibleWidth: 0);
|
||||||
|
clearButton.OnClick += () => Copy(null);
|
||||||
|
|
||||||
|
// Current Paste info row
|
||||||
|
var currentPasteHolder = UIFactory.CreateHorizontalGroup(UIRoot, "SecondRow", false, false, true, true, 0,
|
||||||
|
new(2, 2, 2, 2), childAlignment: TextAnchor.UpperCenter);
|
||||||
|
|
||||||
|
// Actual current paste info label
|
||||||
|
CurrentPasteLabel = UIFactory.CreateLabel(currentPasteHolder, "CurrentPasteInfo", "not set", TextAnchor.UpperLeft);
|
||||||
|
UIFactory.SetLayoutElement(CurrentPasteLabel.gameObject, minHeight: 25, minWidth: 100, flexibleWidth: 999, flexibleHeight: 999);
|
||||||
|
UpdateCurrentPasteInfo();
|
||||||
|
|
||||||
|
// Inspect button
|
||||||
|
var inspectButton = UIFactory.CreateButton(currentPasteHolder, "InspectButton", "Inspect");
|
||||||
|
UIFactory.SetLayoutElement(inspectButton.Component.gameObject, minHeight: 25, flexibleHeight: 0, minWidth: 80, flexibleWidth: 0);
|
||||||
|
inspectButton.OnClick += InspectClipboard;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -46,10 +46,7 @@ namespace UnityExplorer.UI.Panels
|
|||||||
|
|
||||||
public override string GetSaveDataFromConfigManager() => ConfigManager.InspectorData.Value;
|
public override string GetSaveDataFromConfigManager() => ConfigManager.InspectorData.Value;
|
||||||
|
|
||||||
public override void DoSaveToConfigElement()
|
public override void DoSaveToConfigElement() => ConfigManager.InspectorData.Value = this.ToSaveData();
|
||||||
{
|
|
||||||
ConfigManager.InspectorData.Value = this.ToSaveData();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected internal override void DoSetDefaultPosAndAnchors()
|
protected internal override void DoSetDefaultPosAndAnchors()
|
||||||
{
|
{
|
||||||
|
@ -15,15 +15,33 @@ namespace UnityExplorer.UI.Panels
|
|||||||
{
|
{
|
||||||
public class PanelDragger
|
public class PanelDragger
|
||||||
{
|
{
|
||||||
|
private enum MouseState
|
||||||
|
{
|
||||||
|
Down,
|
||||||
|
Held,
|
||||||
|
NotPressed
|
||||||
|
}
|
||||||
|
|
||||||
#region Static
|
#region Static
|
||||||
|
|
||||||
public static bool Resizing { get; private set; }
|
public static bool Resizing { get; private set; }
|
||||||
|
public static bool ResizePrompting => resizeCursorObj && resizeCursorObj.activeSelf;
|
||||||
|
|
||||||
public static bool ResizePrompting => s_resizeCursorObj && s_resizeCursorObj.activeSelf;
|
public static GameObject resizeCursorObj;
|
||||||
|
internal static bool wasAnyDragging;
|
||||||
|
|
||||||
|
internal static List<PanelDragger> Instances = new();
|
||||||
|
|
||||||
|
private static bool handledInstanceThisFrame;
|
||||||
|
|
||||||
|
static PanelDragger()
|
||||||
|
{
|
||||||
|
UIPanel.OnPanelsReordered += OnPanelsReordered;
|
||||||
|
}
|
||||||
|
|
||||||
internal static void ForceEnd()
|
internal static void ForceEnd()
|
||||||
{
|
{
|
||||||
s_resizeCursorObj.SetActive(false);
|
resizeCursorObj.SetActive(false);
|
||||||
wasAnyDragging = false;
|
wasAnyDragging = false;
|
||||||
Resizing = false;
|
Resizing = false;
|
||||||
|
|
||||||
@ -34,13 +52,6 @@ namespace UnityExplorer.UI.Panels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static List<PanelDragger> Instances = new List<PanelDragger>();
|
|
||||||
|
|
||||||
static PanelDragger()
|
|
||||||
{
|
|
||||||
UIPanel.OnPanelsReordered += OnPanelsReordered;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void OnPanelsReordered()
|
public static void OnPanelsReordered()
|
||||||
{
|
{
|
||||||
Instances.Sort((a, b) => b.Panel.GetSiblingIndex().CompareTo(a.Panel.GetSiblingIndex()));
|
Instances.Sort((a, b) => b.Panel.GetSiblingIndex().CompareTo(a.Panel.GetSiblingIndex()));
|
||||||
@ -54,18 +65,9 @@ namespace UnityExplorer.UI.Panels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private enum MouseState
|
|
||||||
{
|
|
||||||
Down,
|
|
||||||
Held,
|
|
||||||
NotPressed
|
|
||||||
}
|
|
||||||
|
|
||||||
private static bool handledInstanceThisFrame;
|
|
||||||
|
|
||||||
public static void UpdateInstances()
|
public static void UpdateInstances()
|
||||||
{
|
{
|
||||||
if (!s_resizeCursorObj)
|
if (!resizeCursorObj)
|
||||||
CreateCursorUI();
|
CreateCursorUI();
|
||||||
|
|
||||||
MouseState state;
|
MouseState state;
|
||||||
@ -99,10 +101,6 @@ namespace UnityExplorer.UI.Panels
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public static GameObject s_resizeCursorObj;
|
|
||||||
|
|
||||||
internal static bool wasAnyDragging;
|
|
||||||
|
|
||||||
// Instance
|
// Instance
|
||||||
|
|
||||||
public UIPanel UIPanel { get; private set; }
|
public UIPanel UIPanel { get; private set; }
|
||||||
@ -112,27 +110,23 @@ namespace UnityExplorer.UI.Panels
|
|||||||
public event Action<RectTransform> OnFinishResize;
|
public event Action<RectTransform> OnFinishResize;
|
||||||
public event Action<RectTransform> OnFinishDrag;
|
public event Action<RectTransform> OnFinishDrag;
|
||||||
|
|
||||||
private readonly RectTransform canvasTransform;
|
|
||||||
|
|
||||||
// Dragging
|
// Dragging
|
||||||
public RectTransform DragableArea { get; set; }
|
public RectTransform DragableArea { get; set; }
|
||||||
public bool WasDragging { get; set; }
|
public bool WasDragging { get; set; }
|
||||||
private Vector2 m_lastDragPosition;
|
private Vector2 lastDragPosition;
|
||||||
|
|
||||||
// Resizing
|
// Resizing
|
||||||
private const int RESIZE_THICKNESS = 10;
|
private const int RESIZE_THICKNESS = 10;
|
||||||
|
|
||||||
//internal readonly Vector2 minResize = new Vector2(200, 50);
|
|
||||||
|
|
||||||
private bool WasResizing { get; set; }
|
private bool WasResizing { get; set; }
|
||||||
private ResizeTypes m_currentResizeType = ResizeTypes.NONE;
|
private ResizeTypes currentResizeType = ResizeTypes.NONE;
|
||||||
private Vector2 m_lastResizePos;
|
private Vector2 lastResizePos;
|
||||||
|
|
||||||
private bool WasHoveringResize => s_resizeCursorObj.activeInHierarchy;
|
private bool WasHoveringResize => resizeCursorObj.activeInHierarchy;
|
||||||
|
|
||||||
private ResizeTypes m_lastResizeHoverType;
|
private ResizeTypes lastResizeHoverType;
|
||||||
|
|
||||||
private Rect m_totalResizeRect;
|
private Rect totalResizeRect;
|
||||||
|
|
||||||
public PanelDragger(RectTransform dragArea, RectTransform panelToDrag, UIPanel panel)
|
public PanelDragger(RectTransform dragArea, RectTransform panelToDrag, UIPanel panel)
|
||||||
{
|
{
|
||||||
@ -141,16 +135,13 @@ namespace UnityExplorer.UI.Panels
|
|||||||
DragableArea = dragArea;
|
DragableArea = dragArea;
|
||||||
Panel = panelToDrag;
|
Panel = panelToDrag;
|
||||||
|
|
||||||
if (!canvasTransform)
|
|
||||||
canvasTransform = Panel.GetComponentInParent<Canvas>().GetComponent<RectTransform>();
|
|
||||||
|
|
||||||
UpdateResizeCache();
|
UpdateResizeCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Destroy()
|
public void Destroy()
|
||||||
{
|
{
|
||||||
if (s_resizeCursorObj)
|
if (resizeCursorObj)
|
||||||
GameObject.Destroy(s_resizeCursorObj);
|
GameObject.Destroy(resizeCursorObj);
|
||||||
|
|
||||||
if (Instances.Contains(this))
|
if (Instances.Contains(this))
|
||||||
Instances.Remove(this);
|
Instances.Remove(this);
|
||||||
@ -166,7 +157,7 @@ namespace UnityExplorer.UI.Panels
|
|||||||
Vector3 dragPos = DragableArea.InverseTransformPoint(rawMousePos);
|
Vector3 dragPos = DragableArea.InverseTransformPoint(rawMousePos);
|
||||||
bool inDragPos = DragableArea.rect.Contains(dragPos);
|
bool inDragPos = DragableArea.rect.Contains(dragPos);
|
||||||
|
|
||||||
if (WasHoveringResize && s_resizeCursorObj)
|
if (WasHoveringResize && resizeCursorObj)
|
||||||
UpdateHoverImagePos();
|
UpdateHoverImagePos();
|
||||||
|
|
||||||
switch (state)
|
switch (state)
|
||||||
@ -243,15 +234,15 @@ namespace UnityExplorer.UI.Panels
|
|||||||
{
|
{
|
||||||
wasAnyDragging = true;
|
wasAnyDragging = true;
|
||||||
WasDragging = true;
|
WasDragging = true;
|
||||||
m_lastDragPosition = InputManager.MousePosition;
|
lastDragPosition = InputManager.MousePosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnDrag()
|
public void OnDrag()
|
||||||
{
|
{
|
||||||
var mousePos = InputManager.MousePosition;
|
var mousePos = InputManager.MousePosition;
|
||||||
|
|
||||||
Vector2 diff = (Vector2)mousePos - m_lastDragPosition;
|
Vector2 diff = (Vector2)mousePos - lastDragPosition;
|
||||||
m_lastDragPosition = mousePos;
|
lastDragPosition = mousePos;
|
||||||
|
|
||||||
Panel.localPosition = Panel.localPosition + (Vector3)diff;
|
Panel.localPosition = Panel.localPosition + (Vector3)diff;
|
||||||
|
|
||||||
@ -296,7 +287,7 @@ namespace UnityExplorer.UI.Panels
|
|||||||
|
|
||||||
private void UpdateResizeCache()
|
private void UpdateResizeCache()
|
||||||
{
|
{
|
||||||
m_totalResizeRect = new Rect(Panel.rect.x - RESIZE_THICKNESS + 1,
|
totalResizeRect = new Rect(Panel.rect.x - RESIZE_THICKNESS + 1,
|
||||||
Panel.rect.y - RESIZE_THICKNESS + 1,
|
Panel.rect.y - RESIZE_THICKNESS + 1,
|
||||||
Panel.rect.width + DBL_THICKESS - 2,
|
Panel.rect.width + DBL_THICKESS - 2,
|
||||||
Panel.rect.height + DBL_THICKESS - 2);
|
Panel.rect.height + DBL_THICKESS - 2);
|
||||||
@ -305,34 +296,34 @@ namespace UnityExplorer.UI.Panels
|
|||||||
if (AllowDragAndResize)
|
if (AllowDragAndResize)
|
||||||
{
|
{
|
||||||
m_resizeMask[ResizeTypes.Bottom] = new Rect(
|
m_resizeMask[ResizeTypes.Bottom] = new Rect(
|
||||||
m_totalResizeRect.x,
|
totalResizeRect.x,
|
||||||
m_totalResizeRect.y,
|
totalResizeRect.y,
|
||||||
m_totalResizeRect.width,
|
totalResizeRect.width,
|
||||||
RESIZE_THICKNESS);
|
RESIZE_THICKNESS);
|
||||||
|
|
||||||
m_resizeMask[ResizeTypes.Left] = new Rect(
|
m_resizeMask[ResizeTypes.Left] = new Rect(
|
||||||
m_totalResizeRect.x,
|
totalResizeRect.x,
|
||||||
m_totalResizeRect.y,
|
totalResizeRect.y,
|
||||||
RESIZE_THICKNESS,
|
RESIZE_THICKNESS,
|
||||||
m_totalResizeRect.height);
|
totalResizeRect.height);
|
||||||
|
|
||||||
m_resizeMask[ResizeTypes.Top] = new Rect(
|
m_resizeMask[ResizeTypes.Top] = new Rect(
|
||||||
m_totalResizeRect.x,
|
totalResizeRect.x,
|
||||||
Panel.rect.y + Panel.rect.height - 2,
|
Panel.rect.y + Panel.rect.height - 2,
|
||||||
m_totalResizeRect.width,
|
totalResizeRect.width,
|
||||||
RESIZE_THICKNESS);
|
RESIZE_THICKNESS);
|
||||||
|
|
||||||
m_resizeMask[ResizeTypes.Right] = new Rect(
|
m_resizeMask[ResizeTypes.Right] = new Rect(
|
||||||
m_totalResizeRect.x + Panel.rect.width + RESIZE_THICKNESS - 2,
|
totalResizeRect.x + Panel.rect.width + RESIZE_THICKNESS - 2,
|
||||||
m_totalResizeRect.y,
|
totalResizeRect.y,
|
||||||
RESIZE_THICKNESS,
|
RESIZE_THICKNESS,
|
||||||
m_totalResizeRect.height);
|
totalResizeRect.height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool MouseInResizeArea(Vector2 mousePos)
|
private bool MouseInResizeArea(Vector2 mousePos)
|
||||||
{
|
{
|
||||||
return m_totalResizeRect.Contains(mousePos);
|
return totalResizeRect.Contains(mousePos);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ResizeTypes GetResizeType(Vector2 mousePos)
|
private ResizeTypes GetResizeType(Vector2 mousePos)
|
||||||
@ -361,16 +352,16 @@ namespace UnityExplorer.UI.Panels
|
|||||||
|
|
||||||
public void OnHoverResize(ResizeTypes resizeType)
|
public void OnHoverResize(ResizeTypes resizeType)
|
||||||
{
|
{
|
||||||
if (WasHoveringResize && m_lastResizeHoverType == resizeType)
|
if (WasHoveringResize && lastResizeHoverType == resizeType)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// we are entering resize, or the resize type has changed.
|
// we are entering resize, or the resize type has changed.
|
||||||
|
|
||||||
//WasHoveringResize = true;
|
//WasHoveringResize = true;
|
||||||
m_lastResizeHoverType = resizeType;
|
lastResizeHoverType = resizeType;
|
||||||
|
|
||||||
s_resizeCursorObj.SetActive(true);
|
resizeCursorObj.SetActive(true);
|
||||||
s_resizeCursorObj.transform.SetAsLastSibling();
|
resizeCursorObj.transform.SetAsLastSibling();
|
||||||
|
|
||||||
// set the rotation for the resize icon
|
// set the rotation for the resize icon
|
||||||
float iconRotation = 0f;
|
float iconRotation = 0f;
|
||||||
@ -387,9 +378,9 @@ namespace UnityExplorer.UI.Panels
|
|||||||
iconRotation = 135f; break;
|
iconRotation = 135f; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
Quaternion rot = s_resizeCursorObj.transform.rotation;
|
Quaternion rot = resizeCursorObj.transform.rotation;
|
||||||
rot.eulerAngles = new Vector3(0, 0, iconRotation);
|
rot.eulerAngles = new Vector3(0, 0, iconRotation);
|
||||||
s_resizeCursorObj.transform.rotation = rot;
|
resizeCursorObj.transform.rotation = rot;
|
||||||
|
|
||||||
UpdateHoverImagePos();
|
UpdateHoverImagePos();
|
||||||
}
|
}
|
||||||
@ -397,19 +388,19 @@ namespace UnityExplorer.UI.Panels
|
|||||||
// update the resize icon position to be above the mouse
|
// update the resize icon position to be above the mouse
|
||||||
private void UpdateHoverImagePos()
|
private void UpdateHoverImagePos()
|
||||||
{
|
{
|
||||||
s_resizeCursorObj.transform.localPosition = canvasTransform.InverseTransformPoint(InputManager.MousePosition);
|
resizeCursorObj.transform.localPosition = UIManager.UIRootRect.InverseTransformPoint(InputManager.MousePosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnHoverResizeEnd()
|
public void OnHoverResizeEnd()
|
||||||
{
|
{
|
||||||
//WasHoveringResize = false;
|
//WasHoveringResize = false;
|
||||||
s_resizeCursorObj.SetActive(false);
|
resizeCursorObj.SetActive(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnBeginResize(ResizeTypes resizeType)
|
public void OnBeginResize(ResizeTypes resizeType)
|
||||||
{
|
{
|
||||||
m_currentResizeType = resizeType;
|
currentResizeType = resizeType;
|
||||||
m_lastResizePos = InputManager.MousePosition;
|
lastResizePos = InputManager.MousePosition;
|
||||||
WasResizing = true;
|
WasResizing = true;
|
||||||
Resizing = true;
|
Resizing = true;
|
||||||
}
|
}
|
||||||
@ -417,15 +408,15 @@ namespace UnityExplorer.UI.Panels
|
|||||||
public void OnResize()
|
public void OnResize()
|
||||||
{
|
{
|
||||||
Vector3 mousePos = InputManager.MousePosition;
|
Vector3 mousePos = InputManager.MousePosition;
|
||||||
Vector2 diff = m_lastResizePos - (Vector2)mousePos;
|
Vector2 diff = lastResizePos - (Vector2)mousePos;
|
||||||
|
|
||||||
if ((Vector2)mousePos == m_lastResizePos)
|
if ((Vector2)mousePos == lastResizePos)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (mousePos.x < 0 || mousePos.y < 0 || mousePos.x > Screen.width || mousePos.y > Screen.height)
|
if (mousePos.x < 0 || mousePos.y < 0 || mousePos.x > Screen.width || mousePos.y > Screen.height)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_lastResizePos = mousePos;
|
lastResizePos = mousePos;
|
||||||
|
|
||||||
float diffX = (float)((decimal)diff.x / Screen.width);
|
float diffX = (float)((decimal)diff.x / Screen.width);
|
||||||
float diffY = (float)((decimal)diff.y / Screen.height);
|
float diffY = (float)((decimal)diff.y / Screen.height);
|
||||||
@ -433,14 +424,14 @@ namespace UnityExplorer.UI.Panels
|
|||||||
Vector2 anchorMin = Panel.anchorMin;
|
Vector2 anchorMin = Panel.anchorMin;
|
||||||
Vector2 anchorMax = Panel.anchorMax;
|
Vector2 anchorMax = Panel.anchorMax;
|
||||||
|
|
||||||
if (m_currentResizeType.HasFlag(ResizeTypes.Left))
|
if (currentResizeType.HasFlag(ResizeTypes.Left))
|
||||||
anchorMin.x -= diffX;
|
anchorMin.x -= diffX;
|
||||||
else if (m_currentResizeType.HasFlag(ResizeTypes.Right))
|
else if (currentResizeType.HasFlag(ResizeTypes.Right))
|
||||||
anchorMax.x -= diffX;
|
anchorMax.x -= diffX;
|
||||||
|
|
||||||
if (m_currentResizeType.HasFlag(ResizeTypes.Top))
|
if (currentResizeType.HasFlag(ResizeTypes.Top))
|
||||||
anchorMax.y -= diffY;
|
anchorMax.y -= diffY;
|
||||||
else if (m_currentResizeType.HasFlag(ResizeTypes.Bottom))
|
else if (currentResizeType.HasFlag(ResizeTypes.Bottom))
|
||||||
anchorMin.y -= diffY;
|
anchorMin.y -= diffY;
|
||||||
|
|
||||||
var prevMin = Panel.anchorMin;
|
var prevMin = Panel.anchorMin;
|
||||||
@ -475,13 +466,13 @@ namespace UnityExplorer.UI.Panels
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var text = UIFactory.CreateLabel(UIManager.UIRoot, "ResizeCursor", "↔", TextAnchor.MiddleCenter, Color.white, true, 35);
|
var text = UIFactory.CreateLabel(UIManager.UIRoot, "ResizeCursor", "↔", TextAnchor.MiddleCenter, Color.white, true, 35);
|
||||||
s_resizeCursorObj = text.gameObject;
|
resizeCursorObj = text.gameObject;
|
||||||
|
|
||||||
RectTransform rect = s_resizeCursorObj.GetComponent<RectTransform>();
|
RectTransform rect = resizeCursorObj.GetComponent<RectTransform>();
|
||||||
rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 64);
|
rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 64);
|
||||||
rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 64);
|
rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 64);
|
||||||
|
|
||||||
s_resizeCursorObj.SetActive(false);
|
resizeCursorObj.SetActive(false);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -23,8 +23,8 @@ namespace UnityExplorer.UI.Panels
|
|||||||
public static event Action OnPanelsReordered;
|
public static event Action OnPanelsReordered;
|
||||||
public static event Action OnClickedOutsidePanels;
|
public static event Action OnClickedOutsidePanels;
|
||||||
|
|
||||||
internal static readonly List<UIPanel> instances = new List<UIPanel>();
|
internal static readonly List<UIPanel> instances = new();
|
||||||
internal static readonly Dictionary<int, UIPanel> transformToPanelDict = new Dictionary<int, UIPanel>();
|
internal static readonly Dictionary<int, UIPanel> transformToPanelDict = new();
|
||||||
|
|
||||||
public static void UpdateFocus()
|
public static void UpdateFocus()
|
||||||
{
|
{
|
||||||
|
@ -27,17 +27,6 @@ namespace UnityExplorer.UI.Panels
|
|||||||
private ButtonListHandler<GameObject, ButtonCell> dataHandler;
|
private ButtonListHandler<GameObject, ButtonCell> dataHandler;
|
||||||
private ScrollPool<ButtonCell> buttonScrollPool;
|
private ScrollPool<ButtonCell> buttonScrollPool;
|
||||||
|
|
||||||
public override void ConstructPanelContent()
|
|
||||||
{
|
|
||||||
dataHandler = new ButtonListHandler<GameObject, ButtonCell>(buttonScrollPool, GetEntries, SetCell, ShouldDisplayCell, OnCellClicked);
|
|
||||||
|
|
||||||
buttonScrollPool = UIFactory.CreateScrollPool<ButtonCell>(this.content, "ResultsList", out GameObject scrollObj,
|
|
||||||
out GameObject scrollContent);
|
|
||||||
|
|
||||||
buttonScrollPool.Initialize(dataHandler);
|
|
||||||
UIFactory.SetLayoutElement(scrollObj, flexibleHeight: 9999);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ShowResults()
|
public void ShowResults()
|
||||||
{
|
{
|
||||||
dataHandler.RefreshData();
|
dataHandler.RefreshData();
|
||||||
@ -65,6 +54,17 @@ namespace UnityExplorer.UI.Panels
|
|||||||
cell.Button.ButtonText.text = $"<color=cyan>{obj.name}</color> ({obj.transform.GetTransformPath(true)})";
|
cell.Button.ButtonText.text = $"<color=cyan>{obj.name}</color> ({obj.transform.GetTransformPath(true)})";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void ConstructPanelContent()
|
||||||
|
{
|
||||||
|
dataHandler = new ButtonListHandler<GameObject, ButtonCell>(buttonScrollPool, GetEntries, SetCell, ShouldDisplayCell, OnCellClicked);
|
||||||
|
|
||||||
|
buttonScrollPool = UIFactory.CreateScrollPool<ButtonCell>(this.content, "ResultsList", out GameObject scrollObj,
|
||||||
|
out GameObject scrollContent);
|
||||||
|
|
||||||
|
buttonScrollPool.Initialize(dataHandler);
|
||||||
|
UIFactory.SetLayoutElement(scrollObj, flexibleHeight: 9999);
|
||||||
|
}
|
||||||
|
|
||||||
protected internal override void DoSetDefaultPosAndAnchors()
|
protected internal override void DoSetDefaultPosAndAnchors()
|
||||||
{
|
{
|
||||||
this.Rect.anchorMin = new Vector2(0.5f, 0.5f);
|
this.Rect.anchorMin = new Vector2(0.5f, 0.5f);
|
||||||
|
@ -35,6 +35,7 @@ namespace UnityExplorer.UI
|
|||||||
MouseInspector,
|
MouseInspector,
|
||||||
UIInspectorResults,
|
UIInspectorResults,
|
||||||
HookManager,
|
HookManager,
|
||||||
|
Clipboard
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum VerticalAnchor
|
public enum VerticalAnchor
|
||||||
@ -49,12 +50,15 @@ namespace UnityExplorer.UI
|
|||||||
|
|
||||||
private static UIBase uiBase;
|
private static UIBase uiBase;
|
||||||
public static GameObject UIRoot => uiBase?.RootObject;
|
public static GameObject UIRoot => uiBase?.RootObject;
|
||||||
|
public static RectTransform UIRootRect => _uiRootRect ??= UIRoot.GetComponent<RectTransform>();
|
||||||
|
private static RectTransform _uiRootRect;
|
||||||
|
|
||||||
internal static GameObject PanelHolder { get; private set; }
|
internal static GameObject PanelHolder { get; private set; }
|
||||||
private static readonly Dictionary<Panels, UIPanel> UIPanels = new Dictionary<Panels, UIPanel>();
|
private static readonly Dictionary<Panels, UIPanel> UIPanels = new();
|
||||||
|
|
||||||
public static RectTransform NavBarRect;
|
public static RectTransform NavBarRect;
|
||||||
public static GameObject NavbarTabButtonHolder;
|
public static GameObject NavbarTabButtonHolder;
|
||||||
|
private static readonly Vector2 NAVBAR_DIMENSIONS = new(1020f, 35f);
|
||||||
|
|
||||||
private static ButtonRef closeBtn;
|
private static ButtonRef closeBtn;
|
||||||
private static ButtonRef pauseBtn;
|
private static ButtonRef pauseBtn;
|
||||||
@ -62,6 +66,9 @@ namespace UnityExplorer.UI
|
|||||||
private static bool pauseButtonPausing;
|
private static bool pauseButtonPausing;
|
||||||
private static float lastTimeScale;
|
private static float lastTimeScale;
|
||||||
|
|
||||||
|
private static int lastScreenWidth;
|
||||||
|
private static int lastScreenHeight;
|
||||||
|
|
||||||
public static bool ShowMenu
|
public static bool ShowMenu
|
||||||
{
|
{
|
||||||
get => uiBase != null && uiBase.Enabled;
|
get => uiBase != null && uiBase.Enabled;
|
||||||
@ -83,6 +90,7 @@ namespace UnityExplorer.UI
|
|||||||
lastScreenWidth = Screen.width;
|
lastScreenWidth = Screen.width;
|
||||||
lastScreenHeight = Screen.height;
|
lastScreenHeight = Screen.height;
|
||||||
|
|
||||||
|
|
||||||
// Create UI.
|
// Create UI.
|
||||||
CreatePanelHolder();
|
CreatePanelHolder();
|
||||||
CreateTopNavBar();
|
CreateTopNavBar();
|
||||||
@ -93,6 +101,7 @@ namespace UnityExplorer.UI
|
|||||||
UIPanels.Add(Panels.Inspector, new InspectorPanel());
|
UIPanels.Add(Panels.Inspector, new InspectorPanel());
|
||||||
UIPanels.Add(Panels.CSConsole, new CSConsolePanel());
|
UIPanels.Add(Panels.CSConsole, new CSConsolePanel());
|
||||||
UIPanels.Add(Panels.HookManager, new HookManagerPanel());
|
UIPanels.Add(Panels.HookManager, new HookManagerPanel());
|
||||||
|
UIPanels.Add(Panels.Clipboard, new ClipboardPanel());
|
||||||
UIPanels.Add(Panels.ConsoleLog, new LogPanel());
|
UIPanels.Add(Panels.ConsoleLog, new LogPanel());
|
||||||
UIPanels.Add(Panels.Options, new OptionsPanel());
|
UIPanels.Add(Panels.Options, new OptionsPanel());
|
||||||
UIPanels.Add(Panels.UIInspectorResults, new UiInspectorResultsPanel());
|
UIPanels.Add(Panels.UIInspectorResults, new UiInspectorResultsPanel());
|
||||||
@ -102,8 +111,8 @@ namespace UnityExplorer.UI
|
|||||||
panel.ConstructUI();
|
panel.ConstructUI();
|
||||||
|
|
||||||
// Call some initialize methods
|
// Call some initialize methods
|
||||||
|
Notification.Init();
|
||||||
ConsoleController.Init();
|
ConsoleController.Init();
|
||||||
Clipboard.Init();
|
|
||||||
|
|
||||||
// Add this listener to prevent ScrollPool doing anything while we are resizing panels
|
// Add this listener to prevent ScrollPool doing anything while we are resizing panels
|
||||||
ScrollPool<ICell>.writingLockedListeners.Add(() => !PanelDragger.Resizing);
|
ScrollPool<ICell>.writingLockedListeners.Add(() => !PanelDragger.Resizing);
|
||||||
@ -120,9 +129,6 @@ namespace UnityExplorer.UI
|
|||||||
|
|
||||||
// Main UI Update loop
|
// Main UI Update loop
|
||||||
|
|
||||||
private static int lastScreenWidth;
|
|
||||||
private static int lastScreenHeight;
|
|
||||||
|
|
||||||
public static void Update()
|
public static void Update()
|
||||||
{
|
{
|
||||||
if (!UIRoot)
|
if (!UIRoot)
|
||||||
@ -135,6 +141,9 @@ namespace UnityExplorer.UI
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update Notification modal
|
||||||
|
Notification.Update();
|
||||||
|
|
||||||
// Check forceUnlockMouse toggle
|
// Check forceUnlockMouse toggle
|
||||||
if (InputManager.GetKeyDown(ConfigManager.Force_Unlock_Toggle.Value))
|
if (InputManager.GetKeyDown(ConfigManager.Force_Unlock_Toggle.Value))
|
||||||
UniverseLib.Config.ConfigManager.Force_Unlock_Mouse = !UniverseLib.Config.ConfigManager.Force_Unlock_Mouse;
|
UniverseLib.Config.ConfigManager.Force_Unlock_Mouse = !UniverseLib.Config.ConfigManager.Force_Unlock_Mouse;
|
||||||
@ -208,14 +217,14 @@ namespace UnityExplorer.UI
|
|||||||
NavBarRect.anchorMin = new Vector2(0.5f, 1f);
|
NavBarRect.anchorMin = new Vector2(0.5f, 1f);
|
||||||
NavBarRect.anchorMax = new Vector2(0.5f, 1f);
|
NavBarRect.anchorMax = new Vector2(0.5f, 1f);
|
||||||
NavBarRect.anchoredPosition = new Vector2(NavBarRect.anchoredPosition.x, 0);
|
NavBarRect.anchoredPosition = new Vector2(NavBarRect.anchoredPosition.x, 0);
|
||||||
NavBarRect.sizeDelta = new Vector2(1080f, 35f);
|
NavBarRect.sizeDelta = NAVBAR_DIMENSIONS;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VerticalAnchor.Bottom:
|
case VerticalAnchor.Bottom:
|
||||||
NavBarRect.anchorMin = new Vector2(0.5f, 0f);
|
NavBarRect.anchorMin = new Vector2(0.5f, 0f);
|
||||||
NavBarRect.anchorMax = new Vector2(0.5f, 0f);
|
NavBarRect.anchorMax = new Vector2(0.5f, 0f);
|
||||||
NavBarRect.anchoredPosition = new Vector2(NavBarRect.anchoredPosition.x, 35);
|
NavBarRect.anchoredPosition = new Vector2(NavBarRect.anchoredPosition.x, 35);
|
||||||
NavBarRect.sizeDelta = new Vector2(1080f, 35f);
|
NavBarRect.sizeDelta = NAVBAR_DIMENSIONS;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,8 +42,6 @@ namespace UnityExplorer.UI.Widgets
|
|||||||
SetArgRows();
|
SetArgRows();
|
||||||
|
|
||||||
this.UIRoot.SetActive(true);
|
this.UIRoot.SetActive(true);
|
||||||
|
|
||||||
InspectorManager.OnInspectedTabsChanged += InspectorManager_OnInspectedTabsChanged;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnReturnToPool()
|
public void OnReturnToPool()
|
||||||
@ -63,14 +61,6 @@ namespace UnityExplorer.UI.Widgets
|
|||||||
genericHandlers = null;
|
genericHandlers = null;
|
||||||
|
|
||||||
this.Owner = null;
|
this.Owner = null;
|
||||||
|
|
||||||
InspectorManager.OnInspectedTabsChanged -= InspectorManager_OnInspectedTabsChanged;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void InspectorManager_OnInspectedTabsChanged()
|
|
||||||
{
|
|
||||||
foreach (var handler in this.paramHandlers)
|
|
||||||
handler.PopulateDropdown();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Type[] TryParseGenericArguments()
|
public Type[] TryParseGenericArguments()
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
using System;
|
using HarmonyLib;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Specialized;
|
using System.Collections.Specialized;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using UnityEngine;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
using UnityExplorer.CacheObject.IValues;
|
using UnityExplorer.CacheObject.IValues;
|
||||||
|
using UnityExplorer.UI.Panels;
|
||||||
using UnityExplorer.UI.Widgets.AutoComplete;
|
using UnityExplorer.UI.Widgets.AutoComplete;
|
||||||
using UniverseLib;
|
using UniverseLib;
|
||||||
using UniverseLib.UI;
|
using UniverseLib.UI;
|
||||||
@ -15,11 +18,15 @@ namespace UnityExplorer.UI.Widgets
|
|||||||
private ParameterInfo paramInfo;
|
private ParameterInfo paramInfo;
|
||||||
private Type paramType;
|
private Type paramType;
|
||||||
|
|
||||||
internal Dropdown dropdown;
|
|
||||||
private bool usingDropdown;
|
|
||||||
internal EnumCompleter enumCompleter;
|
internal EnumCompleter enumCompleter;
|
||||||
private ButtonRef enumHelperButton;
|
private ButtonRef enumHelperButton;
|
||||||
|
|
||||||
|
private bool usingBasicLabel;
|
||||||
|
private object basicValue;
|
||||||
|
private GameObject basicLabelHolder;
|
||||||
|
private Text basicLabel;
|
||||||
|
private ButtonRef pasteButton;
|
||||||
|
|
||||||
public void OnBorrowed(EvaluateWidget evaluator, ParameterInfo paramInfo)
|
public void OnBorrowed(EvaluateWidget evaluator, ParameterInfo paramInfo)
|
||||||
{
|
{
|
||||||
this.evaluator = evaluator;
|
this.evaluator = evaluator;
|
||||||
@ -34,8 +41,10 @@ namespace UnityExplorer.UI.Widgets
|
|||||||
|
|
||||||
if (ParseUtility.CanParse(paramType) || typeof(Type).IsAssignableFrom(paramType))
|
if (ParseUtility.CanParse(paramType) || typeof(Type).IsAssignableFrom(paramType))
|
||||||
{
|
{
|
||||||
|
usingBasicLabel = false;
|
||||||
|
|
||||||
this.inputField.Component.gameObject.SetActive(true);
|
this.inputField.Component.gameObject.SetActive(true);
|
||||||
this.dropdown.gameObject.SetActive(false);
|
this.basicLabelHolder.SetActive(false);
|
||||||
this.typeCompleter.Enabled = typeof(Type).IsAssignableFrom(paramType);
|
this.typeCompleter.Enabled = typeof(Type).IsAssignableFrom(paramType);
|
||||||
this.enumCompleter.Enabled = paramType.IsEnum;
|
this.enumCompleter.Enabled = paramType.IsEnum;
|
||||||
this.enumHelperButton.Component.gameObject.SetActive(paramType.IsEnum);
|
this.enumHelperButton.Component.gameObject.SetActive(paramType.IsEnum);
|
||||||
@ -63,16 +72,15 @@ namespace UnityExplorer.UI.Widgets
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// non-parsable, and not a Type
|
// non-parsable, and not a Type
|
||||||
|
usingBasicLabel = true;
|
||||||
|
|
||||||
this.inputField.Component.gameObject.SetActive(false);
|
this.inputField.Component.gameObject.SetActive(false);
|
||||||
this.dropdown.gameObject.SetActive(true);
|
this.basicLabelHolder.SetActive(true);
|
||||||
this.typeCompleter.Enabled = false;
|
this.typeCompleter.Enabled = false;
|
||||||
this.enumCompleter.Enabled = false;
|
this.enumCompleter.Enabled = false;
|
||||||
this.enumHelperButton.Component.gameObject.SetActive(false);
|
this.enumHelperButton.Component.gameObject.SetActive(false);
|
||||||
|
|
||||||
usingDropdown = true;
|
SetDisplayedValueFromPaste();
|
||||||
PopulateDropdown();
|
|
||||||
|
|
||||||
InspectorManager.OnInspectedTabsChanged += PopulateDropdown;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,109 +89,89 @@ namespace UnityExplorer.UI.Widgets
|
|||||||
this.evaluator = null;
|
this.evaluator = null;
|
||||||
this.paramInfo = null;
|
this.paramInfo = null;
|
||||||
|
|
||||||
usingDropdown = false;
|
|
||||||
|
|
||||||
this.enumCompleter.Enabled = false;
|
this.enumCompleter.Enabled = false;
|
||||||
this.typeCompleter.Enabled = false;
|
this.typeCompleter.Enabled = false;
|
||||||
|
|
||||||
this.inputField.Text = "";
|
this.inputField.Text = "";
|
||||||
|
|
||||||
InspectorManager.OnInspectedTabsChanged -= PopulateDropdown;
|
this.usingBasicLabel = false;
|
||||||
|
this.basicValue = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public object Evaluate()
|
public object Evaluate()
|
||||||
{
|
{
|
||||||
if (!usingDropdown)
|
if (usingBasicLabel)
|
||||||
|
return basicValue;
|
||||||
|
|
||||||
|
var input = this.inputField.Text;
|
||||||
|
|
||||||
|
if (typeof(Type).IsAssignableFrom(paramType))
|
||||||
|
return ReflectionUtility.GetTypeByName(input);
|
||||||
|
|
||||||
|
if (paramType == typeof(string))
|
||||||
|
return input;
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(input))
|
||||||
{
|
{
|
||||||
var input = this.inputField.Text;
|
if (paramInfo.IsOptional)
|
||||||
|
return paramInfo.DefaultValue;
|
||||||
if (typeof(Type).IsAssignableFrom(paramType))
|
|
||||||
return ReflectionUtility.GetTypeByName(input);
|
|
||||||
|
|
||||||
if (paramType == typeof(string))
|
|
||||||
return input;
|
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(input))
|
|
||||||
{
|
|
||||||
if (paramInfo.IsOptional)
|
|
||||||
return paramInfo.DefaultValue;
|
|
||||||
else
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ParseUtility.TryParse(input, paramType, out object parsed, out Exception ex))
|
|
||||||
{
|
|
||||||
ExplorerCore.LogWarning($"Cannot parse argument '{paramInfo.Name}' ({paramInfo.ParameterType.Name})" +
|
|
||||||
$"{(ex == null ? "" : $", {ex.GetType().Name}: {ex.Message}")}");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
return parsed;
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ParseUtility.TryParse(input, paramType, out object parsed, out Exception ex))
|
||||||
|
{
|
||||||
|
ExplorerCore.LogWarning($"Cannot parse argument '{paramInfo.Name}' ({paramInfo.ParameterType.Name})" +
|
||||||
|
$"{(ex == null ? "" : $", {ex.GetType().Name}: {ex.Message}")}");
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
return parsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnPasteClicked()
|
||||||
|
{
|
||||||
|
if (ClipboardPanel.TryPaste(this.paramType, out object paste))
|
||||||
{
|
{
|
||||||
if (dropdown.value == 0)
|
basicValue = paste;
|
||||||
return null;
|
SetDisplayedValueFromPaste();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetDisplayedValueFromPaste()
|
||||||
|
{
|
||||||
|
if (usingBasicLabel)
|
||||||
|
basicLabel.text = ToStringUtility.ToStringWithType(basicValue, paramType, false);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (typeof(Type).IsAssignableFrom(paramType))
|
||||||
|
inputField.Text = (basicValue as Type).FullDescription();
|
||||||
else
|
else
|
||||||
return dropdownUnderlyingValues[dropdown.value];
|
inputField.Text = ParseUtility.ToStringForInput(basicValue, paramType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private object[] dropdownUnderlyingValues;
|
|
||||||
|
|
||||||
internal void PopulateDropdown()
|
|
||||||
{
|
|
||||||
if (!usingDropdown)
|
|
||||||
return;
|
|
||||||
|
|
||||||
dropdown.options.Clear();
|
|
||||||
var underlyingValues = new List<object>();
|
|
||||||
|
|
||||||
dropdown.options.Add(new Dropdown.OptionData("null"));
|
|
||||||
underlyingValues.Add(null);
|
|
||||||
|
|
||||||
var argType = paramType;
|
|
||||||
|
|
||||||
int tabIndex = 0;
|
|
||||||
foreach (var tab in InspectorManager.Inspectors)
|
|
||||||
{
|
|
||||||
tabIndex++;
|
|
||||||
|
|
||||||
if (argType.IsAssignableFrom(tab.Target.GetActualType()))
|
|
||||||
{
|
|
||||||
dropdown.options.Add(new Dropdown.OptionData($"Tab {tabIndex}: {tab.Tab.TabText.text}"));
|
|
||||||
underlyingValues.Add(tab.Target);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dropdownUnderlyingValues = underlyingValues.ToArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void EnumHelper_OnClick()
|
|
||||||
{
|
|
||||||
enumCompleter.HelperButtonClicked();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void CreateSpecialContent()
|
public override void CreateSpecialContent()
|
||||||
{
|
{
|
||||||
|
enumCompleter = new(paramType, this.inputField)
|
||||||
|
{
|
||||||
|
Enabled = false
|
||||||
|
};
|
||||||
|
|
||||||
enumHelperButton = UIFactory.CreateButton(UIRoot, "EnumHelper", "▼");
|
enumHelperButton = UIFactory.CreateButton(UIRoot, "EnumHelper", "▼");
|
||||||
UIFactory.SetLayoutElement(enumHelperButton.Component.gameObject, minWidth: 25, minHeight: 25, flexibleWidth: 0, flexibleHeight: 0);
|
UIFactory.SetLayoutElement(enumHelperButton.Component.gameObject, minWidth: 25, minHeight: 25, flexibleWidth: 0, flexibleHeight: 0);
|
||||||
enumHelperButton.OnClick += EnumHelper_OnClick;
|
enumHelperButton.OnClick += enumCompleter.HelperButtonClicked;
|
||||||
|
|
||||||
var dropdownObj = UIFactory.CreateDropdown(UIRoot, out dropdown, "Select argument...", 14, (int val) =>
|
basicLabelHolder = UIFactory.CreateHorizontalGroup(UIRoot, "BasicLabelHolder", true, true, true, true, bgColor: new(0.1f, 0.1f, 0.1f));
|
||||||
{
|
UIFactory.SetLayoutElement(basicLabelHolder, minHeight: 25, flexibleHeight: 50, minWidth: 100, flexibleWidth: 1000);
|
||||||
//ArgDropdownChanged(val);
|
basicLabel = UIFactory.CreateLabel(basicLabelHolder, "BasicLabel", "null", TextAnchor.MiddleLeft);
|
||||||
});
|
basicLabel.gameObject.AddComponent<ContentSizeFitter>().verticalFit = ContentSizeFitter.FitMode.PreferredSize;
|
||||||
UIFactory.SetLayoutElement(dropdownObj, minHeight: 25, flexibleHeight: 50, minWidth: 100, flexibleWidth: 1000);
|
|
||||||
dropdownObj.AddComponent<ContentSizeFitter>().verticalFit = ContentSizeFitter.FitMode.PreferredSize;
|
|
||||||
|
|
||||||
enumCompleter = new EnumCompleter(paramType, this.inputField);
|
pasteButton = UIFactory.CreateButton(UIRoot, "PasteButton", "Paste", new Color(0.13f, 0.13f, 0.13f, 1f));
|
||||||
enumCompleter.Enabled = false;
|
UIFactory.SetLayoutElement(pasteButton.Component.gameObject, minHeight: 25, minWidth: 28, flexibleWidth: 0);
|
||||||
|
pasteButton.ButtonText.color = Color.green;
|
||||||
|
pasteButton.ButtonText.fontSize = 10;
|
||||||
|
pasteButton.OnClick += OnPasteClicked;
|
||||||
}
|
}
|
||||||
|
|
||||||
//private void ArgDropdownChanged(int value)
|
|
||||||
//{
|
|
||||||
// // not needed
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -172,13 +172,13 @@
|
|||||||
<Private>False</Private>
|
<Private>False</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UniverseLib.Mono">
|
<Reference Include="UniverseLib.Mono">
|
||||||
<HintPath>packages\UniverseLib.1.0.4\lib\net35\UniverseLib.Mono.dll</HintPath>
|
<HintPath>packages\UniverseLib.1.0.6\lib\net35\UniverseLib.Mono.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Il2Cpp refs -->
|
<!-- Il2Cpp refs -->
|
||||||
<ItemGroup Condition="'$(IsCpp)'=='true'">
|
<ItemGroup Condition="'$(IsCpp)'=='true'">
|
||||||
<Reference Include="UniverseLib.IL2CPP">
|
<Reference Include="UniverseLib.IL2CPP">
|
||||||
<HintPath>packages\UniverseLib.1.0.4\lib\net472\UniverseLib.IL2CPP.dll</HintPath>
|
<HintPath>packages\UniverseLib.1.0.6\lib\net472\UniverseLib.IL2CPP.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnhollowerBaseLib">
|
<Reference Include="UnhollowerBaseLib">
|
||||||
<HintPath>..\lib\Il2CppAssemblyUnhollower\UnhollowerBaseLib\bin\Release\net4.7.2\UnhollowerBaseLib.dll</HintPath>
|
<HintPath>..\lib\Il2CppAssemblyUnhollower\UnhollowerBaseLib\bin\Release\net4.7.2\UnhollowerBaseLib.dll</HintPath>
|
||||||
@ -222,7 +222,6 @@
|
|||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="UI\Clipboard\Clipboard.cs" />
|
|
||||||
<Compile Include="Hooks\HookCell.cs" />
|
<Compile Include="Hooks\HookCell.cs" />
|
||||||
<Compile Include="Hooks\HookInstance.cs" />
|
<Compile Include="Hooks\HookInstance.cs" />
|
||||||
<Compile Include="Hooks\HookManager.cs" />
|
<Compile Include="Hooks\HookManager.cs" />
|
||||||
@ -257,6 +256,8 @@
|
|||||||
<Compile Include="CacheObject\Views\CacheListEntryCell.cs" />
|
<Compile Include="CacheObject\Views\CacheListEntryCell.cs" />
|
||||||
<Compile Include="CacheObject\Views\CacheMemberCell.cs" />
|
<Compile Include="CacheObject\Views\CacheMemberCell.cs" />
|
||||||
<Compile Include="CacheObject\Views\CacheObjectCell.cs" />
|
<Compile Include="CacheObject\Views\CacheObjectCell.cs" />
|
||||||
|
<Compile Include="UI\Notification.cs" />
|
||||||
|
<Compile Include="UI\Panels\ClipboardPanel.cs" />
|
||||||
<Compile Include="UI\Widgets\AutoComplete\EnumCompleter.cs" />
|
<Compile Include="UI\Widgets\AutoComplete\EnumCompleter.cs" />
|
||||||
<Compile Include="UI\Widgets\EvaluateWidget\EvaluateWidget.cs" />
|
<Compile Include="UI\Widgets\EvaluateWidget\EvaluateWidget.cs" />
|
||||||
<Compile Include="Inspectors\GameObjectInspector.cs" />
|
<Compile Include="Inspectors\GameObjectInspector.cs" />
|
||||||
@ -276,7 +277,7 @@
|
|||||||
<Compile Include="Inspectors\ReflectionInspector.cs" />
|
<Compile Include="Inspectors\ReflectionInspector.cs" />
|
||||||
<Compile Include="CacheObject\IValues\InteractiveValueStruct.cs" />
|
<Compile Include="CacheObject\IValues\InteractiveValueStruct.cs" />
|
||||||
<Compile Include="UI\Panels\HookManagerPanel.cs" />
|
<Compile Include="UI\Panels\HookManagerPanel.cs" />
|
||||||
<Compile Include="UI\Panels\UiInspectorResultsPanel.cs" />
|
<Compile Include="UI\Panels\UIInspectorResultsPanel.cs" />
|
||||||
<Compile Include="UI\Panels\LogPanel.cs" />
|
<Compile Include="UI\Panels\LogPanel.cs" />
|
||||||
<Compile Include="UI\Panels\CSConsolePanel.cs" />
|
<Compile Include="UI\Panels\CSConsolePanel.cs" />
|
||||||
<Compile Include="UI\Panels\OptionsPanel.cs" />
|
<Compile Include="UI\Panels\OptionsPanel.cs" />
|
||||||
|
@ -4,5 +4,5 @@
|
|||||||
<package id="ILRepack.Lib.MSBuild.Task" version="2.0.18.2" targetFramework="net35" />
|
<package id="ILRepack.Lib.MSBuild.Task" version="2.0.18.2" targetFramework="net35" />
|
||||||
<package id="ini-parser" version="2.5.2" targetFramework="net35" />
|
<package id="ini-parser" version="2.5.2" targetFramework="net35" />
|
||||||
<package id="Mono.Cecil" version="0.10.4" targetFramework="net35" />
|
<package id="Mono.Cecil" version="0.10.4" targetFramework="net35" />
|
||||||
<package id="UniverseLib" version="1.0.4" targetFramework="net35" />
|
<package id="UniverseLib" version="1.0.6" targetFramework="net35" />
|
||||||
</packages>
|
</packages>
|
Loading…
x
Reference in New Issue
Block a user