using System; using System.Collections.Generic; using Unity.PlasticSCM.Editor.UnityInternals.UnityEditor; using UnityEditor; using UnityEditor.IMGUI.Controls; using UnityEngine; #if UNITY_6000_2_OR_NEWER using TreeView = UnityEditor.IMGUI.Controls.TreeView; using TreeViewItem = UnityEditor.IMGUI.Controls.TreeViewItem; using TreeViewState = UnityEditor.IMGUI.Controls.TreeViewState; #endif namespace Unity.PlasticSCM.Editor.UI.Tree { internal class PlasticTreeView : TreeView { internal PlasticTreeView(bool showCustomBackground = true) : base(new TreeViewState()) { mShowCustomBackground = showCustomBackground; rowHeight = UnityConstants.TREEVIEW_ROW_HEIGHT; treeViewRect = new Rect(0, 0, 0, rowHeight); showAlternatingRowBackgrounds = false; } public override IList GetRows() { return mRows; } public override void OnGUI(Rect rect) { base.OnGUI(rect); bool currentlyHasFocus = HasKeyboardFocus(); if (currentlyHasFocus && !mPreviouslyHadFocus) { OnFocusGained(); } mPreviouslyHadFocus = currentlyHasFocus; } internal Rect GetTreeViewRect() { return treeViewRect; } internal Rect GetRowRectByIndex(int rowIndex) { return GetRowRect(rowIndex); } internal bool HasKeyboardFocus() { if (PlasticApp.IsUnitTesting) return true; bool hasKeyFocus = InternalEditorGUIUtility.HasCurrentWindowKeyFocus(); return hasKeyFocus && treeViewControlID == GUIUtility.keyboardControl && GUI.enabled; } protected override TreeViewItem BuildRoot() { return new TreeViewItem(0, -1, string.Empty); } protected override void BeforeRowsGUI() { DrawTreeViewItem.InitializeStyles(); if (!mShowCustomBackground) return; int firstRowVisible; int lastRowVisible; GetFirstAndLastVisibleRows(out firstRowVisible, out lastRowVisible); GUI.DrawTexture(new Rect(0, firstRowVisible * rowHeight, GetRowRect(0).width + 1000, (lastRowVisible * rowHeight) + 1000), Images.GetTreeviewBackgroundTexture()); base.BeforeRowsGUI(); } protected virtual void OnFocusGained() { if (!HasSelection()) return; SelectionChanged(GetSelection()); } bool mPreviouslyHadFocus = false; readonly bool mShowCustomBackground; protected List mRows = new List(); } }