A game about forced loneliness, made by TACStudios
1using System;
2using System.Collections.Generic;
3
4using UnityEditor.IMGUI.Controls;
5using UnityEngine;
6
7using PlasticGui;
8using Unity.PlasticSCM.Editor.UI.Tree;
9
10namespace Unity.PlasticSCM.Editor.Views.Merge.Developer
11{
12 internal enum MergeTreeColumn
13 {
14 Path,
15 Size,
16 Author,
17 Details,
18 Resolution,
19 DateModified,
20 Comment
21 }
22
23 [Serializable]
24 internal class MergeTreeHeaderState : MultiColumnHeaderState, ISerializationCallbackReceiver
25 {
26 internal static MergeTreeHeaderState GetDefault()
27 {
28 MergeTreeHeaderState headerState =
29 new MergeTreeHeaderState(BuildColumns());
30
31 headerState.visibleColumns = GetDefaultVisibleColumns();
32
33 return headerState;
34 }
35
36 internal static List<string> GetColumnNames()
37 {
38 List<string> result = new List<string>();
39 result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.PathColumn));
40 result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.SizeColumn));
41 result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.CreatedByColumn));
42 result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.DetailsColumn));
43 result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.ResolutionMethodColumn));
44 result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.DateModifiedColumn));
45 result.Add(PlasticLocalization.GetString(PlasticLocalization.Name.CommentColumn));
46 return result;
47 }
48
49 internal static string GetColumnName(MergeTreeColumn column)
50 {
51 switch (column)
52 {
53 case MergeTreeColumn.Path:
54 return PlasticLocalization.GetString(PlasticLocalization.Name.PathColumn);
55 case MergeTreeColumn.Size:
56 return PlasticLocalization.GetString(PlasticLocalization.Name.SizeColumn);
57 case MergeTreeColumn.Author:
58 return PlasticLocalization.GetString(PlasticLocalization.Name.AuthorColumn);
59 case MergeTreeColumn.Details:
60 return PlasticLocalization.GetString(PlasticLocalization.Name.DetailsColumn);
61 case MergeTreeColumn.Resolution:
62 return PlasticLocalization.GetString(PlasticLocalization.Name.ResolutionMethodColumn);
63 case MergeTreeColumn.DateModified:
64 return PlasticLocalization.GetString(PlasticLocalization.Name.DateModifiedColumn);
65 case MergeTreeColumn.Comment:
66 return PlasticLocalization.GetString(PlasticLocalization.Name.CommentColumn);
67 default:
68 return null;
69 }
70 }
71
72 void ISerializationCallbackReceiver.OnAfterDeserialize()
73 {
74 if (mHeaderTitles != null)
75 TreeHeaderColumns.SetTitles(columns, mHeaderTitles);
76
77 if (mColumnsAllowedToggleVisibility != null)
78 TreeHeaderColumns.SetVisibilities(columns, mColumnsAllowedToggleVisibility);
79 }
80
81 void ISerializationCallbackReceiver.OnBeforeSerialize()
82 {
83 }
84
85 static int[] GetDefaultVisibleColumns()
86 {
87 List<int> result = new List<int>();
88 result.Add((int)MergeTreeColumn.Path);
89 result.Add((int)MergeTreeColumn.Size);
90 result.Add((int)MergeTreeColumn.Author);
91 result.Add((int)MergeTreeColumn.Resolution);
92 result.Add((int)MergeTreeColumn.DateModified);
93 result.Add((int)MergeTreeColumn.Comment);
94 return result.ToArray();
95 }
96
97 static Column[] BuildColumns()
98 {
99 return new Column[]
100 {
101 new Column()
102 {
103 width = 450,
104 headerContent = new GUIContent(
105 GetColumnName(MergeTreeColumn.Path)),
106 minWidth = 200,
107 allowToggleVisibility = false,
108 sortingArrowAlignment = TextAlignment.Right
109 },
110 new Column()
111 {
112 width = 150,
113 headerContent = new GUIContent(
114 GetColumnName(MergeTreeColumn.Size)),
115 minWidth = 45,
116 sortingArrowAlignment = TextAlignment.Right
117 },
118 new Column()
119 {
120 width = 150,
121 headerContent = new GUIContent(
122 GetColumnName(MergeTreeColumn.Author)),
123 minWidth = 80,
124 sortingArrowAlignment = TextAlignment.Right
125 },
126 new Column()
127 {
128 width = 200,
129 headerContent = new GUIContent(
130 GetColumnName(MergeTreeColumn.Details)),
131 minWidth = 100,
132 sortingArrowAlignment = TextAlignment.Right
133 },
134 new Column()
135 {
136 width = 250,
137 headerContent = new GUIContent(
138 GetColumnName(MergeTreeColumn.Resolution)),
139 minWidth = 120,
140 sortingArrowAlignment = TextAlignment.Right
141 },
142 new Column()
143 {
144 width = 330,
145 headerContent = new GUIContent(
146 GetColumnName(MergeTreeColumn.DateModified)),
147 minWidth = 100,
148 sortingArrowAlignment = TextAlignment.Right
149 },
150 new Column()
151 {
152 width = 400,
153 headerContent = new GUIContent(
154 GetColumnName(MergeTreeColumn.Comment)),
155 minWidth = 100,
156 sortingArrowAlignment = TextAlignment.Right
157 }
158 };
159 }
160
161 MergeTreeHeaderState(Column[] columns)
162 : base(columns)
163 {
164 if (mHeaderTitles == null)
165 mHeaderTitles = TreeHeaderColumns.GetTitles(columns);
166
167 if (mColumnsAllowedToggleVisibility == null)
168 mColumnsAllowedToggleVisibility = TreeHeaderColumns.GetVisibilities(columns);
169 }
170
171 [SerializeField]
172 string[] mHeaderTitles;
173
174 [SerializeField]
175 bool[] mColumnsAllowedToggleVisibility;
176 }
177}