266 lines
8.2 KiB
C#
266 lines
8.2 KiB
C#
using UnityEngine;
|
|
|
|
using Codice.Client.BaseCommands;
|
|
using Codice.Client.Commands;
|
|
using Codice.ThemeImages;
|
|
using PlasticGui.WorkspaceWindow.IncomingChanges;
|
|
using PlasticGui.WorkspaceWindow.PendingChanges;
|
|
|
|
using GluonIncomingChangeInfo = PlasticGui.Gluon.WorkspaceWindow.Views.IncomingChanges.IncomingChangeInfo;
|
|
using GluonIncomingChangeCategory = PlasticGui.Gluon.WorkspaceWindow.Views.IncomingChanges.IncomingChangeCategory;
|
|
using Unity.PlasticSCM.Editor.AssetsOverlays;
|
|
|
|
namespace Unity.PlasticSCM.Editor.UI.Tree
|
|
{
|
|
static class GetChangesOverlayIcon
|
|
{
|
|
internal class Data
|
|
{
|
|
internal readonly Texture Texture;
|
|
internal readonly float XOffset;
|
|
internal readonly float YOffset;
|
|
internal readonly float Size;
|
|
|
|
internal Data(Texture texture, float xOffset, float yOffset, float size)
|
|
{
|
|
Texture = texture;
|
|
XOffset = xOffset;
|
|
YOffset = yOffset;
|
|
Size = size;
|
|
}
|
|
}
|
|
|
|
internal static Data ForPlasticIncomingChange(
|
|
IncomingChangeInfo incomingChange,
|
|
bool isSolvedConflict)
|
|
{
|
|
if (incomingChange.CategoryType == IncomingChangesCategory.Type.FileConflicts ||
|
|
incomingChange.CategoryType == IncomingChangesCategory.Type.DirectoryConflicts)
|
|
return ForConflict(isSolvedConflict);
|
|
|
|
if (incomingChange.IsXLink())
|
|
return BuildData.ForXLink();
|
|
|
|
if (incomingChange.CategoryType == IncomingChangesCategory.Type.Deleted)
|
|
return BuildData.ForDeletedOnServer();
|
|
|
|
if (incomingChange.CategoryType == IncomingChangesCategory.Type.Changed)
|
|
return BuildData.ForOutOfDate();
|
|
|
|
return null;
|
|
}
|
|
|
|
internal static Data ForGluonIncomingChange(
|
|
GluonIncomingChangeInfo incomingChange,
|
|
bool isSolvedConflict)
|
|
{
|
|
if (incomingChange.CategoryType == GluonIncomingChangeCategory.Type.Conflicted)
|
|
return ForConflict(isSolvedConflict);
|
|
|
|
if (incomingChange.IsXLink())
|
|
return BuildData.ForXLink();
|
|
|
|
if (incomingChange.CategoryType == GluonIncomingChangeCategory.Type.Deleted)
|
|
return BuildData.ForDeletedOnServer();
|
|
|
|
if (incomingChange.CategoryType == GluonIncomingChangeCategory.Type.Changed)
|
|
return BuildData.ForOutOfDate();
|
|
|
|
return null;
|
|
}
|
|
|
|
internal static Data ForPendingChange(
|
|
ChangeInfo changeInfo,
|
|
bool isConflict)
|
|
{
|
|
if (isConflict)
|
|
return BuildData.ForConflicted();
|
|
|
|
ItemIconImageType type = ChangeInfoView.
|
|
GetIconImageType(changeInfo);
|
|
|
|
if (ChangeTypesOperator.AreAllSet(
|
|
changeInfo.ChangeTypes, ChangeTypes.Added))
|
|
return BuildData.ForAdded();
|
|
|
|
switch (type)
|
|
{
|
|
case ItemIconImageType.Ignored:
|
|
return BuildData.ForIgnored();
|
|
case ItemIconImageType.Private:
|
|
return BuildData.ForPrivated();
|
|
case ItemIconImageType.Deleted:
|
|
return BuildData.ForDeleted();
|
|
case ItemIconImageType.CheckedOut:
|
|
return BuildData.ForCheckedOut();
|
|
default:
|
|
return null;
|
|
}
|
|
}
|
|
|
|
internal static Data ForAssetStatus(AssetStatus status)
|
|
{
|
|
switch (status)
|
|
{
|
|
case AssetStatus.Ignored:
|
|
return BuildData.ForIgnored();
|
|
case AssetStatus.Private:
|
|
return BuildData.ForPrivated();
|
|
case AssetStatus.Added:
|
|
return BuildData.ForAdded();
|
|
case AssetStatus.Checkout:
|
|
return BuildData.ForCheckedOut();
|
|
case AssetStatus.OutOfDate:
|
|
return BuildData.ForOutOfDate();
|
|
case AssetStatus.Conflicted:
|
|
return BuildData.ForConflicted();
|
|
case AssetStatus.DeletedOnServer:
|
|
return BuildData.ForDeletedOnServer();
|
|
case AssetStatus.Locked:
|
|
return BuildData.ForLocked();
|
|
case AssetStatus.LockedRemote:
|
|
return BuildData.ForLockedRemote();
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
static Data ForConflict(bool isResolved)
|
|
{
|
|
if (isResolved)
|
|
return BuildData.ForOk();
|
|
|
|
return BuildData.ForConflicted();
|
|
}
|
|
|
|
static class BuildData
|
|
{
|
|
internal static Data ForOk()
|
|
{
|
|
return new Data(
|
|
Images.GetImage(Images.Name.Ok),
|
|
4f, 4f, SIZE);
|
|
}
|
|
|
|
internal static Data ForXLink()
|
|
{
|
|
return new Data(
|
|
Images.GetImage(Images.Name.XLink),
|
|
2f, 3f, SIZE);
|
|
}
|
|
|
|
internal static Data ForIgnored()
|
|
{
|
|
return new Data(
|
|
Images.GetImage(Images.Name.Ignored),
|
|
GetLeftXOffset(),
|
|
GetBottomYOffset(),
|
|
SIZE);
|
|
}
|
|
|
|
internal static Data ForPrivated()
|
|
{
|
|
return new Data(
|
|
Images.GetPrivatedOverlayIcon(),
|
|
GetLeftXOffset(),
|
|
GetBottomYOffset(),
|
|
SIZE);
|
|
}
|
|
|
|
internal static Data ForAdded()
|
|
{
|
|
return new Data(
|
|
Images.GetAddedOverlayIcon(),
|
|
GetLeftXOffset(),
|
|
GetTopYOffset(),
|
|
SIZE);
|
|
}
|
|
|
|
internal static Data ForDeleted()
|
|
{
|
|
return new Data(
|
|
Images.GetDeletedOverlayIcon(),
|
|
GetLeftXOffset(),
|
|
GetTopYOffset(),
|
|
SIZE);
|
|
}
|
|
|
|
internal static Data ForCheckedOut()
|
|
{
|
|
return new Data(
|
|
Images.GetCheckedOutOverlayIcon(),
|
|
GetLeftXOffset(),
|
|
GetTopYOffset(),
|
|
SIZE);
|
|
}
|
|
|
|
internal static Data ForDeletedOnServer()
|
|
{
|
|
return new Data(
|
|
Images.GetDeletedRemoteOverlayIcon(),
|
|
GetRightXOffset(),
|
|
GetTopYOffset(),
|
|
SIZE);
|
|
}
|
|
|
|
internal static Data ForOutOfDate()
|
|
{
|
|
return new Data(
|
|
Images.GetOutOfSyncOverlayIcon(),
|
|
GetRightXOffset(),
|
|
GetBottomYOffset(),
|
|
SIZE);
|
|
}
|
|
|
|
internal static Data ForLocked()
|
|
{
|
|
return new Data(
|
|
Images.GetLockedLocalOverlayIcon(),
|
|
GetLeftXOffset(),
|
|
GetTopYOffset(),
|
|
SIZE);
|
|
}
|
|
|
|
internal static Data ForLockedRemote()
|
|
{
|
|
return new Data(
|
|
Images.GetLockedRemoteOverlayIcon(),
|
|
GetRightXOffset(),
|
|
GetTopYOffset(),
|
|
SIZE);
|
|
}
|
|
|
|
static float GetLeftXOffset()
|
|
{
|
|
return -4f;
|
|
}
|
|
|
|
internal static Data ForConflicted()
|
|
{
|
|
return new Data(
|
|
Images.GetConflictedOverlayIcon(),
|
|
GetLeftXOffset(),
|
|
GetBottomYOffset(),
|
|
SIZE);
|
|
}
|
|
|
|
static float GetRightXOffset()
|
|
{
|
|
return 8f;
|
|
}
|
|
|
|
static float GetBottomYOffset()
|
|
{
|
|
return UnityConstants.TREEVIEW_ROW_HEIGHT - SIZE + 2f;
|
|
}
|
|
|
|
static float GetTopYOffset()
|
|
{
|
|
return -1f;
|
|
}
|
|
|
|
const float SIZE = 16;
|
|
}
|
|
}
|
|
}
|