A game about forced loneliness, made by TACStudios
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}