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

Commit 31cffae

Browse files
shanaStanleyGoldman
authored andcommitted
Cherry picking refactoring to Window subsystem
1 parent bc74710 commit 31cffae

File tree

8 files changed

+128
-98
lines changed

8 files changed

+128
-98
lines changed

src/GitHub.Api/Application/ApplicationManagerBase.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -234,15 +234,13 @@ public void Dispose()
234234
public CancellationToken CancellationToken { get { return TaskManager.Token; } }
235235
public ITaskManager TaskManager { get; protected set; }
236236
public IGitClient GitClient { get; protected set; }
237-
238-
239-
protected TaskScheduler UIScheduler { get; private set; }
240-
protected SynchronizationContext SynchronizationContext { get; private set; }
241-
protected IRepositoryManager RepositoryManager { get { return repositoryManager; } }
242-
243237
public ISettings LocalSettings { get; protected set; }
244238
public ISettings SystemSettings { get; protected set; }
245239
public ISettings UserSettings { get; protected set; }
246240
public IUsageTracker UsageTracker { get; protected set; }
241+
242+
protected TaskScheduler UIScheduler { get; private set; }
243+
protected SynchronizationContext SynchronizationContext { get; private set; }
244+
protected IRepositoryManager RepositoryManager { get { return repositoryManager; } }
247245
}
248246
}

