.vs
Assets
Library
APIUpdater
Artifacts
Bee
BuildPlayerData
PackageCache
com.unity.collab-proxy@2.5.2
.Resources
Documentation~
Editor
PlasticSCM
AssetMenu
AssetOverlays
Assets
AssetsUtils
CollabMigration
Configuration
Developer
Gluon
Help
BuildFormattedHelp.cs
BuildFormattedHelp.cs.meta
DrawHelpPanel.cs
DrawHelpPanel.cs.meta
ExternalLink.cs
ExternalLink.cs.meta
HelpData.cs
HelpData.cs.meta
HelpFormat.cs
HelpFormat.cs.meta
HelpLink.cs
HelpLink.cs.meta
HelpLinkData.cs
HelpLinkData.cs.meta
HelpPanel.cs
HelpPanel.cs.meta
TestingHelpData.cs
TestingHelpData.cs.meta
Hub
Inspector
SceneView
Tool
Toolbar
UI
Views
WebApi
ApplicationDataPath.cs
ApplicationDataPath.cs.meta
AssemblyInfo.cs
AssemblyInfo.cs.meta
AssetMenu.meta
AssetOverlays.meta
Assets.meta
AssetsUtils.meta
AutoRefresh.cs
AutoRefresh.cs.meta
BuildGetEventExtraInfoFunction.cs
BuildGetEventExtraInfoFunction.cs.meta
CheckWorkspaceTreeNodeStatus.cs
CheckWorkspaceTreeNodeStatus.cs.meta
CollabMigration.meta
CollabPlugin.cs
CollabPlugin.cs.meta
Configuration.meta
Developer.meta
DrawGuiModeSwitcher.cs
DrawGuiModeSwitcher.cs.meta
EnumExtensions.cs
EnumExtensions.cs.meta
FindWorkspace.cs
FindWorkspace.cs.meta
GetRelativePath.cs
GetRelativePath.cs.meta
Gluon.meta
Help.meta
Hub.meta
Inspector.meta
MetaPath.cs
MetaPath.cs.meta
NewIncomingChanges.cs
NewIncomingChanges.cs.meta
OrganizationsInformation.cs
OrganizationsInformation.cs.meta
ParentWindow.cs
ParentWindow.cs.meta
PlasticApp.cs
PlasticApp.cs.meta
PlasticConnectionMonitor.cs
PlasticConnectionMonitor.cs.meta
PlasticMenuItem.cs
PlasticMenuItem.cs.meta
PlasticNotification.cs
PlasticNotification.cs.meta
PlasticPlugin.cs
PlasticPlugin.cs.meta
PlasticPluginIsEnabledPreference.cs
PlasticPluginIsEnabledPreference.cs.meta
PlasticProjectSettingsProvider.cs
PlasticProjectSettingsProvider.cs.meta
PlasticShutdown.cs
PlasticShutdown.cs.meta
PlasticWindow.cs
PlasticWindow.cs.meta
ProjectWindow.cs
ProjectWindow.cs.meta
QueryVisualElementsExtensions.cs
QueryVisualElementsExtensions.cs.meta
SceneView.meta
SwitchModeConfirmationDialog.cs
SwitchModeConfirmationDialog.cs.meta
Tool.meta
Toolbar.meta
UI.meta
UVCPackageVersion.cs
UVCPackageVersion.cs.meta
Unity.PlasticSCM.Editor.asmdef
Unity.PlasticSCM.Editor.asmdef.meta
UnityConfigurationChecker.cs
UnityConfigurationChecker.cs.meta
VCSPlugin.cs
VCSPlugin.cs.meta
ViewSwitcher.cs
ViewSwitcher.cs.meta
Views.meta
VisualElementExtensions.cs
VisualElementExtensions.cs.meta
WebApi.meta
WorkspaceWindow.cs
WorkspaceWindow.cs.meta
PlasticSCM.meta
Lib
.signature
CHANGELOG.md
CHANGELOG.md.meta
Editor.meta
LICENSE.md
LICENSE.md.meta
Lib.meta
README.md
README.md.meta
Third Party Notices.md
Third Party Notices.md.meta
ValidationConfig.json
ValidationConfig.json.meta
package.json
package.json.meta
com.unity.editorcoroutines@1.0.0
com.unity.ext.nunit@1.0.6
com.unity.feature.development@1.0.1
com.unity.ide.rider@3.0.31
com.unity.ide.visualstudio@2.0.22
com.unity.ide.vscode@1.2.5
com.unity.modules.ai@1.0.0
com.unity.modules.androidjni@1.0.0
com.unity.modules.animation@1.0.0
com.unity.modules.assetbundle@1.0.0
com.unity.modules.audio@1.0.0
com.unity.modules.cloth@1.0.0
com.unity.modules.director@1.0.0
com.unity.modules.imageconversion@1.0.0
com.unity.modules.imgui@1.0.0
com.unity.modules.jsonserialize@1.0.0
com.unity.modules.particlesystem@1.0.0
com.unity.modules.physics2d@1.0.0
com.unity.modules.physics@1.0.0
com.unity.modules.screencapture@1.0.0
com.unity.modules.subsystems@1.0.0
com.unity.modules.terrain@1.0.0
com.unity.modules.terrainphysics@1.0.0
com.unity.modules.tilemap@1.0.0
com.unity.modules.ui@1.0.0
com.unity.modules.uielements@1.0.0
com.unity.modules.umbra@1.0.0
com.unity.modules.unityanalytics@1.0.0
com.unity.modules.unitywebrequest@1.0.0
com.unity.modules.unitywebrequestassetbundle@1.0.0
com.unity.modules.unitywebrequestaudio@1.0.0
com.unity.modules.unitywebrequesttexture@1.0.0
com.unity.modules.unitywebrequestwww@1.0.0
com.unity.modules.vehicles@1.0.0
com.unity.modules.video@1.0.0
com.unity.modules.vr@1.0.0
com.unity.modules.wind@1.0.0
com.unity.modules.xr@1.0.0
com.unity.performance.profile-analyzer@1.2.2
com.unity.settings-manager@2.0.1
com.unity.test-framework@1.1.33
com.unity.testtools.codecoverage@1.2.6
com.unity.textmeshpro@3.0.6
com.unity.timeline@1.7.6
com.unity.ugui@1.0.0
com.unity.visualscripting@1.9.4
PackageManager
PlayModeViewStates
PlayerDataCache
ScriptAssemblies
Search
ShaderCache
SplashScreenCache
StateCache
UIElements
AnnotationManager
ArtifactDB
ArtifactDB-lock
BuildPlayer.prefs
BuildSettings.asset
EditorOnlyScriptingSettings.json
EditorOnlyVirtualTextureState.json
EditorSnapSettings.asset
EditorUserBuildSettings.asset
InspectorExpandedItems.asset
LastBuild.buildreport
LastSceneManagerSetup.txt
LibraryFormatVersion.txt
MonoManager.asset
SceneVisibilityState.asset
ScriptMapper
ShaderCache.db
SourceAssetDB
SourceAssetDB-lock
SpriteAtlasDatabase.asset
Style.catalog
expandedItems
ilpp.pid
Logs
Packages
ProjectSettings
UserSettings
obj
.vsconfig
Assembly-CSharp.Player.csproj
Assembly-CSharp.csproj
TM1.sln
Unity.CollabProxy.Editor.csproj
Unity.EditorCoroutines.Editor.csproj
Unity.Performance.Profile-Analyzer.Editor.csproj
Unity.PlasticSCM.Editor.csproj
Unity.Rider.Editor.csproj
Unity.Settings.Editor.csproj
Unity.TestTools.CodeCoverage.Editor.OpenCover.Model.csproj
Unity.TestTools.CodeCoverage.Editor.OpenCover.Mono.Reflection.csproj
Unity.TestTools.CodeCoverage.Editor.csproj
Unity.TextMeshPro.Editor.csproj
Unity.TextMeshPro.Player.csproj
Unity.TextMeshPro.csproj
Unity.Timeline.Editor.csproj
Unity.Timeline.Player.csproj
Unity.Timeline.csproj
Unity.VSCode.Editor.csproj
Unity.VisualScripting.Core.Editor.csproj
Unity.VisualScripting.Core.Player.csproj
Unity.VisualScripting.Core.csproj
Unity.VisualScripting.Flow.Editor.csproj
Unity.VisualScripting.Flow.Player.csproj
Unity.VisualScripting.Flow.csproj
Unity.VisualScripting.SettingsProvider.Editor.csproj
Unity.VisualScripting.Shared.Editor.csproj
Unity.VisualScripting.State.Editor.csproj
Unity.VisualScripting.State.Player.csproj
Unity.VisualScripting.State.csproj
Unity.VisualStudio.Editor.csproj
UnityEditor.TestRunner.csproj
UnityEditor.UI.csproj
UnityEngine.TestRunner.Player.csproj
UnityEngine.TestRunner.csproj
UnityEngine.UI.Player.csproj
UnityEngine.UI.csproj
185 lines
6.0 KiB
C#
185 lines
6.0 KiB
C#
![]() |
using System.Diagnostics;
|
|||
|
|
|||
|
using UnityEditor;
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
using Codice.Client.Common;
|
|||
|
using PlasticGui;
|
|||
|
using Unity.PlasticSCM.Editor.UI;
|
|||
|
|
|||
|
namespace Unity.PlasticSCM.Editor.Help
|
|||
|
{
|
|||
|
internal static class DrawHelpPanel
|
|||
|
{
|
|||
|
internal static void For(
|
|||
|
HelpPanel helpPanel)
|
|||
|
{
|
|||
|
if (!helpPanel.Visible)
|
|||
|
return;
|
|||
|
|
|||
|
DoHelpPanelToolbar(helpPanel);
|
|||
|
|
|||
|
GUILayout.Space(10);
|
|||
|
|
|||
|
DoHelpPanelContent(helpPanel);
|
|||
|
}
|
|||
|
|
|||
|
static void DoHelpPanelToolbar(
|
|||
|
HelpPanel helpPanel)
|
|||
|
{
|
|||
|
Rect rect = GUILayoutUtility.GetLastRect();
|
|||
|
rect.y = rect.yMax;
|
|||
|
rect.height = 22;
|
|||
|
|
|||
|
GUILayout.Space(1);
|
|||
|
GUIStyle expandableToolbar = new GUIStyle(EditorStyles.toolbar);
|
|||
|
expandableToolbar.fixedHeight = 0;
|
|||
|
GUI.Label(rect, GUIContent.none, expandableToolbar);
|
|||
|
|
|||
|
using (new EditorGUILayout.HorizontalScope())
|
|||
|
{
|
|||
|
if (GUILayout.Button("<", EditorStyles.miniButtonLeft))
|
|||
|
{
|
|||
|
// TODO(codice): On Left Clicked
|
|||
|
}
|
|||
|
|
|||
|
if (GUILayout.Button(">", EditorStyles.miniButtonRight))
|
|||
|
{
|
|||
|
// TODO(codice): On Right Clicked
|
|||
|
}
|
|||
|
|
|||
|
GUILayout.FlexibleSpace();
|
|||
|
|
|||
|
// TODO(codice): The bool used here must be loaded and persisted by some means
|
|||
|
helpPanel.Data.ShouldShowAgain = EditorGUILayout.ToggleLeft(
|
|||
|
PlasticLocalization.GetString(PlasticLocalization.Name.DontShowItAgain),
|
|||
|
helpPanel.Data.ShouldShowAgain, UnityStyles.MiniToggle);
|
|||
|
bool okWasPressed = GUILayout.Button(
|
|||
|
PlasticLocalization.GetString(PlasticLocalization.Name.OkButton),
|
|||
|
EditorStyles.miniButton);
|
|||
|
|
|||
|
if (okWasPressed)
|
|||
|
{
|
|||
|
helpPanel.Hide();
|
|||
|
// TODO(codice): Do on helppanel dismiss actions
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void DoHelpPanelContent(
|
|||
|
HelpPanel helpPanel)
|
|||
|
{
|
|||
|
using (new EditorGUILayout.HorizontalScope())
|
|||
|
{
|
|||
|
using (new EditorGUILayout.VerticalScope())
|
|||
|
{
|
|||
|
GUIStyle helpParagraph = UnityStyles.Paragraph;
|
|||
|
|
|||
|
helpPanel.TextScroll = GUILayout.BeginScrollView(helpPanel.TextScroll);
|
|||
|
|
|||
|
GUILayout.Label(helpPanel.GUIContent, helpParagraph);
|
|||
|
|
|||
|
if (Event.current.type != EventType.Layout)
|
|||
|
DoHelpPanelLinks(helpPanel, helpParagraph);
|
|||
|
|
|||
|
GUILayout.EndScrollView();
|
|||
|
|
|||
|
Rect scrollRect = GUILayoutUtility.GetLastRect();
|
|||
|
if (Mouse.IsRightMouseButtonPressed(Event.current) &&
|
|||
|
scrollRect.Contains(Event.current.mousePosition))
|
|||
|
{
|
|||
|
GenericMenu contextMenu = BuildHelpPanelMenu(helpPanel.Data.CleanText);
|
|||
|
contextMenu.ShowAsContext();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void DoHelpPanelLinks(
|
|||
|
HelpPanel helpPanel,
|
|||
|
GUIStyle helpParagraph)
|
|||
|
{
|
|||
|
var lastRect = GUILayoutUtility.GetLastRect();
|
|||
|
|
|||
|
bool linkWasClicked = false;
|
|||
|
GUIContent charContent = new GUIContent();
|
|||
|
for (int charIdx = 0; charIdx < helpPanel.GUIContent.text.Length; charIdx++)
|
|||
|
{
|
|||
|
HelpLink link;
|
|||
|
if (!helpPanel.TryGetLinkAtChar(charIdx, out link))
|
|||
|
continue;
|
|||
|
|
|||
|
charContent.text = helpPanel.GUIContent.text[charIdx].ToString();
|
|||
|
|
|||
|
var pos = helpParagraph.GetCursorPixelPosition(
|
|||
|
lastRect, helpPanel.GUIContent, charIdx);
|
|||
|
|
|||
|
float charWidth = helpParagraph.CalcSize(charContent).x;
|
|||
|
|
|||
|
Rect charRect = new Rect(pos, new Vector2(
|
|||
|
charWidth - 4, helpParagraph.lineHeight));
|
|||
|
|
|||
|
if (!linkWasClicked &&
|
|||
|
Mouse.IsLeftMouseButtonPressed(Event.current) &&
|
|||
|
charRect.Contains(Event.current.mousePosition))
|
|||
|
{
|
|||
|
linkWasClicked = true;
|
|||
|
OnHelpLinkClicked(helpPanel, link);
|
|||
|
}
|
|||
|
|
|||
|
// Underline for links
|
|||
|
charRect.y = charRect.yMax - 1;
|
|||
|
charRect.height = 1;
|
|||
|
GUI.DrawTexture(charRect, Images.GetLinkUnderlineImage());
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void OnHelpLinkClicked(
|
|||
|
HelpPanel helpPanel,
|
|||
|
HelpLink helpLink)
|
|||
|
{
|
|||
|
HelpLink.LinkType linkType;
|
|||
|
string content;
|
|||
|
|
|||
|
if (!HelpLinkData.TryGet(helpLink.Link, out linkType, out content))
|
|||
|
return;
|
|||
|
|
|||
|
switch (linkType)
|
|||
|
{
|
|||
|
case HelpLink.LinkType.Action:
|
|||
|
GuiMessage.ShowInformation(
|
|||
|
"An ACTION link has been clicked:\n" + content);
|
|||
|
break;
|
|||
|
case HelpLink.LinkType.Help:
|
|||
|
helpPanel.Show(
|
|||
|
content == "sample1" ?
|
|||
|
TestingHelpData.GetSample1() :
|
|||
|
TestingHelpData.GetSample2());
|
|||
|
break;
|
|||
|
case HelpLink.LinkType.Link:
|
|||
|
Process.Start(content);
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void CopyToClipboard(string data)
|
|||
|
{
|
|||
|
EditorGUIUtility.systemCopyBuffer = data;
|
|||
|
}
|
|||
|
|
|||
|
static GenericMenu BuildHelpPanelMenu(string cleanText)
|
|||
|
{
|
|||
|
GenericMenu result = new GenericMenu();
|
|||
|
|
|||
|
result.AddItem(
|
|||
|
new GUIContent(PlasticLocalization.GetString(PlasticLocalization.Name.Copy)),
|
|||
|
false,
|
|||
|
() => CopyToClipboard(cleanText)
|
|||
|
);
|
|||
|
|
|||
|
return result;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|