using System; using System.Collections.Generic; using System.Linq; using System.Text; using UnityEditor; using UnityEngine; namespace P4Connect { /// /// Enter Password Dialog /// public class PasswordPrompt : EditorWindow { public static VerifySettings.ConnectionConfig Cfg { set; get; } public static bool Active { get; set; } public static PasswordPrompt Instance { get { return _instance; } } private static string _newPassword; private static PasswordPrompt _instance; public static void Init() { if (Active) { Instance.Focus(); return; } Active = true; _instance = ScriptableObject.CreateInstance(typeof(PasswordPrompt)) as PasswordPrompt; if (Instance != null) { Cfg = Config.DefaultConnection; _newPassword = Cfg.Password; Instance.minSize = new UnityEngine.Vector2(240.0f, 170.0f); //Instance.title = "Password Entry"; Instance.titleContent = new GUIContent("Password Entry"); Instance.ShowUtility(); } } // Close PasswordPrompt Windows if any exist (after restart or run/ pause) public static void CloseWindows() { PasswordPrompt[] windows = Resources.FindObjectsOfTypeAll(); if (windows != null) { foreach (var win in windows) { win.Close(); } } } private static GUIStyle _pwStyle; private static GUIStyle _labelStyle; private static GUIStyle _boldLabelStyle; private static GUIStyle _fatButtonStyle; private static GUIStyle _rButtonStyle; private static GUIStyle _gButtonStyle; private static GUIStyleState _pwStyleState; static readonly GUILayoutOption ButtonWidth = GUILayout.Width(100.0f); static readonly GUILayoutOption PasswordWidth = GUILayout.Width(220.0f); static readonly GUILayoutOption ExpandWidth = GUILayout.ExpandWidth(true); static bool _stylesInitialized = false; // Static initializer called ONCE from OnGUI() after initialization private static void InitializeStyles() { GUI.skin = Config.GetP4Skin(); _fatButtonStyle = GUI.skin.GetStyle("fatButton"); _rButtonStyle = GUI.skin.GetStyle("redFatButton"); _gButtonStyle = GUI.skin.GetStyle("greenFatButton"); //_pwStyleState = new GUIStyleState() { background = Icons.GetIcon("button-green.png") as Texture2D, textColor = Color.white }; _pwStyle = new GUIStyle(GUI.skin.textField) { alignment = TextAnchor.MiddleCenter, fontSize = 20, border = new RectOffset(2, 2, 2, 2), fixedHeight = 30, //focused = _pwStyleState, }; _labelStyle = new GUIStyle(GUI.skin.label) { alignment = TextAnchor.MiddleCenter, fontSize = 14, }; _boldLabelStyle = new GUIStyle("boldLabel") { alignment = TextAnchor.MiddleCenter, fontSize = 20, }; _newPassword = ""; } void OnFocus() { EditorGUI.FocusTextInControl("password"); } void OnGUI() { if (!_stylesInitialized) { InitializeStyles(); _stylesInitialized = true; } GUILayout.Label("Perforce Password Needed", _boldLabelStyle); EditorGUILayout.BeginVertical("Box"); GUILayout.Label("Server: " + Cfg.Server, _labelStyle); GUILayout.Label("Perforce User: " + Cfg.User, _labelStyle); GUILayout.Label("", _labelStyle); GUI.SetNextControlName("password"); _newPassword = EditorGUILayout.PasswordField("Password: ", _newPassword, _pwStyle, ExpandWidth); GUILayout.EndVertical(); GUILayout.FlexibleSpace(); EditorGUILayout.BeginHorizontal(); { GUILayout.FlexibleSpace(); if (GUILayout.Button("Cancel", _rButtonStyle, ButtonWidth)) { Active = false; Close(); } if (GUILayout.Button("Ok", Cfg.Password != _newPassword ? _gButtonStyle : _fatButtonStyle, ButtonWidth)) { if (!_newPassword.Equals(Cfg.Password)) { // Password was changed Cfg.Password = _newPassword; Cfg.PasswordChanged = true; Cfg.PasswordValid = false; Cfg.ToConfig(); Active = false; if (Config.ConnectionWizardShowing) { ConnectionWizard.Window.Focus(); } else { Config.Valid = Config.CheckSettings(); Config.Refresh(); } Close(); } else { Active = false; Close(); } } } GUILayout.EndHorizontal(); } public void OnDestroy() { Active = false; if (ConnectionWizard.Window != null) { ConnectionWizard.Window.Focus(); } } } }