278 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			278 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System; | ||
|  | using System.Collections.Generic; | ||
|  | using System.Linq; | ||
|  | using System.Text; | ||
|  | 
 | ||
|  | using UnityEditor; | ||
|  | using UnityEngine; | ||
|  | 
 | ||
|  | using Codice.Client.Common; | ||
|  | using Codice.CM.Client.Differences; | ||
|  | using Codice.CM.Client.Differences.Merge; | ||
|  | using MergetoolGui; | ||
|  | using PlasticGui; | ||
|  | using Unity.PlasticSCM.Editor.UI; | ||
|  | 
 | ||
|  | namespace Unity.PlasticSCM.Editor.Settings | ||
|  | { | ||
|  |     class DiffAndMergeOptionsFoldout | ||
|  |     { | ||
|  |         internal void OnActivate() | ||
|  |         { | ||
|  |             PlasticGuiConfigData data = PlasticGuiConfig.Get().Configuration; | ||
|  | 
 | ||
|  |             mComparisonMethodSelectedIndex = ComparisonMethod.GetTypeIndexFromString(data.ComparisonMethod); | ||
|  |             mDefaultEncodingSelectedIndex = Array.IndexOf(mEncodingValues, data.Encoding); | ||
|  |             mResultEncodingSelectedIndex = Array.IndexOf(mEncodingValues, data.ResultEncoding); | ||
|  | 
 | ||
|  |             mManualConflictResolution = data.MergeResolutionType == MergeResolutionType.OnlyOne.ToString(); | ||
|  |             mAutomaticConflictResolution = !mManualConflictResolution; | ||
|  | 
 | ||
|  |             mCloseMergeView = data.CloseMergeAndOpenPendingChanges; | ||
|  |             mMergeWithChanges = ClientConfig.Get().MergeWithPendingChanges(); | ||
|  |         } | ||
|  | 
 | ||
|  |         internal void OnDeactivate() | ||
|  |         { | ||
|  |             PlasticGuiConfigData guiConfigData = PlasticGuiConfig.Get().Configuration; | ||
|  | 
 | ||
|  |             guiConfigData.ComparisonMethod = ComparisonMethod.GetStringFromTypeIndex(mComparisonMethodSelectedIndex); | ||
|  |             guiConfigData.Encoding = GetEncodingValue(mDefaultEncodingSelectedIndex); | ||
|  |             guiConfigData.ResultEncoding = GetEncodingValue(mResultEncodingSelectedIndex); | ||
|  | 
 | ||
|  |             guiConfigData.MergeResolutionType = mAutomaticConflictResolution ? | ||
|  |                 MergeResolutionType.Forced.ToString() : MergeResolutionType.OnlyOne.ToString(); | ||
|  | 
 | ||
|  |             guiConfigData.CloseMergeAndOpenPendingChanges = mCloseMergeView; | ||
|  | 
 | ||
|  |             ClientConfigData configData = ClientConfig.Get().GetClientConfigData(); | ||
|  |             configData.SetMergeWithPendingChanges(mMergeWithChanges); | ||
|  | 
 | ||
|  |             ClientConfig.Get().Save(configData); | ||
|  |             PlasticGuiConfig.Get().Save(); | ||
|  |         } | ||
|  | 
 | ||
|  |         internal void OnGUI() | ||
|  |         { | ||
|  |             DrawSplitter.ForWidth(UnityConstants.SETTINGS_GUI_WIDTH); | ||
|  | 
 | ||
|  |             DrawSettingsSection(DoDiffAndMergePreferences); | ||
|  |         } | ||
|  | 
 | ||
|  |         internal void SelectComparisonMethodForTesting(ComparisonMethodTypes comparisonMethod) | ||
|  |         { | ||
|  |             mComparisonMethodSelectedIndex = (int)comparisonMethod; | ||
|  |         } | ||
|  | 
 | ||
|  |         internal void SelectDefaultEncodingForTesting(string defaultEncoding) | ||
|  |         { | ||
|  |             mDefaultEncodingSelectedIndex = Array.IndexOf(mEncodingValues, defaultEncoding); | ||
|  |         } | ||
|  | 
 | ||
|  |         internal void SelectResultEncodingForTesting(string resultEncoding) | ||
|  |         { | ||
|  |             mResultEncodingSelectedIndex = Array.IndexOf(mEncodingValues, resultEncoding); | ||
|  |         } | ||
|  | 
 | ||
|  |         internal void AutomaticConflictResolutionRadioButtonRaiseCheckedForTesting() | ||
|  |         { | ||
|  |             mAutomaticConflictResolution = true; | ||
|  |             mManualConflictResolution = false; | ||
|  |         } | ||
|  | 
 | ||
|  |         internal void ManualConflictResolutionRadioButtonRaiseCheckedForTesting() | ||
|  |         { | ||
|  |             mManualConflictResolution = true; | ||
|  |             mAutomaticConflictResolution = false; | ||
|  |         } | ||
|  | 
 | ||
|  |         internal void CloseMergeViewCheckboxRaiseCheckedForTesting() | ||
|  |         { | ||
|  |             mCloseMergeView = true; | ||
|  |         } | ||
|  | 
 | ||
|  |         internal void CloseMergeViewCheckboxRaiseUncheckedForTesting() | ||
|  |         { | ||
|  |             mCloseMergeView = false; | ||
|  |         } | ||
|  | 
 | ||
|  |         internal void MergeWithChangesCheckBoxRaiseCheckedForTesting() | ||
|  |         { | ||
|  |             mMergeWithChanges = true; | ||
|  |         } | ||
|  | 
 | ||
|  |         internal void MergeWithChangesCheckBoxRaiseUncheckedForTesting() | ||
|  |         { | ||
|  |             mMergeWithChanges = false; | ||
|  |         } | ||
|  | 
 | ||
|  |         void DoDiffAndMergePreferences() | ||
|  |         { | ||
|  |             DoComparisonMethodAndEncodingSettings(); | ||
|  | 
 | ||
|  |             DoMergeConflictResolutionSettings(); | ||
|  | 
 | ||
|  |             DoMergeViewBehaviorSettings(); | ||
|  |         } | ||
|  | 
 | ||
|  |         void DoComparisonMethodAndEncodingSettings() | ||
|  |         { | ||
|  |             GUILayout.Label( | ||
|  |                 PlasticLocalization.Name.ComparisonMethodAndEncodingTitle.GetString(), | ||
|  |                 UnityStyles.ProjectSettings.SectionTitle); | ||
|  | 
 | ||
|  |             mComparisonMethodSelectedIndex = EditorGUILayout.Popup( | ||
|  |                 PlasticLocalization.Name.ComparisonMethod.GetString(), | ||
|  |                 mComparisonMethodSelectedIndex, | ||
|  |                 mComparisonMethods); | ||
|  | 
 | ||
|  |             mDefaultEncodingSelectedIndex = EditorGUILayout.Popup( | ||
|  |                 MergetoolLocalization.Name.DefaultEncoding.GetString(), | ||
|  |                 mDefaultEncodingSelectedIndex, | ||
|  |                 mEncodingValuesToDisplay); | ||
|  | 
 | ||
|  |             mResultEncodingSelectedIndex = EditorGUILayout.Popup( | ||
|  |                 MergetoolLocalization.Name.ResultEncoding.GetString(), | ||
|  |                 mResultEncodingSelectedIndex, | ||
|  |                 mEncodingValuesToDisplay); | ||
|  |         } | ||
|  | 
 | ||
|  |         void DoMergeConflictResolutionSettings() | ||
|  |         { | ||
|  |             EditorGUILayout.Space(10); | ||
|  |             GUILayout.Label( | ||
|  |                 PlasticLocalization.Name.ConflictResolutionTitle.GetString(), | ||
|  |                 UnityStyles.ProjectSettings.SectionTitle); | ||
|  | 
 | ||
|  |             if (EditorGUILayout.Toggle( | ||
|  |                 Styles.ManualConflictResolution, | ||
|  |                 mManualConflictResolution, | ||
|  |                 new GUIStyle(EditorStyles.radioButton))) | ||
|  |             { | ||
|  |                 mManualConflictResolution = true; | ||
|  |                 mAutomaticConflictResolution = false; | ||
|  |             } | ||
|  | 
 | ||
|  |             if (EditorGUILayout.Toggle( | ||
|  |                 Styles.AutomaticConflictResolution, | ||
|  |                 mAutomaticConflictResolution, | ||
|  |                 new GUIStyle(EditorStyles.radioButton))) | ||
|  |             { | ||
|  |                 mAutomaticConflictResolution = true; | ||
|  |                 mManualConflictResolution = false; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         void DoMergeViewBehaviorSettings() | ||
|  |         { | ||
|  |             EditorGUILayout.Space(10); | ||
|  |             GUILayout.Label( | ||
|  |                 PlasticLocalization.Name.MergeViewBehaviorTitle.GetString(), | ||
|  |                 UnityStyles.ProjectSettings.SectionTitle); | ||
|  | 
 | ||
|  |             mCloseMergeView = EditorGUILayout.Toggle(Styles.CloseMergeView, mCloseMergeView); | ||
|  |             mMergeWithChanges = EditorGUILayout.Toggle(Styles.MergeWithChanges, mMergeWithChanges); | ||
|  |         } | ||
|  | 
 | ||
|  |         static void DrawSettingsSection(Action drawSettings) | ||
|  |         { | ||
|  |             float originalLabelWidth = EditorGUIUtility.labelWidth; | ||
|  | 
 | ||
|  |             try | ||
|  |             { | ||
|  |                 EditorGUIUtility.labelWidth = UnityConstants.SETTINGS_GUI_WIDTH; | ||
|  | 
 | ||
|  |                 using (new EditorGUILayout.HorizontalScope()) | ||
|  |                 { | ||
|  |                     GUILayout.Space(10); | ||
|  | 
 | ||
|  |                     using (new EditorGUILayout.VerticalScope()) | ||
|  |                     { | ||
|  |                         GUILayout.Space(10); | ||
|  | 
 | ||
|  |                         drawSettings(); | ||
|  | 
 | ||
|  |                         GUILayout.Space(10); | ||
|  |                     } | ||
|  | 
 | ||
|  |                     GUILayout.Space(10); | ||
|  |                 } | ||
|  |             } | ||
|  |             finally | ||
|  |             { | ||
|  |                 EditorGUIUtility.labelWidth = originalLabelWidth; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         class Styles | ||
|  |         { | ||
|  |             internal static GUIContent ManualConflictResolution = | ||
|  |                 new GUIContent( | ||
|  |                     PlasticLocalization.Name.ManualConflictResolution.GetString(), | ||
|  |                     PlasticLocalization.Name.ManualConflictResolutionTooltip.GetString()); | ||
|  | 
 | ||
|  |             internal static GUIContent AutomaticConflictResolution = | ||
|  |                 new GUIContent( | ||
|  |                     PlasticLocalization.Name.AutomaticConflictResolution.GetString(), | ||
|  |                     PlasticLocalization.Name.AutomaticConflictResolutionTooltip.GetString()); | ||
|  | 
 | ||
|  |             internal static GUIContent CloseMergeView = | ||
|  |                 new GUIContent( | ||
|  |                     PlasticLocalization.Name.CloseMergeAndOpenPendingChanges.GetString()); | ||
|  | 
 | ||
|  |             internal static GUIContent MergeWithChanges = | ||
|  |                 new GUIContent( | ||
|  |                     PlasticLocalization.Name.MergeWithPendingChanges.GetString(), | ||
|  |                     PlasticLocalization.Name.MergeWithPendingChangesExplanation.GetString()); | ||
|  |         } | ||
|  | 
 | ||
|  |         string GetEncodingValue(int selectedIndex) | ||
|  |         { | ||
|  |             if (selectedIndex < 0 || selectedIndex > mEncodingValues.Length) | ||
|  |                 return string.Empty; | ||
|  | 
 | ||
|  |             return mEncodingValues[selectedIndex]; | ||
|  |         } | ||
|  | 
 | ||
|  |         static string[] GetEncodingValuesToDisplay() | ||
|  |         { | ||
|  |             List<string> encodingValues = new List<string>(); | ||
|  | 
 | ||
|  |             encodingValues.AddRange(EncodingManager.GetPredefinedEncodings()); | ||
|  | 
 | ||
|  |             IEnumerable<Encoding> systemEncodings = EncodingManager.GetSystemEncodings() | ||
|  |                 .Select(ei => ei.GetEncoding()) | ||
|  |                 .OrderBy(e => e.EncodingName); | ||
|  | 
 | ||
|  |             foreach (Encoding encoding in systemEncodings) | ||
|  |             { | ||
|  |                 encodingValues.Add( | ||
|  |                     UnityMenuItem.EscapedText( | ||
|  |                         string.Format("{0} {1} ({2})", | ||
|  |                             encoding.EncodingName, encoding.WebName, encoding.CodePage.ToString()))); | ||
|  |             } | ||
|  | 
 | ||
|  |             return encodingValues.ToArray(); | ||
|  |         } | ||
|  | 
 | ||
|  |         static string[] mComparisonMethods = { | ||
|  |                 MergetoolLocalization.GetString(MergetoolLocalization.Name.IgnoreEol), | ||
|  |                 MergetoolLocalization.GetString(MergetoolLocalization.Name.IgnoreWhitespace), | ||
|  |                 MergetoolLocalization.GetString(MergetoolLocalization.Name.IgnoreEolWhitespace), | ||
|  |                 MergetoolLocalization.GetString(MergetoolLocalization.Name.RecognizeAll) }; | ||
|  | 
 | ||
|  |         static string[] mEncodingValues = EncodingManager.GetEncodingValues(); | ||
|  |         static string[] mEncodingValuesToDisplay = GetEncodingValuesToDisplay(); | ||
|  | 
 | ||
|  |         int mComparisonMethodSelectedIndex; | ||
|  |         int mDefaultEncodingSelectedIndex; | ||
|  |         int mResultEncodingSelectedIndex; | ||
|  | 
 | ||
|  |         bool mManualConflictResolution; | ||
|  |         bool mAutomaticConflictResolution; | ||
|  | 
 | ||
|  |         bool mCloseMergeView; | ||
|  |         bool mMergeWithChanges; | ||
|  |     } | ||
|  | } |