208 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			208 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using UnityEditor; | ||
|  | using UnityEngine; | ||
|  | 
 | ||
|  | using Codice.Client.Common; | ||
|  | 
 | ||
|  | using Codice.Client.Commands; | ||
|  | using PlasticGui; | ||
|  | using PlasticGui.WorkspaceWindow.Update; | ||
|  | using Unity.PlasticSCM.Editor.UI; | ||
|  | 
 | ||
|  | namespace Unity.PlasticSCM.Editor.Views | ||
|  | { | ||
|  |     internal class ContinueWithPendingChangesQuestionerBuilder : | ||
|  |         SwitchController.IContinueWithPendingChangesQuestionerBuilder | ||
|  |     { | ||
|  |         internal ContinueWithPendingChangesQuestionerBuilder( | ||
|  |             IViewSwitcher viewSwitcher, | ||
|  |             EditorWindow parentWindow) | ||
|  |         { | ||
|  |             mViewSwitcher = viewSwitcher; | ||
|  |             mParentWindow = parentWindow; | ||
|  |         } | ||
|  | 
 | ||
|  |         public IContinueWithPendingChangesQuestioner Get(string title, string explanation) | ||
|  |         { | ||
|  |             return new ContinueWithPendingChangesQuestioner( | ||
|  |                 title, | ||
|  |                 explanation, | ||
|  |                 mViewSwitcher, | ||
|  |                 mParentWindow); | ||
|  |         } | ||
|  | 
 | ||
|  |         IViewSwitcher mViewSwitcher; | ||
|  |         EditorWindow mParentWindow; | ||
|  |     } | ||
|  | 
 | ||
|  |     internal class ContinueWithPendingChangesQuestioner : IContinueWithPendingChangesQuestioner | ||
|  |     { | ||
|  |         internal ContinueWithPendingChangesQuestioner( | ||
|  |             string title, | ||
|  |             string explanation, | ||
|  |             IViewSwitcher viewSwitcher, | ||
|  |             EditorWindow parentWindow) | ||
|  |         { | ||
|  |             mTitle = title; | ||
|  |             mExplanation = explanation; | ||
|  |             mViewSwitcher = viewSwitcher; | ||
|  |             mParentWindow = parentWindow; | ||
|  |         } | ||
|  | 
 | ||
|  |         public bool ContinueWithPendingChanges() | ||
|  |         { | ||
|  |             bool result = false; | ||
|  | 
 | ||
|  |             GUIActionRunner.RunGUIAction(() => | ||
|  |             { | ||
|  |                 result = ConfirmContinueWithPendingChangesDialog.ConfirmContinue( | ||
|  |                     mTitle, | ||
|  |                     mExplanation, | ||
|  |                     mViewSwitcher, | ||
|  |                     mParentWindow); | ||
|  |             }); | ||
|  | 
 | ||
|  |             return result; | ||
|  |         } | ||
|  | 
 | ||
|  |         string mTitle; | ||
|  |         string mExplanation; | ||
|  |         IViewSwitcher mViewSwitcher; | ||
|  |         EditorWindow mParentWindow; | ||
|  |     } | ||
|  |      | ||
|  |     internal class ConfirmContinueWithPendingChangesDialog : PlasticDialog | ||
|  |     { | ||
|  |         protected override Rect DefaultRect | ||
|  |         { | ||
|  |             get | ||
|  |             { | ||
|  |                 var baseRect = base.DefaultRect; | ||
|  |                 return new Rect(baseRect.x, baseRect.y, 500, 287); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         internal static bool ConfirmContinue( | ||
|  |             string title, | ||
|  |             string explanation, | ||
|  |             IViewSwitcher viewSwitcher, | ||
|  |             EditorWindow parentWindow) | ||
|  |         { | ||
|  |             ConfirmContinueWithPendingChangesDialog dialog = Create( | ||
|  |                 title, | ||
|  |                 explanation, | ||
|  |                 viewSwitcher); | ||
|  | 
 | ||
|  |             if (dialog.RunModal(parentWindow) != ResponseType.Ok) | ||
|  |                 return false; | ||
|  | 
 | ||
|  |             if (dialog.mIsSwitchToConfirmationChecked) | ||
|  |                 SavePreference(); | ||
|  | 
 | ||
|  |             return true; | ||
|  |         } | ||
|  | 
 | ||
|  |         static ConfirmContinueWithPendingChangesDialog Create( | ||
|  |             string title, | ||
|  |             string explanation, | ||
|  |             IViewSwitcher viewSwitcher) | ||
|  |         { | ||
|  |             var instance = CreateInstance<ConfirmContinueWithPendingChangesDialog>(); | ||
|  |             instance.mTitle = title; | ||
|  |             instance.mExplanation = explanation; | ||
|  |             instance.mViewSwitcher = viewSwitcher; | ||
|  |             return instance; | ||
|  |         } | ||
|  | 
 | ||
|  |         static void SavePreference() | ||
|  |         { | ||
|  |             ClientConfigData data = ClientConfig.Get().GetClientConfigData(); | ||
|  |             data.SetPendingChangesOnSwitchAction(UserAction.None); | ||
|  |             ClientConfig.Get().Save(data); | ||
|  |         } | ||
|  | 
 | ||
|  |         protected override string GetTitle() | ||
|  |         { | ||
|  |             return mTitle; | ||
|  |         } | ||
|  | 
 | ||
|  |         protected override void OnModalGUI() | ||
|  |         { | ||
|  |             Title(mTitle); | ||
|  | 
 | ||
|  |             Paragraph(mExplanation); | ||
|  | 
 | ||
|  |             DoSwitchToConfirmationCheckButton(); | ||
|  | 
 | ||
|  |             GUILayout.Space(10); | ||
|  | 
 | ||
|  |             DoButtonsArea(); | ||
|  |         } | ||
|  | 
 | ||
|  |         void DoSwitchToConfirmationCheckButton() | ||
|  |         { | ||
|  |             using (new EditorGUILayout.HorizontalScope()) | ||
|  |             { | ||
|  |                 GUILayout.FlexibleSpace(); | ||
|  | 
 | ||
|  |                 mIsSwitchToConfirmationChecked = TitleToggle( | ||
|  |                     PlasticLocalization.GetString( | ||
|  |                         PlasticLocalization.Name.SwitchToConfirmationCheckButton), | ||
|  |                     mIsSwitchToConfirmationChecked); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         void DoButtonsArea() | ||
|  |         { | ||
|  |             using (new EditorGUILayout.HorizontalScope()) | ||
|  |             { | ||
|  |                 GUILayout.FlexibleSpace(); | ||
|  | 
 | ||
|  |                 if (Application.platform == RuntimePlatform.WindowsEditor) | ||
|  |                 { | ||
|  |                     DoContinueButton(); | ||
|  |                     DoCancelAndViewPendingChangesButton(); | ||
|  |                     DoCancelButton(); | ||
|  |                     return; | ||
|  |                 } | ||
|  | 
 | ||
|  |                 DoCancelButton(); | ||
|  |                 DoCancelAndViewPendingChangesButton(); | ||
|  |                 DoContinueButton(); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         void DoContinueButton() | ||
|  |         { | ||
|  |             if (!NormalButton(PlasticLocalization.GetString( | ||
|  |                     PlasticLocalization.Name.SwitchToConfirmationContinueButton))) | ||
|  |                 return; | ||
|  | 
 | ||
|  |             OkButtonAction(); | ||
|  |         } | ||
|  | 
 | ||
|  |         void DoCancelButton() | ||
|  |         { | ||
|  |             if (!NormalButton(PlasticLocalization.GetString( | ||
|  |                     PlasticLocalization.Name.CancelButton))) | ||
|  |                 return; | ||
|  | 
 | ||
|  |             CancelButtonAction(); | ||
|  |         } | ||
|  | 
 | ||
|  |         void DoCancelAndViewPendingChangesButton() | ||
|  |         { | ||
|  |             if (!NormalButton(PlasticLocalization.GetString( | ||
|  |                     PlasticLocalization.Name.SwitchToConfirmationCancelViewChangesButton))) | ||
|  |                 return; | ||
|  | 
 | ||
|  |             mViewSwitcher.ShowPendingChanges(); | ||
|  |             CancelButtonAction(); | ||
|  |         } | ||
|  | 
 | ||
|  |         string mTitle; | ||
|  |         string mExplanation; | ||
|  |         IViewSwitcher mViewSwitcher; | ||
|  | 
 | ||
|  |         bool mIsSwitchToConfirmationChecked; | ||
|  |     } | ||
|  | } |