139 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			139 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System; | |||
|  | using System.Globalization; | |||
|  | using System.Linq; | |||
|  | 
 | |||
|  | using UnityEditor; | |||
|  | using UnityEditor.IMGUI.Controls; | |||
|  | 
 | |||
|  | using Codice.LogWrapper; | |||
|  | 
 | |||
|  | namespace Unity.PlasticSCM.Editor.UI.Tree | |||
|  | { | |||
|  |     internal static class TreeHeaderSettings | |||
|  |     { | |||
|  |         internal static void Load( | |||
|  |             MultiColumnHeaderState headerState, | |||
|  |             string treeSettingsName, | |||
|  |             int defaultSortColumnIdx, | |||
|  |             bool defaultSortedAscending = true) | |||
|  |         { | |||
|  |             int[] visibleColumns; | |||
|  |             float[] columnWidths; | |||
|  | 
 | |||
|  |             GetColumnsSettings(treeSettingsName, headerState.columns.Length, | |||
|  |                 out visibleColumns, out columnWidths); | |||
|  | 
 | |||
|  |             if (visibleColumns.Length > 0) | |||
|  |                 headerState.visibleColumns = visibleColumns; | |||
|  | 
 | |||
|  |             if (headerState.columns.Length == columnWidths.Length) | |||
|  |                 TreeHeaderColumns.SetWidths(headerState.columns, columnWidths); | |||
|  | 
 | |||
|  |             if (defaultSortColumnIdx == UnityConstants.UNSORT_COLUMN_ID) | |||
|  |                 return; | |||
|  | 
 | |||
|  |             var sortColumnIdx = EditorPrefs.GetInt( | |||
|  |                 GetSettingKey(treeSettingsName, SORT_COLUMN_INDEX_KEY), | |||
|  |                 defaultSortColumnIdx); | |||
|  | 
 | |||
|  |             if (sortColumnIdx < 0 || sortColumnIdx >= headerState.columns.Length) | |||
|  |                 sortColumnIdx = defaultSortColumnIdx; | |||
|  | 
 | |||
|  |             var sortColumnAscending = EditorPrefs.GetBool( | |||
|  |                 GetSettingKey(treeSettingsName, SORT_ASCENDING_KEY), | |||
|  |                 defaultSortedAscending); | |||
|  | 
 | |||
|  |             headerState.sortedColumnIndex = sortColumnIdx; | |||
|  |             headerState.columns[sortColumnIdx].sortedAscending = sortColumnAscending; | |||
|  |         } | |||
|  | 
 | |||
|  |         internal static void Save( | |||
|  |             MultiColumnHeaderState headerState, | |||
|  |             string treeSettingsName) | |||
|  |         { | |||
|  |             int[] visibleColumns = headerState.visibleColumns; | |||
|  |             float[] columnWidths = TreeHeaderColumns.GetWidths(headerState.columns); | |||
|  | 
 | |||
|  |             EditorPrefs.SetString( | |||
|  |                 GetSettingKey(treeSettingsName, VISIBLE_COLUMNS_KEY), | |||
|  |                 string.Join(",", visibleColumns.Select(idx => idx.ToString()).ToArray())); | |||
|  | 
 | |||
|  |             EditorPrefs.SetString( | |||
|  |                 GetSettingKey(treeSettingsName, COLUMNS_WIDTHS_KEY), | |||
|  |                 string.Join(",", columnWidths | |||
|  |                     .Select(w => w.ToString(CultureInfo.InvariantCulture)) | |||
|  |                     .ToArray())); | |||
|  | 
 | |||
|  |             int sortColumnIdx = headerState.sortedColumnIndex; | |||
|  | 
 | |||
|  |             if (sortColumnIdx == UnityConstants.UNSORT_COLUMN_ID) | |||
|  |                 return; | |||
|  | 
 | |||
|  |             bool sortColumnAscending = headerState. | |||
|  |                 columns[headerState.sortedColumnIndex].sortedAscending; | |||
|  | 
 | |||
|  |             EditorPrefs.SetInt( | |||
|  |                 GetSettingKey(treeSettingsName, SORT_COLUMN_INDEX_KEY), | |||
|  |                 sortColumnIdx); | |||
|  |             EditorPrefs.SetBool( | |||
|  |                 GetSettingKey(treeSettingsName, SORT_ASCENDING_KEY), | |||
|  |                 sortColumnAscending); | |||
|  |         } | |||
|  | 
 | |||
|  |         internal static void Clear(string treeSettingsName) | |||
|  |         { | |||
|  |             EditorPrefs.DeleteKey( | |||
|  |                 GetSettingKey(treeSettingsName, VISIBLE_COLUMNS_KEY)); | |||
|  |             EditorPrefs.DeleteKey( | |||
|  |                 GetSettingKey(treeSettingsName, COLUMNS_WIDTHS_KEY)); | |||
|  |             EditorPrefs.DeleteKey( | |||
|  |                 GetSettingKey(treeSettingsName, SORT_COLUMN_INDEX_KEY)); | |||
|  |             EditorPrefs.DeleteKey( | |||
|  |                 GetSettingKey(treeSettingsName, SORT_ASCENDING_KEY)); | |||
|  |         } | |||
|  | 
 | |||
|  |         static void GetColumnsSettings(string treeSettingsName, | |||
|  |             int headerColumnsLenght, | |||
|  |             out int[] visibleColumns, | |||
|  |             out float[] columnWidths) | |||
|  |         { | |||
|  |             try | |||
|  |             { | |||
|  |                 visibleColumns = EditorPrefs.GetString( | |||
|  |                     GetSettingKey(treeSettingsName, VISIBLE_COLUMNS_KEY), string.Empty) | |||
|  |                     .Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries) | |||
|  |                     .Select(idx => int.Parse(idx)) | |||
|  |                     .Where(idx => idx >= 0 && idx < headerColumnsLenght) | |||
|  |                     .ToArray(); | |||
|  | 
 | |||
|  |                 columnWidths = EditorPrefs.GetString( | |||
|  |                     GetSettingKey(treeSettingsName, COLUMNS_WIDTHS_KEY), string.Empty) | |||
|  |                     .Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries) | |||
|  |                     .Select(w => float.Parse(w, CultureInfo.InvariantCulture)) | |||
|  |                     .ToArray(); | |||
|  |             } | |||
|  |             catch (Exception ex) | |||
|  |             { | |||
|  |                 mLog.ErrorFormat("Unable to read TreeHeaderSettings: {0}", | |||
|  |                     ex.Message); | |||
|  |                 mLog.DebugFormat("Stack tracke:{0}{1}", | |||
|  |                     Environment.NewLine, ex.StackTrace); | |||
|  | 
 | |||
|  |                 visibleColumns = new int[0]; | |||
|  |                 columnWidths = new float[0]; | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         static string GetSettingKey(string treeSettingsName, string key) | |||
|  |         { | |||
|  |             return string.Format(treeSettingsName, PlayerSettings.productGUID, key); | |||
|  |         } | |||
|  | 
 | |||
|  |         static string VISIBLE_COLUMNS_KEY = "VisibleColumns"; | |||
|  |         static string COLUMNS_WIDTHS_KEY = "ColumnWidths"; | |||
|  |         static string SORT_COLUMN_INDEX_KEY = "SortColumnIdx"; | |||
|  |         static string SORT_ASCENDING_KEY = "SortAscending"; | |||
|  | 
 | |||
|  |         static readonly ILog mLog = PlasticApp.GetLogger("TreeHeaderSettings"); | |||
|  |     } | |||
|  | } |