Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static function buildBehaviours():Array<Field> {
- var builder = new ClassBuilder(haxe.macro.Context.getBuildFields(), Context.getLocalType(), Context.currentPos());
- var registerBehavioursFn = builder.findFunction("registerBehaviours");
- if (registerBehavioursFn == null) {
- registerBehavioursFn = builder.addFunction("registerBehaviours", macro {
- super.registerBehaviours();
- }, [APrivate, AOverride]);
- }
- var valueField = builder.getFieldMetaValue("value");
- for (f in builder.getFieldsWithMeta("behaviour")) {
- f.remove();
- if (builder.hasField(f.name, true) == false) { // check to see if it already exists, possibly in a super class
- var newField:FieldBuilder = null;
- if (f.isDynamic == true) { // add a getter that can return dynamic
- newField = builder.addGetter(f.name, f.type, macro {
- return behaviours.getDynamic($v{f.name});
- }, f.access);
- } else { // add a normal (Variant) getter
- newField = builder.addGetter(f.name, f.type, macro {
- return behaviours.get($v{f.name});
- }, f.access);
- }
- if (f.name == valueField) {
- newField = builder.addSetter(f.name, f.type, macro { // add a normal (Variant) setter but let the binding manager know that the value has changed
- behaviours.set($v{f.name}, value);
- haxe.ui.binding.BindingManager.instance.componentPropChanged(this, "value");
- return value;
- }, f.access);
- } else {
- newField = builder.addSetter(f.name, f.type, macro { // add a normal (Variant) setter
- behaviours.set($v{f.name}, value);
- return value;
- }, f.access);
- }
- newField.doc = f.doc;
- newField.addMeta(":behaviour");
- newField.addMeta(":bindable");
- newField.mergeMeta(f.meta, ["behaviour"]);
- }
- if (f.getMetaValueExpr("behaviour", 1) == null) {
- registerBehavioursFn.add(macro
- behaviours.register($v{f.name}, $p{f.getMetaValueString("behaviour", 0).split(".")})
- );
- } else {
- registerBehavioursFn.add(macro
- behaviours.register($v{f.name}, $p{f.getMetaValueString("behaviour", 0).split(".")}, $e{f.getMetaValueExpr("behaviour", 1)})
- );
- }
- }
- for (f in builder.findFunctionsWithMeta("call")) {
- var arg0 = '${f.getArgName(0)}';
- if (f.isVoid == true) {
- f.set(macro {
- behaviours.call($v{f.name}, $i{arg0});
- });
- } else {
- f.set(macro {
- return behaviours.call($v{f.name}, $i{arg0});
- });
- }
- if (f.getMetaValueExpr("call", 1) == null) {
- registerBehavioursFn.add(macro
- behaviours.register($v{f.name}, $p{f.getMetaValueString("call", 0).split(".")})
- );
- } else {
- registerBehavioursFn.add(macro
- behaviours.register($v{f.name}, $p{f.getMetaValueString("call", 0).split(".")}, $e{f.getMetaValueExpr("call", 1)})
- );
- }
- }
- for (f in builder.getFieldsWithMeta("value")) {
- f.remove();
- var propName = f.getMetaValueString("value");
- builder.addGetter(f.name, macro: Dynamic, macro {
- return $i{propName};
- }, false, true);
- builder.addSetter(f.name, macro: Dynamic, macro {
- super.set_value(value);
- $i{propName} = value;
- haxe.ui.binding.BindingManager.instance.componentPropChanged(this, $v{propName});
- return value;
- }, false, true);
- }
- return builder.fields;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement