2021-06-25 07:50:12 -04:00

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;
}
}
}