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 infoItems = new(); private FieldInfo[] mqttFields; private FieldInfo[] kpiFields; private Dictionary machineInfoItem = new(); private HashSet simpleviewField = new(); public Action onClickDetail; public Action onClickSimple; public Action> simpleView; public Action onClose; private Machine machine; private Button currentTabButton; public override void AfterAwake() { prf_InfoItem = Resources.Load("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(true); preSelectImage.gameObject.SetActive(false); } currentTabButton = button; var selectImage = currentTabButton.GetComponentInChildren(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(); 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(); } } }