Files
ChunilENG/Assets/Scripts/UI/Panel_MachineDashBoard.cs

257 lines
7.9 KiB
C#

using CHN;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using TMPro;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using WI;
using static MQTT;
namespace CHN
{
public class Panel_MachineDashBoard : PanelBase, IPopupPanel
{
Button Button_Close;
Button Button_Simple;
Button Button_Detail;
Button Button_Refresh;
ScrollRect scrollView_SimpleInfo;
ScrollRect scrollView_DetailInfo;
TextMeshProUGUI text_MachineName;
private ObjectPoolManager poolManager;
public UI_MachineInfoItem prf_InfoItem;
public HashSet<UI_MachineInfoItem> infoItems = new();
private FieldInfo[] mqttFields;
private FieldInfo[] kpiFields;
private Dictionary<FieldInfo, UI_MachineInfoItem> machineInfoItem = new();
private HashSet<string> simpleviewField = new();
public Action<Machine> onClickDetail;
public Action<Machine> onClickSimple;
public Action<Machine, HashSet<string>> simpleView;
public Action onClose;
private Machine machine;
private Button currentTabButton;
public override void AfterAwake()
{
prf_InfoItem = Resources.Load<UI_MachineInfoItem>("Prefabs/UI/PRF_UI_MachineInfoItem");
Button_Close.onClick.AddListener(Close);
Button_Simple.onClick.AddListener(OnClickSimple);
Button_Detail.onClick.AddListener(OnClickDetail);
ChangeTabButtonState(Button_Simple);
SetActive(false);
mqttFields = typeof(UsageMQTTData).GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
kpiFields = typeof(UsageKPIData).GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
}
private void SimpleViewItem(string field, bool ison)
{
if (machine == null)
return;
var fields = simpleviewField;
if (ison)
{
fields.Add(field);
}
else
{
fields.Remove(field);
}
simpleviewField = fields;
simpleView?.Invoke(machine, simpleviewField);
}
private void OnClickDetail()
{
scrollView_DetailInfo.gameObject.SetActive(true);
scrollView_SimpleInfo.gameObject.SetActive(false);
ChangeTabButtonState(Button_Detail);
onClickDetail?.Invoke(machine);
}
//요약된 정보를 보여준다
//요역된 정보 -> 상세펭
private void OnClickSimple()
{
scrollView_SimpleInfo.gameObject.SetActive(true);
scrollView_DetailInfo.gameObject.SetActive(false);
ChangeTabButtonState(Button_Simple);
onClickSimple?.Invoke(machine);
}
private void ChangeTabButtonState(Button button)
{
if (currentTabButton != null)
{
var preSelectImage = currentTabButton.GetComponentInChildren<RawImage>(true);
preSelectImage.gameObject.SetActive(false);
}
currentTabButton = button;
var selectImage = currentTabButton.GetComponentInChildren<RawImage>(true);
selectImage.gameObject.SetActive(true);
}
void OnChangedLock(bool value)
{
if (value)
{
foreach (var i in infoItems)
{
i.Unlock();
}
}
else
{
foreach (var i in infoItems)
{
i.Lock();
}
}
}
private void SetMachineName()
{
var machineName = machine.name;
text_MachineName.SetText(machineName);
}
public void OpenFromMachine(Machine machine)
{
if (this.gameObject.activeSelf)
return;
this.machine = machine;
SetMachineName();
SetActive(true);
OnClickSimple();
}
public void Close()
{
Clear();
onClose?.Invoke();
SetActive(false);
}
public void Clear()
{
foreach (var item in infoItems)
{
item.Pool.Release(item);
}
machineInfoItem.Clear();
infoItems.Clear();
}
public void SimpleInfoView(SimpleField machineInfo)
{
SimpleInfo(mqttFields, machineInfo, machineInfo.machineInfo);
SimpleInfo(kpiFields, machineInfo, machineInfo.kpiDataInfo);
OnChangedLock(false);
}
private void SimpleInfo(FieldInfo[] fields, SimpleField simpleField, object data)
{
foreach (var field in fields)
{
if (simpleField.simpleField.Contains(field.Name))
{
var item = CreateItem(field);
item.transform.SetParent(scrollView_SimpleInfo.content);
var info = (string)field.GetValue(data);
item.Setting(field.Name, info);
infoItems.Add(item);
item.SetAcitveCheckBox(false);
item.ToggleIsOn(true);
simpleviewField.Add(field.Name);
}
}
}
public void DetailInfoView(Machine machine, SimpleField simpleField)
{
DetailInfo(mqttFields, machine, simpleField, simpleField.machineInfo);
DetailInfo(kpiFields, machine, simpleField, simpleField.kpiDataInfo);
OnChangedLock(true);
}
private void DetailInfo(FieldInfo[] fields, Machine machine, SimpleField simpleField, object data)
{
foreach (var field in fields)
{
var notItemData = CheckData(machine, field);
if (notItemData == field.Name)
continue;
var item = CreateItem(field);
item.transform.SetParent(scrollView_DetailInfo.content);
item.transform.SetAsLastSibling();
var info = (string)field.GetValue(data);
item.Setting(field.Name, info);
var ison = simpleField.simpleField.Contains(field.Name);
item.SetAcitveCheckBox(true);
item.ToggleIsOn(ison);
}
}
private string CheckData(Machine machine, FieldInfo field)
{
var data = "";
if (machine.typeOptions.Length <= 1)
return data;
if (machine.typeOptions[1].Contains("엔겔"))
{
data = "MOLDCD";
}
else if (machine.typeOptions[1].Contains("엔겔"))
{
data = "MOLDSEQ";
}
else if (machine.typeOptions[1].Contains("엔겔"))
{
data = "MOLDCD";
}
else
{
data = "";
}
return data;
}
private UI_MachineInfoItem CreateItem(FieldInfo field)
{
if (machineInfoItem.ContainsKey(field))
return machineInfoItem[field];
var item = poolManager.Get<UI_MachineInfoItem>();
item.onFavoritItem = SimpleViewItem;
infoItems.Add(item);
machineInfoItem.Add(field, item);
return item;
}
string UpperFirstChar(string input)
{
if (string.IsNullOrEmpty(input))
{
return null;
}
return char.ToUpper(input[0]) + input.Substring(1);
}
public void Open()
{
SetActive(true);
SetMachineName();
OnClickSimple();
}
}
}