Files
2026-11-01 23:39:55 +02:00

136 lines
4.4 KiB
C#

using Codice.CM.Client.Differences;
using Codice.CM.Client.Differences.Graphic;
using MergetoolGui;
using PlasticGui;
using Unity.CodeEditor;
using Unity.PlasticSCM.Editor.UI;
using Unity.PlasticSCM.Editor.UI.UIElements;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine;
using XDiffGui.Options;
namespace Unity.PlasticSCM.Editor.Diff.Text
{
internal class OptionsContextMenuButton
{
internal ComparisonMethodMenu ComparisonMenu { get { return mComparisonMenu; } }
internal TextEditorOptionsMenu TextEditorOptionsMenu { get { return mTextEditorOptionsMenu; } }
internal OptionsContextMenuButton(
IComparisonMethodListener comparisonMethodListener,
ISyntaxHighlightListener syntaxHighlightListener,
IEncodingListener encodingListener,
ICodeEditorSettingsChangeListener settingsChangeListener)
{
mComparisonMenu = new ComparisonMethodMenu(comparisonMethodListener);
mSyntaxMenu = new SyntaxHighlightMenu(syntaxHighlightListener);
mLeftEncodingMenu = new EncodingMenu(encodingListener);
mRightEncodingMenu = new EncodingMenu(encodingListener);
mTextEditorOptionsMenu = new TextEditorOptionsMenu(settingsChangeListener);
mSettingsChangeListener = settingsChangeListener;
}
internal ToolbarButton CreateButton()
{
mButton = ControlBuilder.Toolbar.CreateImageButtonLeft(
Images.GetSettingsIcon(),
MergetoolLocalization.GetString(
MergetoolLocalization.Name.EditorOptions),
OnButtonClicked);
return mButton;
}
internal void SetInfo(
ComparisonMethodTypes comparisonMethod,
Language language,
DiffViewerData diffViewerData)
{
mButton.SetEnabled(true);
mComparisonMenu.SetComparisonMethod(comparisonMethod);
mSyntaxMenu.SetSyntaxHighlight(language);
mLeftEncodingMenu.SetEncodingMenu(
TextBoxContributor.Left, diffViewerData.Left);
mRightEncodingMenu.SetEncodingMenu(
TextBoxContributor.Right, diffViewerData.Right);
}
internal void Enable()
{
mButton.SetEnabled(true);
}
internal void Disable()
{
mButton.SetEnabled(false);
}
internal void Dispose()
{
mButton.clicked -= OnButtonClicked;
}
void OnButtonClicked()
{
GenericMenu menu = new GenericMenu();
BuildMenu(menu);
menu.DropDown(mButton.worldBound);
}
void BuildMenu(GenericMenu menu)
{
mComparisonMenu.BuildMenuItems(menu,
MergetoolLocalization.GetString(
MergetoolLocalization.Name.ComparisonMethodMenuTitle) + "/");
mSyntaxMenu.BuildMenuItems(menu,
MergetoolLocalization.GetString(
MergetoolLocalization.Name.SyntaxHighlight) + "/");
menu.AddSeparator(string.Empty);
mLeftEncodingMenu.BuildMenuItems(menu,
MergetoolLocalization.GetString(
MergetoolLocalization.Name.LeftEncoding) + "/");
mRightEncodingMenu.BuildMenuItems(menu,
MergetoolLocalization.GetString(
MergetoolLocalization.Name.RightEncoding) + "/");
menu.AddSeparator(string.Empty);
mTextEditorOptionsMenu.BuildMenuItems(menu,
MergetoolLocalization.GetString(
MergetoolLocalization.Name.EditorOptions) + "/");
menu.AddItem(
new GUIContent(
PlasticLocalization.Name.ChangeEditorFont.GetString()),
false,
ChangeFontMenuItem_Click);
}
void ChangeFontMenuItem_Click()
{
ChangeFont.Execute(mSettingsChangeListener);
}
ToolbarButton mButton;
readonly ComparisonMethodMenu mComparisonMenu;
readonly SyntaxHighlightMenu mSyntaxMenu;
readonly EncodingMenu mLeftEncodingMenu;
readonly EncodingMenu mRightEncodingMenu;
readonly TextEditorOptionsMenu mTextEditorOptionsMenu;
readonly ICodeEditorSettingsChangeListener mSettingsChangeListener;
}
}