Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit d4f96d9

Browse files
committed
Cleanup the switching of the tabs
1 parent d47246d commit d4f96d9

File tree

2 files changed

+67
-79
lines changed

2 files changed

+67
-79
lines changed

src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BaseWindow.cs

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,15 @@ public virtual void Initialize(IApplicationManager applicationManager)
1717
Logger.Trace("Initialize ApplicationManager:{0} Initialized:{1}", applicationManager, initialized);
1818
}
1919

20-
public void InitializeWindow(IApplicationManager applicationManager)
20+
public void InitializeWindow(IApplicationManager applicationManager, bool requiresRedraw = true)
2121
{
22-
if (inLayout)
23-
{
24-
initializeWasCalled = true;
25-
cachedManager = applicationManager;
26-
return;
27-
}
28-
22+
initialized = true;
23+
initializeWasCalled = true;
2924
Manager = applicationManager;
3025
cachedRepository = Environment.Repository;
31-
initialized = true;
3226
Initialize(applicationManager);
33-
OnRepositoryChanged(null);
34-
Redraw();
27+
if (requiresRedraw)
28+
Redraw();
3529
}
3630

3731
public virtual void Redraw()
@@ -51,14 +45,14 @@ public virtual void Awake()
5145
{
5246
Logger.Trace("Awake Initialized:{0}", initialized);
5347
if (!initialized)
54-
InitializeWindow(EntryPoint.ApplicationManager);
48+
InitializeWindow(EntryPoint.ApplicationManager, false);
5549
}
5650

5751
public virtual void OnEnable()
5852
{
5953
Logger.Trace("OnEnable Initialized:{0}", initialized);
6054
if (!initialized)
61-
InitializeWindow(EntryPoint.ApplicationManager);
55+
InitializeWindow(EntryPoint.ApplicationManager, false);
6256
}
6357

6458
public virtual void OnDisable()
@@ -81,8 +75,9 @@ private void OnGUI()
8175
{
8276
if (Event.current.type == EventType.layout)
8377
{
84-
if (cachedRepository != Environment.Repository)
78+
if (cachedRepository != Environment.Repository || initializeWasCalled)
8579
{
80+
initializeWasCalled = false;
8681
OnRepositoryChanged(cachedRepository);
8782
cachedRepository = Environment.Repository;
8883
}
@@ -95,11 +90,6 @@ private void OnGUI()
9590
if (Event.current.type == EventType.repaint)
9691
{
9792
inLayout = false;
98-
if (initializeWasCalled)
99-
{
100-
initializeWasCalled = false;
101-
InitializeWindow(cachedManager);
102-
}
10393
}
10494
}
10595

@@ -113,7 +103,7 @@ public virtual void OnSelectionChange()
113103
public IApplicationManager Manager { get; private set; }
114104
public abstract bool IsBusy { get; }
115105
public IRepository Repository { get { return inLayout ? cachedRepository : Environment.Repository; } }
116-
public bool HasRepository { get { return Environment.RepositoryPath != null; } }
106+
public bool HasRepository { get { return Repository != null; } }
117107

118108
protected ITaskManager TaskManager { get { return Manager.TaskManager; } }
119109
protected IGitClient GitClient { get { return Manager.GitClient; } }

src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs

Lines changed: 57 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class Window : BaseWindow
2525
private const string Window_RepoBranchTooltip = "Active branch";
2626

2727
[NonSerialized] private double notificationClearTime = -1;
28-
[SerializeField] private SubTab nextTab = SubTab.History;
28+
[SerializeField] private SubTab changeTab = SubTab.History;
2929
[SerializeField] private SubTab activeTab = SubTab.History;
3030
[SerializeField] private InitProjectView initProjectView = new InitProjectView();
3131
[SerializeField] private BranchesView branchesView = new BranchesView();
@@ -73,6 +73,9 @@ public override void Initialize(IApplicationManager applicationManager)
7373
{
7474
base.Initialize(applicationManager);
7575

76+
if (!HasRepository && activeTab != SubTab.InitProject && activeTab != SubTab.Settings)
77+
changeTab = activeTab = SubTab.InitProject;
78+
7679
HistoryView.InitializeView(this);
7780
ChangesView.InitializeView(this);
7881
BranchesView.InitializeView(this);
@@ -120,21 +123,6 @@ public override void OnDataUpdate()
120123
}
121124
}
122125

123-
if (nextTab != activeTab)
124-
{
125-
var fromView = ActiveView;
126-
activeTab = nextTab;
127-
128-
GUI.FocusControl(null);
129-
130-
if (fromView != null)
131-
fromView.OnDisable();
132-
133-
ActiveView.OnEnable();
134-
135-
Refresh();
136-
}
137-
138126
if (ActiveView != null)
139127
ActiveView.OnDataUpdate();
140128
}
@@ -146,8 +134,16 @@ public override void OnRepositoryChanged(IRepository oldRepository)
146134
DetachHandlers(oldRepository);
147135
AttachHandlers(Repository);
148136

