167 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			167 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using UnityEditor; | ||
|  | using UnityEngine; | ||
|  | 
 | ||
|  | using Codice.Client.Common.EventTracking; | ||
|  | 
 | ||
|  | using Codice.CM.Common; | ||
|  | using PlasticGui; | ||
|  | using PlasticGui.WorkspaceWindow; | ||
|  | using PlasticGui.WorkspaceWindow.Topbar; | ||
|  | using Unity.PlasticSCM.Editor.AssetsOverlays.Cache; | ||
|  | using Unity.PlasticSCM.Editor.AssetUtils; | ||
|  | using Unity.PlasticSCM.Editor.Tool; | ||
|  | using Unity.PlasticSCM.Editor.StatusBar; | ||
|  | using Unity.PlasticSCM.Editor.UI; | ||
|  | 
 | ||
|  | using GluonShelveOperations = GluonGui.WorkspaceWindow.Views.Shelves.ShelveOperations; | ||
|  | 
 | ||
|  | namespace Unity.PlasticSCM.Editor.Gluon | ||
|  | { | ||
|  |     internal class ShelvedChangesNotification : | ||
|  |         WindowStatusBar.IShelvedChangesNotification, | ||
|  |         CheckShelvedChanges.IUpdateShelvedChangesNotification | ||
|  |     { | ||
|  |         internal ShelvedChangesNotification( | ||
|  |             WorkspaceInfo wkInfo, | ||
|  |             RepositorySpec repSpec, | ||
|  |             ViewSwitcher viewSwitcher, | ||
|  |             IAssetStatusCache assetStatusCache, | ||
|  |             LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow, | ||
|  |             UVCSWindow uvcsWindow) | ||
|  |         { | ||
|  |             mWkInfo = wkInfo; | ||
|  |             mRepSpec = repSpec; | ||
|  |             mViewSwitcher = viewSwitcher; | ||
|  |             mAssetStatusCache = assetStatusCache; | ||
|  |             mShowDownloadPlasticExeWindow = showDownloadPlasticExeWindow; | ||
|  |             mUVCSWindow = uvcsWindow; | ||
|  |         } | ||
|  | 
 | ||
|  |         bool WindowStatusBar.IShelvedChangesNotification.HasNotification | ||
|  |         { | ||
|  |             get { return mHasNotification; } | ||
|  |         } | ||
|  | 
 | ||
|  |         void WindowStatusBar.IShelvedChangesNotification.SetWorkspaceWindow( | ||
|  |             WorkspaceWindow workspaceWindow) | ||
|  |         { | ||
|  |             mWorkspaceWindow = workspaceWindow; | ||
|  |         } | ||
|  | 
 | ||
|  |         void WindowStatusBar.IShelvedChangesNotification.SetShelvedChangesUpdater( | ||
|  |             IShelvedChangesUpdater shelvedChangesUpdater) | ||
|  |         { | ||
|  |             mShelvedChangesUpdater = shelvedChangesUpdater; | ||
|  |         } | ||
|  | 
 | ||
|  |         void WindowStatusBar.IShelvedChangesNotification.OnGUI() | ||
|  |         { | ||
|  |             Texture2D icon = Images.GetInfoBellNotificationIcon(); | ||
|  | 
 | ||
|  |             WindowStatusBar.DrawIcon(icon, UnityConstants.STATUS_BAR_ICON_SIZE - 2); | ||
|  | 
 | ||
|  |             WindowStatusBar.DrawNotification(new GUIContentNotification( | ||
|  |                 new GUIContent( | ||
|  |                     PlasticLocalization.Name.ShelvedChanges.GetString(), | ||
|  |                     PlasticLocalization.Name.ShelvedChangesExplanation.GetString()))); | ||
|  | 
 | ||
|  |             GenericMenu discardShelveDropdownMenu = new GenericMenu(); | ||
|  | 
 | ||
|  |             discardShelveDropdownMenu.AddItem( | ||
|  |                 new GUIContent(PlasticLocalization.Name.Apply.GetString()), | ||
|  |                 false, | ||
|  |                 ApplyPartialShelveset); | ||
|  | 
 | ||
|  |             discardShelveDropdownMenu.AddItem( | ||
|  |                 new GUIContent(PlasticLocalization.Name.DiscardShelvedChanges.GetString()), | ||
|  |                 false, | ||
|  |                 DiscardShelvedChanges); | ||
|  | 
 | ||
|  |             DrawActionButtonWithMenu.For( | ||
|  |                 PlasticLocalization.Name.ViewButton.GetString(), | ||
|  |                 PlasticLocalization.Name.ViewShelvedChangesButtonExplanation.GetString(), | ||
|  |                 ShowShelvesView, | ||
|  |                 discardShelveDropdownMenu); | ||
|  |         } | ||
|  | 
 | ||
|  |         void CheckShelvedChanges.IUpdateShelvedChangesNotification.Hide( | ||
|  |             WorkspaceInfo wkInfo) | ||
|  |         { | ||
|  |             if (!wkInfo.Equals(mWkInfo)) | ||
|  |                 return; | ||
|  | 
 | ||
|  |             mShelveInfo = null; | ||
|  | 
 | ||
|  |             mHasNotification = false; | ||
|  | 
 | ||
|  |             mUVCSWindow.Repaint(); | ||
|  |         } | ||
|  | 
 | ||
|  |         void CheckShelvedChanges.IUpdateShelvedChangesNotification.Show( | ||
|  |             WorkspaceInfo wkInfo, | ||
|  |             RepositorySpec repSpec, | ||
|  |             ChangesetInfo shelveInfo) | ||
|  |         { | ||
|  |             if (!wkInfo.Equals(mWkInfo)) | ||
|  |                 return; | ||
|  | 
 | ||
|  |             mShelveInfo = shelveInfo; | ||
|  | 
 | ||
|  |             mHasNotification = true; | ||
|  | 
 | ||
|  |             mUVCSWindow.Repaint(); | ||
|  |         } | ||
|  | 
 | ||
|  |         void ApplyPartialShelveset() | ||
|  |         { | ||
|  |             GluonShelveOperations.ApplyPartialShelveset( | ||
|  |                 mWkInfo, | ||
|  |                 mShelveInfo, | ||
|  |                 mWorkspaceWindow, | ||
|  |                 PlasticExeLauncher.BuildForResolveConflicts( | ||
|  |                     mWkInfo, true, mShowDownloadPlasticExeWindow), | ||
|  |                 mViewSwitcher.ShelvesTab, | ||
|  |                 mViewSwitcher.ShelvesTab.ProgressControls, | ||
|  |                 mViewSwitcher.PendingChangesTab, | ||
|  |                 mWorkspaceWindow.GluonProgressOperationHandler, | ||
|  |                 mWorkspaceWindow.GluonProgressOperationHandler, | ||
|  |                 mShelvedChangesUpdater, | ||
|  |                 RefreshAsset.BeforeLongAssetOperation, | ||
|  |                 () => RefreshAsset.AfterLongAssetOperation(mAssetStatusCache)); | ||
|  |         } | ||
|  | 
 | ||
|  |         void DiscardShelvedChanges() | ||
|  |         { | ||
|  |             ShelvedChangesNotificationPanelOperations.DiscardShelvedChanges( | ||
|  |                 mWkInfo, | ||
|  |                 mShelveInfo, | ||
|  |                 this, | ||
|  |                 mShelvedChangesUpdater, | ||
|  |                 null, | ||
|  |                 mWorkspaceWindow); | ||
|  |         } | ||
|  | 
 | ||
|  |         void ShowShelvesView() | ||
|  |         { | ||
|  |             TrackFeatureUseEvent.For( | ||
|  |                 mRepSpec, | ||
|  |                 TrackFeatureUseEvent.Features.SwitchAndShelve.ShowShelvesViewFromNotification); | ||
|  | 
 | ||
|  |             mViewSwitcher.ShowShelvesView(mShelveInfo); | ||
|  |         } | ||
|  | 
 | ||
|  |         bool mHasNotification; | ||
|  |         ChangesetInfo mShelveInfo; | ||
|  | 
 | ||
|  |         WorkspaceWindow mWorkspaceWindow; | ||
|  |         IShelvedChangesUpdater mShelvedChangesUpdater; | ||
|  | 
 | ||
|  |         readonly WorkspaceInfo mWkInfo; | ||
|  |         readonly RepositorySpec mRepSpec; | ||
|  |         readonly ViewSwitcher mViewSwitcher; | ||
|  |         readonly IAssetStatusCache mAssetStatusCache; | ||
|  |         readonly LaunchTool.IShowDownloadPlasticExeWindow mShowDownloadPlasticExeWindow; | ||
|  |         readonly UVCSWindow mUVCSWindow; | ||
|  |     } | ||
|  | } |