package cn.forevermc.launcher.view.components;

import com.imyeyu.fx.ui.TimiFXUI;
import com.imyeyu.java.bean.Callback;
import javafx.scene.layout.BorderPane;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 抽象面板
 *
 * @author 夜雨
 * @since 2022-11-21 14:23
 */
@Data
@EqualsAndHashCode(callSuper = true)
public abstract class AbstractPane extends BorderPane implements TimiFXUI {

	/** 显示事件，触发慢于 {@link #onShow()}，一次性对象，触发即删除 */
	private Callback onShowEvent;

	/** 隐藏事件，触发慢于 {@link #onHide()}，一次性对象，触发即删除 */
	private Callback onHideEvent;

	/** 触发显示（页面服务调度） */
	public final void show() {
		onShow();
		if (onShowEvent != null) {
			onShowEvent.handler();
			onShowEvent = null;
		}
	}

	/** 触发隐藏（页面服务调度） */
	public final void hide() {
		onHide();
		if (onHideEvent != null) {
			onHideEvent.handler();
			onHideEvent = null;
		}
	}

	/** 显示时触发，UI 线程 */
	protected void onShow() {
		// 子类实现
	}

	/** 隐藏时触发，UI 线程 */
	protected void onHide() {
		// 子类实现
	}
}
