mirror of
https://github.com/sinai-dev/UnityExplorer.git
synced 2025-06-16 14:17:51 +08:00
98 lines
3.1 KiB
C#
98 lines
3.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using UnityExplorer.UI.Inspectors.CacheObject.Views;
|
|
using UnityExplorer.UI.Inspectors.IValues;
|
|
using UnityExplorer.UI.Utility;
|
|
|
|
namespace UnityExplorer.UI.Inspectors.CacheObject
|
|
{
|
|
public class CacheKeyValuePair : CacheObjectBase
|
|
{
|
|
//public InteractiveList CurrentList { get; set; }
|
|
|
|
public int DictIndex;
|
|
public object DictKey;
|
|
|
|
public bool KeyInputWanted;
|
|
public bool InspectWanted;
|
|
public string KeyLabelText;
|
|
public string KeyInputText;
|
|
public string KeyInputTypeText;
|
|
|
|
public float DesiredKeyWidth;
|
|
public float DesiredValueWidth;
|
|
|
|
public override bool ShouldAutoEvaluate => true;
|
|
public override bool HasArguments => false;
|
|
public override bool CanWrite => false; // TODO Parent.CanWrite;
|
|
|
|
public void SetDictOwner(InteractiveDictionary dict, int index)
|
|
{
|
|
this.Owner = dict;
|
|
this.DictIndex = index;
|
|
}
|
|
|
|
public void SetKey(object key)
|
|
{
|
|
this.DictKey = key;
|
|
var type = key.GetActualType();
|
|
if (type == typeof(string) || (type.IsPrimitive && !(type == typeof(bool))) || type == typeof(decimal))
|
|
{
|
|
KeyInputWanted = true;
|
|
KeyInputText = key.ToString();
|
|
KeyInputTypeText = SignatureHighlighter.ParseFullType(type, false);
|
|
}
|
|
else
|
|
{
|
|
KeyInputWanted = false;
|
|
InspectWanted = type != typeof(bool) && !type.IsEnum;
|
|
KeyLabelText = ToStringUtility.ToStringWithType(key, type, true);
|
|
}
|
|
}
|
|
|
|
public override void SetCell(CacheObjectCell cell)
|
|
{
|
|
base.SetCell(cell);
|
|
|
|
var kvpCell = cell as CacheKeyValuePairCell;
|
|
|
|
kvpCell.NameLabel.text = $"{DictIndex}:";
|
|
kvpCell.Image.color = DictIndex % 2 == 0 ? CacheListEntryCell.EvenColor : CacheListEntryCell.OddColor;
|
|
|
|
if (KeyInputWanted)
|
|
{
|
|
kvpCell.KeyInputField.gameObject.SetActive(true);
|
|
kvpCell.KeyInputTypeLabel.gameObject.SetActive(true);
|
|
kvpCell.KeyLabel.gameObject.SetActive(false);
|
|
kvpCell.KeyInspectButton.Button.gameObject.SetActive(false);
|
|
|
|
kvpCell.KeyInputField.text = KeyInputText;
|
|
kvpCell.KeyInputTypeLabel.text = KeyInputTypeText;
|
|
}
|
|
else
|
|
{
|
|
kvpCell.KeyInputField.gameObject.SetActive(false);
|
|
kvpCell.KeyInputTypeLabel.gameObject.SetActive(false);
|
|
kvpCell.KeyLabel.gameObject.SetActive(true);
|
|
kvpCell.KeyInspectButton.Button.gameObject.SetActive(InspectWanted);
|
|
|
|
kvpCell.KeyLabel.text = KeyLabelText;
|
|
}
|
|
}
|
|
|
|
public override void SetUserValue(object value)
|
|
{
|
|
throw new NotImplementedException("TODO");
|
|
}
|
|
|
|
|
|
protected override bool SetCellEvaluateState(CacheObjectCell cell)
|
|
{
|
|
// not needed
|
|
return false;
|
|
}
|
|
}
|
|
}
|