/** * Project  : AMDA-NG * Name : PlotUI.js * @class amdaUI.PlotUI * @extends Ext.container.Container * @brief New Plot Module UI definition (View) * @author Benjamin Renard * @version $Id: PlotUI.js benjamin $ */ Ext.define('amdaUI.PlotUI', { extend: 'Ext.container.Container', alias: 'widget.newPanelPlot', requires: [ 'amdaModel.DownloadNode', 'amdaModel.Download', 'amdaUI.TimeSelectorUI', 'amdaPlotComp.PlotTabPanel', 'amdaPlotComp.PlotOutputForm', 'amdaPlotComp.PlotElementPanel' ], formPanel: null, multiPlotIntervalPanel : null, plotOutput: null, plotTabs : null, plotElement : null, constructor: function(config) { this.init(config); this.callParent(arguments); if (this.object) this.setObject(this.object); }, setObject : function(object) { this.object = object; this.plotOutput.setObject(this.object); this.plotTabs.setRequestObject(this.object); this.timeSelector.intervalSel.setInterval(this.object.get('startDate'), this.object.get('stopDate')); this.addTTs(this.object.get('timeTables')); }, saveProcess : function() { var plotModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.plot.id); if (!plotModule) return; this.updateObject(); if ((this.object.get('id') != '') && (plotModule.linkedNode.get('text') == this.object.get('name'))) //update existing request plotModule.linkedNode.update(); else { var me = this; //Request Name validation plotModule.linkedNode.isValidName(this.object.get('name'), function (res) { if (!res) { myDesktopApp.errorMsg('Error during object validation'); return; } if (!res.valid) { if (res.error) myDesktopApp.errorMsg(res.error); else myDesktopApp.errorMsg('Invalid object name'); return; } //Save if (me.object.get('id') != '') { //Duplicate request plotModule.createLinkedNode(); plotModule.linkedNode.set('object',me.object); } else { //Create new request } plotModule.linkedNode.create(); }); } }, resetProcess : function(){ var plotModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.plot.id); plotModule.createLinkedNode(); plotModule.createObject(); this.setObject(plotModule.linkedNode.get('object')); }, getDataProcess : function(){ this.updateObject(); // plot was not called - form only if (this.object.get('last-plotted-tab') == 0) { this.object.set('last-plotted-tab', this.plotTabs.getSelectedTabId()); } var downObject = amdaModel.DownloadNode.decodeObject(this.object); amdaModel.DownloadNode.set('object',Ext.create('amdaModel.Download',downObject)); amdaModel.DownloadNode.editInModule(); }, addParameter : function(node){ var crtTree = this.plotTabs.getTreeFromPlotTab(this.plotTabs.getActiveTab()); crtTree.dropRecord(node,null,'append'); }, /** * plot method called by 'Do Plot' button to launch the plot process */ doPlot : function(){ this.updateObject(); this.object.set('last-plotted-tab', this.plotTabs.getSelectedTabId()); var plotModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.plot.id); if (plotModule) plotModule.linkedNode.execute(); }, /** * Check if changes were made before closing window * @return false */ fclose : function() { var module = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.plot.id); if (module) module.closeInteractiveSession(); return this.object.isDirty(); }, /** * update this.object from form */ updateObject : function(){ var timeSource = this.timeSelector.getActiveTimeSource(); var multiPlotForm = this.multiPlotIntervalPanel.getForm(); multiPlotForm.updateRecord(this.object); this.object.set('timesrc', timeSource); if (timeSource === amdaModel.AmdaTimeObject.inputTimeSrc[0]) this.object.set('timeTables',this.timeSelector.TTGrid.getStore().data.items); this.plotTabs.updateTimeObject(); }, addTT : function(newTTName,newTTid,timeSelectorId) { var crtTimeSelector = Ext.getCmp(timeSelectorId); if (crtTimeSelector) crtTimeSelector.addTT(newTTName,newTTid); }, addTTs : function(TTarray) { // set TTTab this.timeSelector.setTTTab(TTarray); }, /** * Set Start-Stop from parameter info (Local & MyData) */ setTimeFromData : function(obj) { var dateStart = new Date(obj.start.replace(/[T|Z]/g,' ').replace(/\-/g,'\/')); var dateStop = new Date(obj.stop.replace(/[T|Z]/g,' ').replace(/\-/g,'\/')); for (var i = 0; i < this.plotTabs.items.getCount(); ++i) { var plotTab = this.plotTabs.items.getAt(i).items.getAt(0); plotTab.items.getAt(1).intervalSel.setInterval(dateStart, dateStop); //TBD plotTab.updateTimeObject(); } this.timeSelector.intervalSel.setInterval(dateStart, dateStop); }, updateLinkedToMultiPlotMode : function(isLinkedToMultiPlotMode) { this.multiPlotIntervalPanel.setVisible(isLinkedToMultiPlotMode); }, init : function(config) { this.timeSelector = new amdaUI.TimeSelectorUI( { id: 'multiPlotTimeSelector' + config.id, title : 'MultiPlot Time Selection'} ); this.plotOutput = new amdaPlotComp.PlotOutputForm({flex: 2}); this.plotElement = new amdaPlotComp.PlotElementPanel({flex: 3}); this.plotTabs = new amdaPlotComp.PlotTabPanel({flex: 3, plotElementPanel : this.plotElement, plotUI : this}); this.optionsPanel = new Ext.form.Panel({ layout: { type: 'vbox', pack: 'start', align: 'stretch' }, bodyStyle: { background : '#dfe8f6' }, defaults: { border: false }, items: [ this.plotElement, this.plotOutput ] }); this.multiPlotIntervalPanel = new Ext.form.Panel({ flex: 2, layout: 'fit', bodyStyle: { background : '#dfe8f6' }, visible : false, defaults: { border: false }, items : [ this.timeSelector ] }); this.formPanel = new Ext.form.Panel({ region: 'center', layout: { type: 'hbox', pack: 'start', align: 'stretch' }, bodyStyle: { background : '#dfe8f6' }, defaults: { border: false }, items: [ { xtype : 'panel', layout: { type: 'vbox', pack: 'start', align: 'stretch' }, bodyStyle: { background : '#dfe8f6' }, defaults: { border: false }, flex: 1, items: [ this.plotTabs, this.multiPlotIntervalPanel ] }, { xtype : 'panel', layout: 'fit', bodyStyle: { background : '#dfe8f6' }, defaults: { border: false }, flex: 1, items: [ this.optionsPanel ] } ], fbar: [ { xtype: 'button', text: 'Plot', scope: this, handler: function(button) { this.doPlot(); } }, ' ', { xtype: 'button', text: 'Get Data', scope: this, handler: function(button) { this.getDataProcess(); } }, ' ', { xtype: 'button', text: 'Reset', scope: this, handler: function(button) { this.resetProcess(); } }, '->', { xtype: 'button', text: 'Save Request', scope: this, handler: function(button) { this.saveProcess(); } } ] }); var myConf = { layout: 'border', items: [ this.formPanel, { xtype: 'panel', region: 'south', title: 'Information', collapsible: true, height: 100, autoHide: false, bodyStyle: 'padding:5px', iconCls: 'icon-information', loader: { autoLoad: true, url: helpDir+'plotHOWTO' } } ] }; Ext.apply (this , Ext.apply (arguments, myConf)); } });