Files
CodenameEngine/source/funkin/desktop/editors/MessageBox.hx
T

73 lines
2.3 KiB
Haxe

package funkin.desktop.editors;
import flixel.util.typeLimit.OneOfTwo;
import flixel.util.FlxDestroyUtil.IFlxDestroyable;
import flixel.addons.ui.FlxUIText;
import flixel.FlxG;
class MessageBox extends WindowContent {
public var caption:String;
public var message:String;
public var msgIcon:MessageBoxIcon;
public var callback:Int->Void = null;
private var __buttons:Array<OneOfTwo<String, Butt>> = null;
public override function new(caption:String, message:String, icon:MessageBoxIcon, ?buttons:Array<OneOfTwo<String, Butt>>, ?callback:Int->Void) {
super(caption, 100, 100, 500, 500);
this.caption = caption;
this.message = message;
this.msgIcon = icon;
this.callback = callback;
this.__buttons = buttons;
}
public override function create() {
super.create();
parent.canMinimize = parent.resizeable = false;
var text = new WindowText(10, 10, 0, message);
if (text.width > 500)
text.fieldWidth = 500;
add(text);
setSize(Std.int(Math.max(text.width + 20, 240)), Std.int(text.height + 20));
if (__buttons == null) __buttons = ["OK"];
else if (__buttons.length <= 0) __buttons.push("OK");
var firstButt:Button = null;
for(k=>b in __buttons) {
var label:String = null;
var callback:Void->Void = null;
if (b is String) {
label = cast(b, String);
} else if (b is Dynamic) {
label = Reflect.field(b, "label");
callback = Reflect.field(b, "callback");
}
var button = new Button(490, 490, label, function() {
parent.close();
if (callback != null) callback();
if (this.callback != null) this.callback(k);
});
button.x -= button.width;
button.y -= button.height;
add(button);
if (firstButt == null) firstButt = button;
}
setSize(Std.int(width), Std.int(height + firstButt.height + 10));
}
}
@:enum
abstract MessageBoxIcon(Int) {
var ERROR = 0;
var ALERT = 1;
var INFORMATION = 2;
var QUESTION = 3;
}
// HAHA BUTT!! *minion laugh*
typedef Butt = {
var label:String;
@:optional var callback:Void->Void;
}