src/UnityExtension/Assets/Editor/GitHub.Unity/ApplicationManager.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public ApplicationManager(IMainThreadSynchronizationContext synchronizationConte
2323

2424
protected override void SetupMetrics()
2525
{
26+
2627
new ActionTask(CancellationToken,
2728
() => SetupMetrics(Environment.UnityVersion, ApplicationCache.Instance.FirstRun))
2829
{ Affinity = TaskAffinity.UI }
@@ -33,7 +34,7 @@ protected override void InitializeUI()
3334
{
3435
Logger.Trace("Restarted {0}", Environment.Repository);
3536
ProjectWindowInterface.Initialize(Environment.Repository);
36-
var view = Window.GetView();
37+
var view = Window.GetWindow();
3738
if (view != null)
3839
view.Initialize(this);
3940
}

src/UnityExtension/Assets/Editor/GitHub.Unity/EntryPoint.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ namespace GitHub.Unity
1111
[InitializeOnLoad]
1212
class EntryPoint : ScriptableObject
1313
{
14-
private static ApplicationManager appManager;
15-
1614
// this may run on the loader thread if it's an appdomain restart
1715
static EntryPoint()
1816
{
@@ -69,6 +67,7 @@ private static bool ServerCertificateValidationCallback(object sender, X509Certi
6967
return true;
7068
}
7169

70+
private static ApplicationManager appManager;
7271
public static IApplicationManager ApplicationManager
7372
{
7473
get

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public static IView Open(Action<bool> onClose = null)
2727
return authWindow;
2828
}
2929

30-
public override void OnGUI()
30+
public override void OnUI()
3131
{
3232
if (authView == null)
3333
{

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

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,19 +59,14 @@ class HistoryView : Subview
5959
[SerializeField] private List<GitLogEntry> history = new List<GitLogEntry>();
6060
[SerializeField] private bool isBusy;
6161

62-
public override void Initialize(IApplicationManager applicationManager)
62+
public override void InitializeView(IView parent)
6363
{
64-
base.Initialize(applicationManager);
64+
base.InitializeView(parent);
65+
6566
if (Manager != null)
6667
{
6768
UpdateLog();
6869
}
69-
}
70-
71-
public override void InitializeView(IView parent)
72-
{
73-
Logger.Trace("InitializeView(IView)");
74-
base.InitializeView(parent);
7570

7671
lastWidth = Position.width;
7772
selectionIndex = newSelectionIndex = -1;

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ namespace GitHub.Unity
55
{
66
interface IView
77
{
8-
void Initialize(IApplicationManager applicationManager);
98
void Refresh();
109
void Redraw();
1110
Rect Position { get; }

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

Lines changed: 63 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,28 @@ namespace GitHub.Unity
66
{
77
abstract class BaseWindow : EditorWindow, IView
88
{
9-
private bool finishCalled = false;
9+
[NonSerialized] private bool finishCalled = false;
10+
[NonSerialized] private bool initialized = false;
11+
12+
[NonSerialized] private IApplicationManager cachedManager;
13+
[NonSerialized] private bool initializeWasCalled;
14+
[NonSerialized] private bool inLayout;
1015

1116
public event Action<bool> OnClose;
1217

1318
public virtual void Initialize(IApplicationManager applicationManager)
1419
{
20+
Debug.Log("Initialize " + applicationManager + " " + initialized);
21+
22+
if (inLayout)
23+
{
24+
initializeWasCalled = true;
25+
cachedManager = applicationManager;
26+
return;
27+
}
28+
1529
Manager = applicationManager;
30+
initialized = true;
1631
}
1732

1833
public virtual void Redraw()
@@ -23,6 +38,7 @@ public virtual void Redraw()
2338
public virtual void Refresh()
2439
{
2540
}
41+
2642
public virtual void Finish(bool result)
2743
{
2844
finishCalled = true;
@@ -36,36 +52,67 @@ protected void RaiseOnClose(bool result)
3652

3753
public virtual void Awake()
3854
{
55+
Debug.Log("Awake " + initialized);
56+
if (!initialized)
57+
Initialize(EntryPoint.ApplicationManager);
3958
}
4059

4160
public virtual void OnEnable()
4261
{
62+
Debug.Log("OnEnable " + initialized);
63+
if (!initialized)
64+
Initialize(EntryPoint.ApplicationManager);
4365
}
4466

45-
public virtual void OnDisable()
67+
public virtual void OnDisable() {}
68+
69+
public virtual void Update() {}
70+
71+
// OnGUI calls this everytime, so override it to render as you would OnGUI
72+
public virtual void OnUI() {}
73+
74+
// This is Unity's magic method
75+
private void OnGUI()
4676
{
77+
if (Event.current.type == EventType.layout)
78+
{
79+
inLayout = true;
80+
}
81+
82+
Debug.LogFormat("OnGUI initialize?{0} inLayout?{1} initializeWasCalled?{2}", initialized, inLayout, initializeWasCalled);
83+
84+
OnUI();
85+
86+
if (Event.current.type == EventType.repaint)
87+
{
88+
inLayout = false;
89+
if (initializeWasCalled)
90+
{
91+
initializeWasCalled = false;
92+
Initialize(cachedManager);
93+
}
94+
}
4795
}
4896

49-
public virtual void Update() {}
50-
public virtual void OnGUI() {}
5197
public virtual void OnDestroy()
5298
{
5399
if (!finishCalled)
54100
{
55101
RaiseOnClose(false);
56102
}
57-
58103
}
104+
59105
public virtual void OnSelectionChange()
60106
{}
61107

62108
public virtual Rect Position { get { return position; } }
109+
63110
public IApplicationManager Manager { get; private set; }
64-
public IRepository Repository { get { return Manager != null ? Manager.Environment.Repository : null; } }
65-
public ITaskManager TaskManager { get { return Manager != null ? Manager.TaskManager : null; } }
66-
protected IGitClient GitClient { get { return Manager != null ? Manager.GitClient : null; } }
67-
protected IEnvironment Environment { get { return Manager != null ? Manager.Environment : null; } }
68-
protected IPlatform Platform { get { return Manager != null ? Manager.Platform : null; } }
111+
public IRepository Repository { get { return Environment.Repository; } }
112+
public ITaskManager TaskManager { get { return Manager.TaskManager; } }
113+
protected IGitClient GitClient { get { return Manager.GitClient; } }
114+
protected IEnvironment Environment { get { return Manager.Environment; } }
115+
protected IPlatform Platform { get { return Manager.Platform; } }
69116

70117

71118
private ILogging logger;
@@ -86,24 +133,17 @@ abstract class Subview : IView
86133

87134
private const string NullParentError = "Subview parent is null";
88135
protected IView Parent { get; private set; }
89-
public IApplicationManager Manager { get; private set; }
90-
public IRepository Repository { get { return Manager != null ? Manager.Environment.Repository : null; } }
91-
public ITaskManager TaskManager { get { return Manager != null ? Manager.TaskManager : null; } }
92-
protected IGitClient GitClient { get { return Manager != null ? Manager.GitClient : null; } }
93-
protected IEnvironment Environment { get { return Manager != null ? Manager.Environment : null; } }
94-
protected IPlatform Platform { get { return Manager != null ? Manager.Platform : null; } }
95-
96-
public virtual void Initialize(IApplicationManager applicationManager)
97-
{
98-
Logger.Trace("Initialize(IApplicationManager: {0})", applicationManager != null);
99-
Manager = applicationManager;
100-
}
136+
public IApplicationManager Manager { get { return Parent.Manager; } }
137+
public IRepository Repository { get { return Manager.Environment.Repository; } }
138+
public ITaskManager TaskManager { get { return Manager.TaskManager; } }
139+
protected IGitClient GitClient { get { return Manager.GitClient; } }
140+
protected IEnvironment Environment { get { return Manager.Environment; } }
141+
protected IPlatform Platform { get { return Manager.Platform; } }
101142

102143
public virtual void InitializeView(IView parent)
103144
{
104145
Debug.Assert(parent != null, NullParentError);
105146
Parent = parent;
106-
((IView)this).Initialize(parent.Manager);
107147
}
108148

109149
public virtual void OnShow()

0 commit comments

Comments
 (0)