137+
if (Repository != null && activeTab == SubTab.InitProject)
138+
{
139+
changeTab = SubTab.History;
140+
}
141+
142+
UpdateActiveTab();
143+
149144
if (ActiveView != null)
150145
ActiveView.OnRepositoryChanged(oldRepository);
146+
151147
}
152148

153149
public override void OnSelectionChange()
@@ -207,15 +203,6 @@ private bool MaybeUpdateData(out string repoRemote)
207203
bool repoDataChanged = false;
208204
if (Repository != null)
209205
{
210-
if (activeTab == SubTab.InitProject)
211-
{
212-
if (nextTab == SubTab.InitProject)
213-
{
214-
nextTab = SubTab.History;
215-
repoDataChanged = true;
216-
}
217-
}
218-
219206
var currentBranchString = (Repository.CurrentBranch.HasValue ? Repository.CurrentBranch.Value.Name : null);
220207
if (repoBranch != currentBranchString)
221208
{
@@ -235,15 +222,6 @@ private bool MaybeUpdateData(out string repoRemote)
235222
}
236223
else
237224
{
238-
if (!(activeTab == SubTab.InitProject || activeTab == SubTab.Settings))
239-
{
240-
if (!(nextTab == SubTab.InitProject || activeTab == SubTab.Settings))
241-
{
242-
nextTab = SubTab.InitProject;
243-
repoDataChanged = true;
244-
}
245-
}
246-
247225
if (repoBranch != null)
248226
{
249227
repoBranch = null;
@@ -303,7 +281,7 @@ private void DoToolbarGUI()
303281
// Subtabs & toolbar
304282
Rect mainNavRect = EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);
305283
{
306-
SubTab changeTab = activeTab;
284+
changeTab = activeTab;
307285
EditorGUI.BeginChangeCheck();
308286
{
309287
if (HasRepository)
@@ -321,7 +299,7 @@ private void DoToolbarGUI()
321299

322300
if (EditorGUI.EndChangeCheck())
323301
{
324-
nextTab = changeTab;
302+
UpdateActiveTab();
325303
}
326304

327305
GUILayout.FlexibleSpace();
@@ -332,6 +310,28 @@ private void DoToolbarGUI()
332310
EditorGUILayout.EndHorizontal();
333311
}
334312

313+
private void UpdateActiveTab()
314+
{
315+
if (changeTab != activeTab)
316+
{
317+
var fromView = ActiveView;
318+
activeTab = changeTab;
319+
SwitchView(fromView, ActiveView);
320+
}
321+
}
322+
323+
private void SwitchView(Subview fromView, Subview toView)
324+
{
325+
GUI.FocusControl(null);
326+
327+
if (fromView != null)
328+
fromView.OnDisable();
329+
toView.OnEnable();
330+
331+
// this triggers a repaint
332+
Repaint();
333+
}
334+
335335
private void DoAccountDropdown()
336336
{
337337
GenericMenu accountMenu = new GenericMenu();
@@ -393,6 +393,25 @@ private static SubTab TabButton(SubTab tab, string title, SubTab activeTab)
393393
return GUILayout.Toggle(activeTab == tab, title, EditorStyles.toolbarButton) ? tab : activeTab;
394394
}
395395

396+
private Subview ToView(SubTab tab)
397+
{
398+
switch (tab)
399+
{
400+
case SubTab.InitProject:
401+
return initProjectView;
402+
case SubTab.History:
403+
return historyView;
404+
case SubTab.Changes:
405+
return changesView;
406+
case SubTab.Branches:
407+
return branchesView;
408+
case SubTab.Settings:
409+
return settingsView;
410+
default:
411+
throw new ArgumentOutOfRangeException();
412+
}
413+
}
414+
396415
public HistoryView HistoryView
397416
{
398417
get { return historyView; }
@@ -420,29 +439,7 @@ public InitProjectView InitProjectView
420439

421440
private Subview ActiveView
422441
{
423-
get
424-
{
425-
return ToView(activeTab);
426-
}
427-
}
428-
429-
private Subview ToView(SubTab tab)
430-
{
431-
switch (tab)
432-
{
433-
case SubTab.InitProject:
434-
return initProjectView;
435-
case SubTab.History:
436-
return historyView;
437-
case SubTab.Changes:
438-
return changesView;
439-
case SubTab.Branches:
440-
return branchesView;
441-
case SubTab.Settings:
442-
return settingsView;
443-
default:
444-
throw new ArgumentOutOfRangeException();
445-
}
442+
get { return ToView(activeTab); }
446443
}
447444

448445
public override bool IsBusy
@@ -452,6 +449,7 @@ public override bool IsBusy
452449

453450
private enum SubTab
454451
{
452+
None,
455453
InitProject,
456454
History,
457455
Changes,

0 commit comments

Comments
 (0)