PlotSpectroForm.js 10.7 KB
/**
 * Project   : AMDA-NG
 * Name      : PlotSpectroForm.js
 * @class   amdaPlotComp.PlotSpectroForm
 * @extends amdaPlotComp.PlotStandardForm
 * @brief   Form to define specifics spectro options
 * @author  Benjamin Renard
 * @version $Id: PlotSpectroForm.js benjamin $
 */

Ext.define('amdaPlotComp.PlotSpectroForm', {
	extend: 'amdaPlotComp.PlotStandardForm',

	requires: [
		'amdaUI.ParamArgumentsUI'
	],
	setObject: function (object) {
		this.data = object.data;
		this.object = object.get('param-drawing-object');

		this.loadRecord(this.object);
	},

	setParentObject: function (parentObject) {
		this.callParent(arguments);
		this.updateColorMap();
	},

	updateColorMap: function() {
		var colorAxisObj = this.parentObject.axes().getById('color');
		this.getForm().findField('spectro-color-map').setValue(colorAxisObj.get('axis-color-map'));
	},

	getValuesRangeItems: function () {
		return [
			this.addStandardFloat2('spectro-value-min', 'Min value', -Number.MAX_VALUE, Number.MAX_VALUE, true),
			this.addStandardFloat2('spectro-value-max', 'Max value', -Number.MAX_VALUE, Number.MAX_VALUE, true)
		];
	},
	getFilteringItems: function () {
		return [
			this.addStandardCombo('filtering-level', 'Level', amdaDefaultConfigs.availableFilteringLevel)
		];
	},

	/**
	 * Populate the comboBoxValue by the set of channel data related to the selected dimension
	 * @param {*} ref  the reference of the current instance of this class
	 * @param {*} index dimension's index
	 * @param {*} comboBoxV  the comboBoxValue
	 * @returns 
	 */
	populateComboBoxValue: (ref, index, comboBoxV) => {
		if (ref.data[amdaPlotObj.PlotObjectConfig.bgSubstraction.tableName][index].variable)
			return;

		const channelsData = ref.data[amdaPlotObj.PlotObjectConfig.bgSubstraction.tableName][index]
		[amdaPlotObj.PlotObjectConfig.bgSubstraction.tableChannels];

		const keyTemp = amdaPlotObj.PlotObjectConfig.fieldComboBox.key;
		const valueTemp = amdaPlotObj.PlotObjectConfig.fieldComboBox.value;

		const newDataForStore = [];
		//Loop through the channels
		for (channelIndex in channelsData) {
			const channelData = channelsData[channelIndex];
			let item = {};
			item[keyTemp] = channelIndex;
			item[valueTemp] = channelIndex + " : [" + channelData.min + " , " + channelData.max + "]";
			newDataForStore.push(item);
		}

		//Update the label of the field
		comboBoxV.setFieldLabel(ref.data[amdaPlotObj.PlotObjectConfig.bgSubstraction.tableName][index]["name"]
			+ " (" + ref.data[amdaPlotObj.PlotObjectConfig.bgSubstraction.tableName][index]["units"] + ") ");

		comboBoxV.store.loadData(newDataForStore);
	},

	/**
	 * Populate the comboBoxDim by the set of dimensions related to the selected parameter
	 * @param {*} ref the reference of the current instance of this class
	 * @param {*} comboBoxDim the comboBoxDim reference
	 */
	populateComboBoxDim: (ref, comboBoxDim) => {
		const keyTemp = amdaPlotObj.PlotObjectConfig.fieldComboBox.key;
		const valueTemp = amdaPlotObj.PlotObjectConfig.fieldComboBox.value;

		const newDataForStore = [];
		for (indexTable in ref.data[amdaPlotObj.PlotObjectConfig.bgSubstraction.tableName]) {
			const table = ref.data[amdaPlotObj.PlotObjectConfig.bgSubstraction.tableName][indexTable];
			let item = {};
			item[keyTemp] = indexTable;
			item[valueTemp] = table[amdaPlotObj.PlotObjectConfig.bgSubstraction.tableRelatedDim];
			newDataForStore.push(item);
		}

		//Set the new store
		comboBoxDim.store.loadData(newDataForStore);
	},

	/**
	 * Add a textInput which holds Background Substraction value when fixedvalue is selected
	 * @param {*} ref the reference of the current instance of this class
	 * @returns addStandardFloat2
	 */
	addComboBoxBackgroundSubFixedValue: (ref) => {
		return ref.addStandardFloat2(amdaPlotObj.PlotObjectConfig.bgSubstraction.value.textinputkey,
			amdaPlotObj.PlotObjectConfig.bgSubstraction.value.textinputlabel, 0
			, Number.MAX_VALUE, true, true, (name, newValue, oldValue) => {
				if (oldValue !== newValue) {
					if (!newValue) {
						ref.object.set(amdaPlotObj.PlotObjectConfig.bgSubstraction.value.key,
							amdaPlotObj.PlotObjectConfig.bgSubstraction.value.dimNullValue);
						return;
					}
					ref.object.set(amdaPlotObj.PlotObjectConfig.bgSubstraction.value.key,
						newValue);
				}
			});
	},

	/**
	 * Reset ComboBoxDim and textInput
	 * 
	 * @param {*} ref the reference of the current instance of this class
	 */
	resetDependentComponents: (ref) => {
		const comboBoxDim = ref.getForm().findField(amdaPlotObj.PlotObjectConfig.bgSubstraction.value.dimkey);
		ref.populateComboBoxDim(ref, comboBoxDim);
		comboBoxDim.setVisible(false);
		comboBoxDim.setValue(amdaPlotObj.PlotObjectConfig.bgSubstraction.value.dimNullValue);

		const textInputV = ref.getForm().findField(amdaPlotObj.PlotObjectConfig.bgSubstraction.value.textinputkey);
		textInputV.setVisible(false);
		textInputV.setValue(null);
	},

	/**
	 * Add a comboBox which holds Background Substraction type : bychannel, fixedvalue
	 * @param {*} ref the reference of the current instance of this class
	 * @returns StandardCombo
	 */
	addComboBoxBackgroundSubType: (ref) => {
		const data = [];
		for (value in amdaPlotObj.PlotObjectConfig.bgSubstraction.type.values) {
			const keyTemp = amdaPlotObj.PlotObjectConfig.fieldComboBox.key;
			const valueTemp = amdaPlotObj.PlotObjectConfig.fieldComboBox.value;
			let item = {};
			item[keyTemp] = value;
			item[valueTemp] = amdaPlotObj.PlotObjectConfig.bgSubstraction.type.values[value];
			data.push(item);
		}

		const comboBoxType = ref.addStandardCombo(amdaPlotObj.PlotObjectConfig.bgSubstraction.type.key,
			amdaPlotObj.PlotObjectConfig.bgSubstraction.type.label, data,
			(name, newKey, oldKey) => {
				if (newKey !== oldKey) {
					const newValue = amdaPlotObj.PlotObjectConfig.bgSubstraction.type.values[newKey];
					if (newKey === null || newValue === undefined) {
						ref.resetDependentComponents(ref);
						return;
					}

					//ComboBoxDim
					const comboBoxDim = ref.getForm().findField(amdaPlotObj.PlotObjectConfig.bgSubstraction.value.dimkey);
					//Fixed value input
					const textInputV = ref.getForm().findField(amdaPlotObj.PlotObjectConfig.bgSubstraction.value.textinputkey);

					//By channel
					if (newValue === amdaPlotObj.PlotObjectConfig.bgSubstraction.type.values.bychannel) {
						const nbDims = ref.data[amdaPlotObj.PlotObjectConfig.bgSubstraction.tableName].length;
						//Show comboBoxDim
						comboBoxDim.select(comboBoxDim.store.getAt(0));
						if (nbDims > 1)
							comboBoxDim.setVisible(true);

						//Hide comboBoxDim
						else
							comboBoxDim.setVisible(false);

						//Hide text input
						textInputV.setValue(null);
						textInputV.setVisible(false);
					}
					//By fixed value
					else if (newValue === amdaPlotObj.PlotObjectConfig.bgSubstraction.type.values.fixedvalue) {
						//Hide comboBoxDim
						comboBoxDim.setVisible(false);
						comboBoxDim.setValue(amdaPlotObj.PlotObjectConfig.bgSubstraction.value.dimNullValue);
						//Show text input
						textInputV.setValue(null);
						textInputV.setVisible(true);
					}
					//Another value
					else {
						console.warn("Unkown key : ", newKey);
					}
				}
			});

		return comboBoxType;
	},

	/**
	 * Add a comboBox which holds Background Substraction value
	 * @param {*} ref the reference of the current instance of this class
	 * @returns StandardCombo
	 */
	addComboBoxBackgroundSubValue: (ref) => {
		const comboBoxValue = ref.addStandardCombo(amdaPlotObj.PlotObjectConfig.bgSubstraction.value.key,
			"", [],
			(name, newKey, oldKey) => {
				if (newKey !== oldKey) {
					ref.object.set(amdaPlotObj.PlotObjectConfig.bgSubstraction.value.key,
						newKey);
				}
			});

		return comboBoxValue;
	},

	/**
	 * Add a comboBox which holds Background Substraction dimension
	 * @param {*} ref the reference of the current instance of this class
	 * @returns StandardCombo
	 */
	addComboBoxBackgroundSubDim: (ref) => {
		const comboBoxDim = ref.addStandardCombo(amdaPlotObj.PlotObjectConfig.bgSubstraction.value.dimkey,
			amdaPlotObj.PlotObjectConfig.bgSubstraction.value.dimlabel, [],
			(name, newKey, oldKey) => {
				const comboBoxV = ref.getForm().findField(amdaPlotObj.PlotObjectConfig.bgSubstraction.value.key);

				if (newKey === amdaPlotObj.PlotObjectConfig.bgSubstraction.value.dimNullValue) {
					comboBoxV.setValue(amdaPlotObj.PlotObjectConfig.bgSubstraction.value.dimNullValue);
					comboBoxV.setVisible(false);
					return;
				}

				if (newKey !== null && newKey !== undefined) {
					comboBoxV.setVisible(true);
					ref.populateComboBoxValue(ref, newKey, comboBoxV);
					comboBoxV.select(comboBoxV.store.getAt(0));
				}

				ref.object.set(amdaPlotObj.PlotObjectConfig.bgSubstraction.value.dimkey,
					newKey);

			});

		return comboBoxDim;
	},

	/**
	 * Add Background Substraction items
	 * @returns StandardFieldSet
	 */
	getBackgroundSubItems: function () {
		return [
			this.addComboBoxBackgroundSubType(this),
			this.addComboBoxBackgroundSubDim(this),
			this.addComboBoxBackgroundSubValue(this),
			this.addComboBoxBackgroundSubFixedValue(this)
		];
	},

	getFormItems: function () {
		const ref = this;
		const field = this.addStandardFieldSet(amdaPlotObj.PlotObjectConfig.bgSubstraction.name,
			amdaPlotObj.PlotObjectConfig.bgSubstraction.name, this.getBackgroundSubItems(),
			function (name, newKey, oldKey) {
				const comboBoxType = ref.getForm().findField(amdaPlotObj.PlotObjectConfig.bgSubstraction.type.key);
				comboBoxType.setValue(null);
				if (newKey) {
					comboBoxType.setValue(Object.keys(amdaPlotObj.PlotObjectConfig.bgSubstraction.type.values)[0]);
				}
			});

		return [
			this.addColorMapCombo('spectro-color-map', function(name, newValue, oldValue){
				ref.parentObject.axes().getById('color').set('axis-color-map', newValue);
			}),
			this.addStandardCombo('spectro-resolution', 'Points per plot', amdaDefaultConfigs.availableResolutions, function (name, value, oldValue) {
				ref.object.set('spectro-resolution', value);
			}),
			this.addStandardCombo('spectro-yaxis', 'Y axis', amdaDefaultConfigs.availableYAxes, function (name, value, oldValue) {
				ref.object.set('spectro-yaxis', value);
				ref.crtTree.refresh();
			}),
			myDesktopApp.addAmdaInfo('MinMaxThreshold', 'vertical-align:bottom'),
			this.addStandardFieldSet('Min/Max thresholds', '', this.getValuesRangeItems()),
			this.addStandardCheck('spectro-log0-as-min', 'Show 0 values as Min Values in log scale', function (name, value, oldValue) {
				ref.object.set('spectro-log0-as-min', value);
			}),
			this.addStandardCombo('spectro-normalization', 'Normalization', amdaDefaultConfigs.availableSpectroNormalization, function (name, value, oldValue) {
				if (ref.object.get('spectro-normalization') != value) {
					ref.object.set('spectro-normalization', value);
				}
			}),
			this.addStandardFieldSet('Spike Filtering ( ! Experimental ! )', 'filtering-activated', this.getFilteringItems()),
			field
		];
	}
});