Net-Game/Library/PackageCache/com.unity.collab-proxy@50ac96531b63/Editor/Settings/DiffAndMergeOptionsFoldout.cs
2025-03-28 08:33:16 -04:00

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;
}
}