1404 lines
42 KiB
C#
1404 lines
42 KiB
C#
|
|
using System;
|
||
|
|
|
||
|
|
using UnityEditor;
|
||
|
|
using UnityEngine;
|
||
|
|
|
||
|
|
using Codice.Client.BaseCommands;
|
||
|
|
|
||
|
|
using Codice.Client.Common;
|
||
|
|
using Codice.Client.Common.EventTracking;
|
||
|
|
using Codice.Client.Common.FsNodeReaders;
|
||
|
|
using Codice.Client.Common.Threading;
|
||
|
|
using Codice.CM.Common;
|
||
|
|
using GluonGui;
|
||
|
|
using PlasticGui;
|
||
|
|
using PlasticGui.Gluon;
|
||
|
|
using PlasticGui.WorkspaceWindow;
|
||
|
|
using PlasticGui.WorkspaceWindow.Merge;
|
||
|
|
using PlasticGui.WorkspaceWindow.QueryViews;
|
||
|
|
using Unity.PlasticSCM.Editor.AssetsOverlays.Cache;
|
||
|
|
using Unity.PlasticSCM.Editor.AssetUtils;
|
||
|
|
using Unity.PlasticSCM.Editor.AssetUtils.Processor;
|
||
|
|
using Unity.PlasticSCM.Editor.StatusBar;
|
||
|
|
using Unity.PlasticSCM.Editor.Tool;
|
||
|
|
using Unity.PlasticSCM.Editor.Toolbar;
|
||
|
|
using Unity.PlasticSCM.Editor.UI;
|
||
|
|
using Unity.PlasticSCM.Editor.Views.Branches;
|
||
|
|
using Unity.PlasticSCM.Editor.Views.Changesets;
|
||
|
|
using Unity.PlasticSCM.Editor.Views.History;
|
||
|
|
using Unity.PlasticSCM.Editor.Views.IncomingChanges.Gluon;
|
||
|
|
using Unity.PlasticSCM.Editor.Views.Labels;
|
||
|
|
using Unity.PlasticSCM.Editor.Views.Locks;
|
||
|
|
using Unity.PlasticSCM.Editor.Views.Merge.Developer;
|
||
|
|
using Unity.PlasticSCM.Editor.Views.Merge;
|
||
|
|
using Unity.PlasticSCM.Editor.Views.PendingChanges;
|
||
|
|
using Unity.PlasticSCM.Editor.Views.Shelves;
|
||
|
|
|
||
|
|
using GluonIncomingChangesUpdater = PlasticGui.Gluon.WorkspaceWindow.IncomingChangesUpdater;
|
||
|
|
using GluonCheckIncomingChanges = PlasticGui.Gluon.WorkspaceWindow.CheckIncomingChanges;
|
||
|
|
using ObjectInfo = Codice.CM.Common.ObjectInfo;
|
||
|
|
|
||
|
|
namespace Unity.PlasticSCM.Editor
|
||
|
|
{
|
||
|
|
[Serializable]
|
||
|
|
internal class SerializableViewSwitcherState
|
||
|
|
{
|
||
|
|
internal ViewSwitcher.TabType SelectedTab;
|
||
|
|
internal ViewSwitcher.TabType PreviousSelectedTab;
|
||
|
|
|
||
|
|
internal SerializableMergeTabState MergeTabState;
|
||
|
|
internal SerializableBranchesTabState BranchesTabState;
|
||
|
|
internal SerializableHistoryTabState HistoryTabState;
|
||
|
|
}
|
||
|
|
|
||
|
|
internal interface IShowChangesetInView
|
||
|
|
{
|
||
|
|
void ShowChangesetInView(ChangesetInfo changesetInfo);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal interface IShowShelveInView
|
||
|
|
{
|
||
|
|
void ShowShelveInView(ChangesetInfo shelveInfo);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal class ViewSwitcher :
|
||
|
|
IViewSwitcher,
|
||
|
|
IShowChangesetInView,
|
||
|
|
IShowShelveInView,
|
||
|
|
IMergeViewLauncher,
|
||
|
|
IGluonViewSwitcher,
|
||
|
|
IHistoryViewLauncher,
|
||
|
|
MergeInProgress.IShowMergeView
|
||
|
|
{
|
||
|
|
internal enum TabType
|
||
|
|
{
|
||
|
|
None = 0,
|
||
|
|
PendingChanges = 1,
|
||
|
|
IncomingChanges = 2,
|
||
|
|
Changesets = 3,
|
||
|
|
Shelves = 4,
|
||
|
|
Branches = 5,
|
||
|
|
Labels = 6,
|
||
|
|
Locks = 7,
|
||
|
|
Merge = 8,
|
||
|
|
History = 9,
|
||
|
|
}
|
||
|
|
|
||
|
|
internal PendingChangesTab PendingChangesTab { get; private set; }
|
||
|
|
internal IIncomingChangesTab IncomingChangesTab { get; private set; }
|
||
|
|
internal ChangesetsTab ChangesetsTab { get; private set; }
|
||
|
|
internal ShelvesTab ShelvesTab { get; private set; }
|
||
|
|
internal BranchesTab BranchesTab { get; private set; }
|
||
|
|
internal LabelsTab LabelsTab { get; private set; }
|
||
|
|
internal LocksTab LocksTab { get; private set; }
|
||
|
|
internal MergeTab MergeTab { get; private set; }
|
||
|
|
internal HistoryTab HistoryTab { get; private set; }
|
||
|
|
internal SerializableViewSwitcherState State { get { return mState; } }
|
||
|
|
|
||
|
|
internal ViewSwitcher(
|
||
|
|
RepositorySpec repSpec,
|
||
|
|
WorkspaceInfo wkInfo,
|
||
|
|
ViewHost viewHost,
|
||
|
|
bool isGluonMode,
|
||
|
|
GluonCheckIncomingChanges.IUpdateIncomingChanges gluonUpdateIncomingChanges,
|
||
|
|
IAssetStatusCache assetStatusCache,
|
||
|
|
ISaveAssets saveAssets,
|
||
|
|
LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow,
|
||
|
|
LaunchTool.IProcessExecutor processExecutor,
|
||
|
|
WorkspaceOperationsMonitor workspaceOperationsMonitor,
|
||
|
|
WindowStatusBar windowStatusBar,
|
||
|
|
EditorWindow parentWindow,
|
||
|
|
INewChangesInWk newChangesInWk,
|
||
|
|
PendingChangesUpdater pendingChangesUpdater,
|
||
|
|
IncomingChangesUpdater developerIncomingChangesUpdater,
|
||
|
|
GluonIncomingChangesUpdater gluonIncomingChangesUpdater,
|
||
|
|
CheckPendingChanges.IUpdatePendingChanges updatePendingChanges)
|
||
|
|
{
|
||
|
|
mRepSpec = repSpec;
|
||
|
|
mWkInfo = wkInfo;
|
||
|
|
mViewHost = viewHost;
|
||
|
|
mIsGluonMode = isGluonMode;
|
||
|
|
mGluonUpdateIncomingChanges = gluonUpdateIncomingChanges;
|
||
|
|
mAssetStatusCache = assetStatusCache;
|
||
|
|
mSaveAssets = saveAssets;
|
||
|
|
mShowDownloadPlasticExeWindow = showDownloadPlasticExeWindow;
|
||
|
|
mProcessExecutor = processExecutor;
|
||
|
|
mWorkspaceOperationsMonitor = workspaceOperationsMonitor;
|
||
|
|
mWindowStatusBar = windowStatusBar;
|
||
|
|
mParentWindow = parentWindow;
|
||
|
|
mNewChangesInWk = newChangesInWk;
|
||
|
|
mPendingChangesUpdater = pendingChangesUpdater;
|
||
|
|
mDeveloperIncomingChangesUpdater = developerIncomingChangesUpdater;
|
||
|
|
mGluonIncomingChangesUpdater = gluonIncomingChangesUpdater;
|
||
|
|
mUpdatePendingChanges = updatePendingChanges;
|
||
|
|
|
||
|
|
mSideBarTreeView = new SideBarTreeView(repSpec, isGluonMode, ShowView);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal bool IsViewSelected(TabType tab)
|
||
|
|
{
|
||
|
|
return mState.SelectedTab == tab;
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void SetShelvedChanges(
|
||
|
|
ShelvedChangesUpdater shelvedChangesUpdater,
|
||
|
|
CheckShelvedChanges.IUpdateShelvedChangesNotification updateShelvedChanges)
|
||
|
|
{
|
||
|
|
mShelvedChangesUpdater = shelvedChangesUpdater;
|
||
|
|
mUpdateShelvedChanges = updateShelvedChanges;
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void SetWorkspaceWindow(WorkspaceWindow workspaceWindow)
|
||
|
|
{
|
||
|
|
mWorkspaceWindow = workspaceWindow;
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void InitializeFromState(SerializableViewSwitcherState state)
|
||
|
|
{
|
||
|
|
mState = state;
|
||
|
|
|
||
|
|
if (mState.MergeTabState != null &&
|
||
|
|
mState.MergeTabState.IsInitialized)
|
||
|
|
BuildMergeViewFromState(mState.MergeTabState);
|
||
|
|
|
||
|
|
if (mState.HistoryTabState != null &&
|
||
|
|
mState.HistoryTabState.IsInitialized)
|
||
|
|
BuildHistoryViewFromState(mState.HistoryTabState);
|
||
|
|
|
||
|
|
if (mState.BranchesTabState != null &&
|
||
|
|
mState.BranchesTabState.IsInitialized)
|
||
|
|
BuildBranchesViewFromState(mState.BranchesTabState);
|
||
|
|
|
||
|
|
ShowInitialView(mState.SelectedTab);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void RefreshPendingChangesView(PendingChangesStatus pendingChangesStatus)
|
||
|
|
{
|
||
|
|
if (PendingChangesTab == null)
|
||
|
|
return;
|
||
|
|
|
||
|
|
PendingChangesTab.Refresh(pendingChangesStatus);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void AutoRefreshPendingChangesView()
|
||
|
|
{
|
||
|
|
AutoRefresh.PendingChangesView(PendingChangesTab);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void AutoRefreshIncomingChangesView()
|
||
|
|
{
|
||
|
|
AutoRefresh.IncomingChangesView(IncomingChangesTab);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void AutoRefreshMergeView()
|
||
|
|
{
|
||
|
|
if (mIsGluonMode)
|
||
|
|
return;
|
||
|
|
|
||
|
|
AutoRefresh.IncomingChangesView(MergeTab);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void RefreshView(ViewType viewType)
|
||
|
|
{
|
||
|
|
IRefreshableView view = GetRefreshableView(viewType);
|
||
|
|
|
||
|
|
if (view != null)
|
||
|
|
{
|
||
|
|
view.Refresh();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (viewType == ViewType.PendingChangesView)
|
||
|
|
{
|
||
|
|
RefreshAsset.VersionControlCache(mAssetStatusCache);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (viewType == ViewType.LocksView)
|
||
|
|
{
|
||
|
|
mAssetStatusCache.ClearLocks();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (viewType == ViewType.BranchesListPopup)
|
||
|
|
UVCSToolbar.Controller.LoadBranches();
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void RefreshWorkingObjectViews(WorkingObjectInfo workingObjectInfo)
|
||
|
|
{
|
||
|
|
if (BranchesTab != null)
|
||
|
|
BranchesTab.SetWorkingObjectInfo(workingObjectInfo.BranchInfo);
|
||
|
|
|
||
|
|
if (ChangesetsTab != null)
|
||
|
|
ChangesetsTab.SetWorkingObjectInfo(workingObjectInfo.ChangesetInfo);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void OnEnable()
|
||
|
|
{
|
||
|
|
if (PendingChangesTab != null)
|
||
|
|
PendingChangesTab.OnEnable();
|
||
|
|
|
||
|
|
if (IncomingChangesTab != null)
|
||
|
|
IncomingChangesTab.OnEnable();
|
||
|
|
|
||
|
|
if (ChangesetsTab != null)
|
||
|
|
ChangesetsTab.OnEnable();
|
||
|
|
|
||
|
|
if (ShelvesTab != null)
|
||
|
|
ShelvesTab.OnEnable();
|
||
|
|
|
||
|
|
if (BranchesTab != null)
|
||
|
|
BranchesTab.OnEnable();
|
||
|
|
|
||
|
|
if (LabelsTab != null)
|
||
|
|
LabelsTab.OnEnable();
|
||
|
|
|
||
|
|
if (LocksTab != null)
|
||
|
|
LocksTab.OnEnable();
|
||
|
|
|
||
|
|
if (MergeTab != null)
|
||
|
|
MergeTab.OnEnable();
|
||
|
|
|
||
|
|
if (HistoryTab != null)
|
||
|
|
HistoryTab.OnEnable();
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void OnDisable()
|
||
|
|
{
|
||
|
|
if (PendingChangesTab != null)
|
||
|
|
{
|
||
|
|
PendingChangesTab.OnDisable();
|
||
|
|
}
|
||
|
|
|
||
|
|
if (IncomingChangesTab != null)
|
||
|
|
{
|
||
|
|
IncomingChangesTab.OnDisable();
|
||
|
|
}
|
||
|
|
|
||
|
|
if (ChangesetsTab != null)
|
||
|
|
{
|
||
|
|
ChangesetsTab.OnDisable();
|
||
|
|
}
|
||
|
|
|
||
|
|
if (ShelvesTab != null)
|
||
|
|
{
|
||
|
|
ShelvesTab.OnDisable();
|
||
|
|
}
|
||
|
|
|
||
|
|
if (BranchesTab != null)
|
||
|
|
{
|
||
|
|
mState.BranchesTabState = BranchesTab.GetSerializableState();
|
||
|
|
BranchesTab.OnDisable();
|
||
|
|
}
|
||
|
|
|
||
|
|
if (LabelsTab != null)
|
||
|
|
{
|
||
|
|
LabelsTab.OnDisable();
|
||
|
|
}
|
||
|
|
|
||
|
|
if (LocksTab != null)
|
||
|
|
{
|
||
|
|
LocksTab.OnDisable();
|
||
|
|
}
|
||
|
|
|
||
|
|
if (MergeTab != null)
|
||
|
|
{
|
||
|
|
mState.MergeTabState = MergeTab.GetSerializableState();
|
||
|
|
MergeTab.OnDisable();
|
||
|
|
}
|
||
|
|
|
||
|
|
if (HistoryTab != null)
|
||
|
|
{
|
||
|
|
mState.HistoryTabState = HistoryTab.GetSerializableState();
|
||
|
|
HistoryTab.OnDisable();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void Update()
|
||
|
|
{
|
||
|
|
if (IsViewSelected(TabType.PendingChanges))
|
||
|
|
{
|
||
|
|
PendingChangesTab.Update();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (IsViewSelected(TabType.IncomingChanges))
|
||
|
|
{
|
||
|
|
IncomingChangesTab.Update();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (IsViewSelected(TabType.Changesets))
|
||
|
|
{
|
||
|
|
ChangesetsTab.Update();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (IsViewSelected(TabType.Shelves))
|
||
|
|
{
|
||
|
|
ShelvesTab.Update();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (IsViewSelected(TabType.Branches))
|
||
|
|
{
|
||
|
|
BranchesTab.Update();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (IsViewSelected(TabType.Labels))
|
||
|
|
{
|
||
|
|
LabelsTab.Update();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (IsViewSelected(TabType.Locks))
|
||
|
|
{
|
||
|
|
LocksTab.Update();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (IsViewSelected(TabType.Merge))
|
||
|
|
{
|
||
|
|
MergeTab.Update();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (IsViewSelected(TabType.History))
|
||
|
|
{
|
||
|
|
HistoryTab.Update();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void SidebarButtonsGUI()
|
||
|
|
{
|
||
|
|
GUILayout.BeginHorizontal();
|
||
|
|
|
||
|
|
Rect rect = GUILayoutUtility.GetRect(
|
||
|
|
mSideBarTreeView.GetTotalWidth(),
|
||
|
|
0,
|
||
|
|
GUILayout.ExpandWidth(true),
|
||
|
|
GUILayout.ExpandHeight(true));
|
||
|
|
|
||
|
|
mSideBarTreeView.SetHistoryVisible(HistoryTab != null);
|
||
|
|
mSideBarTreeView.SetMergeVisible(MergeTab != null);
|
||
|
|
mSideBarTreeView.OnGUI(rect);
|
||
|
|
|
||
|
|
Rect result = GUILayoutUtility.GetRect(
|
||
|
|
1,
|
||
|
|
rect.height,
|
||
|
|
GUILayout.ExpandHeight(true));
|
||
|
|
EditorGUI.DrawRect(result, UnityStyles.Colors.BarBorder);
|
||
|
|
|
||
|
|
GUILayout.EndHorizontal();
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void SelectedViewGUI(ResolvedUser currentUser)
|
||
|
|
{
|
||
|
|
if (IsViewSelected(TabType.PendingChanges))
|
||
|
|
{
|
||
|
|
PendingChangesTab.OnGUI(currentUser);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (IsViewSelected(TabType.IncomingChanges))
|
||
|
|
{
|
||
|
|
IncomingChangesTab.OnGUI();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (IsViewSelected(TabType.Changesets))
|
||
|
|
{
|
||
|
|
ChangesetsTab.OnGUI();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (IsViewSelected(TabType.Shelves))
|
||
|
|
{
|
||
|
|
ShelvesTab.OnGUI();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (IsViewSelected(TabType.Branches))
|
||
|
|
{
|
||
|
|
BranchesTab.OnGUI();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (IsViewSelected(TabType.Labels))
|
||
|
|
{
|
||
|
|
LabelsTab.OnGUI();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (IsViewSelected(TabType.Locks))
|
||
|
|
{
|
||
|
|
LocksTab.OnGUI();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (IsViewSelected(TabType.Merge))
|
||
|
|
{
|
||
|
|
MergeTab.OnGUI(CloseMergeTab);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (IsViewSelected(TabType.History))
|
||
|
|
{
|
||
|
|
HistoryTab.OnGUI(CloseHistoryTab);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void ShowPendingChangesView()
|
||
|
|
{
|
||
|
|
OpenPendingChangesTab();
|
||
|
|
|
||
|
|
PendingChangesTab.AutoRefresh();
|
||
|
|
|
||
|
|
SetSelectedView(TabType.PendingChanges);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void ShowIncomingChangesView()
|
||
|
|
{
|
||
|
|
if (IncomingChangesTab == null)
|
||
|
|
{
|
||
|
|
IncomingChangesTab = BuildIncomingChangesTab(mIsGluonMode);
|
||
|
|
|
||
|
|
mViewHost.AddRefreshableView(
|
||
|
|
ViewType.IncomingChangesView,
|
||
|
|
(IRefreshableView)IncomingChangesTab);
|
||
|
|
}
|
||
|
|
|
||
|
|
IncomingChangesTab.AutoRefresh();
|
||
|
|
|
||
|
|
SetSelectedView(TabType.IncomingChanges);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void ShowChangesetsView(ChangesetInfo changesetToSelect = null)
|
||
|
|
{
|
||
|
|
if (ChangesetsTab == null)
|
||
|
|
{
|
||
|
|
OpenPendingChangesTab();
|
||
|
|
|
||
|
|
ChangesetsTab = new ChangesetsTab(
|
||
|
|
mWkInfo,
|
||
|
|
changesetToSelect,
|
||
|
|
mViewHost,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
this,
|
||
|
|
this,
|
||
|
|
this,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
mShelvedChangesUpdater,
|
||
|
|
PendingChangesTab,
|
||
|
|
mAssetStatusCache,
|
||
|
|
mSaveAssets,
|
||
|
|
mShowDownloadPlasticExeWindow,
|
||
|
|
mProcessExecutor,
|
||
|
|
mWorkspaceOperationsMonitor,
|
||
|
|
mPendingChangesUpdater,
|
||
|
|
mDeveloperIncomingChangesUpdater,
|
||
|
|
mGluonIncomingChangesUpdater,
|
||
|
|
mParentWindow,
|
||
|
|
mIsGluonMode);
|
||
|
|
|
||
|
|
mViewHost.AddRefreshableView(ViewType.ChangesetsView, ChangesetsTab);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
if (changesetToSelect != null)
|
||
|
|
ChangesetsTab.RefreshAndSelect(changesetToSelect);
|
||
|
|
}
|
||
|
|
|
||
|
|
SetSelectedView(TabType.Changesets);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void ShowShelvesView(ChangesetInfo shelveToSelect = null)
|
||
|
|
{
|
||
|
|
if (ShelvesTab == null)
|
||
|
|
{
|
||
|
|
OpenPendingChangesTab();
|
||
|
|
|
||
|
|
ShelvesTab = new ShelvesTab(
|
||
|
|
mWkInfo,
|
||
|
|
mRepSpec,
|
||
|
|
shelveToSelect,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
this,
|
||
|
|
this,
|
||
|
|
this,
|
||
|
|
PendingChangesTab,
|
||
|
|
mIsGluonMode ?
|
||
|
|
mWorkspaceWindow.GluonProgressOperationHandler :
|
||
|
|
mWorkspaceWindow.DeveloperProgressOperationHandler,
|
||
|
|
mWorkspaceWindow.GluonProgressOperationHandler,
|
||
|
|
mShelvedChangesUpdater,
|
||
|
|
mAssetStatusCache,
|
||
|
|
mSaveAssets,
|
||
|
|
mShowDownloadPlasticExeWindow,
|
||
|
|
mProcessExecutor,
|
||
|
|
mWorkspaceOperationsMonitor,
|
||
|
|
mPendingChangesUpdater,
|
||
|
|
mDeveloperIncomingChangesUpdater,
|
||
|
|
mGluonIncomingChangesUpdater,
|
||
|
|
mParentWindow,
|
||
|
|
mIsGluonMode);
|
||
|
|
|
||
|
|
mViewHost.AddRefreshableView(ViewType.ShelvesView, ShelvesTab);
|
||
|
|
|
||
|
|
TrackFeatureUseEvent.For(
|
||
|
|
mRepSpec, TrackFeatureUseEvent.Features.OpenShelvesView);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
if (shelveToSelect != null)
|
||
|
|
ShelvesTab.RefreshAndSelect(shelveToSelect);
|
||
|
|
}
|
||
|
|
|
||
|
|
SetSelectedView(TabType.Shelves);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void ShowBranchesView()
|
||
|
|
{
|
||
|
|
if (BranchesTab == null)
|
||
|
|
{
|
||
|
|
BranchesTab = BuildBranchesTab(false);
|
||
|
|
|
||
|
|
mViewHost.AddRefreshableView(ViewType.BranchesView, BranchesTab);
|
||
|
|
|
||
|
|
TrackFeatureUseEvent.For(
|
||
|
|
mRepSpec, TrackFeatureUseEvent.Features.UnityPackage.OpenBranchesView);
|
||
|
|
}
|
||
|
|
|
||
|
|
SetSelectedView(TabType.Branches);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void ShowLabelsView()
|
||
|
|
{
|
||
|
|
if (LabelsTab == null)
|
||
|
|
{
|
||
|
|
LabelsTab = new LabelsTab(
|
||
|
|
mWkInfo,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
this,
|
||
|
|
this,
|
||
|
|
mViewHost,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
mPendingChangesUpdater,
|
||
|
|
mDeveloperIncomingChangesUpdater,
|
||
|
|
mGluonIncomingChangesUpdater,
|
||
|
|
mShelvedChangesUpdater,
|
||
|
|
mAssetStatusCache,
|
||
|
|
mShowDownloadPlasticExeWindow,
|
||
|
|
mProcessExecutor,
|
||
|
|
mParentWindow,
|
||
|
|
mIsGluonMode);
|
||
|
|
|
||
|
|
mViewHost.AddRefreshableView(ViewType.LabelsView, LabelsTab);
|
||
|
|
|
||
|
|
TrackFeatureUseEvent.For(
|
||
|
|
mRepSpec, TrackFeatureUseEvent.Features.UnityPackage.OpenLabelsView);
|
||
|
|
}
|
||
|
|
|
||
|
|
SetSelectedView(TabType.Labels);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void ShowLocksView()
|
||
|
|
{
|
||
|
|
if (LocksTab == null)
|
||
|
|
{
|
||
|
|
LocksTab = new LocksTab(
|
||
|
|
mWkInfo,
|
||
|
|
mRepSpec,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
mAssetStatusCache,
|
||
|
|
mParentWindow);
|
||
|
|
|
||
|
|
mViewHost.AddRefreshableView(ViewType.LocksView, LocksTab);
|
||
|
|
|
||
|
|
TrackFeatureUseEvent.For(
|
||
|
|
mRepSpec, TrackFeatureUseEvent.Features.OpenLocksView);
|
||
|
|
}
|
||
|
|
|
||
|
|
SetSelectedView(TabType.Locks);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void ShowHistoryView(
|
||
|
|
RepositorySpec repSpec,
|
||
|
|
long itemId,
|
||
|
|
string path,
|
||
|
|
bool isDirectory)
|
||
|
|
{
|
||
|
|
if (HistoryTab == null)
|
||
|
|
{
|
||
|
|
HistoryTab = BuildHistoryTab(
|
||
|
|
repSpec, itemId, path, isDirectory);
|
||
|
|
|
||
|
|
mViewHost.AddRefreshableView(
|
||
|
|
ViewType.HistoryView, HistoryTab);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
HistoryTab.RefreshForItem(repSpec, itemId, path, isDirectory);
|
||
|
|
}
|
||
|
|
|
||
|
|
SetSelectedView(TabType.History);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void ShowBranchesViewForTesting(BranchesTab branchesTab)
|
||
|
|
{
|
||
|
|
BranchesTab = branchesTab;
|
||
|
|
|
||
|
|
ShowBranchesView();
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void ShowMergeViewForTesting(MergeTab mergeTab)
|
||
|
|
{
|
||
|
|
MergeTab = mergeTab;
|
||
|
|
|
||
|
|
ShowMergeView();
|
||
|
|
}
|
||
|
|
|
||
|
|
internal void ShowShelvesViewForTesting(ShelvesTab shelvesTab)
|
||
|
|
{
|
||
|
|
ShelvesTab = shelvesTab;
|
||
|
|
|
||
|
|
ShowShelvesView();
|
||
|
|
}
|
||
|
|
|
||
|
|
void IViewSwitcher.ShowView(ViewType viewType)
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
void IViewSwitcher.ShowPendingChanges()
|
||
|
|
{
|
||
|
|
ShowPendingChangesView();
|
||
|
|
mParentWindow.Repaint();
|
||
|
|
}
|
||
|
|
|
||
|
|
void IViewSwitcher.ShowShelvesView()
|
||
|
|
{
|
||
|
|
ShowShelvesView();
|
||
|
|
}
|
||
|
|
|
||
|
|
void IViewSwitcher.ShowSyncView(string syncViewToSelect)
|
||
|
|
{
|
||
|
|
throw new NotImplementedException();
|
||
|
|
}
|
||
|
|
|
||
|
|
void IViewSwitcher.ShowBranchExplorerView()
|
||
|
|
{
|
||
|
|
//TODO: Codice
|
||
|
|
//launch plastic with branch explorer view option
|
||
|
|
}
|
||
|
|
|
||
|
|
void IViewSwitcher.DisableMergeView()
|
||
|
|
{
|
||
|
|
DisableMergeTab();
|
||
|
|
}
|
||
|
|
|
||
|
|
IMergeView IViewSwitcher.GetMergeView()
|
||
|
|
{
|
||
|
|
return MergeTab;
|
||
|
|
}
|
||
|
|
|
||
|
|
bool IViewSwitcher.IsIncomingChangesView()
|
||
|
|
{
|
||
|
|
return IsViewSelected(TabType.IncomingChanges);
|
||
|
|
}
|
||
|
|
|
||
|
|
void IViewSwitcher.CloseMergeView()
|
||
|
|
{
|
||
|
|
CloseMergeTab();
|
||
|
|
}
|
||
|
|
|
||
|
|
void IShowChangesetInView.ShowChangesetInView(ChangesetInfo changesetInfo)
|
||
|
|
{
|
||
|
|
ShowChangesetsView(changesetInfo);
|
||
|
|
}
|
||
|
|
|
||
|
|
void IShowShelveInView.ShowShelveInView(ChangesetInfo shelveInfo)
|
||
|
|
{
|
||
|
|
ShowShelvesView(shelveInfo);
|
||
|
|
}
|
||
|
|
|
||
|
|
IMergeView IMergeViewLauncher.MergeFrom(
|
||
|
|
RepositorySpec repSpec,
|
||
|
|
ObjectInfo objectInfo,
|
||
|
|
EnumMergeType mergeType,
|
||
|
|
bool showDiscardChangesButton)
|
||
|
|
{
|
||
|
|
return ((IMergeViewLauncher)this).MergeFromInterval(
|
||
|
|
repSpec, objectInfo, null, mergeType, showDiscardChangesButton);
|
||
|
|
}
|
||
|
|
|
||
|
|
IMergeView IMergeViewLauncher.MergeFrom(
|
||
|
|
RepositorySpec repSpec,
|
||
|
|
ObjectInfo objectInfo,
|
||
|
|
EnumMergeType mergeType,
|
||
|
|
ShowIncomingChangesFrom from,
|
||
|
|
bool showDiscardChangesButton)
|
||
|
|
{
|
||
|
|
return MergeFromInterval(repSpec, objectInfo, null, mergeType, from, showDiscardChangesButton);
|
||
|
|
}
|
||
|
|
|
||
|
|
IMergeView IMergeViewLauncher.MergeFromInterval(
|
||
|
|
RepositorySpec repSpec,
|
||
|
|
ObjectInfo objectInfo,
|
||
|
|
ObjectInfo ancestorChangesetInfo,
|
||
|
|
EnumMergeType mergeType,
|
||
|
|
bool showDiscardChangesButton)
|
||
|
|
{
|
||
|
|
return MergeFromInterval(
|
||
|
|
repSpec, objectInfo, null, mergeType, ShowIncomingChangesFrom.NotificationBar, showDiscardChangesButton);
|
||
|
|
}
|
||
|
|
|
||
|
|
IMergeView IMergeViewLauncher.FromCalculatedMerge(
|
||
|
|
RepositorySpec repSpec,
|
||
|
|
ObjectInfo objectInfo,
|
||
|
|
EnumMergeType mergeType,
|
||
|
|
CalculatedMergeResult calculatedMergeResult,
|
||
|
|
bool showDiscardChangesButton)
|
||
|
|
{
|
||
|
|
return ShowMergeViewFromCalculatedMerge(
|
||
|
|
repSpec, objectInfo, mergeType, calculatedMergeResult, showDiscardChangesButton);
|
||
|
|
}
|
||
|
|
|
||
|
|
void IGluonViewSwitcher.ShowIncomingChangesView()
|
||
|
|
{
|
||
|
|
ShowIncomingChangesView();
|
||
|
|
|
||
|
|
mParentWindow.Repaint();
|
||
|
|
}
|
||
|
|
|
||
|
|
void IHistoryViewLauncher.ShowHistoryView(
|
||
|
|
RepositorySpec repSpec,
|
||
|
|
long itemId,
|
||
|
|
string path,
|
||
|
|
bool isDirectory)
|
||
|
|
{
|
||
|
|
ShowHistoryView(repSpec, itemId, path, isDirectory);
|
||
|
|
|
||
|
|
mParentWindow.Repaint();
|
||
|
|
}
|
||
|
|
|
||
|
|
void MergeInProgress.IShowMergeView.MergeLinkNotFound()
|
||
|
|
{
|
||
|
|
// Nothing to do on the plugin when there is no pending merge link
|
||
|
|
}
|
||
|
|
|
||
|
|
void MergeInProgress.IShowMergeView.ForPendingMergeLink(
|
||
|
|
RepositorySpec repSpec,
|
||
|
|
MergeType pendingLinkMergeType,
|
||
|
|
ChangesetInfo srcChangeset,
|
||
|
|
ChangesetInfo baseChangeset)
|
||
|
|
{
|
||
|
|
EnumMergeType mergeType = MergeTypeConverter.TranslateMergeType(pendingLinkMergeType);
|
||
|
|
|
||
|
|
MergeTab = BuildMergeTab(
|
||
|
|
repSpec,
|
||
|
|
srcChangeset,
|
||
|
|
baseChangeset,
|
||
|
|
mergeType,
|
||
|
|
ShowIncomingChangesFrom.None,
|
||
|
|
MergeTypeClassifier.IsIncomingMerge(mergeType),
|
||
|
|
false,
|
||
|
|
false);
|
||
|
|
|
||
|
|
mViewHost.AddRefreshableView(ViewType.MergeView, MergeTab);
|
||
|
|
|
||
|
|
ShowMergeView();
|
||
|
|
}
|
||
|
|
|
||
|
|
void ShowInitialView(TabType viewToShow)
|
||
|
|
{
|
||
|
|
mState.SelectedTab = TabType.None;
|
||
|
|
|
||
|
|
ShowView(viewToShow);
|
||
|
|
|
||
|
|
if (mState.SelectedTab != TabType.None)
|
||
|
|
return;
|
||
|
|
|
||
|
|
ShowPendingChangesView();
|
||
|
|
}
|
||
|
|
|
||
|
|
void BuildBranchesViewFromState(SerializableBranchesTabState state)
|
||
|
|
{
|
||
|
|
BranchesTab = BuildBranchesTab(
|
||
|
|
state.ShowHiddenBranches);
|
||
|
|
|
||
|
|
mViewHost.AddRefreshableView(ViewType.BranchesView, BranchesTab);
|
||
|
|
}
|
||
|
|
|
||
|
|
void BuildHistoryViewFromState(SerializableHistoryTabState state)
|
||
|
|
{
|
||
|
|
HistoryTab = BuildHistoryTab(
|
||
|
|
state.RepSpec,
|
||
|
|
state.ItemId,
|
||
|
|
state.Path,
|
||
|
|
state.IsDirectory);
|
||
|
|
|
||
|
|
mViewHost.AddRefreshableView(ViewType.HistoryView, HistoryTab);
|
||
|
|
}
|
||
|
|
|
||
|
|
void BuildMergeViewFromState(SerializableMergeTabState state)
|
||
|
|
{
|
||
|
|
MergeTab = BuildMergeTab(
|
||
|
|
state.RepSpec,
|
||
|
|
state.GetObjectInfo(),
|
||
|
|
state.GetAncestorObjectInfo(),
|
||
|
|
state.MergeType,
|
||
|
|
state.From,
|
||
|
|
state.IsIncomingMerge,
|
||
|
|
state.IsMergeFinished,
|
||
|
|
false);
|
||
|
|
|
||
|
|
mViewHost.AddRefreshableView(ViewType.MergeView, MergeTab);
|
||
|
|
}
|
||
|
|
|
||
|
|
void OpenPendingChangesTab()
|
||
|
|
{
|
||
|
|
if (PendingChangesTab != null)
|
||
|
|
return;
|
||
|
|
|
||
|
|
PendingChangesTab = new PendingChangesTab(
|
||
|
|
mWkInfo,
|
||
|
|
mRepSpec,
|
||
|
|
mViewHost,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
this,
|
||
|
|
this,
|
||
|
|
this,
|
||
|
|
this,
|
||
|
|
this,
|
||
|
|
mAssetStatusCache,
|
||
|
|
mSaveAssets,
|
||
|
|
mShowDownloadPlasticExeWindow,
|
||
|
|
mWorkspaceOperationsMonitor,
|
||
|
|
mNewChangesInWk,
|
||
|
|
mPendingChangesUpdater,
|
||
|
|
mDeveloperIncomingChangesUpdater,
|
||
|
|
mGluonIncomingChangesUpdater,
|
||
|
|
mShelvedChangesUpdater,
|
||
|
|
mUpdatePendingChanges,
|
||
|
|
mWindowStatusBar,
|
||
|
|
mParentWindow,
|
||
|
|
mIsGluonMode);
|
||
|
|
|
||
|
|
mViewHost.AddRefreshableView(ViewType.CheckinView, PendingChangesTab);
|
||
|
|
}
|
||
|
|
|
||
|
|
IMergeView MergeFromInterval(
|
||
|
|
RepositorySpec repSpec,
|
||
|
|
ObjectInfo objectInfo,
|
||
|
|
ObjectInfo ancestorChangesetInfo,
|
||
|
|
EnumMergeType mergeType,
|
||
|
|
ShowIncomingChangesFrom from,
|
||
|
|
bool showDiscardChangesButton)
|
||
|
|
{
|
||
|
|
if (MergeTypeClassifier.IsIncomingMerge(mergeType))
|
||
|
|
{
|
||
|
|
ShowIncomingChangesView();
|
||
|
|
mParentWindow.Repaint();
|
||
|
|
return IncomingChangesTab as IMergeView;
|
||
|
|
}
|
||
|
|
|
||
|
|
ShowMergeViewFromInterval(
|
||
|
|
repSpec, objectInfo, ancestorChangesetInfo, mergeType, from, showDiscardChangesButton);
|
||
|
|
mParentWindow.Repaint();
|
||
|
|
return MergeTab;
|
||
|
|
}
|
||
|
|
|
||
|
|
void ShowHistoryView()
|
||
|
|
{
|
||
|
|
SetSelectedView(TabType.History);
|
||
|
|
}
|
||
|
|
|
||
|
|
void ShowMergeViewFromInterval(
|
||
|
|
RepositorySpec repSpec,
|
||
|
|
ObjectInfo objectInfo,
|
||
|
|
ObjectInfo ancestorChangesetInfo,
|
||
|
|
EnumMergeType mergeType,
|
||
|
|
ShowIncomingChangesFrom from,
|
||
|
|
bool showDiscardChangesButton)
|
||
|
|
{
|
||
|
|
if (MergeTab != null && MergeTab.IsProcessingMerge)
|
||
|
|
{
|
||
|
|
ShowMergeView();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (MergeTab != null)
|
||
|
|
{
|
||
|
|
mViewHost.RemoveRefreshableView(ViewType.MergeView, MergeTab);
|
||
|
|
MergeTab.OnDisable();
|
||
|
|
}
|
||
|
|
|
||
|
|
MergeTab = BuildMergeTab(
|
||
|
|
repSpec,
|
||
|
|
objectInfo,
|
||
|
|
ancestorChangesetInfo,
|
||
|
|
mergeType,
|
||
|
|
from,
|
||
|
|
false,
|
||
|
|
false,
|
||
|
|
showDiscardChangesButton);
|
||
|
|
|
||
|
|
mViewHost.AddRefreshableView(ViewType.MergeView, MergeTab);
|
||
|
|
|
||
|
|
ShowMergeView();
|
||
|
|
}
|
||
|
|
|
||
|
|
IMergeView ShowMergeViewFromCalculatedMerge(
|
||
|
|
RepositorySpec repSpec,
|
||
|
|
ObjectInfo objectInfo,
|
||
|
|
EnumMergeType mergeType,
|
||
|
|
CalculatedMergeResult calculatedMergeResult,
|
||
|
|
bool showDiscardChangesButton)
|
||
|
|
{
|
||
|
|
if (MergeTab != null && MergeTab.IsProcessingMerge)
|
||
|
|
{
|
||
|
|
ShowMergeView();
|
||
|
|
mParentWindow.Repaint();
|
||
|
|
return MergeTab;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (MergeTab != null)
|
||
|
|
{
|
||
|
|
mViewHost.RemoveRefreshableView(ViewType.MergeView, MergeTab);
|
||
|
|
MergeTab.OnDisable();
|
||
|
|
}
|
||
|
|
|
||
|
|
MergeTab = BuildMergeTabFromCalculatedMerge(
|
||
|
|
repSpec, objectInfo, mergeType, calculatedMergeResult, showDiscardChangesButton);
|
||
|
|
|
||
|
|
mViewHost.AddRefreshableView(ViewType.MergeView, MergeTab);
|
||
|
|
|
||
|
|
ShowMergeView();
|
||
|
|
mParentWindow.Repaint();
|
||
|
|
return MergeTab;
|
||
|
|
}
|
||
|
|
|
||
|
|
void ShowMergeView()
|
||
|
|
{
|
||
|
|
if (MergeTab == null)
|
||
|
|
return;
|
||
|
|
|
||
|
|
MergeTab.AutoRefresh();
|
||
|
|
|
||
|
|
SetSelectedView(TabType.Merge);
|
||
|
|
}
|
||
|
|
|
||
|
|
void DisableMergeTab()
|
||
|
|
{
|
||
|
|
if (MergeTab == null)
|
||
|
|
return;
|
||
|
|
|
||
|
|
mViewHost.RemoveRefreshableView(
|
||
|
|
ViewType.MergeView, MergeTab);
|
||
|
|
|
||
|
|
MergeTab.OnDisable();
|
||
|
|
MergeTab = null;
|
||
|
|
|
||
|
|
mState.MergeTabState = null;
|
||
|
|
}
|
||
|
|
|
||
|
|
void CloseMergeTab()
|
||
|
|
{
|
||
|
|
DisableMergeTab();
|
||
|
|
|
||
|
|
ShowPreviousViewFrom(TabType.Merge);
|
||
|
|
|
||
|
|
mParentWindow.Repaint();
|
||
|
|
}
|
||
|
|
|
||
|
|
void CloseHistoryTab()
|
||
|
|
{
|
||
|
|
mViewHost.RemoveRefreshableView(
|
||
|
|
ViewType.HistoryView, HistoryTab);
|
||
|
|
|
||
|
|
HistoryTab.OnDisable();
|
||
|
|
HistoryTab = null;
|
||
|
|
|
||
|
|
mState.HistoryTabState = null;
|
||
|
|
|
||
|
|
ShowPreviousViewFrom(TabType.History);
|
||
|
|
|
||
|
|
mParentWindow.Repaint();
|
||
|
|
}
|
||
|
|
|
||
|
|
IIncomingChangesTab BuildIncomingChangesTab(bool isGluonMode)
|
||
|
|
{
|
||
|
|
if (isGluonMode)
|
||
|
|
{
|
||
|
|
return new IncomingChangesTab(
|
||
|
|
mWkInfo,
|
||
|
|
mViewHost,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
mGluonUpdateIncomingChanges,
|
||
|
|
mAssetStatusCache,
|
||
|
|
mShowDownloadPlasticExeWindow,
|
||
|
|
mPendingChangesUpdater,
|
||
|
|
mGluonIncomingChangesUpdater,
|
||
|
|
mWindowStatusBar,
|
||
|
|
mParentWindow);
|
||
|
|
}
|
||
|
|
|
||
|
|
PlasticNotifier plasticNotifier = new PlasticNotifier();
|
||
|
|
|
||
|
|
MergeViewLogic.IMergeController mergeController = new MergeController(
|
||
|
|
mWkInfo,
|
||
|
|
mRepSpec,
|
||
|
|
null,
|
||
|
|
null,
|
||
|
|
EnumMergeType.IncomingMerge,
|
||
|
|
true,
|
||
|
|
plasticNotifier);
|
||
|
|
|
||
|
|
return MergeTab.Build(
|
||
|
|
mWkInfo,
|
||
|
|
mRepSpec,
|
||
|
|
null,
|
||
|
|
null,
|
||
|
|
EnumMergeType.IncomingMerge,
|
||
|
|
ShowIncomingChangesFrom.NotificationBar,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
this,
|
||
|
|
this,
|
||
|
|
mergeController,
|
||
|
|
new MergeViewLogic.GetWorkingBranch(),
|
||
|
|
mUpdateShelvedChanges,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
mAssetStatusCache,
|
||
|
|
mShowDownloadPlasticExeWindow,
|
||
|
|
mPendingChangesUpdater,
|
||
|
|
mDeveloperIncomingChangesUpdater,
|
||
|
|
mShelvedChangesUpdater,
|
||
|
|
plasticNotifier,
|
||
|
|
mWindowStatusBar,
|
||
|
|
mParentWindow,
|
||
|
|
true,
|
||
|
|
false,
|
||
|
|
false);
|
||
|
|
}
|
||
|
|
|
||
|
|
HistoryTab BuildHistoryTab(
|
||
|
|
RepositorySpec repSpec,
|
||
|
|
long itemId,
|
||
|
|
string path,
|
||
|
|
bool isDirectory)
|
||
|
|
{
|
||
|
|
HistoryTab result = new HistoryTab(
|
||
|
|
mWkInfo,
|
||
|
|
mViewHost,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
mAssetStatusCache,
|
||
|
|
mShowDownloadPlasticExeWindow,
|
||
|
|
mProcessExecutor,
|
||
|
|
mPendingChangesUpdater,
|
||
|
|
mDeveloperIncomingChangesUpdater,
|
||
|
|
mGluonIncomingChangesUpdater,
|
||
|
|
mParentWindow,
|
||
|
|
mIsGluonMode);
|
||
|
|
|
||
|
|
result.RefreshForItem(repSpec, itemId, path, isDirectory);
|
||
|
|
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
|
||
|
|
BranchesTab BuildBranchesTab(bool showHiddenBranches)
|
||
|
|
{
|
||
|
|
BranchesTab result = new BranchesTab(
|
||
|
|
mWkInfo,
|
||
|
|
mViewHost,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
this,
|
||
|
|
this,
|
||
|
|
this,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
mShelvedChangesUpdater,
|
||
|
|
mAssetStatusCache,
|
||
|
|
mSaveAssets,
|
||
|
|
mShowDownloadPlasticExeWindow,
|
||
|
|
mProcessExecutor,
|
||
|
|
mWorkspaceOperationsMonitor,
|
||
|
|
mPendingChangesUpdater,
|
||
|
|
mDeveloperIncomingChangesUpdater,
|
||
|
|
mGluonIncomingChangesUpdater,
|
||
|
|
mParentWindow,
|
||
|
|
mIsGluonMode,
|
||
|
|
showHiddenBranches);
|
||
|
|
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
|
||
|
|
MergeTab BuildMergeTabFromCalculatedMerge(
|
||
|
|
RepositorySpec repSpec,
|
||
|
|
ObjectInfo objectInfo,
|
||
|
|
EnumMergeType mergeType,
|
||
|
|
CalculatedMergeResult calculatedMergeResult,
|
||
|
|
bool showDiscardChangesButton)
|
||
|
|
{
|
||
|
|
return BuildMergeTab(
|
||
|
|
repSpec,
|
||
|
|
objectInfo,
|
||
|
|
null,
|
||
|
|
mergeType,
|
||
|
|
ShowIncomingChangesFrom.None,
|
||
|
|
false,
|
||
|
|
false,
|
||
|
|
showDiscardChangesButton,
|
||
|
|
calculatedMergeResult);
|
||
|
|
}
|
||
|
|
|
||
|
|
MergeTab BuildMergeTab(
|
||
|
|
RepositorySpec repSpec,
|
||
|
|
ObjectInfo objectInfo,
|
||
|
|
ObjectInfo ancestorObjectInfo,
|
||
|
|
EnumMergeType mergeType,
|
||
|
|
ShowIncomingChangesFrom from,
|
||
|
|
bool isIncomingMerge,
|
||
|
|
bool isMergeFinished,
|
||
|
|
bool showDiscardChangesButton,
|
||
|
|
CalculatedMergeResult calculatedMergeResult = null)
|
||
|
|
{
|
||
|
|
PlasticNotifier plasticNotifier = new PlasticNotifier();
|
||
|
|
|
||
|
|
MergeViewLogic.IMergeController mergeController = new MergeController(
|
||
|
|
mWkInfo,
|
||
|
|
repSpec,
|
||
|
|
objectInfo,
|
||
|
|
ancestorObjectInfo,
|
||
|
|
mergeType,
|
||
|
|
false,
|
||
|
|
plasticNotifier);
|
||
|
|
|
||
|
|
if (calculatedMergeResult != null)
|
||
|
|
{
|
||
|
|
return MergeTab.BuildFromCalculatedMerge(
|
||
|
|
mWkInfo,
|
||
|
|
repSpec,
|
||
|
|
objectInfo,
|
||
|
|
ancestorObjectInfo,
|
||
|
|
mergeType,
|
||
|
|
from,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
this,
|
||
|
|
this,
|
||
|
|
mergeController,
|
||
|
|
new MergeViewLogic.GetWorkingBranch(),
|
||
|
|
mUpdateShelvedChanges,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
mAssetStatusCache,
|
||
|
|
mShowDownloadPlasticExeWindow,
|
||
|
|
mPendingChangesUpdater,
|
||
|
|
mDeveloperIncomingChangesUpdater,
|
||
|
|
mShelvedChangesUpdater,
|
||
|
|
plasticNotifier,
|
||
|
|
mWindowStatusBar,
|
||
|
|
mParentWindow,
|
||
|
|
calculatedMergeResult,
|
||
|
|
isIncomingMerge,
|
||
|
|
isMergeFinished,
|
||
|
|
showDiscardChangesButton);
|
||
|
|
}
|
||
|
|
|
||
|
|
return MergeTab.Build(
|
||
|
|
mWkInfo,
|
||
|
|
repSpec,
|
||
|
|
objectInfo,
|
||
|
|
ancestorObjectInfo,
|
||
|
|
mergeType,
|
||
|
|
from,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
this,
|
||
|
|
this,
|
||
|
|
mergeController,
|
||
|
|
new MergeViewLogic.GetWorkingBranch(),
|
||
|
|
mUpdateShelvedChanges,
|
||
|
|
mWorkspaceWindow,
|
||
|
|
mAssetStatusCache,
|
||
|
|
mShowDownloadPlasticExeWindow,
|
||
|
|
mPendingChangesUpdater,
|
||
|
|
mDeveloperIncomingChangesUpdater,
|
||
|
|
mShelvedChangesUpdater,
|
||
|
|
plasticNotifier,
|
||
|
|
mWindowStatusBar,
|
||
|
|
mParentWindow,
|
||
|
|
isIncomingMerge,
|
||
|
|
isMergeFinished,
|
||
|
|
showDiscardChangesButton);
|
||
|
|
}
|
||
|
|
|
||
|
|
void ShowView(TabType viewToShow)
|
||
|
|
{
|
||
|
|
switch (viewToShow)
|
||
|
|
{
|
||
|
|
case TabType.PendingChanges:
|
||
|
|
ShowPendingChangesView();
|
||
|
|
break;
|
||
|
|
|
||
|
|
case TabType.IncomingChanges:
|
||
|
|
ShowIncomingChangesView();
|
||
|
|
break;
|
||
|
|
|
||
|
|
case TabType.Changesets:
|
||
|
|
ShowChangesetsView();
|
||
|
|
break;
|
||
|
|
|
||
|
|
case TabType.Branches:
|
||
|
|
ShowBranchesView();
|
||
|
|
break;
|
||
|
|
|
||
|
|
case TabType.Shelves:
|
||
|
|
ShowShelvesView();
|
||
|
|
break;
|
||
|
|
|
||
|
|
case TabType.Locks:
|
||
|
|
ShowLocksView();
|
||
|
|
break;
|
||
|
|
|
||
|
|
case TabType.Merge:
|
||
|
|
ShowMergeView();
|
||
|
|
break;
|
||
|
|
|
||
|
|
case TabType.History:
|
||
|
|
ShowHistoryView();
|
||
|
|
break;
|
||
|
|
|
||
|
|
case TabType.Labels:
|
||
|
|
ShowLabelsView();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void ShowPreviousViewFrom(TabType tabToClose)
|
||
|
|
{
|
||
|
|
if (!IsViewSelected(tabToClose))
|
||
|
|
return;
|
||
|
|
|
||
|
|
if (GetRefreshableViewBasedOnSelectedTab(mState.PreviousSelectedTab) == null)
|
||
|
|
mState.PreviousSelectedTab = TabType.PendingChanges;
|
||
|
|
|
||
|
|
ShowView(mState.PreviousSelectedTab);
|
||
|
|
}
|
||
|
|
|
||
|
|
IRefreshableView GetRefreshableViewBasedOnSelectedTab(TabType selectedTab)
|
||
|
|
{
|
||
|
|
switch (selectedTab)
|
||
|
|
{
|
||
|
|
case TabType.PendingChanges:
|
||
|
|
return PendingChangesTab;
|
||
|
|
|
||
|
|
case TabType.IncomingChanges:
|
||
|
|
return (IRefreshableView)IncomingChangesTab;
|
||
|
|
|
||
|
|
case TabType.Changesets:
|
||
|
|
return ChangesetsTab;
|
||
|
|
|
||
|
|
case TabType.Shelves:
|
||
|
|
return ShelvesTab;
|
||
|
|
|
||
|
|
case TabType.Branches:
|
||
|
|
return BranchesTab;
|
||
|
|
|
||
|
|
case TabType.Labels:
|
||
|
|
return LabelsTab;
|
||
|
|
|
||
|
|
case TabType.Locks:
|
||
|
|
return LocksTab;
|
||
|
|
|
||
|
|
case TabType.Merge:
|
||
|
|
return MergeTab;
|
||
|
|
|
||
|
|
case TabType.History:
|
||
|
|
return HistoryTab;
|
||
|
|
|
||
|
|
default:
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
IRefreshableView GetRefreshableView(ViewType viewType)
|
||
|
|
{
|
||
|
|
switch (viewType)
|
||
|
|
{
|
||
|
|
case ViewType.PendingChangesView:
|
||
|
|
return PendingChangesTab;
|
||
|
|
|
||
|
|
case ViewType.IncomingChangesView:
|
||
|
|
return (IRefreshableView)IncomingChangesTab;
|
||
|
|
|
||
|
|
case ViewType.ChangesetsView:
|
||
|
|
return ChangesetsTab;
|
||
|
|
|
||
|
|
case ViewType.ShelvesView:
|
||
|
|
return ShelvesTab;
|
||
|
|
|
||
|
|
case ViewType.BranchesView:
|
||
|
|
return BranchesTab;
|
||
|
|
|
||
|
|
case ViewType.LabelsView:
|
||
|
|
return LabelsTab;
|
||
|
|
|
||
|
|
case ViewType.LocksView:
|
||
|
|
return LocksTab;
|
||
|
|
|
||
|
|
case ViewType.MergeView:
|
||
|
|
return MergeTab;
|
||
|
|
|
||
|
|
case ViewType.HistoryView:
|
||
|
|
return HistoryTab;
|
||
|
|
|
||
|
|
default:
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void SetSelectedView(TabType tab)
|
||
|
|
{
|
||
|
|
mSideBarTreeView.SetSelectedItem(tab);
|
||
|
|
|
||
|
|
if (mState.SelectedTab != tab && mState.SelectedTab != TabType.None)
|
||
|
|
mState.PreviousSelectedTab = mState.SelectedTab;
|
||
|
|
|
||
|
|
mState.SelectedTab = tab;
|
||
|
|
|
||
|
|
if (PendingChangesTab != null)
|
||
|
|
PendingChangesTab.IsVisible = tab == TabType.PendingChanges;
|
||
|
|
|
||
|
|
if (IncomingChangesTab != null)
|
||
|
|
IncomingChangesTab.IsVisible = tab == TabType.IncomingChanges;
|
||
|
|
}
|
||
|
|
|
||
|
|
SerializableViewSwitcherState mState;
|
||
|
|
|
||
|
|
CheckShelvedChanges.IUpdateShelvedChangesNotification mUpdateShelvedChanges;
|
||
|
|
ShelvedChangesUpdater mShelvedChangesUpdater;
|
||
|
|
WorkspaceWindow mWorkspaceWindow;
|
||
|
|
readonly EditorWindow mParentWindow;
|
||
|
|
readonly INewChangesInWk mNewChangesInWk;
|
||
|
|
readonly PendingChangesUpdater mPendingChangesUpdater;
|
||
|
|
readonly IncomingChangesUpdater mDeveloperIncomingChangesUpdater;
|
||
|
|
readonly GluonIncomingChangesUpdater mGluonIncomingChangesUpdater;
|
||
|
|
readonly CheckPendingChanges.IUpdatePendingChanges mUpdatePendingChanges;
|
||
|
|
readonly WindowStatusBar mWindowStatusBar;
|
||
|
|
readonly WorkspaceOperationsMonitor mWorkspaceOperationsMonitor;
|
||
|
|
readonly LaunchTool.IProcessExecutor mProcessExecutor;
|
||
|
|
readonly LaunchTool.IShowDownloadPlasticExeWindow mShowDownloadPlasticExeWindow;
|
||
|
|
readonly ISaveAssets mSaveAssets;
|
||
|
|
readonly IAssetStatusCache mAssetStatusCache;
|
||
|
|
readonly SideBarTreeView mSideBarTreeView;
|
||
|
|
readonly GluonCheckIncomingChanges.IUpdateIncomingChanges mGluonUpdateIncomingChanges;
|
||
|
|
readonly bool mIsGluonMode;
|
||
|
|
readonly ViewHost mViewHost;
|
||
|
|
readonly WorkspaceInfo mWkInfo;
|
||
|
|
readonly RepositorySpec mRepSpec;
|
||
|
|
}
|
||
|
|
}
|