A game about forced loneliness, made by TACStudios
at master 3.3 kB view raw
1using System; 2using System.Text.RegularExpressions; 3 4using UnityEditor; 5using UnityEngine; 6 7using Codice.Client.Common; 8 9namespace Unity.PlasticSCM.Editor.UI 10{ 11 internal static class DrawTextBlockWithLink 12 { 13 internal static void ForExternalLink( 14 ExternalLink externalLink, 15 string explanation, 16 GUIStyle textBlockStyle) 17 { 18 GUILayout.Label(explanation, textBlockStyle); 19 20 GUIStyle linkStyle = new GUIStyle(UnityStyles.LinkLabel); 21 linkStyle.fontSize = textBlockStyle.fontSize; 22 linkStyle.stretchWidth = false; 23 24 if (GUILayout.Button(externalLink.Label, linkStyle)) 25 Application.OpenURL(externalLink.Url); 26 27 EditorGUIUtility.AddCursorRect( 28 GUILayoutUtility.GetLastRect(), MouseCursor.Link); 29 } 30 31 internal static void ForMultiLinkLabelInDialog( 32 MultiLinkLabelData data) 33 { 34 ForMultiLinkLabel( 35 data, 36 UnityStyles.Paragraph, 37 areLinkActionsSupported: Application.platform == RuntimePlatform.WindowsEditor, 38 isEndFlexibleSpaceNeeded: true); 39 } 40 41 internal static void ForMultiLinkLabel( 42 MultiLinkLabelData data, 43 GUIStyle style) 44 { 45 ForMultiLinkLabel( 46 data, style, 47 areLinkActionsSupported: true, 48 isEndFlexibleSpaceNeeded: false); 49 } 50 51 static void ForMultiLinkLabel( 52 MultiLinkLabelData data, 53 GUIStyle style, 54 bool areLinkActionsSupported, 55 bool isEndFlexibleSpaceNeeded) 56 { 57 GUIStyle labelStyle = new GUIStyle(style); 58 labelStyle.margin = new RectOffset(0, 0, style.margin.top, style.margin.bottom); 59 labelStyle.padding = new RectOffset(0, 0, style.padding.top, style.padding.bottom); 60 61 if (!areLinkActionsSupported) 62 { 63 GUILayout.Label(string.Format(data.Text, data.LinkNames.ToArray()), labelStyle); 64 return; 65 } 66 67 string[] labels = Regex.Split(data.Text, @"\{\d+\}"); 68 69 GUIStyle linkStyle = new GUIStyle(labelStyle); 70 linkStyle.normal.textColor = EditorStyles.linkLabel.normal.textColor; 71 linkStyle.hover.textColor = EditorStyles.linkLabel.hover.textColor; 72 linkStyle.active.textColor = EditorStyles.linkLabel.active.textColor; 73 linkStyle.stretchWidth = false; 74 75 using (new EditorGUILayout.HorizontalScope()) 76 { 77 for (int i = 0; i < labels.Length; i++) 78 { 79 GUILayout.Label(labels[i], labelStyle); 80 81 if (data.LinkNames.Count <= i) 82 break; 83 84 bool buttonResult = GUILayout.Button(data.LinkNames[i], linkStyle); 85 86 EditorGUIUtility.AddCursorRect( 87 GUILayoutUtility.GetLastRect(), MouseCursor.Link); 88 89 if (buttonResult) 90 ((Action)data.LinkActions[i]).Invoke(); 91 } 92 93 if (isEndFlexibleSpaceNeeded) 94 GUILayout.FlexibleSpace(); 95 } 96 } 97 } 98}