A game about forced loneliness, made by TACStudios
1using System;
2using System.Globalization;
3using System.Linq;
4
5using UnityEditor;
6using UnityEditor.IMGUI.Controls;
7
8using Codice.LogWrapper;
9
10namespace Unity.PlasticSCM.Editor.UI.Tree
11{
12 internal static class TreeHeaderSettings
13 {
14 internal static void Load(
15 MultiColumnHeaderState headerState,
16 string treeSettingsName,
17 int defaultSortColumnIdx,
18 bool defaultSortedAscending = true)
19 {
20 int[] visibleColumns;
21 float[] columnWidths;
22
23 GetColumnsSettings(treeSettingsName, headerState.columns.Length,
24 out visibleColumns, out columnWidths);
25
26 if (visibleColumns.Length > 0)
27 headerState.visibleColumns = visibleColumns;
28
29 if (headerState.columns.Length == columnWidths.Length)
30 TreeHeaderColumns.SetWidths(headerState.columns, columnWidths);
31
32 if (defaultSortColumnIdx == UnityConstants.UNSORT_COLUMN_ID)
33 return;
34
35 var sortColumnIdx = EditorPrefs.GetInt(
36 GetSettingKey(treeSettingsName, SORT_COLUMN_INDEX_KEY),
37 defaultSortColumnIdx);
38
39 if (sortColumnIdx < 0 || sortColumnIdx >= headerState.columns.Length)
40 sortColumnIdx = defaultSortColumnIdx;
41
42 var sortColumnAscending = EditorPrefs.GetBool(
43 GetSettingKey(treeSettingsName, SORT_ASCENDING_KEY),
44 defaultSortedAscending);
45
46 headerState.sortedColumnIndex = sortColumnIdx;
47 headerState.columns[sortColumnIdx].sortedAscending = sortColumnAscending;
48 }
49
50 internal static void Save(
51 MultiColumnHeaderState headerState,
52 string treeSettingsName)
53 {
54 int[] visibleColumns = headerState.visibleColumns;
55 float[] columnWidths = TreeHeaderColumns.GetWidths(headerState.columns);
56
57 EditorPrefs.SetString(
58 GetSettingKey(treeSettingsName, VISIBLE_COLUMNS_KEY),
59 string.Join(",", visibleColumns.Select(idx => idx.ToString()).ToArray()));
60
61 EditorPrefs.SetString(
62 GetSettingKey(treeSettingsName, COLUMNS_WIDTHS_KEY),
63 string.Join(",", columnWidths
64 .Select(w => w.ToString(CultureInfo.InvariantCulture))
65 .ToArray()));
66
67 int sortColumnIdx = headerState.sortedColumnIndex;
68
69 if (sortColumnIdx == UnityConstants.UNSORT_COLUMN_ID)
70 return;
71
72 bool sortColumnAscending = headerState.
73 columns[headerState.sortedColumnIndex].sortedAscending;
74
75 EditorPrefs.SetInt(
76 GetSettingKey(treeSettingsName, SORT_COLUMN_INDEX_KEY),
77 sortColumnIdx);
78 EditorPrefs.SetBool(
79 GetSettingKey(treeSettingsName, SORT_ASCENDING_KEY),
80 sortColumnAscending);
81 }
82
83 internal static void Clear(string treeSettingsName)
84 {
85 EditorPrefs.DeleteKey(
86 GetSettingKey(treeSettingsName, VISIBLE_COLUMNS_KEY));
87 EditorPrefs.DeleteKey(
88 GetSettingKey(treeSettingsName, COLUMNS_WIDTHS_KEY));
89 EditorPrefs.DeleteKey(
90 GetSettingKey(treeSettingsName, SORT_COLUMN_INDEX_KEY));
91 EditorPrefs.DeleteKey(
92 GetSettingKey(treeSettingsName, SORT_ASCENDING_KEY));
93 }
94
95 static void GetColumnsSettings(string treeSettingsName,
96 int headerColumnsLenght,
97 out int[] visibleColumns,
98 out float[] columnWidths)
99 {
100 try
101 {
102 visibleColumns = EditorPrefs.GetString(
103 GetSettingKey(treeSettingsName, VISIBLE_COLUMNS_KEY), string.Empty)
104 .Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
105 .Select(idx => int.Parse(idx))
106 .Where(idx => idx >= 0 && idx < headerColumnsLenght)
107 .ToArray();
108
109 columnWidths = EditorPrefs.GetString(
110 GetSettingKey(treeSettingsName, COLUMNS_WIDTHS_KEY), string.Empty)
111 .Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
112 .Select(w => float.Parse(w, CultureInfo.InvariantCulture))
113 .ToArray();
114 }
115 catch (Exception ex)
116 {
117 mLog.ErrorFormat("Unable to read TreeHeaderSettings: {0}",
118 ex.Message);
119 mLog.DebugFormat("Stack tracke:{0}{1}",
120 Environment.NewLine, ex.StackTrace);
121
122 visibleColumns = new int[0];
123 columnWidths = new float[0];
124 }
125 }
126
127 static string GetSettingKey(string treeSettingsName, string key)
128 {
129 return string.Format(treeSettingsName, PlayerSettings.productGUID, key);
130 }
131
132 static string VISIBLE_COLUMNS_KEY = "VisibleColumns";
133 static string COLUMNS_WIDTHS_KEY = "ColumnWidths";
134 static string SORT_COLUMN_INDEX_KEY = "SortColumnIdx";
135 static string SORT_ASCENDING_KEY = "SortAscending";
136
137 static readonly ILog mLog = PlasticApp.GetLogger("TreeHeaderSettings");
138 }
139}