Keine Beschreibung
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

LocksTab.cs 7.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using UnityEditor;
  4. using UnityEditor.IMGUI.Controls;
  5. using UnityEngine;
  6. using Codice.CM.Common;
  7. using PlasticGui;
  8. using PlasticGui.Help.Actions;
  9. using PlasticGui.WorkspaceWindow.Locks;
  10. using Unity.PlasticSCM.Editor.AssetUtils;
  11. using Unity.PlasticSCM.Editor.UI;
  12. using Unity.PlasticSCM.Editor.UI.Progress;
  13. namespace Unity.PlasticSCM.Editor.Views.Locks
  14. {
  15. internal sealed class LocksTab :
  16. IRefreshableView,
  17. ILockMenuOperations
  18. {
  19. internal LocksListView Table { get { return mLocksListView; } }
  20. internal ILockMenuOperations Operations { get { return this; } }
  21. internal LocksTab(
  22. RepositorySpec repSpec,
  23. IRefreshView refreshView,
  24. EditorWindow parentWindow)
  25. {
  26. mRepSpec = repSpec;
  27. mRefreshView = refreshView;
  28. mParentWindow = parentWindow;
  29. mProgressControls = new ProgressControlsForViews();
  30. mFillLocksTable = new FillLocksTable();
  31. BuildComponents(mRepSpec);
  32. ((IRefreshableView) this).Refresh();
  33. }
  34. internal void DrawSearchFieldForLocksTab()
  35. {
  36. DrawSearchField.For(
  37. mSearchField,
  38. mLocksListView,
  39. UnityConstants.SEARCH_FIELD_WIDTH);
  40. }
  41. internal void OnDisable()
  42. {
  43. mSearchField.downOrUpArrowKeyPressed -=
  44. SearchField_OnDownOrUpArrowKeyPressed;
  45. mLocksListView.OnDisable();
  46. }
  47. internal void Update()
  48. {
  49. mProgressControls.UpdateProgress(mParentWindow);
  50. }
  51. internal void OnGUI()
  52. {
  53. DoActionsToolbar(
  54. mRepSpec.Server,
  55. mProgressControls,
  56. this,
  57. mIsReleaseLocksButtonEnabled,
  58. mIsRemoveLocksButtonEnabled);
  59. DoLocksArea(
  60. mLocksListView,
  61. mProgressControls.IsOperationRunning());
  62. }
  63. void IRefreshableView.Refresh()
  64. {
  65. mFillLocksTable.FillTable(
  66. mRepSpec,
  67. null,
  68. mLocksListView,
  69. mLocksListView,
  70. mProgressControls);
  71. }
  72. List<LockInfo.LockStatus> ILockMenuOperations.GetSelectedLocksStatus()
  73. {
  74. return mLocksListView.GetSelectedLocks().
  75. Select(lockInfo => lockInfo.Status).ToList();
  76. }
  77. void ILockMenuOperations.ReleaseLocks()
  78. {
  79. LockOperations.ReleaseLocks(
  80. mRepSpec,
  81. mLocksListView.GetSelectedLocks(),
  82. this,
  83. mRefreshView,
  84. mProgressControls,
  85. RefreshAsset.VersionControlCache);
  86. }
  87. void ILockMenuOperations.RemoveLocks()
  88. {
  89. LockOperations.RemoveLocks(
  90. mRepSpec,
  91. mLocksListView.GetSelectedLocks(),
  92. this,
  93. mRefreshView,
  94. mProgressControls,
  95. RefreshAsset.VersionControlCache);
  96. }
  97. void SearchField_OnDownOrUpArrowKeyPressed()
  98. {
  99. mLocksListView.SetFocusAndEnsureSelectedItem();
  100. }
  101. void OnSelectionChanged()
  102. {
  103. LockMenuOperations operations = LockMenuUpdater.GetAvailableMenuOperations(
  104. ((ILockMenuOperations)this).GetSelectedLocksStatus());
  105. mIsReleaseLocksButtonEnabled = operations.HasFlag(
  106. LockMenuOperations.Release);
  107. mIsRemoveLocksButtonEnabled = operations.HasFlag(
  108. LockMenuOperations.Remove);
  109. }
  110. static void DoActionsToolbar(
  111. string server,
  112. ProgressControlsForViews progressControls,
  113. ILockMenuOperations lockMenuOperations,
  114. bool isReleaseLocksButtonEnabled,
  115. bool isRemoveLocksButtonEnabled)
  116. {
  117. EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);
  118. DoReleaseLocksButton(
  119. lockMenuOperations,
  120. isReleaseLocksButtonEnabled);
  121. DoRemoveLocksButton(
  122. lockMenuOperations,
  123. isRemoveLocksButtonEnabled);
  124. if (progressControls.IsOperationRunning())
  125. {
  126. DrawProgressForViews.ForIndeterminateProgress(
  127. progressControls.ProgressData);
  128. }
  129. GUILayout.FlexibleSpace();
  130. DoConfigureLockRulesButton(server);
  131. EditorGUILayout.EndHorizontal();
  132. }
  133. static void DoLocksArea(
  134. LocksListView locksListView,
  135. bool isOperationRunning)
  136. {
  137. GUI.enabled = !isOperationRunning;
  138. var rect = GUILayoutUtility.GetRect(0, 100000, 0, 100000);
  139. locksListView.OnGUI(rect);
  140. GUI.enabled = true;
  141. }
  142. static void DoReleaseLocksButton(
  143. ILockMenuOperations lockMenuOperations,
  144. bool isEnabled)
  145. {
  146. GUI.enabled = isEnabled;
  147. if (DrawActionButton.For(
  148. PlasticLocalization.Name.ReleaseLocksButton.GetString(),
  149. PlasticLocalization.Name.ReleaseLocksButtonTooltip.GetString()))
  150. {
  151. lockMenuOperations.ReleaseLocks();
  152. }
  153. GUI.enabled = true;
  154. }
  155. static void DoRemoveLocksButton(
  156. ILockMenuOperations lockMenuOperations,
  157. bool isEnabled)
  158. {
  159. GUI.enabled = isEnabled;
  160. if (DrawActionButton.For(
  161. PlasticLocalization.Name.RemoveLocksButton.GetString(),
  162. PlasticLocalization.Name.RemoveLocksButtonTooltip.GetString()))
  163. {
  164. lockMenuOperations.RemoveLocks();
  165. }
  166. GUI.enabled = true;
  167. }
  168. static void DoConfigureLockRulesButton(string server)
  169. {
  170. if (DrawActionButton.For(PlasticLocalization.Name.
  171. ConfigureLockRules.GetString()))
  172. {
  173. OpenConfigureLockRulesPage.Run(server);
  174. }
  175. }
  176. void BuildComponents(RepositorySpec repSpec)
  177. {
  178. mSearchField = new SearchField();
  179. mSearchField.downOrUpArrowKeyPressed +=
  180. SearchField_OnDownOrUpArrowKeyPressed;
  181. mLocksListView = new LocksListView(
  182. repSpec,
  183. LocksListHeaderState.GetDefault(),
  184. LocksListHeaderState.GetColumnNames(),
  185. new LocksViewMenu(this),
  186. OnSelectionChanged);
  187. mLocksListView.Reload();
  188. }
  189. bool mIsReleaseLocksButtonEnabled;
  190. bool mIsRemoveLocksButtonEnabled;
  191. SearchField mSearchField;
  192. LocksListView mLocksListView;
  193. readonly ProgressControlsForViews mProgressControls;
  194. readonly FillLocksTable mFillLocksTable;
  195. readonly EditorWindow mParentWindow;
  196. readonly IRefreshView mRefreshView;
  197. readonly RepositorySpec mRepSpec;
  198. }
  199. }