using System; using System.Collections.Generic; using UnityEditor.IMGUI.Controls; using UnityEngine; namespace UnityEditor.AddressableAssets.GUI { class HostingServicesProfileVarsTreeView : TreeView { class ProfileVarItem : TreeViewItem { public string Key { get; private set; } public string Value { get; set; } public ProfileVarItem(string key, string value) { Key = key; Value = value; } } protected override void ContextClickedItem(int id) { var item = FindItem(id, rootItem) as ProfileVarItem; if (item == null) return; var menu = new GenericMenu(); menu.AddItem(new GUIContent("Copy Key"), false, () => EditorGUIUtility.systemCopyBuffer = string.Format("[{0}]", item.Key)); menu.AddItem(new GUIContent("Copy Value"), false, () => EditorGUIUtility.systemCopyBuffer = item.Value); menu.ShowAsContext(); } public static MultiColumnHeader CreateHeader() { var columns = new[] { new MultiColumnHeaderState.Column { headerContent = new GUIContent("Variable Name"), headerTextAlignment = TextAlignment.Left, sortedAscending = true, sortingArrowAlignment = TextAlignment.Right, width = 180, minWidth = 60, autoResize = true }, new MultiColumnHeaderState.Column { headerContent = new GUIContent("Value"), headerTextAlignment = TextAlignment.Left, sortedAscending = true, sortingArrowAlignment = TextAlignment.Right, width = 180, minWidth = 60, autoResize = true } }; var header = new MultiColumnHeader(new MultiColumnHeaderState(columns)) { height = 20f }; return header; } readonly Dictionary m_ItemMap; internal int Count { get { return m_ItemMap.Count; } } public float RowHeight { get { return rowHeight; } } public HostingServicesProfileVarsTreeView(TreeViewState state, MultiColumnHeader multiColumnHeader) : base(state, multiColumnHeader) { showBorder = true; showAlternatingRowBackgrounds = true; m_ItemMap = new Dictionary(); Reload(); } public void ClearItems() { m_ItemMap.Clear(); } public void AddOrUpdateItem(string key, string value) { if (m_ItemMap.ContainsKey(key)) { if (m_ItemMap[key].Value == value) return; m_ItemMap[key].Value = value; Reload(); return; } var item = new ProfileVarItem(key, value) { id = m_ItemMap.Count }; m_ItemMap.Add(key, item); Reload(); } protected override TreeViewItem BuildRoot() { var root = new TreeViewItem(-1, -1) { children = new List() }; foreach (var item in m_ItemMap.Values) root.AddChild(item); return root; } protected override void RowGUI(RowGUIArgs args) { for (var i = 0; i < args.GetNumVisibleColumns(); ++i) { CellGui(ref args, i); } } void CellGui(ref RowGUIArgs args, int i) { var cellRect = args.GetCellRect(i); CenterRectUsingSingleLineHeight(ref cellRect); var item = args.item as ProfileVarItem; if (item == null) return; switch (args.GetColumn(i)) { case 0: EditorGUI.LabelField(cellRect, item.Key); break; case 1: EditorGUI.LabelField(cellRect, item.Value); break; } } protected override bool CanMultiSelect(TreeViewItem item) { return false; } } }