2025-07-28 14:26:19 +08:00

126 lines
3.9 KiB
TypeScript

import { cc, fgui, kunpo } from '../../../header';
const { uiclass, uiprop, uiclick } = kunpo._uidecorator;
interface WindowData {
content: string;
title?: string;
okTitle?: string;
cancelTitle?: string;
showClose?: boolean; // 显示关闭按钮
emptyAreaClose?: boolean; // 点击空白区域关闭
align?: cc.HorizontalTextAlignment; // 内容文本水平对齐方式 default:居中对齐
leading?: number;//行距
okNotClose?: boolean; // 点击OK按钮时不关闭本界面
cancelNotClose?: boolean; // 点击取消按钮时不关闭本界面
complete?: () => void; // 确定按钮的回调
cancel?: () => void; // 取消按钮的回调
close?: () => void; // 关闭界面的回调 (只有点击关闭按钮和空白位置关闭时才会触发)
}
@uiclass("Window", "Basics", "AlertWindow")
export class AlertWindow extends kunpo.Window {
@uiprop private bg: fgui.GLoader;
@uiprop private lab_title: fgui.GTextField;
@uiprop private lab_content: fgui.GTextField;
@uiprop private btn_close: fgui.GButton;
@uiprop private btn_ok: fgui.GButton;
@uiprop private btn_cancel: fgui.GButton;
private _isEmptyAreaClose: boolean = false;
private _window_data: WindowData = null;
private _complete: () => void;
private _cancel: () => void;
private _closeFunc: () => void;
protected onInit(): void {
this.adapterType = kunpo.AdapterType.Full;
this.type = kunpo.WindowType.Normal;
}
protected onAdapted() {
}
protected onShow(data: WindowData): void {
this._complete = data.complete;
this._cancel = data.cancel;
this._closeFunc = data.close;
this._window_data = data;
// 标题
if (data.title) {
this.lab_title.text = data.title;
} else {
this.lab_title.visible = false;
}
// 关闭按钮
this.btn_close.visible = !!data.showClose;
// 空白位置关闭标记
this._isEmptyAreaClose = !!data.emptyAreaClose;
// 确定按钮
if (data.okTitle) {
this.btn_ok.title = data.okTitle;
} else {
this.btn_ok.visible = false;
}
// 取消按钮
if (data.cancelTitle) {
this.btn_cancel.text = data.cancelTitle;
} else {
this.btn_cancel.visible = false;
}
this.lab_content.text = data.content;
let align = typeof data.align == "number" ? data.align : cc.Label.HorizontalAlign.CENTER;
let leading = typeof data.leading == "number" ? data.leading : this.lab_content.leading;
this.lab_content.align = align;
this.lab_content.leading = leading;
this.lab_content.ensureSizeCorrect();
// 限制背景框高度
if (this.bg.height < 500) {
this.bg.height = 500;
}
// 确定取消按钮位置调整
if (this.btn_ok.visible && !this.btn_cancel.visible) {
this.btn_ok.x = this.bg.x + (this.bg.width - this.btn_ok.width) * 0.5;
} else if (this.btn_cancel.visible && !this.btn_ok.visible) {
this.btn_cancel.x = this.bg.x + (this.bg.width - this.btn_cancel.width) * 0.5;
}
}
protected onClose(): void {
}
protected onEmptyAreaClick(): void {
if (this._isEmptyAreaClose) {
kunpo.WindowManager.closeWindow(this.name);
this._closeFunc && this._closeFunc();
}
}
@uiclick
private onClickBtnClose(): void {
kunpo.WindowManager.closeWindow(this.name);
this._closeFunc && this._closeFunc();
}
@uiclick
private onClickBtnOk(): void {
!this._window_data.okNotClose && kunpo.WindowManager.closeWindow(this.name);
this._complete && this._complete();
}
@uiclick
private onClickBtnCancel(): void {
!this._window_data.cancelNotClose && kunpo.WindowManager.closeWindow(this.name);
this._cancel && this._cancel();
}
}