Files
haxework/haxework/gui/GuiBuilder.hx
2013-08-29 15:36:42 +02:00

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;
}
}