StellarXipher/Library/PackageCache/com.unity.collab-proxy@001b54a8988a/Editor/Preferences/PlasticProjectSettingsProvider.cs
2025-02-06 16:45:46 -05:00

207 lines
6.4 KiB
C#

using System;
using System.ComponentModel;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
using Codice.Client.Common.EventTracking;
using Codice.CM.Common;
using PlasticGui;
using Unity.PlasticSCM.Editor.UI;
namespace Unity.PlasticSCM.Editor.Preferences
{
class PlasticProjectSettingsProvider : SettingsProvider
{
// Internal usage. This isn't a public API.
[EditorBrowsable(EditorBrowsableState.Never)]
public PlasticProjectSettingsProvider(
string path, SettingsScope scope = SettingsScope.User)
: base(path, scope)
{
label = UnityConstants.PROJECT_SETTINGS_TAB_TITLE;
}
// Internal usage. This isn't a public API.
[EditorBrowsable(EditorBrowsableState.Never)]
[SettingsProvider]
public static SettingsProvider CreateSettingsProvider()
{
if (!FindWorkspace.HasWorkspace(ApplicationDataPath.Get()))
return null;
PlasticApp.InitializeIfNeeded();
return new PlasticProjectSettingsProvider(
UnityConstants.PROJECT_SETTINGS_TAB_PATH, SettingsScope.Project);
}
public override void OnActivate(
string searchContext,
VisualElement rootElement)
{
mIsPluginEnabled = PlasticPluginIsEnabledPreference.IsEnabled();
mWkInfo = FindWorkspace.InfoForApplicationPath(
ApplicationDataPath.Get(), PlasticGui.Plastic.API);
mIsProjectSettingsActivated = true;
mPendingChangesOptionsFoldout.OnActivate(mWkInfo);
mDiffAndMergePreferencesFoldout.OnActivate();
}
public override void OnDeactivate()
{
if (!mIsProjectSettingsActivated)
return;
mIsProjectSettingsActivated = false;
mPendingChangesOptionsFoldout.OnDeactivate();
mDiffAndMergePreferencesFoldout.OnDeactivate();
}
public override void OnGUI(string searchContext)
{
DrawSettingsSection(
DoIsEnabledSetting);
if (!mIsPluginEnabled)
return;
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
mIsPendingChangesFoldoutOpen =
EditorGUILayout.BeginFoldoutHeaderGroup(
mIsPendingChangesFoldoutOpen,
PlasticLocalization.Name.PendingChangesOptionsSectionTitle.GetString(),
UnityStyles.ProjectSettings.FoldoutHeader);
if (mIsPendingChangesFoldoutOpen)
mPendingChangesOptionsFoldout.OnGUI();
EditorGUILayout.EndFoldoutHeaderGroup();
EditorGUILayout.EndVertical();
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
mIsDiffAndMergeFoldoutOpen =
EditorGUILayout.BeginFoldoutHeaderGroup(
mIsDiffAndMergeFoldoutOpen,
PlasticLocalization.Name.DiffAndMergeOptionsSectionTitle.GetString(),
UnityStyles.ProjectSettings.FoldoutHeader);
if (mIsDiffAndMergeFoldoutOpen)
mDiffAndMergePreferencesFoldout.OnGUI();
EditorGUILayout.EndFoldoutHeaderGroup();
EditorGUILayout.EndVertical();
}
void DoIsEnabledSetting()
{
using (new EditorGUILayout.HorizontalScope())
{
string message = PlasticLocalization.GetString(
mIsPluginEnabled ?
PlasticLocalization.Name.UnityVCSIsEnabled :
PlasticLocalization.Name.UnityVCSIsDisabled);
GUILayout.Label(
message,
EditorStyles.boldLabel,
GUILayout.Height(20));
EditorGUILayout.Space(8);
DoIsEnabledButton();
GUILayout.FlexibleSpace();
}
}
void DoIsEnabledButton()
{
if (!GUILayout.Button(PlasticLocalization.GetString(
mIsPluginEnabled ?
PlasticLocalization.Name.DisableButton :
PlasticLocalization.Name.EnableButton),
UnityStyles.ProjectSettings.ToggleOn))
{
return;
}
if (!mIsPluginEnabled)
{
mIsPluginEnabled = true;
TrackFeatureUseEvent.For(
PlasticGui.Plastic.API.GetRepositorySpec(mWkInfo),
TrackFeatureUseEvent.Features.UnityPackage.EnableManually);
PlasticPlugin.Enable();
PlasticPluginIsEnabledPreference.Enable();
return;
}
if (mIsPluginEnabled)
{
mIsPluginEnabled = false;
TrackFeatureUseEvent.For(
PlasticGui.Plastic.API.GetRepositorySpec(mWkInfo),
TrackFeatureUseEvent.Features.UnityPackage.DisableManually);
PlasticPluginIsEnabledPreference.Disable();
CloseWindowIfOpened.Plastic();
PlasticShutdown.Shutdown();
return;
}
}
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;
}
}
bool mIsPendingChangesFoldoutOpen = true;
bool mIsDiffAndMergeFoldoutOpen = true;
bool mIsProjectSettingsActivated;
bool mIsPluginEnabled;
WorkspaceInfo mWkInfo;
PendingChangesOptionsFoldout mPendingChangesOptionsFoldout = new PendingChangesOptionsFoldout();
DiffAndMergePreferencesFoldout mDiffAndMergePreferencesFoldout = new DiffAndMergePreferencesFoldout();
}
}