From 19a705928b7376fde616a5c8beb766d28c224424 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 30 Aug 2017 12:29:21 -0400 Subject: [PATCH 01/16] Start of an InitProjectView --- .../Editor/GitHub.Unity/GitHub.Unity.csproj | 1 + .../Editor/GitHub.Unity/UI/InitProjectView.cs | 105 ++++++++++++++++++ .../Assets/Editor/GitHub.Unity/UI/Window.cs | 1 + 3 files changed, 107 insertions(+) create mode 100644 src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/GitHub.Unity.csproj b/src/UnityExtension/Assets/Editor/GitHub.Unity/GitHub.Unity.csproj index ebeea0c8d..fc4c11383 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/GitHub.Unity.csproj +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/GitHub.Unity.csproj @@ -102,6 +102,7 @@ + diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs new file mode 100644 index 000000000..ebafc23c4 --- /dev/null +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs @@ -0,0 +1,105 @@ +#pragma warning disable 649 + +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEngine; +using Object = UnityEngine.Object; + +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."; + + [SerializeField] + private bool isBusy; + [SerializeField] + private bool isPublished; + + public override void OnDataUpdate() + { + base.OnDataUpdate(); + MaybeUpdateData(); + } + + public override void OnRepositoryChanged(IRepository oldRepository) + { + base.OnRepositoryChanged(oldRepository); + Refresh(); + } + + public override void OnGUI() + { + DoOfferToInitializeRepositoryGUI(); + } + + private void MaybeUpdateData() + { + isPublished = Repository != null && Repository.CurrentRemote.HasValue; + } + + private void DoOfferToInitializeRepositoryGUI() + { + var headerRect = EditorGUILayout.BeginHorizontal(Styles.HeaderBoxStyle); + { + 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.BeginVertical(); + { + 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.EndVertical(); + } + EditorGUILayout.EndHorizontal(); + + GUILayout.BeginVertical(Styles.GenericBoxStyle); + { + GUILayout.FlexibleSpace(); + + GUILayout.Label(NoRepoDescription, Styles.CenteredLabel); + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + + EditorGUI.BeginDisabledGroup(isBusy); + { + if (GUILayout.Button(Localization.InitializeRepositoryButtonText, "Button")) + { + isBusy = true; + Manager.InitializeRepository() + .FinallyInUI(() => isBusy = false) + .Start(); + } + } + EditorGUI.EndDisabledGroup(); + + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + + GUILayout.FlexibleSpace(); + } + GUILayout.EndVertical(); + } + } +} diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs index 2f44339db..7198ab1a9 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs @@ -29,6 +29,7 @@ class Window : BaseWindow [NonSerialized] private double notificationClearTime = -1; [SerializeField] private SubTab activeTab = SubTab.History; + [SerializeField] private InitProjectView initProjectTab = new InitProjectView(); [SerializeField] private BranchesView branchesTab = new BranchesView(); [SerializeField] private ChangesView changesTab = new ChangesView(); [SerializeField] private HistoryView historyTab = new HistoryView(); From 627ae7e3feb0c89ca7dd054a0c42020a50ca85fe Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 30 Aug 2017 13:04:35 -0400 Subject: [PATCH 02/16] Fixing some formatting --- .../Assets/Editor/GitHub.Unity/UI/InitProjectView.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs index ebafc23c4..f50c4f100 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs @@ -15,10 +15,8 @@ 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."; - [SerializeField] - private bool isBusy; - [SerializeField] - private bool isPublished; + [SerializeField] private bool isBusy; + [SerializeField] private bool isPublished; public override void OnDataUpdate() { From 1818a69e9767a89e8083a7cf75f1466a0bc8b86d Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 30 Aug 2017 17:58:21 -0400 Subject: [PATCH 03/16] Some refactoring and some changes that don't work yet --- .../Editor/GitHub.Unity/UI/BranchesView.cs | 4 +- .../Editor/GitHub.Unity/UI/HistoryView.cs | 70 +---------- .../Editor/GitHub.Unity/UI/InitProjectView.cs | 15 +-- .../Assets/Editor/GitHub.Unity/UI/Window.cs | 113 ++++++++++-------- 4 files changed, 70 insertions(+), 132 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs index 3a9c627f9..1baf827c7 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs @@ -110,7 +110,7 @@ private void HandleRepositoryBranchChangeEvent(string obj) public override void Refresh() { base.Refresh(); - var historyView = ((Window)Parent).HistoryTab; + var historyView = ((Window)Parent).HistoryView; #if ENABLE_BROADMODE if (historyView.BroadMode) @@ -131,7 +131,7 @@ public void RefreshEmbedded() public override void OnGUI() { - var historyView = ((Window)Parent).HistoryTab; + var historyView = ((Window)Parent).HistoryView; #if ENABLE_BROADMODE if (historyView.BroadMode) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs index 013c861c2..e47cf6dbe 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs @@ -109,7 +109,7 @@ public override void Refresh() #if ENABLE_BROADMODE if (broadMode) { - ((Window)Parent).BranchesTab.RefreshEmbedded(); + ((Window)Parent).Branches.RefreshEmbedded(); } #endif } @@ -125,12 +125,6 @@ public override void OnSelectionChange() public override void OnGUI() { - if (!HasRepository) - { - DoOfferToInitializeRepositoryGUI(); - return; - } - #if ENABLE_BROADMODE if (broadMode) OnBroadGUI(); @@ -156,7 +150,7 @@ public void OnBroadGUI() GUILayout.MaxWidth(Mathf.Max(Styles.BroadModeBranchesMinWidth, Position.width * Styles.BroadModeBranchesRatio)) ); { - ((Window)Parent).BranchesTab.OnEmbeddedGUI(); + ((Window)Parent).Branches.OnEmbeddedGUI(); } GUILayout.EndVertical(); GUILayout.BeginVertical(); @@ -270,66 +264,6 @@ private void MaybeUpdateData() } } - private void DoOfferToInitializeRepositoryGUI() - { - var headerRect = EditorGUILayout.BeginHorizontal(Styles.HeaderBoxStyle); - { - 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.BeginVertical(); - { - 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.EndVertical(); - } - EditorGUILayout.EndHorizontal(); - - GUILayout.BeginVertical(Styles.GenericBoxStyle); - { - GUILayout.FlexibleSpace(); - - GUILayout.Label(NoRepoDescription, Styles.CenteredLabel); - - GUILayout.BeginHorizontal(); - GUILayout.FlexibleSpace(); - - EditorGUI.BeginDisabledGroup(isBusy); - { - if (GUILayout.Button(Localization.InitializeRepositoryButtonText, "Button")) - { - isBusy = true; - Manager.InitializeRepository() - .FinallyInUI(() => isBusy = false) - .Start(); - } - } - EditorGUI.EndDisabledGroup(); - - GUILayout.FlexibleSpace(); - GUILayout.EndHorizontal(); - - GUILayout.FlexibleSpace(); - } - GUILayout.EndVertical(); - } - public void OnEmbeddedGUI() { // History toolbar diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs index f50c4f100..3e71dc46c 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs @@ -31,16 +31,6 @@ public override void OnRepositoryChanged(IRepository oldRepository) } public override void OnGUI() - { - DoOfferToInitializeRepositoryGUI(); - } - - private void MaybeUpdateData() - { - isPublished = Repository != null && Repository.CurrentRemote.HasValue; - } - - private void DoOfferToInitializeRepositoryGUI() { var headerRect = EditorGUILayout.BeginHorizontal(Styles.HeaderBoxStyle); { @@ -99,5 +89,10 @@ private void DoOfferToInitializeRepositoryGUI() } GUILayout.EndVertical(); } + + private void MaybeUpdateData() + { + isPublished = Repository != null && Repository.CurrentRemote.HasValue; + } } } diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs index 4cd138e60..8343a8c2c 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs @@ -29,11 +29,11 @@ class Window : BaseWindow [NonSerialized] private double notificationClearTime = -1; [SerializeField] private SubTab activeTab = SubTab.History; - [SerializeField] private InitProjectView initProjectTab = new InitProjectView(); - [SerializeField] private BranchesView branchesTab = new BranchesView(); - [SerializeField] private ChangesView changesTab = new ChangesView(); - [SerializeField] private HistoryView historyTab = new HistoryView(); - [SerializeField] private SettingsView settingsTab = new SettingsView(); + [SerializeField] private InitProjectView initProjectView = new InitProjectView(); + [SerializeField] private BranchesView branchesView = new BranchesView(); + [SerializeField] private ChangesView changesView = new ChangesView(); + [SerializeField] private HistoryView historyView = new HistoryView(); + [SerializeField] private SettingsView settingsView = new SettingsView(); [SerializeField] private string repoBranch; [SerializeField] private string repoUrl; @@ -75,10 +75,11 @@ public override void Initialize(IApplicationManager applicationManager) { base.Initialize(applicationManager); - HistoryTab.InitializeView(this); - ChangesTab.InitializeView(this); - BranchesTab.InitializeView(this); - SettingsTab.InitializeView(this); + HistoryView.InitializeView(this); + ChangesView.InitializeView(this); + BranchesView.InitializeView(this); + SettingsView.InitializeView(this); + InitProjectView.InitializeView(this); } public override void OnEnable() @@ -92,15 +93,15 @@ public override void OnEnable() // Set window title titleContent = new GUIContent(Title, Styles.SmallLogo); - if (ActiveTab != null) - ActiveTab.OnEnable(); + if (ActiveView != null) + ActiveView.OnEnable(); } public override void OnDisable() { base.OnDisable(); - if (ActiveTab != null) - ActiveTab.OnDisable(); + if (ActiveView != null) + ActiveView.OnDisable(); } public override void OnDataUpdate() @@ -121,8 +122,8 @@ public override void OnDataUpdate() } } - if (ActiveTab != null) - ActiveTab.OnDataUpdate(); + if (ActiveView != null) + ActiveView.OnDataUpdate(); } public override void OnRepositoryChanged(IRepository oldRepository) @@ -132,22 +133,22 @@ public override void OnRepositoryChanged(IRepository oldRepository) DetachHandlers(oldRepository); AttachHandlers(Repository); - if (ActiveTab != null) - ActiveTab.OnRepositoryChanged(oldRepository); + if (ActiveView != null) + ActiveView.OnRepositoryChanged(oldRepository); } public override void OnSelectionChange() { base.OnSelectionChange(); - if (ActiveTab != null) - ActiveTab.OnSelectionChange(); + if (ActiveView != null) + ActiveView.OnSelectionChange(); } public override void Refresh() { base.Refresh(); - if (ActiveTab != null) - ActiveTab.Refresh(); + if (ActiveView != null) + ActiveView.Refresh(); Repaint(); } @@ -158,14 +159,13 @@ public override void OnUI() if (HasRepository) { DoHeaderGUI(); + DoToolbarGUI(); } - DoToolbarGUI(); - // GUI for the active tab - if (ActiveTab != null) + if (ActiveView != null) { - ActiveTab.OnGUI(); + ActiveView.OnGUI(); } } @@ -210,8 +210,10 @@ private bool MaybeUpdateData(out string repoRemote) if (Repository.CurrentRemote.HasValue) repoRemote = Repository.CurrentRemote.Value.Name; } - else if (!HasRepository) + else { + + activeTab = SubTab.InitProject; repoBranch = null; repoUrl = null; } @@ -238,7 +240,6 @@ private void DetachHandlers(IRepository repository) repository.OnRepositoryInfoChanged -= RefreshOnMainThread; } - private void SwitchView(Subview from, Subview to) { GUI.FocusControl(null); @@ -281,23 +282,17 @@ private void DoToolbarGUI() SubTab tab = activeTab; EditorGUI.BeginChangeCheck(); { - if (HasRepository) - { - tab = TabButton(SubTab.Changes, ChangesTitle, tab); - tab = TabButton(SubTab.History, HistoryTitle, tab); - tab = TabButton(SubTab.Branches, BranchesTitle, tab); - } - else - { - tab = TabButton(SubTab.History, HistoryTitle, tab); - } + tab = TabButton(SubTab.Changes, ChangesTitle, tab); + tab = TabButton(SubTab.History, HistoryTitle, tab); + tab = TabButton(SubTab.Branches, BranchesTitle, tab); tab = TabButton(SubTab.Settings, SettingsTitle, tab); } + if (EditorGUI.EndChangeCheck()) { - var from = ActiveTab; + var from = ActiveView; activeTab = tab; - SwitchView(from, ActiveTab); + SwitchView(from, ActiveView); } GUILayout.FlexibleSpace(); @@ -369,27 +364,32 @@ private static SubTab TabButton(SubTab tab, string title, SubTab activeTab) return GUILayout.Toggle(activeTab == tab, title, EditorStyles.toolbarButton) ? tab : activeTab; } - public HistoryView HistoryTab + public HistoryView HistoryView { - get { return historyTab; } + get { return historyView; } } - public ChangesView ChangesTab + public ChangesView ChangesView { - get { return changesTab; } + get { return changesView; } } - public BranchesView BranchesTab + public BranchesView BranchesView { - get { return branchesTab; } + get { return branchesView; } } - public SettingsView SettingsTab + public SettingsView SettingsView { - get { return settingsTab; } + get { return settingsView; } } - private Subview ActiveTab + public InitProjectView InitProjectView + { + get { return InitProjectView; } + } + + private Subview ActiveView { get { @@ -401,20 +401,29 @@ private Subview ToView(SubTab tab) { switch (tab) { + case SubTab.InitProject: + return initProjectView; + case SubTab.History: - return historyTab; + return historyView; + case SubTab.Changes: - return changesTab; + return changesView; + case SubTab.Branches: - return branchesTab; + return branchesView; + case SubTab.Settings: + return settingsView; + default: - return settingsTab; + throw new ArgumentOutOfRangeException(); } } private enum SubTab { + InitProject, History, Changes, Branches, From 0be9c3d1a162629f30ad2cd42a2ce1a607dff85a Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Thu, 31 Aug 2017 11:32:34 -0400 Subject: [PATCH 04/16] Getting the initialize project display working --- .../Assets/Editor/GitHub.Unity/UI/Window.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs index 9fa7dfab6..28006c9ed 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs @@ -24,6 +24,7 @@ class Window : BaseWindow private const string Window_RepoBranchTooltip = "Active branch"; [NonSerialized] private double notificationClearTime = -1; + [SerializeField] private SubTab? nextTab; [SerializeField] private SubTab activeTab = SubTab.History; [SerializeField] private InitProjectView initProjectView = new InitProjectView(); @@ -159,6 +160,12 @@ public override void OnUI() DoToolbarGUI(); } + if (nextTab.HasValue) + { + SetActiveTab(nextTab.Value); + nextTab = null; + } + // GUI for the active tab if (ActiveView != null) { @@ -209,8 +216,7 @@ private bool MaybeUpdateData(out string repoRemote) } else { - - activeTab = SubTab.InitProject; + nextTab = SubTab.InitProject; repoBranch = null; repoUrl = null; } @@ -277,7 +283,7 @@ private void DoToolbarGUI() if (EditorGUI.EndChangeCheck()) { - SetActiveTab(changeTab); + nextTab = changeTab; } GUILayout.FlexibleSpace(); @@ -393,7 +399,7 @@ public SettingsView SettingsView public InitProjectView InitProjectView { - get { return InitProjectView; } + get { return initProjectView; } } private Subview ActiveView From 17370491d0783aedb161ca65a7f58b1bf24930aa Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Thu, 31 Aug 2017 11:43:02 -0400 Subject: [PATCH 05/16] Removing unused variable --- src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs index 99bed826b..5866b4b20 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs @@ -28,8 +28,6 @@ class HistoryView : Subview private const string PushConfirmCancel = "Cancel"; private const string CommitDetailsTitle = "Commit details"; private const string ClearSelectionButton = "×"; - 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 PublishButton = "Publish"; private const string FetchActionTitle = "Fetch Changes"; private const string FetchButtonText = "Fetch"; From 0a64264e3a85efa4a9961f1c54e803845dc8d0bc Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Thu, 31 Aug 2017 11:53:21 -0400 Subject: [PATCH 06/16] Fixing Window.MaybeUpdateData not to return true every time when Repo is null --- .../Assets/Editor/GitHub.Unity/UI/Window.cs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs index 28006c9ed..bd202d926 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs @@ -217,15 +217,20 @@ private bool MaybeUpdateData(out string repoRemote) else { nextTab = SubTab.InitProject; - repoBranch = null; - repoUrl = null; - } - if (repoUrl == null) - { - repoUrl = DefaultRepoUrl; - repoDataChanged = true; + if (repoBranch != null) + { + repoBranch = null; + repoDataChanged = true; + } + + if (repoUrl != DefaultRepoUrl) + { + repoUrl = DefaultRepoUrl; + repoDataChanged = true; + } } + return repoDataChanged; } From 14a24cf5c9357ae2be84f14211f9c7b11f19d8e6 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Thu, 31 Aug 2017 12:27:11 -0400 Subject: [PATCH 07/16] Changing activeTab using nextTab at the right time --- .../Assets/Editor/GitHub.Unity/UI/Window.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs index bd202d926..433c6e36e 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs @@ -197,6 +197,15 @@ private bool MaybeUpdateData(out string repoRemote) bool repoDataChanged = false; if (Repository != null) { + if (activeTab == SubTab.InitProject) + { + if (!nextTab.HasValue || nextTab.Value == SubTab.InitProject) + { + nextTab = SubTab.History; + repoDataChanged = true; + } + } + var currentBranchString = (Repository.CurrentBranch.HasValue ? Repository.CurrentBranch.Value.Name : null); if (repoBranch != currentBranchString) { @@ -216,7 +225,14 @@ private bool MaybeUpdateData(out string repoRemote) } else { - nextTab = SubTab.InitProject; + if (activeTab != SubTab.InitProject) + { + if (!nextTab.HasValue || nextTab.Value != SubTab.InitProject) + { + nextTab = SubTab.InitProject; + repoDataChanged = true; + } + } if (repoBranch != null) { From 025dc1943b8a36e3a47a87b5f76ef400d30597e3 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 6 Sep 2017 14:16:30 -0400 Subject: [PATCH 08/16] Spacing fix after rebase --- src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs index 5866b4b20..418018990 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs @@ -114,9 +114,9 @@ public override void OnSelectionChange() public override void OnGUI() { - OnEmbeddedGUI(); } + private void AttachHandlers(IRepository repository) { if (repository == null) From a843dca1f8463c287cb0e5f4ac9aa5da1a37c543 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Mon, 11 Sep 2017 10:41:50 -0400 Subject: [PATCH 09/16] Adding missing IsBusy property --- .../Assets/Editor/GitHub.Unity/UI/InitProjectView.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs index 3e71dc46c..38c186839 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs @@ -30,6 +30,11 @@ public override void OnRepositoryChanged(IRepository oldRepository) Refresh(); } + public override bool IsBusy + { + get { return isBusy; } + } + public override void OnGUI() { var headerRect = EditorGUILayout.BeginHorizontal(Styles.HeaderBoxStyle); From 594d6e62da1f21ee93cec9de7ce481c905b102ae Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Thu, 14 Sep 2017 13:56:36 -0400 Subject: [PATCH 10/16] Updating Window to give InitializeView its own tab --- .../Assets/Editor/GitHub.Unity/UI/Window.cs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs index f0bdbf6ff..3f6fc0518 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs @@ -14,6 +14,7 @@ class Window : BaseWindow private const string Title = "GitHub"; private const string LaunchMenu = "Window/GitHub"; private const string BadNotificationDelayError = "A delay of {0} is shorter than the default delay and thus would get pre-empted."; + private const string InitializeTitle = "Initialize"; private const string HistoryTitle = "History"; private const string ChangesTitle = "Changes"; private const string BranchesTitle = "Branches"; @@ -157,9 +158,10 @@ public override void OnUI() if (HasRepository) { DoHeaderGUI(); - DoToolbarGUI(); } + DoToolbarGUI(); + if (nextTab.HasValue) { SetActiveTab(nextTab.Value); @@ -225,7 +227,7 @@ private bool MaybeUpdateData(out string repoRemote) } else { - if (activeTab != SubTab.InitProject) + if (!(activeTab == SubTab.InitProject || activeTab == SubTab.Settings)) { if (!nextTab.HasValue || nextTab.Value != SubTab.InitProject) { @@ -296,9 +298,16 @@ private void DoToolbarGUI() SubTab changeTab = activeTab; EditorGUI.BeginChangeCheck(); { - changeTab = TabButton(SubTab.Changes, ChangesTitle, changeTab); - changeTab = TabButton(SubTab.History, HistoryTitle, changeTab); - changeTab = TabButton(SubTab.Branches, BranchesTitle, changeTab); + if (HasRepository) + { + changeTab = TabButton(SubTab.Changes, ChangesTitle, changeTab); + changeTab = TabButton(SubTab.History, HistoryTitle, changeTab); + changeTab = TabButton(SubTab.Branches, BranchesTitle, changeTab); + } + else + { + changeTab = TabButton(SubTab.InitProject, InitializeTitle, changeTab); + } changeTab = TabButton(SubTab.Settings, SettingsTitle, changeTab); } From 24aa102fa883d134fcdd880196e936c2840a3754 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Mon, 18 Sep 2017 16:21:57 -0400 Subject: [PATCH 11/16] Update after merge --- script | 2 +- .../Assets/Editor/GitHub.Unity/UI/Window.cs | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/script b/script index 8aa682c1a..591ff936a 160000 --- a/script +++ b/script @@ -1 +1 @@ -Subproject commit 8aa682c1a7e9e60fab2c239503e1e0553b1e7714 +Subproject commit 591ff936add8cc2e165712b523a8597a66233478 diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs index 3f6fc0518..14c212e36 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs @@ -462,11 +462,11 @@ private Subview ToView(SubTab tab) default: throw new ArgumentOutOfRangeException(); } + } - public override bool IsBusy - { - get { return false; } - } + public override bool IsBusy + { + get { return false; } } private enum SubTab From 19d18f7e0ac12c76f6068d61df62fb0fff5c85e5 Mon Sep 17 00:00:00 2001 From: Andreia Gaita Date: Wed, 20 Sep 2017 14:10:01 +0200 Subject: [PATCH 12/16] Relayout file --- .../Assets/Editor/GitHub.Unity/UI/InitProjectView.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs index 38c186839..c8ee372a3 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs @@ -30,11 +30,6 @@ public override void OnRepositoryChanged(IRepository oldRepository) Refresh(); } - public override bool IsBusy - { - get { return isBusy; } - } - public override void OnGUI() { var headerRect = EditorGUILayout.BeginHorizontal(Styles.HeaderBoxStyle); @@ -99,5 +94,10 @@ private void MaybeUpdateData() { isPublished = Repository != null && Repository.CurrentRemote.HasValue; } + + public override bool IsBusy + { + get { return isBusy; } + } } } From 62bc3b6fa85923430052ae3855e9a7051ff455c3 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 20 Sep 2017 08:38:35 -0400 Subject: [PATCH 13/16] Removing extra spaces --- src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs index 14c212e36..738634484 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs @@ -446,19 +446,14 @@ private Subview ToView(SubTab tab) { case SubTab.InitProject: return initProjectView; - case SubTab.History: return historyView; - case SubTab.Changes: return changesView; - case SubTab.Branches: return branchesView; - case SubTab.Settings: return settingsView; - default: throw new ArgumentOutOfRangeException(); } From f9bd4fc0e08c121d0a16e7aedf4258af2dfbc602 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 20 Sep 2017 08:51:31 -0400 Subject: [PATCH 14/16] Making nextTab not nullable --- .../Assets/Editor/GitHub.Unity/UI/Window.cs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs index 738634484..f58c44e60 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs @@ -25,8 +25,7 @@ class Window : BaseWindow private const string Window_RepoBranchTooltip = "Active branch"; [NonSerialized] private double notificationClearTime = -1; - [SerializeField] private SubTab? nextTab; - + [SerializeField] private SubTab nextTab = SubTab.History; [SerializeField] private SubTab activeTab = SubTab.History; [SerializeField] private InitProjectView initProjectView = new InitProjectView(); [SerializeField] private BranchesView branchesView = new BranchesView(); @@ -162,10 +161,10 @@ public override void OnUI() DoToolbarGUI(); - if (nextTab.HasValue) + if (nextTab != activeTab) { - SetActiveTab(nextTab.Value); - nextTab = null; + SetActiveTab(nextTab); + nextTab = activeTab; } // GUI for the active tab @@ -201,7 +200,7 @@ private bool MaybeUpdateData(out string repoRemote) { if (activeTab == SubTab.InitProject) { - if (!nextTab.HasValue || nextTab.Value == SubTab.InitProject) + if (nextTab == SubTab.InitProject) { nextTab = SubTab.History; repoDataChanged = true; @@ -229,7 +228,7 @@ private bool MaybeUpdateData(out string repoRemote) { if (!(activeTab == SubTab.InitProject || activeTab == SubTab.Settings)) { - if (!nextTab.HasValue || nextTab.Value != SubTab.InitProject) + if (!(nextTab == SubTab.InitProject || activeTab == SubTab.Settings)) { nextTab = SubTab.InitProject; repoDataChanged = true; From d47246d202dfb3827c3e40422f5b6e12eaa377ef Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 20 Sep 2017 09:11:35 -0400 Subject: [PATCH 15/16] Changing where the tabs get swtiched; Inlining some methods for clarity --- .../Assets/Editor/GitHub.Unity/UI/Window.cs | 43 +++++++------------ 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs index f58c44e60..b218bc584 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs @@ -120,6 +120,21 @@ public override void OnDataUpdate() } } + if (nextTab != activeTab) + { + var fromView = ActiveView; + activeTab = nextTab; + + GUI.FocusControl(null); + + if (fromView != null) + fromView.OnDisable(); + + ActiveView.OnEnable(); + + Refresh(); + } + if (ActiveView != null) ActiveView.OnDataUpdate(); } @@ -161,12 +176,6 @@ public override void OnUI() DoToolbarGUI(); - if (nextTab != activeTab) - { - SetActiveTab(nextTab); - nextTab = activeTab; - } - // GUI for the active tab if (ActiveView != null) { @@ -323,28 +332,6 @@ private void DoToolbarGUI() EditorGUILayout.EndHorizontal(); } - private void SetActiveTab(SubTab changeTab) - { - if (changeTab != activeTab) - { - var fromView = ActiveView; - activeTab = changeTab; - SwitchView(fromView, ActiveView); - } - } - - private void SwitchView(Subview fromView, Subview toView) - { - GUI.FocusControl(null); - - if (fromView != null) - fromView.OnDisable(); - - toView.OnEnable(); - - Refresh(); - } - private void DoAccountDropdown() { GenericMenu accountMenu = new GenericMenu(); From d4f96d9b90f77ca9c6c425042fb7f6785645944b Mon Sep 17 00:00:00 2001 From: Andreia Gaita Date: Wed, 20 Sep 2017 17:24:56 +0200 Subject: [PATCH 16/16] Cleanup the switching of the tabs --- .../Editor/GitHub.Unity/UI/BaseWindow.cs | 30 ++--- .../Assets/Editor/GitHub.Unity/UI/Window.cs | 116 +++++++++--------- 2 files changed, 67 insertions(+), 79 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BaseWindow.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BaseWindow.cs index 6d66a00f6..03ce9534c 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BaseWindow.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BaseWindow.cs @@ -17,21 +17,15 @@ public virtual void Initialize(IApplicationManager applicationManager) Logger.Trace("Initialize ApplicationManager:{0} Initialized:{1}", applicationManager, initialized); } - public void InitializeWindow(IApplicationManager applicationManager) + public void InitializeWindow(IApplicationManager applicationManager, bool requiresRedraw = true) { - if (inLayout) - { - initializeWasCalled = true; - cachedManager = applicationManager; - return; - } - + initialized = true; + initializeWasCalled = true; Manager = applicationManager; cachedRepository = Environment.Repository; - initialized = true; Initialize(applicationManager); - OnRepositoryChanged(null); - Redraw(); + if (requiresRedraw) + Redraw(); } public virtual void Redraw() @@ -51,14 +45,14 @@ public virtual void Awake() { Logger.Trace("Awake Initialized:{0}", initialized); if (!initialized) - InitializeWindow(EntryPoint.ApplicationManager); + InitializeWindow(EntryPoint.ApplicationManager, false); } public virtual void OnEnable() { Logger.Trace("OnEnable Initialized:{0}", initialized); if (!initialized) - InitializeWindow(EntryPoint.ApplicationManager); + InitializeWindow(EntryPoint.ApplicationManager, false); } public virtual void OnDisable() @@ -81,8 +75,9 @@ private void OnGUI() { if (Event.current.type == EventType.layout) { - if (cachedRepository != Environment.Repository) + if (cachedRepository != Environment.Repository || initializeWasCalled) { + initializeWasCalled = false; OnRepositoryChanged(cachedRepository); cachedRepository = Environment.Repository; } @@ -95,11 +90,6 @@ private void OnGUI() if (Event.current.type == EventType.repaint) { inLayout = false; - if (initializeWasCalled) - { - initializeWasCalled = false; - InitializeWindow(cachedManager); - } } } @@ -113,7 +103,7 @@ public virtual void OnSelectionChange() public IApplicationManager Manager { get; private set; } public abstract bool IsBusy { get; } public IRepository Repository { get { return inLayout ? cachedRepository : Environment.Repository; } } - public bool HasRepository { get { return Environment.RepositoryPath != null; } } + public bool HasRepository { get { return Repository != null; } } protected ITaskManager TaskManager { get { return Manager.TaskManager; } } protected IGitClient GitClient { get { return Manager.GitClient; } } diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs index b218bc584..cf9da47f6 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs @@ -25,7 +25,7 @@ class Window : BaseWindow private const string Window_RepoBranchTooltip = "Active branch"; [NonSerialized] private double notificationClearTime = -1; - [SerializeField] private SubTab nextTab = SubTab.History; + [SerializeField] private SubTab changeTab = SubTab.History; [SerializeField] private SubTab activeTab = SubTab.History; [SerializeField] private InitProjectView initProjectView = new InitProjectView(); [SerializeField] private BranchesView branchesView = new BranchesView(); @@ -73,6 +73,9 @@ public override void Initialize(IApplicationManager applicationManager) { base.Initialize(applicationManager); + if (!HasRepository && activeTab != SubTab.InitProject && activeTab != SubTab.Settings) + changeTab = activeTab = SubTab.InitProject; + HistoryView.InitializeView(this); ChangesView.InitializeView(this); BranchesView.InitializeView(this); @@ -120,21 +123,6 @@ public override void OnDataUpdate() } } - if (nextTab != activeTab) - { - var fromView = ActiveView; - activeTab = nextTab; - - GUI.FocusControl(null); - - if (fromView != null) - fromView.OnDisable(); - - ActiveView.OnEnable(); - - Refresh(); - } - if (ActiveView != null) ActiveView.OnDataUpdate(); } @@ -146,8 +134,16 @@ public override void OnRepositoryChanged(IRepository oldRepository) DetachHandlers(oldRepository); AttachHandlers(Repository); + if (Repository != null && activeTab == SubTab.InitProject) + { + changeTab = SubTab.History; + } + + UpdateActiveTab(); + if (ActiveView != null) ActiveView.OnRepositoryChanged(oldRepository); + } public override void OnSelectionChange() @@ -207,15 +203,6 @@ private bool MaybeUpdateData(out string repoRemote) bool repoDataChanged = false; if (Repository != null) { - if (activeTab == SubTab.InitProject) - { - if (nextTab == SubTab.InitProject) - { - nextTab = SubTab.History; - repoDataChanged = true; - } - } - var currentBranchString = (Repository.CurrentBranch.HasValue ? Repository.CurrentBranch.Value.Name : null); if (repoBranch != currentBranchString) { @@ -235,15 +222,6 @@ private bool MaybeUpdateData(out string repoRemote) } else { - if (!(activeTab == SubTab.InitProject || activeTab == SubTab.Settings)) - { - if (!(nextTab == SubTab.InitProject || activeTab == SubTab.Settings)) - { - nextTab = SubTab.InitProject; - repoDataChanged = true; - } - } - if (repoBranch != null) { repoBranch = null; @@ -303,7 +281,7 @@ private void DoToolbarGUI() // Subtabs & toolbar Rect mainNavRect = EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); { - SubTab changeTab = activeTab; + changeTab = activeTab; EditorGUI.BeginChangeCheck(); { if (HasRepository) @@ -321,7 +299,7 @@ private void DoToolbarGUI() if (EditorGUI.EndChangeCheck()) { - nextTab = changeTab; + UpdateActiveTab(); } GUILayout.FlexibleSpace(); @@ -332,6 +310,28 @@ private void DoToolbarGUI() EditorGUILayout.EndHorizontal(); } + private void UpdateActiveTab() + { + if (changeTab != activeTab) + { + var fromView = ActiveView; + activeTab = changeTab; + SwitchView(fromView, ActiveView); + } + } + + private void SwitchView(Subview fromView, Subview toView) + { + GUI.FocusControl(null); + + if (fromView != null) + fromView.OnDisable(); + toView.OnEnable(); + + // this triggers a repaint + Repaint(); + } + private void DoAccountDropdown() { GenericMenu accountMenu = new GenericMenu(); @@ -393,6 +393,25 @@ private static SubTab TabButton(SubTab tab, string title, SubTab activeTab) return GUILayout.Toggle(activeTab == tab, title, EditorStyles.toolbarButton) ? tab : activeTab; } + private Subview ToView(SubTab tab) + { + switch (tab) + { + case SubTab.InitProject: + return initProjectView; + case SubTab.History: + return historyView; + case SubTab.Changes: + return changesView; + case SubTab.Branches: + return branchesView; + case SubTab.Settings: + return settingsView; + default: + throw new ArgumentOutOfRangeException(); + } + } + public HistoryView HistoryView { get { return historyView; } @@ -420,29 +439,7 @@ public InitProjectView InitProjectView private Subview ActiveView { - get - { - return ToView(activeTab); - } - } - - private Subview ToView(SubTab tab) - { - switch (tab) - { - case SubTab.InitProject: - return initProjectView; - case SubTab.History: - return historyView; - case SubTab.Changes: - return changesView; - case SubTab.Branches: - return branchesView; - case SubTab.Settings: - return settingsView; - default: - throw new ArgumentOutOfRangeException(); - } + get { return ToView(activeTab); } } public override bool IsBusy @@ -452,6 +449,7 @@ public override bool IsBusy private enum SubTab { + None, InitProject, History, Changes,