A game about forced loneliness, made by TACStudios
at master 213 lines 8.4 kB view raw
1using System; 2using System.Collections.Generic; 3using System.Linq; 4 5using UnityEditor.IMGUI.Controls; 6using UnityEngine; 7 8using PlasticGui; 9using Unity.PlasticSCM.Editor.UI.Tree; 10 11namespace Unity.PlasticSCM.Editor.Views.PendingChanges 12{ 13 internal enum PendingChangesTreeColumn 14 { 15 Item, 16 Status, 17 Size, 18 Extension, 19 Type, 20 DateModififed, 21 Repository 22 } 23 24 [Serializable] 25 internal class PendingChangesTreeHeaderState : MultiColumnHeaderState, ISerializationCallbackReceiver 26 { 27 internal static PendingChangesTreeHeaderState GetDefault(bool isGluonMode) 28 { 29 PendingChangesTreeHeaderState headerState = 30 new PendingChangesTreeHeaderState(BuildColumns()); 31 32 headerState.visibleColumns = GetDefaultVisibleColumns(); 33 34 SetMode(headerState, isGluonMode); 35 36 return headerState; 37 } 38 39 internal static List<string> GetColumnNames() 40 { 41 List<string> result = new List<string>(); 42 result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.ItemColumn)); 43 result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.StatusColumn)); 44 result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.SizeColumn)); 45 result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.ExtensionColumn)); 46 result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.TypeColumn)); 47 result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.DateModifiedColumn)); 48 result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.RepositoryColumn)); 49 return result; 50 } 51 52 internal static string GetColumnName(PendingChangesTreeColumn column) 53 { 54 switch (column) 55 { 56 case PendingChangesTreeColumn.Item: 57 return PlasticLocalization.GetString(PlasticLocalization.Name.ItemColumn); 58 case PendingChangesTreeColumn.Status: 59 return PlasticLocalization.GetString(PlasticLocalization.Name.StatusColumn); 60 case PendingChangesTreeColumn.Size: 61 return PlasticLocalization.GetString(PlasticLocalization.Name.SizeColumn); 62 case PendingChangesTreeColumn.Extension: 63 return PlasticLocalization.GetString(PlasticLocalization.Name.ExtensionColumn); 64 case PendingChangesTreeColumn.Type: 65 return PlasticLocalization.GetString(PlasticLocalization.Name.TypeColumn); 66 case PendingChangesTreeColumn.DateModififed: 67 return PlasticLocalization.GetString(PlasticLocalization.Name.DateModifiedColumn); 68 case PendingChangesTreeColumn.Repository: 69 return PlasticLocalization.GetString(PlasticLocalization.Name.RepositoryColumn); 70 default: 71 return null; 72 } 73 } 74 75 internal static void SetMode(MultiColumnHeaderState state, bool isGluonMode) 76 { 77 List<int> result = state.visibleColumns.ToList(); 78 79 if (!result.Contains((int)PendingChangesTreeColumn.Item)) 80 result.Add((int)PendingChangesTreeColumn.Item); 81 82 if (isGluonMode) 83 result.Remove((int)PendingChangesTreeColumn.Type); 84 85 state.columns[(int)PendingChangesTreeColumn.Item].allowToggleVisibility = false; 86 state.columns[(int)PendingChangesTreeColumn.Type].allowToggleVisibility = !isGluonMode; 87 88 state.visibleColumns = result.ToArray(); 89 } 90 91 internal void UpdateItemColumnHeader(PendingChangesTreeView treeView) 92 { 93 Column itemColumn = columns[(int)PendingChangesTreeColumn.Item]; 94 string columnName = GetColumnName(PendingChangesTreeColumn.Item); 95 int totalItemCount = treeView.GetTotalItemCount(); 96 97 if (totalItemCount > 0) 98 { 99 string columnStatus = string.Format( 100 PlasticLocalization.GetString(PlasticLocalization.Name.ItemsSelected), 101 treeView.GetCheckedItemCount(), 102 totalItemCount); 103 104 itemColumn.headerContent.text = string.Format("{0} {1}", columnName, columnStatus); 105 } 106 else 107 { 108 itemColumn.headerContent.text = columnName; 109 } 110 } 111 112 void ISerializationCallbackReceiver.OnAfterDeserialize() 113 { 114 if (mHeaderTitles != null) 115 TreeHeaderColumns.SetTitles(columns, mHeaderTitles); 116 117 if (mColumnsAllowedToggleVisibility != null) 118 TreeHeaderColumns.SetVisibilities(columns, mColumnsAllowedToggleVisibility); 119 } 120 121 void ISerializationCallbackReceiver.OnBeforeSerialize() 122 { 123 } 124 125 static int[] GetDefaultVisibleColumns() 126 { 127 List<int> result = new List<int>(); 128 result.Add((int)PendingChangesTreeColumn.Item); 129 result.Add((int)PendingChangesTreeColumn.Status); 130 result.Add((int)PendingChangesTreeColumn.DateModififed); 131 return result.ToArray(); 132 } 133 134 static Column[] BuildColumns() 135 { 136 return new Column[] 137 { 138 new Column() 139 { 140 width = 800, 141 headerContent = new GUIContent( 142 GetColumnName(PendingChangesTreeColumn.Item)), 143 minWidth = 200, 144 sortingArrowAlignment = TextAlignment.Right 145 }, 146 new Column() 147 { 148 width = 200, 149 headerContent = new GUIContent( 150 GetColumnName(PendingChangesTreeColumn.Status)), 151 minWidth = 80, 152 sortingArrowAlignment = TextAlignment.Right 153 }, 154 new Column() 155 { 156 width = 80, 157 headerContent = new GUIContent( 158 GetColumnName(PendingChangesTreeColumn.Size)), 159 minWidth = 45, 160 sortingArrowAlignment = TextAlignment.Right 161 }, 162 new Column() 163 { 164 width = 70, 165 headerContent = new GUIContent( 166 GetColumnName(PendingChangesTreeColumn.Extension)), 167 minWidth = 50, 168 sortingArrowAlignment = TextAlignment.Right 169 }, 170 new Column() 171 { 172 width = 60, 173 headerContent = new GUIContent( 174 GetColumnName(PendingChangesTreeColumn.Type)), 175 minWidth = 45, 176 sortingArrowAlignment = TextAlignment.Right 177 }, 178 new Column() 179 { 180 width = 330, 181 headerContent = new GUIContent( 182 GetColumnName(PendingChangesTreeColumn.DateModififed)), 183 minWidth = 100, 184 sortingArrowAlignment = TextAlignment.Right 185 }, 186 new Column() 187 { 188 width = 210, 189 headerContent = new GUIContent( 190 GetColumnName(PendingChangesTreeColumn.Repository)), 191 minWidth = 90, 192 sortingArrowAlignment = TextAlignment.Right 193 } 194 }; 195 } 196 197 PendingChangesTreeHeaderState(Column[] columns) 198 : base(columns) 199 { 200 if (mHeaderTitles == null) 201 mHeaderTitles = TreeHeaderColumns.GetTitles(columns); 202 203 if (mColumnsAllowedToggleVisibility == null) 204 mColumnsAllowedToggleVisibility = TreeHeaderColumns.GetVisibilities(columns); 205 } 206 207 [SerializeField] 208 string[] mHeaderTitles; 209 210 [SerializeField] 211 bool[] mColumnsAllowedToggleVisibility; 212 } 213}