diff --git a/app/components/widget-plot.js b/app/components/widget-plot.js index 106165c..4cc045e 100644 --- a/app/components/widget-plot.js +++ b/app/components/widget-plot.js @@ -42,7 +42,11 @@ export default WidgetAbstract.extend({ checkedSignals: {}, - _updateDataObserver: Ember.on('init', Ember.observer('widget.widgetData.simulator', function() { + plotType: "multiple", + + observeQuery: null, + + _updateDataObserver: Ember.on('init', Ember.observer('widget.widgetData.simulator', 'widget.widgetData.type', 'widget.widgetData.signals', function() { // get query for observer let simulatorId = this.get('widget.widgetData.simulator'); let query = 'data.' + simulatorId + '.sequence'; @@ -51,27 +55,67 @@ export default WidgetAbstract.extend({ let signals = this.get('widget.widgetData.signals'); this.set('signals', signals); - this.addObserver(query, function() { - // get values from array - let values = this.get('data.' + simulatorId + '.flotValues'); - var updatedValues = this.get('plotData'); + let plotType = this.get('widget.widgetData.type'); + this.set('plotType', plotType); - // update values - var index = 0; + if (plotType === 'table') { + // set simulation model for table with signals + var self = this; + let simulatorid = this.get('widget.widgetData.simulator'); - this.get('signals').forEach(function(signal) { - updatedValues.replace(index, 1, Ember.A([ values[signal] ])); - index += 1; + this.get('widget.visualization').then((visualization) => { + visualization.get('project').then((project) => { + project.get('simulation').then((simulation) => { + simulation.get('models').then((simulationModels) => { + // find simulation model by simulatorid + simulationModels.forEach(function(simulationModel) { + simulationModel.get('simulator').then((simulator) => { + if (simulator.get('simulatorid') === simulatorid) { + // set simulation model + self.set('simulationModel', simulationModel); + } + }); + }); + }); + }); + }); }); + } - this.set('plotData', updatedValues); - }); + // update observer TODO: Only update when (query) changed + let observeQuery = this.get('observeQuery'); + if (query != observeQuery) { + if (observeQuery != null) { + this.removeObserver(observeQuery, this._updateData); + } + + this.addObserver(query, this._updateData); + this.set('observeQuery', query); + } })), + _updateData() { + // get values from array + let simulatorId = this.get('widget.widgetData.simulator'); + let values = this.get('data.' + simulatorId + '.flotValues'); + var updatedValues = Ember.A([]); + + // update values + var index = 0; + + this.get('signals').forEach(function(signal) { + updatedValues.replace(index, 1, Ember.A([ values[signal] ])); + index += 1; + }); + + this.set('plotData', updatedValues); + }, + doubleClick() { if (this.get('editing') === true) { // prepare modal this.set('name', this.get('widget.name')); + this.set('plotType', this.get('widget.widgetData.type')); this.set('errorMessage', null); // get signal mapping for simulation model @@ -140,7 +184,10 @@ export default WidgetAbstract.extend({ if (simulationModel.get('name') === simulationModelName) { simulationModel.get('simulator').then((simulator) => { // set simulator - let widgetData = {}; + let widgetData = { + type: self.get('plotType') + }; + widgetData.simulator = simulator.get('simulatorid'); // set signals @@ -159,8 +206,6 @@ export default WidgetAbstract.extend({ // save properties properties['widgetData'] = widgetData; - console.log(properties); - self.get('widget').setProperties(properties); self.get('widget').save().then(function() { @@ -207,6 +252,21 @@ export default WidgetAbstract.extend({ }); }); }); + }, + + selectType(type) { + this.set('plotType', type); + }, + + selectTableSignal(signal) { + // display signal + let mapping = this.get('simulationModel.mapping'); + + for (var i = 0; i < mapping.length; i++) { + if (mapping[i] === signal) { + this.set('widget.widgetData.signals', [ i ]); + } + } } } }); diff --git a/app/components/widget-table.js b/app/components/widget-table.js index 2bd1f77..6e9f401 100644 --- a/app/components/widget-table.js +++ b/app/components/widget-table.js @@ -18,29 +18,19 @@ export default WidgetAbstract.extend({ signals: [], + observeQuery: null, + _updateDataObserver: Ember.on('init', Ember.observer('widget.widgetData.simulator', function() { // get query for observer let simulatorId = this.get('widget.widgetData.simulator'); let query = 'data.' + simulatorId + '.sequence'; + let observeQuery = this.get('observeQuery'); + if (observeQuery != null) { + this.removeObserver(observeQuery, this._updateData); + } - this.addObserver(query, function() { - // get signal names to fill data in - let signals = this.get('signals'); - if (!signals) { - // wait till names are loaded - return; - } - - // get values from array - let values = this.get('data.' + simulatorId + '.values'); - for (let i = 0; i < values.length; i++) { - if (!signals[i]) { - break; - } - - Ember.set(signals[i], 'value', values[i]); - } - }); + this.addObserver(query, this._updateData); + this.set('observeQuery', query); // get signal names let self = this; @@ -70,6 +60,25 @@ export default WidgetAbstract.extend({ }); })), + _updateData() { + // get signal names to fill data in + let signals = this.get('signals'); + if (!signals) { + // wait till names are loaded + return; + } + + // get values from array + let values = this.get('data.' + simulatorId + '.values'); + for (let i = 0; i < values.length; i++) { + if (!signals[i]) { + break; + } + + Ember.set(signals[i], 'value', values[i]); + } + }, + doubleClick() { if (this.get('editing') === true) { // prepare modal diff --git a/app/components/widget-value.js b/app/components/widget-value.js index 485e0af..ed42fb8 100644 --- a/app/components/widget-value.js +++ b/app/components/widget-value.js @@ -16,19 +16,30 @@ export default WidgetAbstract.extend({ minWidth_resize: 50, minHeight_resize: 20, + observeQuery: null, + _updateDataObserver: Ember.on('init', Ember.observer('widget.widgetData.simulator', 'widget.widgetData.signal', function() { + // update observer let query = 'data.' + this.get('widget.widgetData.simulator') + '.sequence'; - this.addObserver(query, function() { - // get value from array - let values = this.get('data.' + this.get('widget.widgetData.simulator') + '.values'); - if (values) { - this.set('value', values[this.get('widget.widgetData.signal')]); - } else { - this.set('value', null); - } - }); + let observeQuery = this.get('observeQuery'); + if (observeQuery != null) { + this.removeObserver(observeQuery, this._updateData); + } + + this.addObserver(query, this._updateData); + this.set('observeQuery', query); })), + _updateData() { + // get value from array + let values = this.get('data.' + this.get('widget.widgetData.simulator') + '.values'); + if (values) { + this.set('value', values[this.get('widget.widgetData.signal')]); + } else { + this.set('value', null); + } + }, + doubleClick() { if (this.get('editing') === true) { // prepare modal diff --git a/app/styles/widgets.scss b/app/styles/widgets.scss index 39e0eb8..3d49d68 100644 --- a/app/styles/widgets.scss +++ b/app/styles/widgets.scss @@ -76,3 +76,16 @@ padding: 2px 5px; } + +/** + * Component: widget-plot + */ +.widgetPlot-signal-table { + border: 1px solid gray; + + padding: 2px 5px; +} + +.widgetPlot-signal-table th { + border: 0; +} diff --git a/app/templates/components/widget-plot.hbs b/app/templates/components/widget-plot.hbs index 11f0101..6768416 100644 --- a/app/templates/components/widget-plot.hbs +++ b/app/templates/components/widget-plot.hbs @@ -1,6 +1,29 @@
+ Signal + | +
---|
+ {{signal}} + | +