using System; using UnityEditor; using UnityEngine; using Codice.Client.Common.WebApi; using Codice.CM.Common; using PlasticGui; using PlasticGui.CloudDrive.Workspaces; using Unity.PlasticSCM.Editor.UI; namespace Unity.PlasticSCM.Editor.CloudDrive.CreateWorkspace { class CreateWorkspaceDialog : PlasticDialog, IPlasticDialogCloser { protected override Rect DefaultRect { get { var baseRect = base.DefaultRect; return new Rect(baseRect.x, baseRect.y, 850, 560); } } internal static WorkspaceCreationData CreateWorkspace( string proposedOrganization, string proposedProject, IPlasticWebRestApi restApi, IPlasticAPI plasticApi, EditorWindow parentWindow) { CreateWorkspaceDialog dialog = Create( proposedOrganization, proposedProject, restApi, plasticApi, parentWindow, null); ResponseType dialogResult = dialog.RunModal(parentWindow); WorkspaceCreationData result = mCreateWorkspacePanel.BuildCreationData(); result.Result = dialogResult == ResponseType.Ok; return result; } internal static void CreateWorkspace( IPlasticWebRestApi restApi, IPlasticAPI plasticApi, EditorWindow parentWindow, Action successOperationDelegate) { CreateWorkspaceDialog dialog = Create( string.Empty, string.Empty, restApi, plasticApi, parentWindow, successOperationDelegate); dialog.RunModal(parentWindow); } void IPlasticDialogCloser.CloseDialog() { if (mSuccessOperationDelegate == null) { OkButtonAction(); return; } WorkspaceCreationData wkCreationData = mCreateWorkspacePanel.BuildCreationData(); wkCreationData.Result = true; CreateWorkspaceOperation.CreateWorkspace( wkCreationData, PlasticGui.Plastic.API, mProgressControls, (createdWorkspace) => { OkButtonAction(); mSuccessOperationDelegate(createdWorkspace); }); } static CreateWorkspaceDialog Create( string proposedOrganization, string proposedProject, IPlasticWebRestApi restApi, IPlasticAPI plasticApi, EditorWindow parentWindow, Action successOperationDelegate) { var instance = CreateInstance(); instance.IsResizable = false; mCreateWorkspacePanel = new CreateWorkspacePanel( proposedOrganization, proposedProject, restApi, plasticApi, parentWindow, instance.mProgressControls); instance.mEnterKeyAction = instance.OkButtonAction; instance.mEscapeKeyAction = instance.CancelButtonAction; instance.mTitle = PlasticLocalization.Name.CreateCloudWorkspaceTitle.GetString(); instance.mSuccessOperationDelegate = successOperationDelegate; return instance; } protected override string GetTitle() { return mTitle; } protected override void DoComponentsArea() { bool isOperationRunning = mProgressControls.ProgressData.IsWaitingAsyncResult; mCreateWorkspacePanel.OnGUI(isOperationRunning); } protected override void DoOkButton() { if (mProgressControls.ProgressData.IsWaitingAsyncResult) GUI.enabled = false; if (NormalButton(PlasticLocalization.Name.CreateButton.GetString())) { OkButtonAction(); } GUI.enabled = true; } internal override void OkButtonAction() { WorkspaceCreationValidation.AsyncValidation( mCreateWorkspacePanel.BuildCreationData(), this, mProgressControls); } string mTitle; Action mSuccessOperationDelegate; static CreateWorkspacePanel mCreateWorkspacePanel; } }