설명 없음
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TreeHeaderSettings.cs 5.2KB

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