init project
This commit is contained in:
@@ -0,0 +1,315 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEditor.IMGUI.Controls;
|
||||
using UnityEngine;
|
||||
|
||||
using Codice.Client.Common.EventTracking;
|
||||
using Codice.CM.Common;
|
||||
using PlasticGui;
|
||||
using Unity.PlasticSCM.Editor.UI;
|
||||
#if UNITY_6000_2_OR_NEWER
|
||||
using TreeView = UnityEditor.IMGUI.Controls.TreeView<int>;
|
||||
using TreeViewItem = UnityEditor.IMGUI.Controls.TreeViewItem<int>;
|
||||
using TreeViewState = UnityEditor.IMGUI.Controls.TreeViewState<int>;
|
||||
#endif
|
||||
|
||||
namespace Unity.PlasticSCM.Editor
|
||||
{
|
||||
internal class SideBarTreeView : TreeView
|
||||
{
|
||||
internal SideBarTreeView(
|
||||
RepositorySpec repSpec,
|
||||
bool isGluonMode,
|
||||
Action<ViewSwitcher.TabType> switchSwitchViewAction)
|
||||
: base(new TreeViewState())
|
||||
{
|
||||
mRepSpec = repSpec;
|
||||
mIsGluonMode = isGluonMode;
|
||||
mSwitchViewAction = switchSwitchViewAction;
|
||||
rowHeight = EditorGUIUtility.singleLineHeight;
|
||||
|
||||
Reload();
|
||||
}
|
||||
|
||||
internal void SetHistoryVisible(bool isVisible)
|
||||
{
|
||||
if (mIsHistoryItemVisible == isVisible)
|
||||
return;
|
||||
|
||||
mIsHistoryItemVisible = isVisible;
|
||||
Reload();
|
||||
}
|
||||
|
||||
internal void SetMergeVisible(bool isVisible)
|
||||
{
|
||||
if (mIsMergeItemVisible == isVisible)
|
||||
return;
|
||||
|
||||
mIsMergeItemVisible = isVisible;
|
||||
Reload();
|
||||
}
|
||||
|
||||
internal void SetSelectedItem(ViewSwitcher.TabType tabType)
|
||||
{
|
||||
if (mIsSelectionChanging)
|
||||
return;
|
||||
|
||||
mIsSettingSelectedTab = true;
|
||||
|
||||
if (tabType == ViewSwitcher.TabType.History)
|
||||
SetHistoryVisible(true);
|
||||
|
||||
if (tabType == ViewSwitcher.TabType.Merge)
|
||||
SetMergeVisible(true);
|
||||
|
||||
try
|
||||
{
|
||||
foreach (var item in rootItem.children)
|
||||
{
|
||||
var sideBarItem = item as SideBarTreeViewItem;
|
||||
|
||||
if (sideBarItem == null)
|
||||
continue;
|
||||
|
||||
if (sideBarItem.TabType != tabType)
|
||||
continue;
|
||||
|
||||
SetSelection(new List<int> { sideBarItem.id });
|
||||
FrameItem(sideBarItem.id);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
mIsSettingSelectedTab = false;
|
||||
}
|
||||
}
|
||||
|
||||
internal float GetTotalWidth()
|
||||
{
|
||||
if (mTotalWidth == -1)
|
||||
{
|
||||
mTotalWidth = MeasureMaxWidth.ForTexts(
|
||||
EditorStyles.label,
|
||||
PlasticLocalization.GetString(PlasticLocalization.Name.PendingChangesViewTitle),
|
||||
PlasticLocalization.GetString(PlasticLocalization.Name.IncomingChangesViewTitle),
|
||||
PlasticLocalization.GetString(PlasticLocalization.Name.ChangesetsViewTitle),
|
||||
PlasticLocalization.GetString(PlasticLocalization.Name.ShelvesViewTitle),
|
||||
PlasticLocalization.GetString(PlasticLocalization.Name.BranchesViewTitle),
|
||||
PlasticLocalization.GetString(PlasticLocalization.Name.Labels),
|
||||
PlasticLocalization.GetString(PlasticLocalization.Name.LocksViewTitle),
|
||||
PlasticLocalization.GetString(PlasticLocalization.Name.History),
|
||||
PlasticLocalization.GetString(PlasticLocalization.Name.Merge));
|
||||
|
||||
mTotalWidth += LEFT_MARGIN + ICON_SIZE + ICON_MARGIN + RIGHT_MARGIN;
|
||||
}
|
||||
|
||||
return mTotalWidth;
|
||||
}
|
||||
|
||||
protected override void RowGUI(RowGUIArgs args)
|
||||
{
|
||||
var item = args.item as SideBarTreeViewItem;
|
||||
|
||||
if (item == null)
|
||||
return;
|
||||
|
||||
var contentRect = args.rowRect;
|
||||
contentRect.x += LEFT_MARGIN;
|
||||
contentRect.width -= LEFT_MARGIN;
|
||||
|
||||
var iconRect = contentRect;
|
||||
iconRect.width = ICON_SIZE;
|
||||
iconRect.height = ICON_SIZE;
|
||||
iconRect.y += (contentRect.height - ICON_SIZE) * 0.5f;
|
||||
|
||||
Texture icon = GetItemIcon(item.TabType);
|
||||
|
||||
if (icon != null)
|
||||
{
|
||||
GUI.DrawTexture(iconRect, icon);
|
||||
}
|
||||
|
||||
var labelRect = contentRect;
|
||||
labelRect.x += ICON_SIZE + ICON_MARGIN;
|
||||
labelRect.width -= ICON_SIZE + ICON_MARGIN;
|
||||
|
||||
GUI.Label(labelRect, item.displayName, EditorStyles.label);
|
||||
}
|
||||
|
||||
protected override TreeViewItem BuildRoot()
|
||||
{
|
||||
var root = new TreeViewItem { id = -1, depth = -1 };
|
||||
root.children = new List<TreeViewItem>();
|
||||
|
||||
root.AddChild(new SideBarTreeViewItem
|
||||
{
|
||||
id = 0,
|
||||
depth = 0,
|
||||
displayName = PlasticLocalization.Name.PendingChangesViewTitle.GetString(),
|
||||
TabType = ViewSwitcher.TabType.PendingChanges,
|
||||
});
|
||||
root.AddChild(new SideBarTreeViewItem
|
||||
{
|
||||
id = 2,
|
||||
depth = 0,
|
||||
displayName = PlasticLocalization.Name.IncomingChangesViewTitle.GetString(),
|
||||
TabType = ViewSwitcher.TabType.IncomingChanges,
|
||||
});
|
||||
root.AddChild(new SideBarTreeViewItem
|
||||
{
|
||||
id = 3,
|
||||
depth = 0,
|
||||
displayName = PlasticLocalization.Name.ChangesetsViewTitle.GetString(),
|
||||
TabType = ViewSwitcher.TabType.Changesets,
|
||||
});
|
||||
root.AddChild(new SideBarTreeViewItem
|
||||
{
|
||||
id = 4,
|
||||
depth = 0,
|
||||
displayName = PlasticLocalization.Name.ShelvesViewTitle.GetString(),
|
||||
TabType = ViewSwitcher.TabType.Shelves,
|
||||
});
|
||||
root.AddChild(new SideBarTreeViewItem
|
||||
{
|
||||
id = 5,
|
||||
depth = 0,
|
||||
displayName = PlasticLocalization.Name.BranchesViewTitle.GetString(),
|
||||
TabType = ViewSwitcher.TabType.Branches,
|
||||
});
|
||||
|
||||
if (!mIsGluonMode)
|
||||
{
|
||||
root.AddChild(new SideBarTreeViewItem
|
||||
{
|
||||
id = 6,
|
||||
depth = 0,
|
||||
displayName = PlasticLocalization.Name.Labels.GetString(),
|
||||
TabType = ViewSwitcher.TabType.Labels,
|
||||
});
|
||||
}
|
||||
|
||||
root.AddChild(new SideBarTreeViewItem
|
||||
{
|
||||
id = 7,
|
||||
depth = 0,
|
||||
displayName = PlasticLocalization.Name.LocksViewTitle.GetString(),
|
||||
TabType = ViewSwitcher.TabType.Locks,
|
||||
});
|
||||
|
||||
if (mIsHistoryItemVisible)
|
||||
{
|
||||
root.AddChild(new SideBarTreeViewItem
|
||||
{
|
||||
id = 8,
|
||||
depth = 0,
|
||||
displayName = PlasticLocalization.Name.History.GetString(),
|
||||
TabType = ViewSwitcher.TabType.History,
|
||||
});
|
||||
}
|
||||
|
||||
if (mIsMergeItemVisible)
|
||||
{
|
||||
root.AddChild(new SideBarTreeViewItem
|
||||
{
|
||||
id = 9,
|
||||
depth = 0,
|
||||
displayName = PlasticLocalization.Name.Merge.GetString(),
|
||||
TabType = ViewSwitcher.TabType.Merge,
|
||||
});
|
||||
}
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
protected override void SelectionChanged(IList<int> selectedIds)
|
||||
{
|
||||
base.SelectionChanged(selectedIds);
|
||||
|
||||
if (mIsSettingSelectedTab)
|
||||
return;
|
||||
|
||||
if (selectedIds.Count == 0)
|
||||
return;
|
||||
|
||||
var item = FindItem(selectedIds[0], rootItem) as SideBarTreeViewItem;
|
||||
|
||||
if (item == null)
|
||||
return;
|
||||
|
||||
mIsSelectionChanging = true;
|
||||
|
||||
try
|
||||
{
|
||||
if (item.TabType == ViewSwitcher.TabType.Shelves)
|
||||
{
|
||||
TrackFeatureUseEvent.For(
|
||||
mRepSpec,
|
||||
TrackFeatureUseEvent.Features.UnityPackage.ShowShelvesViewFromToolbarButton);
|
||||
}
|
||||
|
||||
mSwitchViewAction(item.TabType);
|
||||
}
|
||||
finally
|
||||
{
|
||||
mIsSelectionChanging = false;
|
||||
}
|
||||
}
|
||||
|
||||
protected override bool CanMultiSelect(TreeViewItem item)
|
||||
{
|
||||
// Disable multi-selection
|
||||
return false;
|
||||
}
|
||||
|
||||
Texture GetItemIcon(ViewSwitcher.TabType tabType)
|
||||
{
|
||||
switch (tabType)
|
||||
{
|
||||
case ViewSwitcher.TabType.PendingChanges:
|
||||
return Images.GetPendingChangesViewIcon();
|
||||
case ViewSwitcher.TabType.IncomingChanges:
|
||||
return Images.GetIncomingChangesViewIcon();
|
||||
case ViewSwitcher.TabType.Changesets:
|
||||
return Images.GetChangesetsIcon();
|
||||
case ViewSwitcher.TabType.Shelves:
|
||||
return Images.GetShelveIcon();
|
||||
case ViewSwitcher.TabType.Branches:
|
||||
return Images.GetBranchesIcon();
|
||||
case ViewSwitcher.TabType.Labels:
|
||||
return Images.GetLabelIcon();
|
||||
case ViewSwitcher.TabType.Locks:
|
||||
return Images.GetLockIcon();
|
||||
case ViewSwitcher.TabType.History:
|
||||
return Images.GetHistoryIcon();
|
||||
case ViewSwitcher.TabType.Merge:
|
||||
return Images.GetMergeViewIcon();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
class SideBarTreeViewItem : TreeViewItem
|
||||
{
|
||||
public ViewSwitcher.TabType TabType { get; set; }
|
||||
}
|
||||
|
||||
bool mIsSelectionChanging;
|
||||
bool mIsSettingSelectedTab;
|
||||
bool mIsHistoryItemVisible = false;
|
||||
bool mIsMergeItemVisible = false;
|
||||
float mTotalWidth = -1;
|
||||
|
||||
readonly Action<ViewSwitcher.TabType> mSwitchViewAction;
|
||||
readonly bool mIsGluonMode;
|
||||
readonly RepositorySpec mRepSpec;
|
||||
|
||||
const int ICON_SIZE = 16;
|
||||
const int ICON_MARGIN = 4;
|
||||
const int LEFT_MARGIN = 15;
|
||||
const int RIGHT_MARGIN = 5;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user