Files
Studio/Assets/NewStudioJYM/Scripts/UI_AlarmDataItem.cs
2025-05-12 08:35:29 +09:00

136 lines
5.0 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using XRLib.UI;
using TMPro;
using System;
using System.Collections.Generic;
namespace XED
{
public class UI_AlarmDataItem : UIBase
{
private Toggle Toggle_Select;
private TextMeshProUGUI DataName;
private Button Button_AddComparison;
private RectTransform ComparisonContent;
private EventData eventData;
private UI_ComparisonSettingItem comparisonSettingItem;
private UI_EventParameterItem eventParameterItem;
private List<UI_ComparisonSettingItem> comparisonSettingItems = new List<UI_ComparisonSettingItem>();
public Action onUpdateLayout;
private AlarmField loadData;
private bool isUse;
public void SetItem(FieldData data, UI_ComparisonSettingItem comparisonSettingItem, UI_EventParameterItem eventParameterItem, EventData eventData)
{
this.comparisonSettingItem = comparisonSettingItem;
this.eventParameterItem = eventParameterItem;
this.eventData = eventData;
DataName.SetText(data.name);
Toggle_Select.onValueChanged.AddListener(OnSelectToggleValueChanged);
Toggle_Select.isOn = true;
Button_AddComparison.onClick.AddListener(OnClickAddComparsionButton);
comparisonSettingItems.Clear();
}
public void SetItem(AlarmField data, UI_ComparisonSettingItem comparisonSettingItem, UI_EventParameterItem eventParameterItem, EventData eventData)
{
loadData = data;
this.comparisonSettingItem = comparisonSettingItem;
this.eventParameterItem = eventParameterItem;
this.eventData = eventData;
DataName.SetText(data.fieldName);
Toggle_Select.onValueChanged.AddListener(OnSelectToggleValueChanged);
Toggle_Select.isOn = true;
Button_AddComparison.onClick.AddListener(OnClickAddComparsionButton);
comparisonSettingItems.Clear();
if (loadData.comparisons.Count > 0)
{
foreach(var comparison in loadData.comparisons)
{
var item = Instantiate(comparisonSettingItem, ComparisonContent);
item.onUpdateLayoutAddParameter += UpdateLayoutAddParameterItem;
item.onUpdateLayoutRemoveParameter += UpdateLayoutRemoveParameterItme;
item.SetItem(comparison, eventParameterItem, eventData);
comparisonSettingItems.Add(item);
if (comparisonSettingItems.Count > 1)
{
UpdateLayoutAddComparisonSettingItem();
}
}
}
}
private void OnSelectToggleValueChanged(bool isOn)
{
isUse = isOn;
Button_AddComparison.gameObject.SetActive(isOn);
}
private void OnClickAddComparsionButton()
{
var item = Instantiate(comparisonSettingItem, ComparisonContent);
item.onUpdateLayoutAddParameter += UpdateLayoutAddParameterItem;
item.onUpdateLayoutRemoveParameter += UpdateLayoutRemoveParameterItme;
item.SetItem(eventParameterItem, eventData);
comparisonSettingItems.Add(item);
if (comparisonSettingItems.Count > 1)
{
UpdateLayoutAddComparisonSettingItem();
}
}
private void UpdateLayoutAddParameterItem()
{
var height = rectTransform.sizeDelta;
height.y += eventParameterItem.rectTransform.rect.height;
rectTransform.sizeDelta = height;
LayoutRebuilder.ForceRebuildLayoutImmediate(ComparisonContent);
onUpdateLayout?.Invoke();
}
private void UpdateLayoutRemoveParameterItme()
{
var height = rectTransform.sizeDelta;
height.y -= eventParameterItem.rectTransform.rect.height;
rectTransform.sizeDelta = height;
LayoutRebuilder.ForceRebuildLayoutImmediate(ComparisonContent);
onUpdateLayout?.Invoke();
}
private void UpdateLayoutAddComparisonSettingItem()
{
var itemSizeDelta = rectTransform.sizeDelta;
itemSizeDelta.y += comparisonSettingItem.rectTransform.rect.height;
rectTransform.sizeDelta = itemSizeDelta;
LayoutRebuilder.ForceRebuildLayoutImmediate(ComparisonContent);
onUpdateLayout?.Invoke();
}
public AlarmField GetData()
{
if (!isUse)
return null;
var alarmField = new AlarmField();
alarmField.fieldName = DataName.text;
alarmField.comparisons = new List<ComparisonCondition>();
foreach (var item in comparisonSettingItems)
{
var field = item.GetComparisonData();
alarmField.comparisons.Add(field);
}
return alarmField;
}
}
}