Files
Studio/Assets/NewStudioJYM/Scripts/Panel_MQTTConnectModal.cs
2025-05-12 17:37:38 +09:00

91 lines
2.8 KiB
C#

using UnityEngine;
using XRLib.UI;
using TMPro;
using UnityEngine.UI;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
namespace XED
{
public class Panel_MQTTConnectModal : PanelBase
{
private TextMeshProUGUI Text_Domain;
private TextMeshProUGUI Text_Port;
private RectTransform TopicContent;
private Button Button_AddTopic;
private Button Button_Save;
private UI_DataBindingItem prf_mqttTopicItem;
private List<UI_DataBindingItem> topicItems = new List<UI_DataBindingItem>();
private UI_DataBindingItem selectedTopicItem;
public MQTTData loadMQTTData;
public Action<string> onClickFilterButton;
public Action<SaveMQTTData> onSaveMQTTData;
private void TestDataConnected()
{
var mqttJson = Resources.Load<TextAsset>("MQTTData").text;
loadMQTTData = JsonConvert.DeserializeObject<MQTTData>(mqttJson);
}
public override void AfterAwake()
{
TestDataConnected();
prf_mqttTopicItem = Resources.Load<UI_DataBindingItem>("Prefabs/UI/PRF_DataBindingItemItem");
Text_Domain.SetText(loadMQTTData.domain);
Text_Port.SetText(loadMQTTData.port);
Button_AddTopic.onClick.AddListener(AddTopicItem);
Button_Save.onClick.AddListener(Save);
}
private void OnClickFilterButton(UI_DataBindingItem item)
{
selectedTopicItem = item;
var itemName = item.GetTopicName();
onClickFilterButton?.Invoke(itemName);
}
private void AddTopicItem()
{
var item = Instantiate(prf_mqttTopicItem, TopicContent);
item.onRemove += RemoveTopicItem;
item.onFilter += OnClickFilterButton;
topicItems.Add(item);
}
private void RemoveTopicItem(UI_DataBindingItem item)
{
topicItems.Remove(item);
Destroy(item.gameObject);
}
private void Save()
{
var saveData = GetMQTTData();
onSaveMQTTData?.Invoke(saveData);
}
public void SetFilterData(SaveFilterData filterData)
{
if (selectedTopicItem == null)
return;
selectedTopicItem.SetFilterData(filterData);
selectedTopicItem.SetChangedInputFieldTopicName();
}
private SaveMQTTData GetMQTTData()
{
SaveMQTTData saveMQTTData = new SaveMQTTData();
saveMQTTData.domain = Text_Domain.text;
saveMQTTData.port = Text_Port.text;
foreach (var topicItem in topicItems)
{
saveMQTTData.saveFilterData.Add(topicItem.GetFilterData());
}
return saveMQTTData;
}
}
}