61 lines
1.7 KiB
Haxe
Executable File
61 lines
1.7 KiB
Haxe
Executable File
package haxework.gui;
|
|
|
|
|
|
//ToDo:
|
|
import haxework.gui.View;
|
|
import haxework.gui.GroupView;
|
|
import haxework.gui.HGroupView;
|
|
import haxework.gui.VGroupView;
|
|
import haxework.gui.TextView;
|
|
import haxework.gui.LabelView;
|
|
import haxework.gui.skin.ColorSkin;
|
|
|
|
class GuiBuilder {
|
|
|
|
private function new() {}
|
|
|
|
public static function build(data:Dynamic):Dynamic {
|
|
var type:String = data.type;
|
|
Reflect.deleteField(data, "type");
|
|
var object:Dynamic = instance(type);
|
|
fill(object, data);
|
|
return object;
|
|
}
|
|
|
|
private static function fill(object:Dynamic, data:Dynamic):Void {
|
|
var fields:Array<String> = Reflect.fields(data);
|
|
for (field in fields) {
|
|
var value:Dynamic = Reflect.field(data, field);
|
|
if (Std.is(value, Array)) {
|
|
var a:Array<Dynamic> = [];
|
|
for (o in cast(value, Array<Dynamic>)) a.push(build(o));
|
|
value = a;
|
|
} else if (Std.is(value, String)) {
|
|
var s:String = cast(value, String);
|
|
if (s.charAt(0) == "~") {
|
|
var a:Array<String> = s.substr(1).split(":");
|
|
var e:Enum<Dynamic> = Type.resolveEnum(a[0]);
|
|
value = Type.createEnum(e, a[1]);
|
|
} else if (~/0x[A-Fa-f\d]{6}/.match(value)) {
|
|
value = Std.parseInt(value);
|
|
}
|
|
} else if (Std.is(value, Float)) {
|
|
|
|
} else if (Std.is(value, Bool)) {
|
|
|
|
} else {
|
|
var o:Dynamic = build(value);
|
|
fill(o, value);
|
|
value = o;
|
|
}
|
|
Reflect.setProperty(object, field, value);
|
|
}
|
|
}
|
|
|
|
private static function instance(type:String):Dynamic {
|
|
var clazz:Class<Dynamic> = Type.resolveClass(type);
|
|
var instance:Dynamic = Type.createInstance(clazz, []);
|
|
return instance;
|
|
}
|
|
}
|