From d4f96d9b90f77ca9c6c425042fb7f6785645944b Mon Sep 17 00:00:00 2001 From: Andreia Gaita Date: Wed, 20 Sep 2017 17:24:56 +0200 Subject: [PATCH] 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,