using System.Collections.Generic; using UnityEditor.IMGUI.Controls; using UnityEngine; using Codice.Client.Common; using Codice.CM.Common; using Codice.CM.Common.Merge; using Codice.CM.Common.Mount; using PlasticGui.WorkspaceWindow.PendingChanges; using Unity.PlasticSCM.Editor.UI; using Unity.PlasticSCM.Editor.UI.Tree; #if UNITY_6000_2_OR_NEWER using TreeViewItem = UnityEditor.IMGUI.Controls.TreeViewItem; #endif namespace Unity.PlasticSCM.Editor.Views.PendingChanges.PendingMergeLinks { internal class MergeLinksListView : PlasticTreeView { internal float DesiredHeight { get { return rowHeight * (mMergeLinks.Count + 1); } } protected override IList BuildRows(TreeViewItem rootItem) { RegenerateRows(mMergeLinks, rootItem, mRows); return mRows; } protected override void RowGUI(RowGUIArgs args) { if (args.item is MergeLinkListViewItem) { DrawTreeViewItem.ForIndentedItemWithIcon( args.rowRect, rowHeight, args.item.depth, args.item.displayName, string.Empty, args.item.icon, args.selected, args.focused); return; } base.RowGUI(args); } internal void BuildModel( IDictionary> pendingMergeLinks) { mMergeLinks = BuildMountPendingMergeLink(pendingMergeLinks); } static void RegenerateRows( List mergeLinks, TreeViewItem rootItem, List rows) { ClearRows(rootItem, rows); if (mergeLinks.Count == 0) return; for (int i = 0; i < mergeLinks.Count; i++) { MergeLinkListViewItem mergeLinkListViewItem = new MergeLinkListViewItem(i + 1, mergeLinks[i]); rootItem.AddChild(mergeLinkListViewItem); rows.Add(mergeLinkListViewItem); } } static void ClearRows( TreeViewItem rootItem, List rows) { if (rootItem.hasChildren) rootItem.children.Clear(); rows.Clear(); } static List BuildMountPendingMergeLink( IDictionary> pendingMergeLinks) { List result = new List(); if (pendingMergeLinks == null) return result; foreach (KeyValuePair> mountLink in pendingMergeLinks) { result.AddRange(BuildMountPendingMergeLinks( mountLink.Key, mountLink.Value)); } return result; } static List BuildMountPendingMergeLinks( MountPoint mount, IList links) { List result = new List(); RepositoryInfo repInfo = RepositorySpecResolverProvider.Get(). GetRepInfo(mount.RepSpec); foreach (PendingMergeLink link in links) result.Add(new MountPendingMergeLink(repInfo.GetRepSpec(), link)); return result; } List mMergeLinks = new List(); } }