114 lines
2.7 KiB
C#
114 lines
2.7 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace Unity.PlasticSCM.Editor.UI.Tree
|
|
{
|
|
internal class TreeViewItemIds<T>
|
|
{
|
|
internal TreeViewItemIds()
|
|
{
|
|
mKeysById = new Dictionary<string, int>();
|
|
mItemsById = new Dictionary<int, T>();
|
|
}
|
|
|
|
internal bool TryGetItemIdByKey(string key, out int itemId)
|
|
{
|
|
return mKeysById.TryGetValue(key, out itemId);
|
|
}
|
|
|
|
internal bool TryGetItemById(int itemId, out T item)
|
|
{
|
|
return mItemsById.TryGetValue(itemId, out item);
|
|
}
|
|
|
|
internal int AddItemIdByKey(string key)
|
|
{
|
|
int itemId = GetNextItemId();
|
|
|
|
mKeysById.Add(key, itemId);
|
|
|
|
return itemId;
|
|
}
|
|
|
|
internal void AddItemById(int itemId, T item)
|
|
{
|
|
mItemsById[itemId] = item;
|
|
}
|
|
|
|
internal void ClearItems()
|
|
{
|
|
mItemsById.Clear();
|
|
}
|
|
|
|
int GetNextItemId()
|
|
{
|
|
return mKeysById.Count + 1;
|
|
}
|
|
|
|
readonly Dictionary<string, int> mKeysById;
|
|
readonly Dictionary<int, T> mItemsById;
|
|
}
|
|
|
|
internal class TreeViewItemIds<C, I>
|
|
{
|
|
internal void Clear()
|
|
{
|
|
mCacheByCategories.Clear();
|
|
mCacheByInfo.Clear();
|
|
}
|
|
|
|
internal List<int> GetCategoryIds()
|
|
{
|
|
return new List<int>(mCacheByCategories.Values);
|
|
}
|
|
|
|
internal List<KeyValuePair<C, int>> GetCategoryItems()
|
|
{
|
|
return mCacheByCategories.ToList();
|
|
}
|
|
|
|
internal List<KeyValuePair<I, int>> GetInfoItems()
|
|
{
|
|
return mCacheByInfo.ToList();
|
|
}
|
|
|
|
internal bool TryGetCategoryItemId(C category, out int itemId)
|
|
{
|
|
return mCacheByCategories.TryGetValue(category, out itemId);
|
|
}
|
|
|
|
internal bool TryGetInfoItemId(I info, out int itemId)
|
|
{
|
|
return mCacheByInfo.TryGetValue(info, out itemId);
|
|
}
|
|
|
|
internal int AddCategoryItem(C category)
|
|
{
|
|
int itemId = GetNextItemId();
|
|
|
|
mCacheByCategories.Add(category, itemId);
|
|
|
|
return itemId;
|
|
}
|
|
|
|
internal int AddInfoItem(I info)
|
|
{
|
|
int itemId = GetNextItemId();
|
|
|
|
mCacheByInfo.Add(info, itemId);
|
|
|
|
return itemId;
|
|
}
|
|
|
|
int GetNextItemId()
|
|
{
|
|
return mCacheByCategories.Count
|
|
+ mCacheByInfo.Count
|
|
+ 1;
|
|
}
|
|
|
|
readonly Dictionary<C, int> mCacheByCategories = new Dictionary<C, int>();
|
|
readonly Dictionary<I, int> mCacheByInfo = new Dictionary<I, int>();
|
|
}
|
|
}
|