/** * Project  : AMDA-NG * Name : PlotTabResultUI.js * @class amdaUI.PlotTabResultUI * @extends Ext. panel.Panel * @brief Plot Tab Result UI definition (View) * @author * @version $Id: PlotTabResultUI.js benjamin $ ******************************************************************************** * FT Id : Date : Name - Description ******************************************************************************* * */ Ext.define('amdaUI.PlotTabResultUI', { extend: 'Ext.panel.Panel', alias: 'widget.plotTabResult', requires: [ 'amdaPlotComp.PlotZoomPlug', 'amdaPlotComp.PlotContextManager' ], panelImage : null, crtContext : null, tabId : '', constructor: function(config) { this.addEvents({'pagesize':true}); this.init(config); this.callParent(arguments); }, getImageSize : function() { if (!this.crtContext) return { width : 0, height : 0 }; return { width : this.crtContext.page.width * this.sliderPage.getValue()/100., height : this.crtContext.page.height * this.sliderPage.getValue()/100. } }, getImageUrl: function(resultFolder, plotFile) { return 'data/'+sessionID +'/RES/'+resultFolder+ '/' + plotFile; }, toPixelOnSourceImage : function(value) { return value*100/this.sliderPage.getValue(); }, toPixelOnResultImage : function(value) { return value*this.sliderPage.getValue()/100; }, createZoomItemsForPanel: function(panelId) { var zoomPlugin = this.getPlugin('plot-zoom-plugin-id'); if (zoomPlugin == null) return; var panelContext = amdaPlotComp.PlotContextManager.getPanelById(this.crtContext, panelId); var me = this; Ext.each(panelContext.plotArea.axes, function (axis) { //Events for zoom on a time axis var onMinTimeSelection = function (posX) { //Panel and axis context must be retrieved by using the crtContext var panelContext = amdaPlotComp.PlotContextManager.getPanelById(me.crtContext, panelId); var axisContext = amdaPlotComp.PlotContextManager.getPanelAxisById(panelContext, axis.id); var sourceXPos = me.toPixelOnSourceImage(posX); var crtTimestamp = amdaPlotComp.PlotContextManager.toAxisValue(axisContext, panelContext.plotArea.x, panelContext.plotArea.x+panelContext.plotArea.width, sourceXPos); var crtTime = new Date(crtTimestamp*1000); crtTime = Ext.Date.add(crtTime, Ext.Date.MINUTE, crtTime.getTimezoneOffset()); zoomPlugin.setMinValue(crtTime); }; var onMaxTimeSelection = function (posX) { //Panel and axis context must be retrieved by using the crtContext var panelContext = amdaPlotComp.PlotContextManager.getPanelById(me.crtContext, panelId); var axisContext = amdaPlotComp.PlotContextManager.getPanelAxisById(panelContext, axis.id); var sourceXPos = me.toPixelOnSourceImage(posX); var crtTimestamp = amdaPlotComp.PlotContextManager.toAxisValue(axisContext, panelContext.plotArea.x, panelContext.plotArea.x+panelContext.plotArea.width, sourceXPos); var crtTime = new Date(crtTimestamp*1000); crtTime = Ext.Date.add(crtTime, Ext.Date.MINUTE, crtTime.getTimezoneOffset()); zoomPlugin.setMaxValue(crtTime); }; //Events for zoom on a Y axis var onMinYValueSelection = function(posY) { //Panel and axis context must be retrieved by using the crtContext var panelContext = amdaPlotComp.PlotContextManager.getPanelById(me.crtContext, panelId); var axisContext = amdaPlotComp.PlotContextManager.getPanelAxisById(panelContext, axis.id); var sourceYPos = me.toPixelOnSourceImage(posY); var crtValue = amdaPlotComp.PlotContextManager.toAxisValue(axisContext, panelContext.plotArea.y+panelContext.plotArea.height, panelContext.plotArea.y, sourceYPos); zoomPlugin.setMinValue(crtValue); }; var onMaxYValueSelection = function(posY) { //Panel and axis context must be retrieved by using the crtContext var panelContext = amdaPlotComp.PlotContextManager.getPanelById(me.crtContext, panelId); var axisContext = amdaPlotComp.PlotContextManager.getPanelAxisById(panelContext, axis.id); var sourceYPos = me.toPixelOnSourceImage(posY); var crtValue = amdaPlotComp.PlotContextManager.toAxisValue(axisContext, panelContext.plotArea.y+panelContext.plotArea.height, panelContext.plotArea.y, sourceYPos); zoomPlugin.setMaxValue(crtValue); }; //Events for zoom on X axis var onMinXValueSelection = function(posX) { //Panel and axis context must be retrieved by using the crtContext var panelContext = amdaPlotComp.PlotContextManager.getPanelById(me.crtContext, panelId); var axisContext = amdaPlotComp.PlotContextManager.getPanelAxisById(panelContext, axis.id); var sourceXPos = me.toPixelOnSourceImage(posX); var crtValue = amdaPlotComp.PlotContextManager.toAxisValue(axisContext, panelContext.plotArea.x, panelContext.plotArea.x + panelContext.plotArea.width, sourceXPos); zoomPlugin.setMinValue(crtValue); }; var onMaxXValueSelection = function(posX) { //Panel and axis context must be retrieved by using the crtContext var panelContext = amdaPlotComp.PlotContextManager.getPanelById(me.crtContext, panelId); var axisContext = amdaPlotComp.PlotContextManager.getPanelAxisById(panelContext, axis.id); var sourceXPos = me.toPixelOnSourceImage(posX); var crtValue = amdaPlotComp.PlotContextManager.toAxisValue(axisContext, panelContext.plotArea.x, panelContext.plotArea.x + panelContext.plotArea.width, sourceXPos); zoomPlugin.setMaxValue(crtValue); }; switch (axis.id) { case 'timeAxis': me.contextualMenu.add({ text:'Zoom on Time Axis', handler : function(item, e) { zoomPlugin.show(me.tabId, axis.id, panelContext.id); zoomPlugin.resetMinMaxValue(); me.panelImage.startZoom(true, me.toPixelOnResultImage(panelContext.y), me.toPixelOnResultImage(panelContext.height), onMinTimeSelection, onMaxTimeSelection); }, scope: this }); break; case 'y-left' : me.contextualMenu.add({ text:'Zoom on Y Left Axis', handler : function(item, e) { zoomPlugin.show(me.tabId, axis.id, panelContext.id); zoomPlugin.resetMinMaxValue(); me.panelImage.startZoom(false, me.toPixelOnResultImage(panelContext.x), me.toPixelOnResultImage(panelContext.width), onMinYValueSelection, onMaxYValueSelection); } }); break; case 'y-right' : me.contextualMenu.add({ text:'Zoom on Y Right Axis', handler : function(item, e) { zoomPlugin.show(me.tabId, axis.id, panelContext.id); zoomPlugin.resetMinMaxValue(); me.panelImage.startZoom(false, me.toPixelOnResultImage(panelContext.x), me.toPixelOnResultImage(panelContext.width), onMinYValueSelection, onMaxYValueSelection); } }); break; case 'xaxis_id' : me.contextualMenu.add({ text:'Zoom on X Axis', handler : function(item, e) { zoomPlugin.show(me.tabId, axis.id, panelContext.id); zoomPlugin.resetMinMaxValue(); me.panelImage.startZoom(true, me.toPixelOnResultImage(panelContext.y), me.toPixelOnResultImage(panelContext.height), onMinXValueSelection, onMaxXValueSelection); } }); break; case 'epochAxis' : //Nothing to add break; } }); }, createPlotImage: function(resultFolder, plotFile) { var me = this; var size = this.getImageSize(); this.panelImage = Ext.create('amdaPlotComp.PlotResultImage', { src : this.getImageUrl(resultFolder, plotFile), width : size.width, height : size.height, onMouseMove : function(x, y) { if (!me.crtContext) return; var sourceXPos = me.toPixelOnSourceImage(x); var sourceYPos = me.toPixelOnSourceImage(y); var panel = amdaPlotComp.PlotContextManager.getPanel(me.crtContext, sourceXPos, sourceYPos); var text = ''; if (me.panelImage) { if (!panel) { me.panelImage.resetCursor(); text += 'No panel'; } else { text += 'Panel Id : '; text += panel.id; if (amdaPlotComp.PlotContextManager.isInPlotArea(panel, sourceXPos, sourceYPos)) { /*me.panelImage.updateCursor( me.toPixelOnResultImage(panel.plotArea.x), me.toPixelOnResultImage(panel.plotArea.y), me.toPixelOnResultImage(panel.plotArea.width), me.toPixelOnResultImage(panel.plotArea.height), x, y);*/ me.panelImage.updateCursor( me.toPixelOnResultImage(0), me.toPixelOnResultImage(0), me.toPixelOnResultImage(me.crtContext.page.width), me.toPixelOnResultImage(me.crtContext.page.height), x, y); var xText = ''; var yLeftText = ''; var yRightText = ''; Ext.each(panel.plotArea.axes, function (axis) { switch (axis.id) { case 'timeAxis': var crtTimestamp = amdaPlotComp.PlotContextManager.toAxisValue(axis, panel.plotArea.x, panel.plotArea.x+panel.plotArea.width, sourceXPos); var crtTime = new Date(crtTimestamp*1000); xText = crtTime.toJSON(); break; case 'y-left' : yLeftText = parseFloat(amdaPlotComp.PlotContextManager.toAxisValue(axis, panel.plotArea.y+panel.plotArea.height, panel.plotArea.y, sourceYPos).toPrecision(2)); break; case 'y-right' : yRightText = parseFloat(amdaPlotComp.PlotContextManager.toAxisValue(axis, panel.plotArea.y+panel.plotArea.height, panel.plotArea.y, sourceYPos).toPrecision(2)); break; case 'xaxis_id' : xText = parseFloat(amdaPlotComp.PlotContextManager.toAxisValue(axis, panel.plotArea.x, panel.plotArea.x+panel.plotArea.width, sourceXPos).toPrecision(2)); break; case 'epochAxis' : // xText = 'ToDo'; break; } }); if (xText != '') text += (', X : '+xText); if (yLeftText != '') text += (', Y Left : '+yLeftText); if (yRightText != '') text += (', Y Right : '+yRightText); } else me.panelImage.resetCursor(); } } me.coordinatesField.setText(text); }, onContextMenu : function(absoluteX, absoluteY, imageX, imageY) { if (!me.crtContext) return; me.contextualMenu.removeAll(); var sourceXPos = me.toPixelOnSourceImage(imageX); var sourceYPos = me.toPixelOnSourceImage(imageY); var panel = amdaPlotComp.PlotContextManager.getPanel(me.crtContext, sourceXPos, sourceYPos); if (panel != null) { if (amdaPlotComp.PlotContextManager.isInPlotArea(panel, sourceXPos, sourceYPos)) me.createZoomItemsForPanel(panel.id); } if (me.contextualMenu.items.getCount() > 0) me.contextualMenu.add('-'); me.contextualMenu.add({ text:'Extend/Shift Time request' }); me.contextualMenu.showAt(absoluteX, absoluteY); } }); return this.panelImage; }, updatePlotImage: function(configResult) { this.crtContext = configResult.context; this.panelImage.setSrc(this.getImageUrl(configResult.folder, configResult.plotFile)); var size = this.getImageSize(); this.panelImage.setSize(size.width, size.height); this.panelImage.refreshMe(); }, callInteractivePlot : function(obj) { loadMask.show(true); AmdaAction.interactivePlot(obj, function (result, e) { loadMask.hide(); var t = e.getTransaction(); if (e.status) { if (result) { if (result.success) { myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.plot.id, true, function (module) { module.startInteractiveSession(result); }); } else myDesktopApp.errorMsg('Interactive action error - '+result.message); } else myDesktopApp.errorMsg('Cannot execute interactive action'); } else { // FAILURE myDesktopApp.errorMsg('Error System - '+e.message); } },this); }, init: function(configResult){ this.crtContext = configResult.context; this.tabId = configResult.tabId; this.coordinatesField = new Ext.toolbar.TextItem({ width: 300, text : '' }); this.sliderPage = new Ext.slider.Single({ width: 130, value: 75, increment: 5, minValue: 50, maxValue: 100, fieldLabel : 'Resize', labelWidth : 40, listeners: { scope : this, changecomplete: function(s, v) { var zoomPlugin = this.getPlugin('plot-zoom-plugin-id'); zoomPlugin.close(); var size = this.getImageSize(); this.panelImage.width = size.width; this.panelImage.height = size.height; this.panelImage.doComponentLayout(); this.fireEvent('pagesize',this,v); } } }); var mouseToolbar = { xtype: 'toolbar', height: 25, dock: 'bottom', items:[ this.coordinatesField, '->', this.sliderPage ] }; this.contextualMenu = Ext.create('Ext.menu.Menu', { width: 200, plain: true, items: [] }); var plotResultTabPanelConfig = { preventHeader : true, autoScroll: true, items: [ this.createPlotImage(configResult.folder, configResult.plotFile) ], dockedItems: [mouseToolbar], plugins: [ { ptype: 'plotZoomPlugin', pluginId : 'plot-zoom-plugin-id' }] }; Ext.apply(this , plotResultTabPanelConfig); } });