A game about forced loneliness, made by TACStudios
at master 5.3 kB view raw
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}