Update logic block so it is reactive to the input attahced to it.

i.e. if you place a number in an input the other input changes it's type to number as well.
When you remove all inputs it reverts back to allowing any input type.
This commit is contained in:
Paul Kendall
2015-01-29 11:21:30 +13:00
parent 906b62f7ef
commit 1bf394ad83

View File

@@ -299,6 +299,36 @@ Blockly.Blocks['logic_compare'] = {
};
return TOOLTIPS[op];
});
var myid = this.id;
var bindid = Blockly.addChangeListener(function() {
var me = Blockly.mainWorkspace.getBlockById(myid);
if(null == me) {
Blockly.removeChangeListener(bindid);
} else {
if (me.getInputTargetBlock('A') && !me.getInputTargetBlock('B')) {
if (me.getInputTargetBlock('A').outputConnection.check_) {
me.getInput('B').setCheck(me.getInputTargetBlock('A').outputConnection.check_[0]);
} else {
me.getInput('B').setCheck(null);
}
} else if (me.getInputTargetBlock('B') && !me.getInputTargetBlock('A')) {
if (me.getInputTargetBlock('B').outputConnection.check_) {
me.getInputTargetBlock('A').setCheck(me.getInputTargetBlock('B').outputConnection.check_[0]);
} else {
me.getInput('A').setCheck(null);
}
} else if (me.getInputTargetBlock('A') && me.getInputTargetBlock('B')) {
if (me.getInputTargetBlock('A').outputConnection.check_) {
me.getInput('B').setCheck(me.getInputTargetBlock('A').outputConnection.check_[0]);
} else if (me.getInput('B').outputConnection.check_) {
me.getInput('A').setCheck(me.getInputTargetBlock('B').outputConnection.check_[0]);
}
} else {
me.getInput('A').setCheck(null);
me.getInput('B').setCheck(null);
}
}
});
}
};