Singularity/Library/PackageCache/com.unity.collab-proxy@2.0.3/Editor/PlasticSCM/Help/HelpPanel.cs
2024-05-06 11:45:45 -07:00

116 lines
2.6 KiB
C#

using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using Unity.PlasticSCM.Editor.UI;
namespace Unity.PlasticSCM.Editor.Help
{
internal class HelpPanel
{
internal Vector2 TextScroll;
internal bool Visible { get; private set; }
internal HelpData Data
{
get { return mHelpData; }
}
internal GUIContent GUIContent
{
get { return mHelpGUIContent; }
}
internal HelpPanel(EditorWindow window)
{
mWindow = window;
}
internal void Show(HelpData helpData)
{
ClearData();
UpdateData(helpData);
Visible = true;
mWindow.Repaint();
}
internal void Hide()
{
ClearData();
Visible = false;
mWindow.Repaint();
}
internal bool TryGetLinkAtChar(
int charIndex,
out HelpLink link)
{
link = null;
FormattedHelpLink formattedLink = GetFormattedLinkAtChar(
mFormattedLinks, charIndex);
if (formattedLink == null)
return false;
link = formattedLink.Source;
return !BuildFormattedHelp.IsLinkMetaChar(formattedLink, charIndex);
}
void ClearData()
{
mHelpData = null;
mHelpGUIContent = null;
mFormattedLinks = null;
}
void UpdateData(HelpData helpData)
{
mHelpData = helpData;
string formattedHelpText;
BuildFormattedHelp.ForData(
mHelpData.CleanText,
mHelpData.FormattedBlocks.ToArray(),
mHelpData.Links.ToArray(),
out formattedHelpText,
out mFormattedLinks);
mHelpGUIContent = new GUIContent(formattedHelpText);
}
static FormattedHelpLink GetFormattedLinkAtChar(
List<FormattedHelpLink> formattedLinks, int charIndex)
{
for(int i = 0; i < formattedLinks.Count; i++)
{
FormattedHelpLink link = formattedLinks[i];
if (link.Position <= charIndex &&
charIndex < link.Position + link.Length)
return link;
if (charIndex <= link.Position + link.Length)
return null;
}
return null;
}
HelpData mHelpData;
GUIContent mHelpGUIContent;
List<FormattedHelpLink> mFormattedLinks;
EditorWindow mWindow;
}
}