diff --git a/src/GitHub.Api/Localization.resx b/src/GitHub.Api/Localization.resx index 6768713f9..ba8fc9667 100644 --- a/src/GitHub.Api/Localization.resx +++ b/src/GitHub.Api/Localization.resx @@ -1,17 +1,17 @@  - @@ -286,7 +286,7 @@ Branch pushed - Initialize repository + Initialize a git repository for this project Switch branch @@ -294,4 +294,4 @@ Could not switch to branch {0} - \ No newline at end of file + diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/GitHub.Unity.csproj b/src/UnityExtension/Assets/Editor/GitHub.Unity/GitHub.Unity.csproj index c59eaeca6..ac26b427b 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/GitHub.Unity.csproj +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/GitHub.Unity.csproj @@ -151,6 +151,8 @@ + + @@ -207,7 +209,7 @@ - - \ No newline at end of file + diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/IconsAndLogos/empty-state-init.png b/src/UnityExtension/Assets/Editor/GitHub.Unity/IconsAndLogos/empty-state-init.png new file mode 100644 index 000000000..09389a7dc --- /dev/null +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/IconsAndLogos/empty-state-init.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee3c66f73cbb96d92aef34f0ef7eb9e615db83fa83b810cbc2c4eea825bd1e4c +size 5571 diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/IconsAndLogos/empty-state-init@2x.png b/src/UnityExtension/Assets/Editor/GitHub.Unity/IconsAndLogos/empty-state-init@2x.png new file mode 100644 index 000000000..c73d5222f --- /dev/null +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/IconsAndLogos/empty-state-init@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea0086690444613755947b3bc2b25390f860a362126c4a92d222da9c65ed4790 +size 14242 diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/Misc/Styles.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/Misc/Styles.cs index eb3b4489f..3fdcdc26b 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/Misc/Styles.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/Misc/Styles.cs @@ -69,6 +69,7 @@ class Styles commitFileAreaStyle, commitButtonStyle, textFieldStyle, + boldCenteredLabel, centeredLabel, commitDescriptionFieldStyle, toggleMixedStyle, @@ -94,6 +95,7 @@ class Styles localCommitIcon, repoIcon, lockIcon, + emptyStateInit, dropdownListIcon; public static Texture2D GetFileStatusIcon(GitFileStatus status, bool isLocked) @@ -556,6 +558,22 @@ public static GUIStyle CenteredLabel } } + public static GUIStyle BoldCenteredLabel + { + get + { + if (boldCenteredLabel == null) + { + boldCenteredLabel = new GUIStyle(EditorStyles.boldLabel); + boldCenteredLabel.name = "BoldCenteredLabelStyle"; + boldCenteredLabel.alignment = TextAnchor.MiddleCenter; + boldCenteredLabel.wordWrap = true; + } + return boldCenteredLabel; + } + } + + public static GUIStyle CommitDescriptionFieldStyle { get @@ -787,6 +805,19 @@ public static Texture2D LockIcon } } + public static Texture2D EmptyStateInit + { + get + { + if (emptyStateInit == null) + { + emptyStateInit = Utility.GetIcon("empty-state-init.png", "empty-state-init@2x.png"); + } + return emptyStateInit; + } + + } + public static Texture2D DropdownListIcon { get diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs index f21c7c93b..fa87e3454 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs @@ -7,123 +7,73 @@ namespace GitHub.Unity [Serializable] class InitProjectView : Subview { - private const string NoRepoTitle = "No Git repository found for this project"; - private const string NoRepoDescription = "Initialize a Git repository to track changes and collaborate with others."; - private const string NoUserOrEmailError = "Name and Email must be configured in Settings"; - - [SerializeField] private UserSettingsView userSettingsView = new UserSettingsView(); - [SerializeField] private GitPathView gitPathView = new GitPathView(); + private const string NoRepoTitle = "To begin using GitHub, initialize a git repository"; + private const string NoUserOrEmailError = "Name and email not set in git. Go into the settings tab and enter the missing information"; [NonSerialized] private bool isBusy; - - [NonSerialized] private string errorMessage; [NonSerialized] private bool isUserDataPresent; + [NonSerialized] private bool hasCompletedInitialCheck; [NonSerialized] private bool userDataHasChanged; - public override void InitializeView(IView parent) - { - base.InitializeView(parent); - - userSettingsView.InitializeView(this); - gitPathView.InitializeView(this); - - if (!string.IsNullOrEmpty(Environment.GitExecutablePath)) - { - CheckForUser(); - } - } - public override void OnEnable() { base.OnEnable(); - gitPathView.OnEnable(); userDataHasChanged = Environment.GitExecutablePath != null; } - public override void OnDataUpdate() - { - base.OnDataUpdate(); - userSettingsView.OnDataUpdate(); - gitPathView.OnDataUpdate(); - } - public override void OnGUI() { - var headerRect = EditorGUILayout.BeginHorizontal(Styles.HeaderBoxStyle); + GUILayout.BeginVertical(Styles.GenericBoxStyle); { - GUILayout.Space(5); - GUILayout.BeginVertical(GUILayout.Width(16)); - { - GUILayout.Space(5); - - var iconRect = GUILayoutUtility.GetRect(new GUIContent(Styles.BigLogo), GUIStyle.none, GUILayout.Height(20), GUILayout.Width(20)); - iconRect.y = headerRect.center.y - (iconRect.height / 2); - GUI.DrawTexture(iconRect, Styles.BigLogo, ScaleMode.ScaleToFit); - - GUILayout.Space(5); - } - GUILayout.EndVertical(); - - GUILayout.Space(5); + GUILayout.FlexibleSpace(); + GUILayout.Space(-140); - GUILayout.BeginVertical(); + GUILayout.BeginHorizontal(); { - var headerContent = new GUIContent(NoRepoTitle); - var headerTitleRect = GUILayoutUtility.GetRect(headerContent, Styles.HeaderTitleStyle); - headerTitleRect.y = headerRect.center.y - (headerTitleRect.height / 2); - - GUI.Label(headerTitleRect, headerContent, Styles.HeaderTitleStyle); + GUILayout.FlexibleSpace(); + GUILayout.Label(Styles.EmptyStateInit, GUILayout.MaxWidth(265), GUILayout.MaxHeight(136)); + GUILayout.FlexibleSpace(); } - GUILayout.EndVertical(); - } - EditorGUILayout.EndHorizontal(); - - gitPathView.OnGUI(); - - userSettingsView.OnGUI(); - - GUILayout.BeginVertical(Styles.GenericBoxStyle); - { - GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); - GUILayout.Label(NoRepoDescription, Styles.CenteredLabel); + GUILayout.Label(NoRepoTitle, Styles.BoldCenteredLabel); + GUILayout.Space(4); GUILayout.BeginHorizontal(); - GUILayout.FlexibleSpace(); - - EditorGUI.BeginDisabledGroup(IsBusy || !isUserDataPresent); { - if (GUILayout.Button(Localization.InitializeRepositoryButtonText, "Button")) + GUILayout.FlexibleSpace(); + + EditorGUI.BeginDisabledGroup(IsBusy || !isUserDataPresent); { - isBusy = true; - Manager.InitializeRepository() - .FinallyInUI(() => isBusy = false) - .Start(); + if (GUILayout.Button(Localization.InitializeRepositoryButtonText, "Button")) + { + isBusy = true; + Manager.InitializeRepository() + .FinallyInUI(() => isBusy = false) + .Start(); + } } - } - EditorGUI.EndDisabledGroup(); + EditorGUI.EndDisabledGroup(); - GUILayout.FlexibleSpace(); + GUILayout.FlexibleSpace(); + } GUILayout.EndHorizontal(); - ShowErrorMessage(); + if (hasCompletedInitialCheck && !isUserDataPresent) + { + EditorGUILayout.Space(); + EditorGUILayout.HelpBox(NoUserOrEmailError, MessageType.Error); + } GUILayout.FlexibleSpace(); } GUILayout.EndVertical(); } - private void ShowErrorMessage() + public override void OnDataUpdate() { - if (errorMessage != null) - { - GUILayout.Space(Styles.BaseSpacing); - GUILayout.BeginHorizontal(); - { - GUILayout.Label(errorMessage, Styles.CenteredErrorLabel); - } - GUILayout.EndHorizontal(); - } + base.OnDataUpdate(); + MaybeUpdateData(); } private void MaybeUpdateData() @@ -137,18 +87,24 @@ private void MaybeUpdateData() private void CheckForUser() { + if (string.IsNullOrEmpty(Environment.GitExecutablePath)) + { + Logger.Warning("No git exec cannot check for user"); + return; + } + + Logger.Trace("Checking for user"); isBusy = true; GitClient.GetConfigUserAndEmail().FinallyInUI((success, ex, strings) => { var username = strings[0]; var email = strings[1]; - isBusy = false; isUserDataPresent = success && !String.IsNullOrEmpty(username) && !String.IsNullOrEmpty(email); - errorMessage = isUserDataPresent ? null : NoUserOrEmailError; + hasCompletedInitialCheck = true; - Logger.Trace("Finally: {0}", isUserDataPresent); + Logger.Trace("User Present: {0}", isUserDataPresent); Redraw(); }).Start(); @@ -156,7 +112,7 @@ private void CheckForUser() public override bool IsBusy { - get { return isBusy || userSettingsView.IsBusy || gitPathView.IsBusy; } + get { return isBusy; } } } }