GetChangesOverlayIcon.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. using UnityEngine;
  2. using Codice.Client.BaseCommands;
  3. using Codice.Client.Commands;
  4. using Codice.ThemeImages;
  5. using PlasticGui.WorkspaceWindow.Merge;
  6. using PlasticGui.WorkspaceWindow.PendingChanges;
  7. using Unity.PlasticSCM.Editor.AssetsOverlays;
  8. using GluonIncomingChangeInfo = PlasticGui.Gluon.WorkspaceWindow.Views.IncomingChanges.IncomingChangeInfo;
  9. using GluonIncomingChangeCategory = PlasticGui.Gluon.WorkspaceWindow.Views.IncomingChanges.IncomingChangeCategory;
  10. namespace Unity.PlasticSCM.Editor.UI.Tree
  11. {
  12. static class GetChangesOverlayIcon
  13. {
  14. internal class Data
  15. {
  16. internal readonly Texture Texture;
  17. internal readonly float XOffset;
  18. internal readonly float YOffset;
  19. internal readonly float Size;
  20. internal Data(Texture texture, float xOffset, float yOffset, float size)
  21. {
  22. Texture = texture;
  23. XOffset = xOffset;
  24. YOffset = yOffset;
  25. Size = size;
  26. }
  27. }
  28. internal static Data ForPlasticIncomingChange(
  29. MergeChangeInfo incomingChange,
  30. bool isSolvedConflict)
  31. {
  32. if (incomingChange.CategoryType == MergeChangesCategory.Type.FileConflicts ||
  33. incomingChange.CategoryType == MergeChangesCategory.Type.DirectoryConflicts)
  34. return ForConflict(isSolvedConflict);
  35. if (incomingChange.IsXLink())
  36. return BuildData.ForXLink();
  37. if (incomingChange.CategoryType == MergeChangesCategory.Type.Deleted)
  38. return BuildData.ForDeletedOnServer();
  39. if (incomingChange.CategoryType == MergeChangesCategory.Type.Changed)
  40. return BuildData.ForOutOfDate();
  41. return null;
  42. }
  43. internal static Data ForGluonIncomingChange(
  44. GluonIncomingChangeInfo incomingChange,
  45. bool isSolvedConflict)
  46. {
  47. if (incomingChange.CategoryType == GluonIncomingChangeCategory.Type.Conflicted)
  48. return ForConflict(isSolvedConflict);
  49. if (incomingChange.IsXLink())
  50. return BuildData.ForXLink();
  51. if (incomingChange.CategoryType == GluonIncomingChangeCategory.Type.Deleted)
  52. return BuildData.ForDeletedOnServer();
  53. if (incomingChange.CategoryType == GluonIncomingChangeCategory.Type.Changed)
  54. return BuildData.ForOutOfDate();
  55. return null;
  56. }
  57. internal static Data ForPendingChange(
  58. ChangeInfo changeInfo,
  59. bool isConflict)
  60. {
  61. if (isConflict)
  62. return BuildData.ForConflicted();
  63. ItemIconImageType type = ChangeInfoView.
  64. GetIconImageType(changeInfo);
  65. if (ChangeTypesOperator.AreAllSet(
  66. changeInfo.ChangeTypes, ChangeTypes.Added))
  67. return BuildData.ForAdded();
  68. switch (type)
  69. {
  70. case ItemIconImageType.Ignored:
  71. return BuildData.ForIgnored();
  72. case ItemIconImageType.Private:
  73. return BuildData.ForPrivated();
  74. case ItemIconImageType.Deleted:
  75. return BuildData.ForDeleted();
  76. case ItemIconImageType.CheckedOut:
  77. return BuildData.ForCheckedOut();
  78. default:
  79. return null;
  80. }
  81. }
  82. internal static Data ForAssetStatus(AssetStatus status)
  83. {
  84. switch (status)
  85. {
  86. case AssetStatus.Ignored:
  87. return BuildData.ForIgnored();
  88. case AssetStatus.Private:
  89. return BuildData.ForPrivated();
  90. case AssetStatus.Added:
  91. return BuildData.ForAdded();
  92. case AssetStatus.Checkout:
  93. return BuildData.ForCheckedOut();
  94. case AssetStatus.OutOfDate:
  95. return BuildData.ForOutOfDate();
  96. case AssetStatus.Conflicted:
  97. return BuildData.ForConflicted();
  98. case AssetStatus.DeletedOnServer:
  99. return BuildData.ForDeletedOnServer();
  100. case AssetStatus.Locked:
  101. return BuildData.ForLocked();
  102. case AssetStatus.LockedRemote:
  103. return BuildData.ForLockedRemote();
  104. }
  105. return null;
  106. }
  107. static Data ForConflict(bool isResolved)
  108. {
  109. if (isResolved)
  110. return BuildData.ForOk();
  111. return BuildData.ForConflicted();
  112. }
  113. static class BuildData
  114. {
  115. internal static Data ForOk()
  116. {
  117. return new Data(
  118. Images.GetImage(Images.Name.Ok),
  119. 4f, 4f, SIZE);
  120. }
  121. internal static Data ForXLink()
  122. {
  123. return new Data(
  124. Images.GetImage(Images.Name.XLink),
  125. 2f, 3f, SIZE);
  126. }
  127. internal static Data ForIgnored()
  128. {
  129. return new Data(
  130. Images.GetImage(Images.Name.Ignored),
  131. GetLeftXOffset(),
  132. GetBottomYOffset(),
  133. SIZE);
  134. }
  135. internal static Data ForPrivated()
  136. {
  137. return new Data(
  138. Images.GetPrivatedOverlayIcon(),
  139. GetLeftXOffset(),
  140. GetBottomYOffset(),
  141. SIZE);
  142. }
  143. internal static Data ForAdded()
  144. {
  145. return new Data(
  146. Images.GetAddedOverlayIcon(),
  147. GetLeftXOffset(),
  148. GetTopYOffset(),
  149. SIZE);
  150. }
  151. internal static Data ForDeleted()
  152. {
  153. return new Data(
  154. Images.GetDeletedOverlayIcon(),
  155. GetLeftXOffset(),
  156. GetTopYOffset(),
  157. SIZE);
  158. }
  159. internal static Data ForCheckedOut()
  160. {
  161. return new Data(
  162. Images.GetCheckedOutOverlayIcon(),
  163. GetLeftXOffset(),
  164. GetTopYOffset(),
  165. SIZE);
  166. }
  167. internal static Data ForDeletedOnServer()
  168. {
  169. return new Data(
  170. Images.GetDeletedRemoteOverlayIcon(),
  171. GetRightXOffset(),
  172. GetTopYOffset(),
  173. SIZE);
  174. }
  175. internal static Data ForOutOfDate()
  176. {
  177. return new Data(
  178. Images.GetOutOfSyncOverlayIcon(),
  179. GetRightXOffset(),
  180. GetBottomYOffset(),
  181. SIZE);
  182. }
  183. internal static Data ForLocked()
  184. {
  185. return new Data(
  186. Images.GetLockedLocalOverlayIcon(),
  187. GetLeftXOffset(),
  188. GetTopYOffset(),
  189. SIZE);
  190. }
  191. internal static Data ForLockedRemote()
  192. {
  193. return new Data(
  194. Images.GetLockedRemoteOverlayIcon(),
  195. GetRightXOffset(),
  196. GetTopYOffset(),
  197. SIZE);
  198. }
  199. static float GetLeftXOffset()
  200. {
  201. return -4f;
  202. }
  203. internal static Data ForConflicted()
  204. {
  205. return new Data(
  206. Images.GetConflictedOverlayIcon(),
  207. GetLeftXOffset(),
  208. GetBottomYOffset(),
  209. SIZE);
  210. }
  211. static float GetRightXOffset()
  212. {
  213. return 8f;
  214. }
  215. static float GetBottomYOffset()
  216. {
  217. return UnityConstants.TREEVIEW_ROW_HEIGHT - SIZE + 2f;
  218. }
  219. static float GetTopYOffset()
  220. {
  221. return -1f;
  222. }
  223. const float SIZE = 16;
  224. }
  225. }
  226. }