257 lines
7.9 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|