94 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Text.RegularExpressions;
 | |
| 
 | |
| using UnityEditor;
 | |
| using UnityEngine;
 | |
| 
 | |
| using Codice.Client.Common;
 | |
| 
 | |
| namespace Unity.PlasticSCM.Editor.UI
 | |
| {
 | |
|     internal static class DrawTextBlockWithLink
 | |
|     {
 | |
|         internal static void ForExternalLink(
 | |
|             ExternalLink externalLink,
 | |
|             string explanation,
 | |
|             GUIStyle textBlockStyle)
 | |
|         {
 | |
|             GUILayout.Label(explanation, textBlockStyle);
 | |
| 
 | |
|             GUIStyle linkStyle = new GUIStyle(UnityStyles.LinkLabel);
 | |
|             linkStyle.fontSize = textBlockStyle.fontSize;
 | |
|             linkStyle.stretchWidth = false;
 | |
| 
 | |
|             if (GUILayout.Button(externalLink.Label, linkStyle))
 | |
|                 Application.OpenURL(externalLink.Url);
 | |
| 
 | |
|             EditorGUIUtility.AddCursorRect(
 | |
|                 GUILayoutUtility.GetLastRect(), MouseCursor.Link);
 | |
|         }
 | |
| 
 | |
|         internal static void ForMultiLinkLabelInDialog(
 | |
|             MultiLinkLabelData data)
 | |
|         {
 | |
|             ForMultiLinkLabel(
 | |
|                 data,
 | |
|                 UnityStyles.Dialog.ParagraphForMultiLinkLabel,
 | |
|                 UnityStyles.Dialog.LinkForMultiLinkLabel,
 | |
|                 areLinkActionsSupported: Application.platform == RuntimePlatform.WindowsEditor,
 | |
|                 isEndFlexibleSpaceNeeded: true);
 | |
|         }
 | |
| 
 | |
|         internal static void ForMultiLinkLabel(
 | |
|             MultiLinkLabelData data,
 | |
|             GUIStyle labelStyle,
 | |
|             GUIStyle linkStyle)
 | |
|         {
 | |
|             ForMultiLinkLabel(
 | |
|                 data, labelStyle, linkStyle,
 | |
|                 areLinkActionsSupported: true,
 | |
|                 isEndFlexibleSpaceNeeded: false);
 | |
|         }
 | |
| 
 | |
|         static void ForMultiLinkLabel(
 | |
|             MultiLinkLabelData data,
 | |
|             GUIStyle labelStyle,
 | |
|             GUIStyle linkStyle,
 | |
|             bool areLinkActionsSupported,
 | |
|             bool isEndFlexibleSpaceNeeded)
 | |
|         {
 | |
|             if (!areLinkActionsSupported)
 | |
|             {
 | |
|                 GUILayout.Label(
 | |
|                     string.Format(data.Text, data.LinkNames.ToArray()),
 | |
|                     labelStyle);
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             string[] labels = Regex.Split(data.Text, @"\{\d+\}");
 | |
| 
 | |
|             using (new EditorGUILayout.HorizontalScope())
 | |
|             {
 | |
|                 for (int i = 0; i < labels.Length; i++)
 | |
|                 {
 | |
|                     GUILayout.Label(labels[i], labelStyle);
 | |
| 
 | |
|                     if (data.LinkNames.Count <= i)
 | |
|                         break;
 | |
| 
 | |
|                     bool buttonResult = GUILayout.Button(data.LinkNames[i], linkStyle);
 | |
| 
 | |
|                     EditorGUIUtility.AddCursorRect(
 | |
|                         GUILayoutUtility.GetLastRect(), MouseCursor.Link);
 | |
| 
 | |
|                     if (buttonResult)
 | |
|                         ((Action)data.LinkActions[i])();
 | |
|                 }
 | |
| 
 | |
|                 if (isEndFlexibleSpaceNeeded)
 | |
|                     GUILayout.FlexibleSpace();
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |