TreeHeaderSettings.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using System;
  2. using System.Linq;
  3. using UnityEditor;
  4. using UnityEditor.IMGUI.Controls;
  5. namespace Unity.PlasticSCM.Editor.UI.Tree
  6. {
  7. internal static class TreeHeaderSettings
  8. {
  9. internal static void Load(
  10. MultiColumnHeaderState headerState,
  11. string treeSettingsName,
  12. int defaultSortColumnIdx,
  13. bool defaultSortedAscending = true)
  14. {
  15. var visibleColumns = EditorPrefs.GetString(
  16. GetSettingKey(treeSettingsName, VISIBLE_COLUMNS_KEY), string.Empty)
  17. .Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
  18. .Select(idx => int.Parse(idx))
  19. .Where(idx => idx >= 0 && idx < headerState.columns.Length)
  20. .ToArray();
  21. var columnWidths = EditorPrefs.GetString(
  22. GetSettingKey(treeSettingsName, COLUMNS_WIDTHS_KEY), string.Empty)
  23. .Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
  24. .Select(w => float.Parse(w))
  25. .ToArray();
  26. if (visibleColumns.Length > 0)
  27. headerState.visibleColumns = visibleColumns;
  28. if (headerState.columns.Length == columnWidths.Length)
  29. TreeHeaderColumns.SetWidths(headerState.columns, columnWidths);
  30. if (defaultSortColumnIdx == UnityConstants.UNSORT_COLUMN_ID)
  31. return;
  32. var sortColumnIdx = EditorPrefs.GetInt(
  33. GetSettingKey(treeSettingsName, SORT_COLUMN_INDEX_KEY),
  34. defaultSortColumnIdx);
  35. if (sortColumnIdx < 0 || sortColumnIdx >= headerState.columns.Length)
  36. sortColumnIdx = defaultSortColumnIdx;
  37. var sortColumnAscending = EditorPrefs.GetBool(
  38. GetSettingKey(treeSettingsName, SORT_ASCENDING_KEY),
  39. defaultSortedAscending);
  40. headerState.sortedColumnIndex = sortColumnIdx;
  41. headerState.columns[sortColumnIdx].sortedAscending = sortColumnAscending;
  42. }
  43. internal static void Save(
  44. MultiColumnHeaderState headerState,
  45. string treeSettingsName)
  46. {
  47. int[] visibleColumns = headerState.visibleColumns;
  48. float[] columnWidths = TreeHeaderColumns.GetWidths(headerState.columns);
  49. EditorPrefs.SetString(
  50. GetSettingKey(treeSettingsName, VISIBLE_COLUMNS_KEY),
  51. string.Join(",", visibleColumns.Select(idx => idx.ToString()).ToArray()));
  52. EditorPrefs.SetString(
  53. GetSettingKey(treeSettingsName, COLUMNS_WIDTHS_KEY),
  54. string.Join(",", columnWidths.Select(w => w.ToString()).ToArray()));
  55. int sortColumnIdx = headerState.sortedColumnIndex;
  56. if (sortColumnIdx == UnityConstants.UNSORT_COLUMN_ID)
  57. return;
  58. bool sortColumnAscending = headerState.
  59. columns[headerState.sortedColumnIndex].sortedAscending;
  60. EditorPrefs.SetInt(
  61. GetSettingKey(treeSettingsName, SORT_COLUMN_INDEX_KEY),
  62. sortColumnIdx);
  63. EditorPrefs.SetBool(
  64. GetSettingKey(treeSettingsName, SORT_ASCENDING_KEY),
  65. sortColumnAscending);
  66. }
  67. internal static void Clear(string treeSettingsName)
  68. {
  69. EditorPrefs.DeleteKey(
  70. GetSettingKey(treeSettingsName, VISIBLE_COLUMNS_KEY));
  71. EditorPrefs.DeleteKey(
  72. GetSettingKey(treeSettingsName, COLUMNS_WIDTHS_KEY));
  73. EditorPrefs.DeleteKey(
  74. GetSettingKey(treeSettingsName, SORT_COLUMN_INDEX_KEY));
  75. EditorPrefs.DeleteKey(
  76. GetSettingKey(treeSettingsName, SORT_ASCENDING_KEY));
  77. }
  78. static string GetSettingKey(string treeSettingsName, string key)
  79. {
  80. return string.Format(treeSettingsName, PlayerSettings.productGUID, key);
  81. }
  82. static string VISIBLE_COLUMNS_KEY = "VisibleColumns";
  83. static string COLUMNS_WIDTHS_KEY = "ColumnWidths";
  84. static string SORT_COLUMN_INDEX_KEY = "SortColumnIdx";
  85. static string SORT_ASCENDING_KEY = "SortAscending";
  86. }
  87. }