Nenhuma descrição
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

LocksTab.cs 7.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  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 OnEnable()
  35. {
  36. mSearchField.downOrUpArrowKeyPressed +=
  37. SearchField_OnDownOrUpArrowKeyPressed;
  38. }
  39. internal void OnDisable()
  40. {
  41. mSearchField.downOrUpArrowKeyPressed -=
  42. SearchField_OnDownOrUpArrowKeyPressed;
  43. mLocksListView.OnDisable();
  44. }
  45. internal void Update()
  46. {
  47. mProgressControls.UpdateProgress(mParentWindow);
  48. }
  49. internal void OnGUI()
  50. {
  51. DoActionsToolbar(
  52. mRepSpec.Server,
  53. mProgressControls,
  54. this,
  55. mIsReleaseLocksButtonEnabled,
  56. mIsRemoveLocksButtonEnabled);
  57. DoLocksArea(
  58. mLocksListView,
  59. mProgressControls.IsOperationRunning());
  60. }
  61. internal void DrawSearchFieldForLocksTab()
  62. {
  63. DrawSearchField.For(
  64. mSearchField,
  65. mLocksListView,
  66. UnityConstants.SEARCH_FIELD_WIDTH);
  67. }
  68. void IRefreshableView.Refresh()
  69. {
  70. mFillLocksTable.FillTable(
  71. mRepSpec,
  72. null,
  73. mLocksListView,
  74. mLocksListView,
  75. mProgressControls);
  76. }
  77. List<LockInfo.LockStatus> ILockMenuOperations.GetSelectedLocksStatus()
  78. {
  79. return mLocksListView.GetSelectedLocks().
  80. Select(lockInfo => lockInfo.Status).ToList();
  81. }
  82. void ILockMenuOperations.ReleaseLocks()
  83. {
  84. LockOperations.ReleaseLocks(
  85. mRepSpec,
  86. mLocksListView.GetSelectedLocks(),
  87. this,
  88. mRefreshView,
  89. mProgressControls,
  90. RefreshAsset.VersionControlCache);
  91. }
  92. void ILockMenuOperations.RemoveLocks()
  93. {
  94. LockOperations.RemoveLocks(
  95. mRepSpec,
  96. mLocksListView.GetSelectedLocks(),
  97. this,
  98. mRefreshView,
  99. mProgressControls,
  100. RefreshAsset.VersionControlCache);
  101. }
  102. void SearchField_OnDownOrUpArrowKeyPressed()
  103. {
  104. mLocksListView.SetFocusAndEnsureSelectedItem();
  105. }
  106. void OnSelectionChanged()
  107. {
  108. LockMenuOperations operations = LockMenuUpdater.GetAvailableMenuOperations(
  109. ((ILockMenuOperations)this).GetSelectedLocksStatus());
  110. mIsReleaseLocksButtonEnabled = operations.HasFlag(
  111. LockMenuOperations.Release);
  112. mIsRemoveLocksButtonEnabled = operations.HasFlag(
  113. LockMenuOperations.Remove);
  114. }
  115. static void DoActionsToolbar(
  116. string server,
  117. ProgressControlsForViews progressControls,
  118. ILockMenuOperations lockMenuOperations,
  119. bool isReleaseLocksButtonEnabled,
  120. bool isRemoveLocksButtonEnabled)
  121. {
  122. EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);
  123. DoReleaseLocksButton(
  124. lockMenuOperations,
  125. isReleaseLocksButtonEnabled);
  126. DoRemoveLocksButton(
  127. lockMenuOperations,
  128. isRemoveLocksButtonEnabled);
  129. if (progressControls.IsOperationRunning())
  130. {
  131. DrawProgressForViews.ForIndeterminateProgress(
  132. progressControls.ProgressData);
  133. }
  134. GUILayout.FlexibleSpace();
  135. DoConfigureLockRulesButton(server);
  136. EditorGUILayout.EndHorizontal();
  137. }
  138. static void DoLocksArea(
  139. LocksListView locksListView,
  140. bool isOperationRunning)
  141. {
  142. GUI.enabled = !isOperationRunning;
  143. var rect = GUILayoutUtility.GetRect(0, 100000, 0, 100000);
  144. locksListView.OnGUI(rect);
  145. GUI.enabled = true;
  146. }
  147. static void DoReleaseLocksButton(
  148. ILockMenuOperations lockMenuOperations,
  149. bool isEnabled)
  150. {
  151. GUI.enabled = isEnabled;
  152. if (DrawActionButton.For(
  153. PlasticLocalization.Name.ReleaseLocksButton.GetString(),
  154. PlasticLocalization.Name.ReleaseLocksButtonTooltip.GetString()))
  155. {
  156. lockMenuOperations.ReleaseLocks();
  157. }
  158. GUI.enabled = true;
  159. }
  160. static void DoRemoveLocksButton(
  161. ILockMenuOperations lockMenuOperations,
  162. bool isEnabled)
  163. {
  164. GUI.enabled = isEnabled;
  165. if (DrawActionButton.For(
  166. PlasticLocalization.Name.RemoveLocksButton.GetString(),
  167. PlasticLocalization.Name.RemoveLocksButtonTooltip.GetString()))
  168. {
  169. lockMenuOperations.RemoveLocks();
  170. }
  171. GUI.enabled = true;
  172. }
  173. static void DoConfigureLockRulesButton(string server)
  174. {
  175. if (DrawActionButton.For(PlasticLocalization.Name.
  176. ConfigureLockRules.GetString()))
  177. {
  178. OpenConfigureLockRulesPage.Run(server);
  179. }
  180. }
  181. void BuildComponents(RepositorySpec repSpec)
  182. {
  183. mSearchField = new SearchField();
  184. mSearchField.downOrUpArrowKeyPressed +=
  185. SearchField_OnDownOrUpArrowKeyPressed;
  186. mLocksListView = new LocksListView(
  187. repSpec,
  188. LocksListHeaderState.GetDefault(),
  189. LocksListHeaderState.GetColumnNames(),
  190. new LocksViewMenu(this),
  191. OnSelectionChanged);
  192. mLocksListView.Reload();
  193. }
  194. bool mIsReleaseLocksButtonEnabled;
  195. bool mIsRemoveLocksButtonEnabled;
  196. SearchField mSearchField;
  197. LocksListView mLocksListView;
  198. readonly ProgressControlsForViews mProgressControls;
  199. readonly FillLocksTable mFillLocksTable;
  200. readonly EditorWindow mParentWindow;
  201. readonly IRefreshView mRefreshView;
  202. readonly RepositorySpec mRepSpec;
  203. }
  204. }