113 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			113 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | namespace SRDebugger.UI.Tabs | |||
|  | { | |||
|  |     using System.Collections.Generic; | |||
|  |     using System.Text; | |||
|  |     using Controls; | |||
|  |     using Services; | |||
|  |     using SRF; | |||
|  |     using SRF.Service; | |||
|  |     using UnityEngine; | |||
|  | 
 | |||
|  |     public class InfoTabController : SRMonoBehaviourEx | |||
|  |     { | |||
|  |         public const char Tick = '\u2713'; | |||
|  |         public const char Cross = '\u00D7'; | |||
|  |         public const string NameColor = "#BCBCBC"; | |||
|  |         private Dictionary<string, InfoBlock> _infoBlocks = new Dictionary<string, InfoBlock>(); | |||
|  | 
 | |||
|  |         [RequiredField] public InfoBlock InfoBlockPrefab; | |||
|  | 
 | |||
|  |         [RequiredField] public RectTransform LayoutContainer; | |||
|  | 
 | |||
|  |         protected override void OnEnable() | |||
|  |         { | |||
|  |             base.OnEnable(); | |||
|  |             Refresh(); | |||
|  |         } | |||
|  | 
 | |||
|  |         public void Refresh() | |||
|  |         { | |||
|  |             var s = SRServiceManager.GetService<ISystemInformationService>(); | |||
|  | 
 | |||
|  |             foreach (var category in s.GetCategories()) | |||
|  |             { | |||
|  |                 if (!_infoBlocks.ContainsKey(category)) | |||
|  |                 { | |||
|  |                     var block = CreateBlock(category); | |||
|  |                     _infoBlocks.Add(category, block); | |||
|  |                 } | |||
|  |             } | |||
|  | 
 | |||
|  |             foreach (var kv in _infoBlocks) | |||
|  |             { | |||
|  |                 FillInfoBlock(kv.Value, s.GetInfo(kv.Key)); | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         private void FillInfoBlock(InfoBlock block, IList<InfoEntry> info) | |||
|  |         { | |||
|  |             var sb = new StringBuilder(); | |||
|  | 
 | |||
|  |             var maxTitleLength = 0; | |||
|  | 
 | |||
|  |             foreach (var systemInfo in info) | |||
|  |             { | |||
|  |                 if (systemInfo.Title.Length > maxTitleLength) | |||
|  |                 { | |||
|  |                     maxTitleLength = systemInfo.Title.Length; | |||
|  |                 } | |||
|  |             } | |||
|  | 
 | |||
|  |             maxTitleLength += 2; | |||
|  | 
 | |||
|  |             var first = true; | |||
|  |             foreach (var i in info) | |||
|  |             { | |||
|  |                 if (first) | |||
|  |                 { | |||
|  |                     first = false; | |||
|  |                 } | |||
|  |                 else | |||
|  |                 { | |||
|  |                     sb.AppendLine(); | |||
|  |                 } | |||
|  | 
 | |||
|  |                 sb.Append("<color="); | |||
|  |                 sb.Append(NameColor); | |||
|  |                 sb.Append(">"); | |||
|  | 
 | |||
|  |                 sb.Append(i.Title); | |||
|  |                 sb.Append(": "); | |||
|  | 
 | |||
|  |                 sb.Append("</color>"); | |||
|  | 
 | |||
|  |                 for (var j = i.Title.Length; j <= maxTitleLength; ++j) | |||
|  |                 { | |||
|  |                     sb.Append(' '); | |||
|  |                 } | |||
|  | 
 | |||
|  |                 if (i.Value is bool) | |||
|  |                 { | |||
|  |                     sb.Append((bool) i.Value ? Tick : Cross); | |||
|  |                 } | |||
|  |                 else | |||
|  |                 { | |||
|  |                     sb.Append(i.Value); | |||
|  |                 } | |||
|  |             } | |||
|  | 
 | |||
|  |             block.Content.text = sb.ToString(); | |||
|  |         } | |||
|  | 
 | |||
|  |         private InfoBlock CreateBlock(string title) | |||
|  |         { | |||
|  |             var block = SRInstantiate.Instantiate(InfoBlockPrefab); | |||
|  |             block.Title.text = title; | |||
|  | 
 | |||
|  |             block.CachedTransform.SetParent(LayoutContainer, false); | |||
|  | 
 | |||
|  |             return block; | |||
|  |         } | |||
|  |     } | |||
|  | } |