96 lines
3.1 KiB
C#
96 lines
3.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using XRLib.UI;
|
|
|
|
namespace Studio
|
|
{
|
|
public class UI_DataSettingItem : UIBase
|
|
{
|
|
public TMP_InputField InputField_ClassName;
|
|
private RectTransform ClassDataContent;
|
|
|
|
private List<UI_DataTypeSelectedItem> dataTypeSelectedItems = new List<UI_DataTypeSelectedItem>();
|
|
private UI_DataTypeSelectedItem dataTypeSelectedItem;
|
|
|
|
public Action onUpdateLayout;
|
|
|
|
public void SetData(DataClass data, UI_DataTypeSelectedItem typeItem, UI_MatchingTypeDataItem matchingItem)
|
|
{
|
|
InputField_ClassName.text = data.name;
|
|
|
|
SetItem(data, typeItem, matchingItem);
|
|
}
|
|
public void SetData(string className, DataClass data, UI_DataTypeSelectedItem typeItem, UI_MatchingTypeDataItem matchingItem)
|
|
{
|
|
InputField_ClassName.text = className;
|
|
SetItem(data, typeItem, matchingItem);
|
|
}
|
|
private void SetItem(DataClass data, UI_DataTypeSelectedItem typeItem, UI_MatchingTypeDataItem matchingItem)
|
|
{
|
|
dataTypeSelectedItems.Clear();
|
|
dataTypeSelectedItem = typeItem;
|
|
|
|
foreach (var field in data.fields)
|
|
{
|
|
var item = Instantiate(typeItem, ClassDataContent);
|
|
item.onAddMatchingData += UpdateLayoutAddMatchData;
|
|
item.onDestroyMatchingData += UpdateLayoutRemoveMatchData;
|
|
item.SetItem(field, matchingItem);
|
|
|
|
dataTypeSelectedItems.Add(item);
|
|
UpdateLayoutAddSettingData();
|
|
}
|
|
}
|
|
private void UpdateLayoutAddMatchData()
|
|
{
|
|
var height = rectTransform.sizeDelta;
|
|
height.y += dataTypeSelectedItem.rectTransform.rect.height;
|
|
|
|
rectTransform.sizeDelta = height;
|
|
UpdateLayout();
|
|
onUpdateLayout?.Invoke();
|
|
}
|
|
private void UpdateLayoutRemoveMatchData()
|
|
{
|
|
var height = rectTransform.sizeDelta;
|
|
height.y -= dataTypeSelectedItem.rectTransform.rect.height;
|
|
|
|
rectTransform.sizeDelta = height;
|
|
UpdateLayout();
|
|
onUpdateLayout?.Invoke();
|
|
}
|
|
private void UpdateLayoutAddSettingData()
|
|
{
|
|
var height = rectTransform.sizeDelta;
|
|
height.y += dataTypeSelectedItem.rectTransform.rect.height;
|
|
|
|
rectTransform.sizeDelta = height;
|
|
onUpdateLayout?.Invoke();
|
|
}
|
|
private void UpdateLayout()
|
|
{
|
|
LayoutRebuilder.ForceRebuildLayoutImmediate(ClassDataContent);
|
|
}
|
|
public DataClass GetData()
|
|
{
|
|
var dataClass = new DataClass();
|
|
dataClass.name = InputField_ClassName.text;
|
|
dataClass.fields = new List<FieldData>();
|
|
|
|
foreach (var item in dataTypeSelectedItems)
|
|
{
|
|
var field = item.GetFieldData();
|
|
|
|
if (field != null)
|
|
{
|
|
dataClass.fields.Add(field);
|
|
}
|
|
}
|
|
return dataClass;
|
|
}
|
|
}
|
|
}
|