bindAll support

This commit is contained in:
Dmitri Granetchi
2015-06-27 00:41:58 +03:00
parent 9c4e98fd96
commit aac6e6fada
6 changed files with 95 additions and 0 deletions
+8
View File
@@ -38,6 +38,14 @@ class BindMacros {
return BindableMacros.bindingSignalProvider.getUnbindAllExpr(object, type);
}
static inline function bindAll(object:ExprOf<IBindable>, listener:Expr, force:Bool = true):Expr {
var type = object.deepTypeof();
if (!isBindable(type.getClass())) {
Context.error('\'${object.toString()}\' must be bindx.IBindable', object.pos);
}
return BindableMacros.bindingSignalProvider.getBindAllExpr(object, type, listener, force);
}
static inline function warnCheckField(field:Expr):{e:Expr, field:ClassField} {
var res = null;
try {
+4
View File
@@ -93,6 +93,10 @@ class BindSignalProvider implements IBindingSignalProvider {
return macro bindx.BindSignal.SignalTools.unbindAll($expr);
}
public function getBindAllExpr(expr:ExprOf<IBindable>, type:Type, listener:Expr, force:Bool = true):Expr {
return macro bindx.BindSignal.SignalTools.bindAll($expr, $listener, $v{force});
}
function generateSignal(field:Field, type:ComplexType, builder:Expr, res:Array<Field>):Void {
var signalName = signalName(field.name);
var meta = field.bindableMeta();
@@ -13,4 +13,5 @@ interface IBindingSignalProvider {
function getClassFieldUnbindExpr(expr:Expr, field:ClassField, listener:Expr):Expr;
function getClassFieldChangedExpr(expr:Expr, field:ClassField, oldValue:Expr, newValue:Expr):Expr;
function getUnbindAllExpr(expr:ExprOf<IBindable>, type:Type):Expr;
function getBindAllExpr(expr:ExprOf<IBindable>, type:Type, listener:Expr, force:Bool = true):Expr;
}