Files
Test/Library/PackageCache/com.unity.collab-proxy@4628d2ba6ea4/Editor/Views/Labels/Dialogs/CreateLabelDialog.cs
T
2026-11-01 23:39:55 +02:00

227 lines
7.6 KiB
C#

using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
using Codice.CM.Common;
using PlasticGui;
using PlasticGui.WorkspaceWindow.QueryViews.Labels;
using Unity.PlasticSCM.Editor.UI.UIElements;
using Unity.PlasticSCM.Editor.Views.Changesets;
using ImguiProgressControls = Unity.PlasticSCM.Editor.UI.Progress.ProgressControlsForDialogs;
namespace Unity.PlasticSCM.Editor.Views.Labels.Dialogs
{
internal class CreateLabelDialog : EditorWindow
{
internal const string CHANGESET_SELECT_BUTTON = "create-label-changeset-select-button";
internal const string CHANGESET_BACK_BUTTON = "create-label-changeset-back-button";
internal static LabelCreationData CreateLabel(
EditorWindow parentWindow,
WorkspaceInfo wkInfo)
{
RepositorySpec repSpec = PlasticGui.Plastic.API.GetRepositorySpec(wkInfo);
long currentChangesetId =
PlasticGui.Plastic.API.GetCurrentChangesetOnWorkspace(wkInfo);
CreateLabelDialog dialog = CreateInstance<CreateLabelDialog>();
dialog.mWkInfo = wkInfo;
dialog.mRepSpec = repSpec;
dialog.mInitialChangesetId = currentChangesetId;
dialog.titleContent = new GUIContent(
PlasticLocalization.Name.CreateLabelTitle.GetString());
dialog.SetFixedSize(FORM_HEIGHT);
dialog.CenterOnMainWindow(FORM_HEIGHT);
dialog.ShowModalUtility();
return dialog.mResult ?? new LabelCreationData();
}
internal void OkButtonAction()
{
ChangesetInfo changesetInfo =
ChangesetsSelection.GetSelectedChangeset(mChangesetExplorerView.Table);
if (changesetInfo == null)
return;
mCreateLabelView.SetChangesetId(changesetInfo.ChangesetId);
ShowForm();
}
void CreateGUI()
{
VisualElement root = rootVisualElement;
root.style.paddingTop = MARGIN;
root.style.paddingBottom = MARGIN;
root.style.paddingLeft = MARGIN;
root.style.paddingRight = MARGIN;
mExplanationLabel = new Label(
PlasticLocalization.Name.CreateLabelExplanation.GetString());
mExplanationLabel.style.marginBottom = MARGIN;
mExplanationLabel.style.whiteSpace = WhiteSpace.Normal;
root.Add(mExplanationLabel);
mCreateLabelView = new CreateLabelViewUIToolkit(mRepSpec, mInitialChangesetId);
mCreateLabelView.Confirmed += OnFormConfirmed;
mCreateLabelView.Cancelled += OnFormCancelled;
mCreateLabelView.ChooseChangesetRequested += ShowChangesetExplorer;
root.Add(mCreateLabelView);
mExplorerProgressControls = new ImguiProgressControls();
mChangesetExplorerView = new ChangesetExplorerView(
this, mWkInfo, mExplorerProgressControls);
mExplorerContainer = BuildExplorerContainer();
mExplorerContainer.style.display = DisplayStyle.None;
root.Add(mExplorerContainer);
}
VisualElement BuildExplorerContainer()
{
VisualElement container = new VisualElement();
container.style.flexGrow = 1;
Label explanation = new Label(
PlasticLocalization.Name.SelectChangesetBelow.GetString());
explanation.style.marginBottom = MARGIN;
explanation.style.whiteSpace = WhiteSpace.Normal;
IMGUIContainer explorer = new IMGUIContainer(OnExplorerGUI);
explorer.style.flexGrow = 1;
VisualElement buttons = new VisualElement();
buttons.style.flexDirection = FlexDirection.Row;
buttons.style.justifyContent = Justify.FlexEnd;
buttons.style.marginTop = ROW_SPACING;
Button selectButton = ControlBuilder.Button.CreateButton(
PlasticLocalization.Name.OkButton.GetString(), OkButtonAction);
selectButton.name = CHANGESET_SELECT_BUTTON;
selectButton.style.minWidth = BUTTON_WIDTH;
Button backButton = ControlBuilder.Button.CreateButton(
PlasticLocalization.Name.BackButton.GetString(), ShowForm);
backButton.name = CHANGESET_BACK_BUTTON;
backButton.style.minWidth = BUTTON_WIDTH;
if (Application.platform == RuntimePlatform.WindowsEditor)
{
buttons.Add(selectButton);
buttons.Add(backButton);
}
else
{
buttons.Add(backButton);
buttons.Add(selectButton);
}
container.Add(explanation);
container.Add(explorer);
container.Add(buttons);
container.RegisterCallback<KeyDownEvent>(
OnExplorerKeyDown, TrickleDown.TrickleDown);
return container;
}
void OnExplorerKeyDown(KeyDownEvent e)
{
if (e.keyCode == KeyCode.Return ||
e.keyCode == KeyCode.KeypadEnter)
{
OkButtonAction();
e.StopPropagation();
return;
}
if (e.keyCode == KeyCode.Escape)
{
ShowForm();
e.StopPropagation();
}
}
void OnExplorerGUI()
{
mChangesetExplorerView.OnGUI();
mExplorerProgressControls.UpdateProgress(this);
}
void ShowChangesetExplorer()
{
mExplanationLabel.style.display = DisplayStyle.None;
mCreateLabelView.style.display = DisplayStyle.None;
mExplorerContainer.style.display = DisplayStyle.Flex;
SetFixedSize(EXPLORER_HEIGHT);
titleContent.text = PlasticLocalization.Name.AvailableChangesets.GetString();
}
void SetFixedSize(float height)
{
Vector2 size = new Vector2(DIALOG_WIDTH, height);
minSize = size;
maxSize = size;
}
void CenterOnMainWindow(float height)
{
Rect mainWindow = EditorGUIUtility.GetMainWindowPosition();
position = new Rect(
mainWindow.x + (mainWindow.width - DIALOG_WIDTH) / 2f,
mainWindow.y + (mainWindow.height - height) / 2f,
DIALOG_WIDTH,
height);
}
void ShowForm()
{
mExplorerContainer.style.display = DisplayStyle.None;
mExplanationLabel.style.display = DisplayStyle.Flex;
mCreateLabelView.style.display = DisplayStyle.Flex;
SetFixedSize(FORM_HEIGHT);
titleContent.text = PlasticLocalization.Name.CreateLabelTitle.GetString();
}
void OnFormConfirmed()
{
mResult = mCreateLabelView.BuildCreationData();
mResult.Result = true;
Close();
}
void OnFormCancelled()
{
Close();
}
CreateLabelViewUIToolkit mCreateLabelView;
ChangesetExplorerView mChangesetExplorerView;
ImguiProgressControls mExplorerProgressControls;
VisualElement mExplorerContainer;
Label mExplanationLabel;
LabelCreationData mResult;
WorkspaceInfo mWkInfo;
RepositorySpec mRepSpec;
long mInitialChangesetId;
const float DIALOG_WIDTH = 710f;
const float FORM_HEIGHT = 340f;
const float EXPLORER_HEIGHT = 480f;
const float MARGIN = 12f;
const float ROW_SPACING = 5f;
const float BUTTON_WIDTH = 80f;
}
}