Files
Test/Library/PackageCache/com.unity.collab-proxy@4628d2ba6ea4/Editor/Diff/Image/Toolbar/ImageModeSwitcherView.cs
T
2026-11-01 23:39:55 +02:00

121 lines
3.7 KiB
C#

using System;
using Unity.PlasticSCM.Editor.Diff.Texture;
using Unity.PlasticSCM.Editor.UI.UIElements;
using UnityEditor.UIElements;
using UnityEngine.UIElements;
namespace Unity.PlasticSCM.Editor.Diff.Texture.Toolbar
{
internal class ImageModeSwitcherView : VisualElement, IImageDiffToolbar
{
internal event Action<ImageDiffMode> ViewModeChanged;
internal ImageModeSwitcherView()
{
CreateGUI();
}
internal void Dispose()
{
mOnionSkinToggle.UnregisterValueChangedCallback(OnModeToggleChanged);
mSideBySideToggle.UnregisterValueChangedCallback(OnModeToggleChanged);
mDifferencesToggle.UnregisterValueChangedCallback(OnModeToggleChanged);
mSwipeToggle.UnregisterValueChangedCallback(OnModeToggleChanged);
}
// internal for testing
internal void HandleToggleChanged(
ToolbarToggle changedToggle, bool newValue)
{
if (!newValue)
{
changedToggle.SetValueWithoutNotify(true);
return;
}
SetActiveToggle(changedToggle);
ImageDiffMode mode = GetMode(changedToggle);
ViewModeChanged?.Invoke(mode);
}
void IImageDiffToolbar.EnableDifferencesMode()
{
mDifferencesToggle.SetEnabled(true);
}
void IImageDiffToolbar.DisableDifferencesMode()
{
mDifferencesToggle.SetEnabled(false);
}
void CreateGUI()
{
style.flexDirection = FlexDirection.Row;
mOnionSkinToggle = CreateModeToggle("Onion skin");
Add(mOnionSkinToggle);
mSideBySideToggle = CreateModeToggle("Side by side");
mSideBySideToggle.SetValueWithoutNotify(true);
Add(mSideBySideToggle);
mDifferencesToggle = CreateModeToggle("Differences");
Add(mDifferencesToggle);
mSwipeToggle = CreateModeToggle("Swipe");
Add(mSwipeToggle);
}
ToolbarToggle CreateModeToggle(string label)
{
ToolbarToggle toggle = new ToolbarToggle();
toggle.text = label;
toggle.style.paddingTop = 0;
toggle.RegisterValueChangedCallback(OnModeToggleChanged);
return toggle;
}
void OnModeToggleChanged(ChangeEvent<bool> evt)
{
ToolbarToggle changedToggle = (ToolbarToggle)evt.target;
HandleToggleChanged(changedToggle, evt.newValue);
}
void SetActiveToggle(ToolbarToggle activeToggle)
{
SetToggleValueIfNeeded(mOnionSkinToggle, mOnionSkinToggle == activeToggle);
SetToggleValueIfNeeded(mSideBySideToggle, mSideBySideToggle == activeToggle);
SetToggleValueIfNeeded(mDifferencesToggle, mDifferencesToggle == activeToggle);
SetToggleValueIfNeeded(mSwipeToggle, mSwipeToggle == activeToggle);
}
static void SetToggleValueIfNeeded(ToolbarToggle toggle, bool value)
{
if (toggle.value != value)
toggle.SetValueWithoutNotify(value);
}
ImageDiffMode GetMode(ToolbarToggle toggle)
{
if (toggle == mOnionSkinToggle)
return ImageDiffMode.OnionSkin;
if (toggle == mDifferencesToggle)
return ImageDiffMode.Differences;
if (toggle == mSwipeToggle)
return ImageDiffMode.Swipe;
return ImageDiffMode.SideBySide;
}
ToolbarToggle mOnionSkinToggle;
ToolbarToggle mSideBySideToggle;
ToolbarToggle mDifferencesToggle;
ToolbarToggle mSwipeToggle;
}
}