A game about forced loneliness, made by TACStudios
1using System.Collections.Generic;
2using System.IO;
3
4using UnityEditor;
5using UnityEngine;
6
7using Codice.LogWrapper;
8using Unity.PlasticSCM.Editor.AssetUtils;
9
10namespace Unity.PlasticSCM.Editor.UI
11{
12 internal class Images
13 {
14 internal enum Name
15 {
16 None,
17 IconPlastic,
18 IconCloseButton,
19 IconPressedCloseButton,
20 IconAddedLocal,
21 IconAddedOverlay,
22 IconPrivateOverlay,
23 IconCheckedOutLocalOverlay,
24 IconDeleted,
25 IconDeletedLocalOverlay,
26 IconDeletedRemote,
27 IconDeletedRemoteOverlay,
28 IconOutOfSync,
29 IconInfoBellNotification,
30 IconOutOfSyncOverlay,
31 IconMoved,
32 IconMergeLink,
33 Ignored,
34 IgnoredOverlay,
35 IconConflicted,
36 IconConflictedOverlay,
37 IconConflictResolvedOverlay,
38 IconLockedLocalOverlay,
39 IconLockedRemoteOverlay,
40 IconRetainedOverlay,
41 XLink,
42 Ok,
43 SecondaryTabClose,
44 SecondaryTabCloseHover,
45 NotOnDisk,
46 IconRepository,
47 IconPlasticView,
48 IconPlasticNotifyIncoming,
49 IconPlasticNotifyConflict,
50 Loading,
51 IconEmptyGravatar,
52 Step1,
53 Step2,
54 Step3,
55 StepOk,
56 ButtonSsoSignInUnity,
57 ButtonSsoSignInEmail,
58 ButtonSsoSignInGoogle,
59 IconBranch,
60 IconBranches,
61 IconBrEx,
62 IconUndo,
63 Refresh,
64 IconInviteUsers,
65 IconLock,
66 IconShelve,
67 IconClipboard,
68 }
69
70 internal static Texture2D GetImage(Name image)
71 {
72 return LoadImage(image, false);
73 }
74
75 internal static Texture GetFileIcon(string path)
76 {
77 string relativePath = GetRelativePath.ToApplication(path);
78
79 return GetFileIconFromRelativePath(relativePath);
80 }
81
82 internal static Texture GetFileIconFromCmPath(string path)
83 {
84 return GetFileIconFromRelativePath(
85 path.Substring(1).Replace("/",
86 Path.DirectorySeparatorChar.ToString()));
87 }
88
89 internal static Texture GetDropDownIcon()
90 {
91 return GetIconFromEditorGUI("icon dropdown");
92 }
93
94 internal static Texture GetDirectoryIcon()
95 {
96 return GetIconFromEditorGUI("Folder Icon");
97 }
98
99 internal static Texture GetPrivatedOverlayIcon()
100 {
101 if (mPrivatedOverlayIcon == null)
102 mPrivatedOverlayIcon = GetOverlay(Name.IconPrivateOverlay);
103
104 return mPrivatedOverlayIcon;
105 }
106
107 internal static Texture GetAddedOverlayIcon()
108 {
109 if (mAddedOverlayIcon == null)
110 mAddedOverlayIcon = GetOverlay(Name.IconAddedOverlay);
111
112 return mAddedOverlayIcon;
113 }
114
115 internal static Texture GetDeletedLocalOverlayIcon()
116 {
117 if (mDeletedLocalOverlayIcon == null)
118 mDeletedLocalOverlayIcon = GetOverlay(Name.IconDeletedLocalOverlay);
119
120 return mDeletedLocalOverlayIcon;
121 }
122
123 internal static Texture GetDeletedRemoteOverlayIcon()
124 {
125 if (mDeletedRemoteOverlayIcon == null)
126 mDeletedRemoteOverlayIcon = GetOverlay(Name.IconDeletedRemoteOverlay);
127
128 return mDeletedRemoteOverlayIcon;
129 }
130
131 internal static Texture GetCheckedOutOverlayIcon()
132 {
133 if (mCheckedOutOverlayIcon == null)
134 mCheckedOutOverlayIcon = GetOverlay(Name.IconCheckedOutLocalOverlay);
135
136 return mCheckedOutOverlayIcon;
137 }
138
139 internal static Texture GetOutOfSyncOverlayIcon()
140 {
141 if (mOutOfSyncOverlayIcon == null)
142 mOutOfSyncOverlayIcon = GetOverlay(Name.IconOutOfSyncOverlay);
143
144 return mOutOfSyncOverlayIcon;
145 }
146
147 internal static Texture GetConflictedOverlayIcon()
148 {
149 if (mConflictedOverlayIcon == null)
150 mConflictedOverlayIcon = GetOverlay(Name.IconConflictedOverlay);
151
152 return mConflictedOverlayIcon;
153 }
154
155 internal static Texture GetConflictResolvedOverlayIcon()
156 {
157 if (mConflictResolvedOverlayIcon == null)
158 mConflictResolvedOverlayIcon = GetOverlay(Name.IconConflictResolvedOverlay);
159
160 return mConflictResolvedOverlayIcon;
161 }
162
163 internal static Texture GetLockedLocalOverlayIcon()
164 {
165 if (mLockedLocalOverlayIcon == null)
166 mLockedLocalOverlayIcon = GetOverlay(Name.IconLockedLocalOverlay);
167
168 return mLockedLocalOverlayIcon;
169 }
170
171 internal static Texture GetLockedRemoteOverlayIcon()
172 {
173 if (mLockedRemoteOverlayIcon == null)
174 mLockedRemoteOverlayIcon = GetOverlay(Name.IconLockedRemoteOverlay);
175
176 return mLockedRemoteOverlayIcon;
177 }
178
179 internal static Texture GetRetainedOverlayIcon()
180 {
181 if (mRetainedOverlayIcon == null)
182 mRetainedOverlayIcon = GetOverlay(Name.IconRetainedOverlay);
183
184 return mRetainedOverlayIcon;
185 }
186
187 internal static Texture GetIgnoredOverlayIcon()
188 {
189 if (mIgnoredverlayIcon == null)
190 mIgnoredverlayIcon = GetOverlay(Name.IgnoredOverlay);
191
192 return mIgnoredverlayIcon;
193 }
194
195 internal static Texture GetWarnIcon()
196 {
197 return GetIconFromEditorGUI("console.warnicon.sml");
198 }
199
200 internal static Texture GetInfoIcon()
201 {
202 return GetIconFromEditorGUI("console.infoicon.sml");
203 }
204
205 internal static Texture GetErrorDialogIcon()
206 {
207 return GetIconFromEditorGUI("console.erroricon");
208 }
209
210 internal static Texture GetWarnDialogIcon()
211 {
212 return GetIconFromEditorGUI("console.warnicon");
213 }
214
215 internal static Texture GetInfoDialogIcon()
216 {
217 return GetIconFromEditorGUI("console.infoicon");
218 }
219
220 internal static Texture GetRefreshIcon()
221 {
222 if (mRefreshIcon == null)
223 mRefreshIcon = GetImage(Name.Refresh);
224
225 return mRefreshIcon;
226 }
227
228 internal static Texture GetHideIcon()
229 {
230 return GetIconFromEditorGUI("scenevis_hidden_hover");
231 }
232
233 internal static Texture GetUnhideIcon()
234 {
235 return GetIconFromEditorGUI("scenevis_visible_hover");
236 }
237
238 internal static Texture GetSettingsIcon()
239 {
240 return GetIconFromEditorGUI("settings");
241 }
242
243 internal static Texture GetCloseIcon()
244 {
245 if (mCloseIcon == null)
246 mCloseIcon = GetImage(Name.SecondaryTabClose);
247
248 return mCloseIcon;
249 }
250
251 internal static Texture GetClickedCloseIcon()
252 {
253 if (mClickedCloseIcon == null)
254 mClickedCloseIcon = GetImage(Name.SecondaryTabCloseHover);
255
256 return mClickedCloseIcon;
257 }
258
259 internal static Texture GetHoveredCloseIcon()
260 {
261 if (mHoveredCloseIcon == null)
262 mHoveredCloseIcon = GetImage(Name.SecondaryTabCloseHover);
263
264 return mHoveredCloseIcon;
265 }
266
267 internal static Texture2D GetUndoIcon()
268 {
269 if (mUndoIcon == null)
270 mUndoIcon = GetImage(Name.IconUndo);
271
272 return mUndoIcon;
273 }
274
275 internal static Texture2D GetPlasticIcon()
276 {
277 if (mPlasticIcon == null)
278 mPlasticIcon = GetImage(Name.IconPlastic);
279
280 return mPlasticIcon;
281 }
282
283 internal static Texture2D GetClipboardIcon()
284 {
285 if (mClipboardIcon == null)
286 mClipboardIcon = GetImage(Name.IconClipboard);
287
288 return mClipboardIcon;
289 }
290
291 internal static Texture2D GetBranchIcon()
292 {
293 if (mBranchIcon == null)
294 mBranchIcon = GetImage(Name.IconBranch);
295
296 return mBranchIcon;
297 }
298
299 internal static Texture2D GetBranchesIcon()
300 {
301 if (mBranchesIcon == null)
302 mBranchesIcon = GetImage(Name.IconBranches);
303
304 return mBranchesIcon;
305 }
306
307 internal static Texture2D GetBranchExplorerIcon()
308 {
309 if (mBranchExplorerIcon == null)
310 mBranchExplorerIcon = GetImage(Name.IconBrEx);
311
312 return mBranchExplorerIcon;
313 }
314
315 internal static Texture2D GetConflictedIcon()
316 {
317 if (mConflictedIcon == null)
318 mConflictedIcon = GetImage(Name.IconConflicted);
319
320 return mConflictedIcon;
321 }
322
323 internal static Texture2D GetOutOfSyncIcon()
324 {
325 if (mOutOfSyncIcon == null)
326 mOutOfSyncIcon = GetImage(Name.IconOutOfSync);
327
328 return mOutOfSyncIcon;
329 }
330
331 internal static Texture2D GetInfoBellNotificationIcon()
332 {
333 if (mIncomingNotificationIcon == null)
334 mIncomingNotificationIcon = GetImage(Name.IconInfoBellNotification);
335
336 return mIncomingNotificationIcon;
337 }
338
339 internal static Texture2D GetPlasticViewIcon()
340 {
341 if (mPlasticViewIcon == null)
342 mPlasticViewIcon = GetImage(Name.IconPlasticView);
343
344 return mPlasticViewIcon;
345 }
346
347 internal static Texture2D GetPlasticNotifyIncomingIcon()
348 {
349 if (mPlasticNotifyIncomingIcon == null)
350 mPlasticNotifyIncomingIcon = GetImage(Name.IconPlasticNotifyIncoming);
351
352 return mPlasticNotifyIncomingIcon;
353 }
354
355 internal static Texture2D GetPlasticNotifyConflictIcon()
356 {
357 if (mPlasticNotifyConflictIcon == null)
358 mPlasticNotifyConflictIcon = GetImage(Name.IconPlasticNotifyConflict);
359
360 return mPlasticNotifyConflictIcon;
361 }
362
363 internal static Texture2D GetEmptyGravatar()
364 {
365 if (mEmptyGravatarIcon == null)
366 mEmptyGravatarIcon = Images.GetImage(Images.Name.IconEmptyGravatar);
367
368 return mEmptyGravatarIcon;
369 }
370
371 internal static Texture2D GetStepOkIcon()
372 {
373 if (mStepOkIcon == null)
374 mStepOkIcon = Images.GetImage(Images.Name.StepOk);
375
376 return mStepOkIcon;
377 }
378
379 internal static Texture2D GetStep1Icon()
380 {
381 if (mStep1Icon == null)
382 mStep1Icon = Images.GetImage(Images.Name.Step1);
383
384 return mStep1Icon;
385 }
386
387 internal static Texture2D GetStep2Icon()
388 {
389 if (mStep2Icon == null)
390 mStep2Icon = Images.GetImage(Images.Name.Step2);
391
392 return mStep2Icon;
393 }
394
395 internal static Texture2D GetMergeLinkIcon()
396 {
397 if (mMergeLinkIcon == null)
398 mMergeLinkIcon = Images.GetImage(Images.Name.IconMergeLink);
399
400 return mMergeLinkIcon;
401 }
402
403 internal static Texture2D GetAddedLocalIcon()
404 {
405 if (mAddedLocalIcon == null)
406 mAddedLocalIcon = Images.GetImage(Images.Name.IconAddedLocal);
407
408 return mAddedLocalIcon;
409 }
410
411 internal static Texture2D GetDeletedRemoteIcon()
412 {
413 if (mDeletedRemoteIcon == null)
414 mDeletedRemoteIcon = Images.GetImage(Images.Name.IconDeletedRemote);
415
416 return mDeletedRemoteIcon;
417 }
418
419 internal static Texture2D GetDeletedIcon()
420 {
421 if (mDeletedIcon == null)
422 mDeletedIcon = Images.GetImage(Images.Name.IconDeleted);
423
424 return mDeletedIcon;
425 }
426
427 internal static Texture2D GetMovedIcon()
428 {
429 if (mMovedIcon == null)
430 mMovedIcon = Images.GetImage(Images.Name.IconMoved);
431
432 return mMovedIcon;
433 }
434
435 internal static Texture2D GetRepositoryIcon()
436 {
437 if (mRepositoryIcon == null)
438 mRepositoryIcon = Images.GetImage(Images.Name.IconRepository);
439
440 return mRepositoryIcon;
441 }
442
443 internal static Texture GetFileIcon()
444 {
445 if (mFileIcon == null)
446 mFileIcon = EditorGUIUtility.FindTexture("DefaultAsset Icon");
447
448 if (mFileIcon == null)
449 mFileIcon = GetIconFromAssetPreview(typeof(DefaultAsset));
450
451 if (mFileIcon == null)
452 mFileIcon = GetEmptyImage();
453
454 return mFileIcon;
455 }
456
457 internal static Texture2D GetLinkUnderlineImage()
458 {
459 if (mLinkUnderlineImage == null)
460 {
461 mLinkUnderlineImage = new Texture2D(1, 1);
462 mLinkUnderlineImage.SetPixel(0, 0, UnityStyles.Colors.Link);
463 mLinkUnderlineImage.Apply();
464 }
465
466 return mLinkUnderlineImage;
467 }
468
469 internal static Texture2D GetInviteUsersIcon()
470 {
471 if (mInviteUsersIcon == null)
472 mInviteUsersIcon = GetImage(Name.IconInviteUsers);
473
474 return mInviteUsersIcon;
475 }
476
477 internal static Texture2D GetShelveIcon()
478 {
479 if (mShelveIcon == null)
480 mShelveIcon = GetImage(Name.IconShelve);
481
482 return mShelveIcon;
483 }
484
485 internal static Texture2D GetLockIcon()
486 {
487 if (mLockIcon == null)
488 mLockIcon = GetImage(Name.IconLock);
489
490 return mLockIcon;
491 }
492
493 internal static Texture2D GetTreeviewBackgroundTexture()
494 {
495 if (mTreeviewBackgroundTexture == null)
496 mTreeviewBackgroundTexture = GetTextureFromColor(UnityStyles.Colors.TreeViewBackground);
497
498 return mTreeviewBackgroundTexture;
499 }
500
501 internal static Texture2D GetCommentBackgroundTexture()
502 {
503 if (mCommentBackground == null)
504 mCommentBackground = GetTextureFromColor(UnityStyles.Colors.CommentsBackground);
505
506 return mCommentBackground;
507 }
508
509 internal static Texture2D GetColumnsBackgroundTexture()
510 {
511 if (mColumnsBackgroundTexture == null)
512 mColumnsBackgroundTexture = GetTextureFromColor(UnityStyles.Colors.ColumnsBackground);
513
514 return mColumnsBackgroundTexture;
515 }
516
517 internal static Texture2D GetNewTextureFromTexture(Texture2D texture)
518 {
519 Texture2D result = new Texture2D(texture.width, texture.height, TextureFormat.BGRA32, false);
520
521 // To keep images consistent throughout the plugin,
522 // manually set the filter mode
523 result.filterMode = FilterMode.Bilinear;
524
525 return result;
526 }
527
528 internal static Texture2D GetNewTextureFromBytes(int width, int height, byte[] bytes)
529 {
530 Texture2D result = new Texture2D(width, height, TextureFormat.RGBA32, false);
531
532 result.LoadImage(bytes);
533
534 // To keep images consistent throughout the plugin,
535 // manually set the filter mode
536 result.filterMode = FilterMode.Bilinear;
537
538 return result;
539 }
540
541 static Texture2D GetNewTextureFromFile(string path)
542 {
543 return GetNewTextureFromBytes(1, 1, File.ReadAllBytes(path));
544 }
545
546 static Texture2D GetOverlay(Name image)
547 {
548 return LoadImage(image, true);
549 }
550
551 static Texture2D LoadImage(Name image, bool preferFulResImage)
552 {
553 string imageFileName = image.ToString().ToLower() + ".png";
554 string imageFileName2x = image.ToString().ToLower() + "@2x.png";
555
556 string darkImageFileName = string.Format("d_{0}", imageFileName);
557 string darkImageFileName2x = string.Format("d_{0}", imageFileName2x);
558
559 string imageFileRelativePath = GetImageFileRelativePath(imageFileName);
560 string imageFileRelativePath2x = GetImageFileRelativePath(imageFileName2x);
561
562 string darkImageFileRelativePath = GetImageFileRelativePath(darkImageFileName);
563 string darkImageFileRelativePath2x = GetImageFileRelativePath(darkImageFileName2x);
564
565 Texture2D result = null;
566
567 if (EditorGUIUtility.isProSkin)
568 result = TryLoadImage(darkImageFileRelativePath, darkImageFileRelativePath2x, preferFulResImage);
569
570 if (result != null)
571 return result;
572
573 result = TryLoadImage(imageFileRelativePath, imageFileRelativePath2x, preferFulResImage);
574
575 if (result != null)
576 return result;
577
578 mLog.WarnFormat("Image not found: {0}", imageFileName);
579 return GetEmptyImage();
580 }
581
582 static Texture2D GetEmptyImage()
583 {
584 if (mEmptyImage == null)
585 mEmptyImage = GetTextureFromColor(Color.clear);
586
587 return mEmptyImage;
588 }
589
590 static Texture2D GetTextureFromColor(Color color)
591 {
592 Texture2D texture = new Texture2D(1, 1);
593
594 texture.SetPixel(0, 0, color);
595 texture.Apply();
596
597 return texture;
598 }
599
600 static Texture GetFileIconFromRelativePath(string relativePath)
601 {
602 Texture result = AssetDatabase.GetCachedIcon(relativePath);
603
604 if (result != null)
605 return result;
606
607 result = GetFileIconFromKnownExtension(relativePath);
608
609 if (result != null)
610 return result;
611
612 return GetFileIcon();
613 }
614
615 static Texture GetFileIconFromKnownExtension(string relativePath)
616 {
617 if (relativePath.EndsWith(UnityConstants.TREEVIEW_META_LABEL))
618 {
619 relativePath = relativePath.Substring(0,
620 relativePath.Length- UnityConstants.TREEVIEW_META_LABEL.Length);
621 }
622
623 string extension = Path.GetExtension(relativePath).ToLower();
624
625 if (extension.Equals(".cs"))
626 return GetIconFromEditorGUI("cs Script Icon");
627
628 if (extension.Equals(".png") || extension.Equals(".jpg")
629 || extension.Equals(".jpeg") || extension.Equals(".gif")
630 || extension.Equals(".tga") || extension.Equals(".bmp")
631 || extension.Equals(".tif") || extension.Equals(".tiff"))
632 return GetIconFromEditorGUI("d_Texture Icon");
633
634 if (extension.Equals(".mat"))
635 return GetIconFromAssetPreview(typeof(UnityEngine.Material));
636
637 if (extension.Equals(".fbx") || extension.Equals(".ma")
638 || extension.Equals(".mb") || extension.Equals(".blend")
639 || extension.Equals(".max") )
640 return GetIconFromAssetPreview(typeof(UnityEngine.GameObject));
641
642 if (extension.Equals(".wav") || extension.Equals(".mp3"))
643 return GetIconFromAssetPreview(typeof(UnityEngine.AudioClip));
644
645 if (extension.Equals(".anim"))
646 return GetIconFromAssetPreview(typeof(UnityEngine.Animation));
647
648 if (extension.Equals(".animator"))
649 return GetIconFromAssetPreview(typeof(UnityEngine.Animator));
650
651 if (extension.Equals(".shader"))
652 return GetIconFromEditorGUI("d_Shader Icon");
653
654 if (extension.Equals(".asset") && relativePath.StartsWith("ProjectSettings\\"))
655 return GetIconFromEditorGUI("EditorSettings Icon");
656
657 return null;
658 }
659
660 static Texture2D GetIconFromEditorGUI(string name)
661 {
662 Texture2D result;
663
664 if (mImagesFromEditorGUICache.TryGetValue(name, out result))
665 {
666 if (result != null)
667 return result;
668 mImagesFromEditorGUICache.Remove(name);
669 }
670
671 result = EditorGUIUtility.IconContent(name).image as Texture2D;
672
673 mImagesFromEditorGUICache.Add(name, result);
674
675 return result;
676 }
677
678 static Texture2D GetIconFromAssetPreview(System.Type type)
679 {
680 Texture2D result;
681
682 if (mImagesFromAssetPreviewCache.TryGetValue(type.ToString(), out result))
683 {
684 if (result != null)
685 return result;
686 mImagesFromAssetPreviewCache.Remove(type.ToString());
687 }
688
689 result = AssetPreview.GetMiniTypeThumbnail(type);
690
691 mImagesFromAssetPreviewCache.Add(type.ToString(), result);
692
693 return result;
694 }
695
696 static string GetImageFileRelativePath(string imageFileName)
697 {
698 return Path.Combine(
699 AssetsPath.GetImagesFolderRelativePath(),
700 imageFileName);
701 }
702
703 static Texture2D TryLoadImage(
704 string imageFileRelativePath, string image2xFilePath, bool preferFulResImage)
705 {
706 bool isImageAvailable = File.Exists(Path.GetFullPath(imageFileRelativePath));
707 bool isImage2XAvailable = File.Exists(Path.GetFullPath(image2xFilePath));
708
709 if ((EditorGUIUtility.pixelsPerPoint > 1f || !isImageAvailable || preferFulResImage) &&
710 isImage2XAvailable)
711 return LoadTextureFromFile(image2xFilePath);
712
713 if (isImageAvailable)
714 return LoadTextureFromFile(imageFileRelativePath);
715
716 return null;
717 }
718
719 static Texture2D LoadTextureFromFile(string path)
720 {
721 Texture2D result;
722
723 if (mImagesByPathCache.TryGetValue(path, out result))
724 {
725 if (result != null)
726 return result;
727 mImagesByPathCache.Remove(path);
728 }
729
730 // Don't use AssetDatabase to load as it will
731 // pick filtering mode from the asset itself
732 // which leads to inconsistent filtering between
733 // images.
734 result = GetNewTextureFromFile(path);
735
736 mImagesByPathCache.Add(path, result);
737
738 return result;
739 }
740
741 static Dictionary<string, Texture2D> mImagesByPathCache =
742 new Dictionary<string, Texture2D>();
743
744 static Dictionary<string, Texture2D> mImagesFromEditorGUICache =
745 new Dictionary<string, Texture2D>();
746
747 static Dictionary<string, Texture2D> mImagesFromAssetPreviewCache =
748 new Dictionary<string, Texture2D>();
749
750 static Texture mFileIcon;
751
752 static Texture mPrivatedOverlayIcon;
753 static Texture mAddedOverlayIcon;
754 static Texture mDeletedLocalOverlayIcon;
755 static Texture mDeletedRemoteOverlayIcon;
756 static Texture mCheckedOutOverlayIcon;
757 static Texture mOutOfSyncOverlayIcon;
758 static Texture mConflictedOverlayIcon;
759 static Texture mConflictResolvedOverlayIcon;
760 static Texture mLockedLocalOverlayIcon;
761 static Texture mLockedRemoteOverlayIcon;
762 static Texture mRetainedOverlayIcon;
763 static Texture mIgnoredverlayIcon;
764
765 static Texture mRefreshIcon;
766
767 static Texture mCloseIcon;
768 static Texture mClickedCloseIcon;
769 static Texture mHoveredCloseIcon;
770
771 static Texture2D mLinkUnderlineImage;
772
773 static Texture2D mEmptyImage;
774
775 static Texture2D mTreeviewBackgroundTexture;
776 static Texture2D mColumnsBackgroundTexture;
777 static Texture2D mCommentBackground;
778
779 static Texture2D mUndoIcon;
780 static Texture2D mPlasticIcon;
781 static Texture2D mClipboardIcon;
782 static Texture2D mBranchIcon;
783 static Texture2D mBranchesIcon;
784 static Texture2D mBranchExplorerIcon;
785 static Texture2D mConflictedIcon;
786 static Texture2D mOutOfSyncIcon;
787 static Texture2D mIncomingNotificationIcon;
788 static Texture2D mInviteUsersIcon;
789 static Texture2D mShelveIcon;
790 static Texture2D mLockIcon;
791
792 static Texture2D mPlasticViewIcon;
793 static Texture2D mPlasticNotifyIncomingIcon;
794 static Texture2D mPlasticNotifyConflictIcon;
795
796 static Texture2D mEmptyGravatarIcon;
797 static Texture2D mStepOkIcon;
798 static Texture2D mStep1Icon;
799 static Texture2D mStep2Icon;
800
801 static Texture2D mMergeLinkIcon;
802 static Texture2D mAddedLocalIcon;
803 static Texture2D mDeletedRemoteIcon;
804 static Texture2D mDeletedIcon;
805 static Texture2D mMovedIcon;
806 static Texture2D mRepositoryIcon;
807
808 static readonly ILog mLog = PlasticApp.GetLogger("Images");
809 }
810}