diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/GitHub.Unity.csproj b/src/UnityExtension/Assets/Editor/GitHub.Unity/GitHub.Unity.csproj
index c8b780926..1ddcf006f 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/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/HistoryView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs
index 19b3987ad..f2cfcf278 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";
@@ -116,12 +114,6 @@ public override void OnSelectionChange()
public override void OnGUI()
{
- if (!HasRepository)
- {
- DoOfferToInitializeRepositoryGUI();
- return;
- }
-
OnEmbeddedGUI();
}
@@ -223,66 +215,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
new file mode 100644
index 000000000..c8ee372a3
--- /dev/null
+++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/InitProjectView.cs
@@ -0,0 +1,103 @@
+#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()
+ {
+ 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();
+ }
+
+ private void MaybeUpdateData()
+ {
+ isPublished = Repository != null && Repository.CurrentRemote.HasValue;
+ }
+
+ public override bool IsBusy
+ {
+ get { return isBusy; }
+ }
+ }
+}
diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs
index a83539c7a..cf9da47f6 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";
@@ -24,8 +25,9 @@ class Window : BaseWindow
private const string Window_RepoBranchTooltip = "Active branch";
[NonSerialized] private double notificationClearTime = -1;
-
+ [SerializeField] private SubTab changeTab = SubTab.History;
[SerializeField] private SubTab activeTab = SubTab.History;
+ [SerializeField] private InitProjectView initProjectView = new InitProjectView();
[SerializeField] private BranchesView branchesView = new BranchesView();
[SerializeField] private ChangesView changesView = new ChangesView();
[SerializeField] private HistoryView historyView = new HistoryView();
@@ -71,10 +73,14 @@ 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);
SettingsView.InitializeView(this);
+ InitProjectView.InitializeView(this);
}
public override void OnEnable()
@@ -128,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()
@@ -206,7 +220,7 @@ private bool MaybeUpdateData(out string repoRemote)
if (Repository.CurrentRemote.HasValue)
repoRemote = Repository.CurrentRemote.Value.Name;
}
- else if (!HasRepository)
+ else
{
if (repoBranch != null)
{
@@ -237,7 +251,6 @@ private void DetachHandlers(IRepository repository)
return;
repository.OnRepositoryInfoChanged -= RefreshOnMainThread;
}
-
private void DoHeaderGUI()
{
GUILayout.BeginHorizontal(Styles.HeaderBoxStyle);
@@ -268,7 +281,7 @@ private void DoToolbarGUI()
// Subtabs & toolbar
Rect mainNavRect = EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);
{
- SubTab changeTab = activeTab;
+ changeTab = activeTab;
EditorGUI.BeginChangeCheck();
{
if (HasRepository)
@@ -279,14 +292,14 @@ private void DoToolbarGUI()
}
else
{
- changeTab = TabButton(SubTab.History, HistoryTitle, changeTab);
+ changeTab = TabButton(SubTab.InitProject, InitializeTitle, changeTab);
}
changeTab = TabButton(SubTab.Settings, SettingsTitle, changeTab);
}
if (EditorGUI.EndChangeCheck())
{
- SetActiveTab(changeTab);
+ UpdateActiveTab();
}
GUILayout.FlexibleSpace();
@@ -297,7 +310,7 @@ private void DoToolbarGUI()
EditorGUILayout.EndHorizontal();
}
- private void SetActiveTab(SubTab changeTab)
+ private void UpdateActiveTab()
{
if (changeTab != activeTab)
{
@@ -313,10 +326,10 @@ private void SwitchView(Subview fromView, Subview toView)
if (fromView != null)
fromView.OnDisable();
-
toView.OnEnable();
- Refresh();
+ // this triggers a repaint
+ Repaint();
}
private void DoAccountDropdown()
@@ -380,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; }
@@ -400,37 +432,25 @@ public SettingsView SettingsView
get { return settingsView; }
}
- public override bool IsBusy
+ public InitProjectView InitProjectView
{
- get { return false; }
+ get { return initProjectView; }
}
private Subview ActiveView
{
- get
- {
- return ToView(activeTab);
- }
+ get { return ToView(activeTab); }
}
- private Subview ToView(SubTab tab)
+ public override bool IsBusy
{
- switch (tab)
- {
- case SubTab.History:
- return historyView;
- case SubTab.Changes:
- return changesView;
- case SubTab.Branches:
- return branchesView;
- case SubTab.Settings:
- default:
- return settingsView;
- }
+ get { return false; }
}
private enum SubTab
{
+ None,
+ InitProject,
History,
Changes,
Branches,