Net-Game/Library/PackageCache/com.unity.collab-proxy@50ac96531b63/Editor/Views/Locks/LocksSelector.cs
2025-03-28 08:33:16 -04:00

100 lines
2.4 KiB
C#

using System.Collections.Generic;
using Codice.CM.Common;
using Unity.PlasticSCM.Editor.UI.Tree;
using UnityEditor.IMGUI.Controls;
namespace Unity.PlasticSCM.Editor.Views.Locks
{
internal sealed class LocksSelector
{
internal LocksSelector(TreeView treeView, ListViewItemIds<LockInfo> listViewItemIds)
{
mTreeView = treeView;
mListViewItemIds = listViewItemIds;
}
internal void SaveSelectedLocks()
{
mSelectedLocks = GetSelectedLocks();
}
internal List<LockInfo> GetSelectedLocks()
{
var result = new List<LockInfo>();
var selectedIds = mTreeView.GetSelection();
if (selectedIds.Count == 0)
{
return result;
}
foreach (var item in mListViewItemIds.GetInfoItems())
{
if (selectedIds.Contains(item.Value))
{
result.Add(item.Key);
}
}
return result;
}
internal void RestoreSelectedLocks()
{
if (mSelectedLocks == null || mSelectedLocks.Count == 0)
{
TableViewOperations.SelectFirstRow(mTreeView);
return;
}
SelectLockItems(mSelectedLocks);
if (!mTreeView.HasSelection())
{
TableViewOperations.SelectFirstRow(mTreeView);
}
}
void SelectLockItems(List<LockInfo> locksToSelect)
{
var idsToSelect = new List<int>();
foreach (var lockInfo in locksToSelect)
{
var lockInfoId = GetTreeIdForItem(lockInfo);
if (lockInfoId == -1)
{
continue;
}
idsToSelect.Add(lockInfoId);
}
TableViewOperations.SetSelectionAndScroll(mTreeView, idsToSelect);
}
int GetTreeIdForItem(LockInfo lockInfo)
{
foreach (var item in mListViewItemIds.GetInfoItems())
{
if (!lockInfo.ItemGuid.Equals(item.Key.ItemGuid))
{
continue;
}
return item.Value;
}
return -1;
}
List<LockInfo> mSelectedLocks;
readonly TreeView mTreeView;
readonly ListViewItemIds<LockInfo> mListViewItemIds;
}
}