using System;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace Cielonos.Settings.UI
{
///
/// 按钮型设置条目。不绑定到数据字段,而是执行指定的点击动作。
///
/// 典型用途:打开二级 UIPage(如 Key Binding 页面)、触发重置操作等。
/// 支持鼠标悬停说明面板。
///
///
public class SettingsEntryButton : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
[SerializeField] private TMP_Text labelText;
[SerializeField] private Button button;
private Action onClickAction;
/// 条目的显示标题。
public string DisplayLabel { get; private set; }
/// 条目的说明文本(可为空)。
public string Description { get; private set; }
/// 鼠标悬停进入时触发。由 SettingsUIPage 设置。
public Action OnHoverEnter { get; set; }
/// 鼠标悬停离开时触发。由 SettingsUIPage 设置。
public Action OnHoverExit { get; set; }
///
/// 初始化按钮条目。
///
/// 显示标题。
/// 悬停说明文本(可为空)。
/// 点击按钮时执行的动作。
public void Initialize(string label, string description, Action onClick)
{
DisplayLabel = label;
Description = description;
onClickAction = onClick;
if (labelText != null)
labelText.text = label;
if (button != null)
button.onClick.AddListener(OnButtonClicked);
}
private void OnButtonClicked()
{
onClickAction?.Invoke();
}
// ──────────────────── 悬停事件 ────────────────────
public void OnPointerEnter(PointerEventData eventData)
{
OnHoverEnter?.Invoke(DisplayLabel, Description);
}
public void OnPointerExit(PointerEventData eventData)
{
OnHoverExit?.Invoke();
}
private void OnDestroy()
{
if (button != null)
button.onClick.RemoveListener(OnButtonClicked);
}
}
}