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

Commit d4c9da5

Browse files
Merge pull request #252 from github-for-unity/enhancements/initialize-view
A dedicated view to initialize the project
2 parents a88a5f3 + 5dc3f6d commit d4c9da5

File tree

5 files changed

+162
-116
lines changed

5 files changed

+162
-116
lines changed

src/UnityExtension/Assets/Editor/GitHub.Unity/GitHub.Unity.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@
102102
<Compile Include="UI\IView.cs" />
103103
<Compile Include="UI\LoadingView.cs" />
104104
<Compile Include="UI\PublishView.cs" />
105+
<Compile Include="UI\InitProjectView.cs" />
105106
<Compile Include="UI\UserSettingsView.cs" />
106107
<Compile Include="UI\GitPathView.cs" />
107108
<Compile Include="UI\SettingsView.cs" />

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/HistoryView.cs

Lines changed: 0 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ class HistoryView : Subview
2828
private const string PushConfirmCancel = "Cancel";
2929
private const string CommitDetailsTitle = "Commit details";
3030
private const string ClearSelectionButton = "×";
31-
private const string NoRepoTitle = "No Git repository found for this project";
32-
private const string NoRepoDescription = "Initialize a Git repository to track changes and collaborate with others.";
3331
private const string PublishButton = "Publish";
3432
private const string FetchActionTitle = "Fetch Changes";
3533
private const string FetchButtonText = "Fetch";
@@ -116,12 +114,6 @@ public override void OnSelectionChange()
116114

117115
public override void OnGUI()
118116
{
119-
if (!HasRepository)
120-
{
121-
DoOfferToInitializeRepositoryGUI();
122-
return;
123-
}
124-
125117
OnEmbeddedGUI();
126118
}
127119

@@ -223,66 +215,6 @@ private void MaybeUpdateData()
223215
}
224216
}
225217

