From fac912f2944014f13197b3194c20da0bf2a81ba0 Mon Sep 17 00:00:00 2001 From: Philip Abbet <philip.abbet@idiap.ch> Date: Mon, 6 Mar 2017 14:28:44 +0100 Subject: [PATCH] [toolchains] Fix #441 - Bug in automatic block selection --- .../static/experiments/js/panels.js | 27 +++++++++++++--- .../toolchains/static/toolchains/js/models.js | 31 ++++++++++++++++++- 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/beat/web/experiments/static/experiments/js/panels.js b/beat/web/experiments/static/experiments/js/panels.js index 1a6751c12..aa0912f34 100644 --- a/beat/web/experiments/static/experiments/js/panels.js +++ b/beat/web/experiments/static/experiments/js/panels.js @@ -1319,13 +1319,32 @@ beat.experiments.panels.Settings.prototype._setBlock = function(block_entry, alg if (beat.experiments.utils.analyzeCompatibility(block_inputs_signature, block_outputs_signature, algorithm_inputs_signature, algorithm_outputs_signature, panel.dataformats)) { - panel.current_block = block.name; - panel.configuration.setComponentAlgorithm(block, algorithm_name); - panel._onAlgorithmSelected(false); - automatically_configured_blocks.push(block); } } + + // Don't auto-assign a block that is connected after an auto-assigned one + var automatically_configured_blocks_original = [block_entry.block].concat(automatically_configured_blocks); + + automatically_configured_blocks = []; + for (var i = 1; i < automatically_configured_blocks_original.length; ++i) { + var block = automatically_configured_blocks_original[i]; + + var predecessors = block.allPredecessors(); + + var auto_assigned_predecessors = predecessors.filter(function(block) { + return automatically_configured_blocks_original.indexOf(block) >= 0; + }); + + if (auto_assigned_predecessors.length == 0) + { + panel.current_block = block.name; + panel.configuration.setComponentAlgorithm(block, algorithm_name); + panel._onAlgorithmSelected(false); + + automatically_configured_blocks.push(block); + } + } } // Mapping diff --git a/beat/web/toolchains/static/toolchains/js/models.js b/beat/web/toolchains/static/toolchains/js/models.js index 67f9f0556..ee21ca690 100644 --- a/beat/web/toolchains/static/toolchains/js/models.js +++ b/beat/web/toolchains/static/toolchains/js/models.js @@ -312,7 +312,36 @@ beat.toolchains.models.Block.prototype.predecessors = function() for (var i = 0; i < this.connections.length; i++) { if (this.connections[i].input.block == this) - predecessors.push(this.connections[i].output.block); + { + if (predecessors.indexOf(this) == -1) + predecessors.push(this.connections[i].output.block); + } + } + + return predecessors; +} + + +//---------------------------------------------------------------------------------------- +// Returns a list of all the blocks that precedes this one in the toolchain +//---------------------------------------------------------------------------------------- +beat.toolchains.models.Block.prototype.allPredecessors = function() +{ + var predecessors = new Array(); + + var direct_predecessors = this.predecessors(); + + var predecessors = [].concat(direct_predecessors); + + for (var i = 0; i < direct_predecessors.length; i++) + { + var upstream_predecessors = direct_predecessors[i].allPredecessors(); + + upstream_predecessors = upstream_predecessors.filter(function(block) { + return predecessors.indexOf(block) == -1; + }); + + predecessors = predecessors.concat(upstream_predecessors); } return predecessors; -- GitLab