226-
private void DoOfferToInitializeRepositoryGUI()
227-
{
228-
var headerRect = EditorGUILayout.BeginHorizontal(Styles.HeaderBoxStyle);
229-
{
230-
GUILayout.Space(5);
231-
GUILayout.BeginVertical(GUILayout.Width(16));
232-
{
233-
GUILayout.Space(5);
234-
235-
var iconRect = GUILayoutUtility.GetRect(new GUIContent(Styles.BigLogo), GUIStyle.none, GUILayout.Height(20), GUILayout.Width(20));
236-
iconRect.y = headerRect.center.y - (iconRect.height / 2);
237-
GUI.DrawTexture(iconRect, Styles.BigLogo, ScaleMode.ScaleToFit);
238-
239-
GUILayout.Space(5);
240-
}
241-
GUILayout.EndVertical();
242-
243-
GUILayout.Space(5);
244-
245-
GUILayout.BeginVertical();
246-
{
247-
var headerContent = new GUIContent(NoRepoTitle);
248-
var headerTitleRect = GUILayoutUtility.GetRect(headerContent, Styles.HeaderTitleStyle);
249-
headerTitleRect.y = headerRect.center.y - (headerTitleRect.height / 2);
250-
251-
GUI.Label(headerTitleRect, headerContent, Styles.HeaderTitleStyle);
252-
}
253-
GUILayout.EndVertical();
254-
}
255-
EditorGUILayout.EndHorizontal();
256-
257-
GUILayout.BeginVertical(Styles.GenericBoxStyle);
258-
{
259-
GUILayout.FlexibleSpace();
260-
261-
GUILayout.Label(NoRepoDescription, Styles.CenteredLabel);
262-
263-
GUILayout.BeginHorizontal();
264-
GUILayout.FlexibleSpace();
265-
266-
EditorGUI.BeginDisabledGroup(isBusy);
267-
{
268-
if (GUILayout.Button(Localization.InitializeRepositoryButtonText, "Button"))
269-
{
270-
isBusy = true;
271-
Manager.InitializeRepository()
272-
.FinallyInUI(() => isBusy = false)
273-
.Start();
274-
}
275-
}
276-
EditorGUI.EndDisabledGroup();
277-
278-
GUILayout.FlexibleSpace();
279-
GUILayout.EndHorizontal();
280-
281-
GUILayout.FlexibleSpace();
282-
}
283-
GUILayout.EndVertical();
284-
}
285-
286218
public void OnEmbeddedGUI()
287219
{
288220
// History toolbar
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
#pragma warning disable 649
2+
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using UnityEditor;
7+
using UnityEngine;
8+
using Object = UnityEngine.Object;
9+
10+
namespace GitHub.Unity
11+
{
12+
[Serializable]
13+
class InitProjectView : Subview
14+
{
15+
private const string NoRepoTitle = "No Git repository found for this project";
16+
private const string NoRepoDescription = "Initialize a Git repository to track changes and collaborate with others.";
17+
18+
[SerializeField] private bool isBusy;
19+
[SerializeField] private bool isPublished;
20+
21+
public override void OnDataUpdate()
22+
{
23+
base.OnDataUpdate();
24+
MaybeUpdateData();
25+
}
26+
27+
public override void OnRepositoryChanged(IRepository oldRepository)
28+
{
29+
base.OnRepositoryChanged(oldRepository);
30+
Refresh();
31+
}
32+
33+
public override void OnGUI()
34+
{
35+
var headerRect = EditorGUILayout.BeginHorizontal(Styles.HeaderBoxStyle);
36+
{
37+
GUILayout.Space(5);
38+
GUILayout.BeginVertical(GUILayout.Width(16));
39+
{
40+
GUILayout.Space(5);
41+
42+
var iconRect = GUILayoutUtility.GetRect(new GUIContent(Styles.BigLogo), GUIStyle.none, GUILayout.Height(20), GUILayout.Width(20));
43+
iconRect.y = headerRect.center.y - (iconRect.height / 2);
44+
GUI.DrawTexture(iconRect, Styles.BigLogo, ScaleMode.ScaleToFit);
45+
46+
GUILayout.Space(5);
47+
}
48+
GUILayout.EndVertical();
49+
50+
GUILayout.Space(5);
51+
52+
GUILayout.BeginVertical();
53+
{
54+
var headerContent = new GUIContent(NoRepoTitle);
55+
var headerTitleRect = GUILayoutUtility.GetRect(headerContent, Styles.HeaderTitleStyle);
56+
headerTitleRect.y = headerRect.center.y - (headerTitleRect.height / 2);
57+
58+
GUI.Label(headerTitleRect, headerContent, Styles.HeaderTitleStyle);
59+
}
60+
GUILayout.EndVertical();
61+
}
62+
EditorGUILayout.EndHorizontal();
63+
64+
GUILayout.BeginVertical(Styles.GenericBoxStyle);
65+
{
66+
GUILayout.FlexibleSpace();
67+
68+
GUILayout.Label(NoRepoDescription, Styles.CenteredLabel);
69+
70+
GUILayout.BeginHorizontal();
71+
GUILayout.FlexibleSpace();
72+
73+
EditorGUI.BeginDisabledGroup(isBusy);
74+
{
75+
if (GUILayout.Button(Localization.InitializeRepositoryButtonText, "Button"))
76+
{
77+
isBusy = true;
78+
Manager.InitializeRepository()
79+
.FinallyInUI(() => isBusy = false)
80+
.Start();
81+
}
82+
}
83+
EditorGUI.EndDisabledGroup();
84+
85+
GUILayout.FlexibleSpace();
86+
GUILayout.EndHorizontal();
87+
88+
GUILayout.FlexibleSpace();
89+
}
90+
GUILayout.EndVertical();
91+
}
92+
93+
private void MaybeUpdateData()
94+
{
95+
isPublished = Repository != null && Repository.CurrentRemote.HasValue;
96+
}
97+
98+
public override bool IsBusy
99+
{
100+
get { return isBusy; }
101+
}
102+
}
103+
}

0 commit comments

Comments
 (0)