Compare View

switch
from
...
to
 
Commits (14)
desktop.php
... ... @@ -41,7 +41,7 @@ if ($sessionID === FALSE) {
41 41 <!-- Important ! the order of css loading : ext-all.css - should be the first -->
42 42 <link rel="stylesheet" type="text/css" href="js/lib/ext/resources/css/ext-all.css" />
43 43 <link rel="stylesheet" type="text/css" href="js/resources/css/desktop.css" />
44   - <link rel="stylesheet" type="text/css" href="js/resources/css/amda.css?v=2" />
  44 + <link rel="stylesheet" type="text/css" href="js/resources/css/amda.css?v=4" />
45 45  
46 46 <link rel="stylesheet" href="js/lib/codemirror/codemirror-5.65.12/lib/codemirror.css">
47 47 <link rel="stylesheet" href="js/lib/codemirror/codemirror-5.65.12/addon/lint/lint.css">
... ...
generic_data/defaultValues.json
... ... @@ -95,6 +95,11 @@
95 95 "size":4,
96 96 "color":"#00FF00"
97 97 },
  98 + "lastsymbols":{
  99 + "type":"triangle",
  100 + "size":4,
  101 + "color":"#0000FF"
  102 + },
98 103 "font":{
99 104 "name":"sans-serif",
100 105 "size":8
... ... @@ -108,6 +113,11 @@
108 113 "size":10,
109 114 "color":"#FF0000"
110 115 },
  116 + "lastsymbols":{
  117 + "type":"triangle",
  118 + "size":4,
  119 + "color":"#0000FF"
  120 + },
111 121 "font":{
112 122 "name":"sans-serif",
113 123 "size":8
... ...
generic_data/defaultValuesLinks.json
... ... @@ -151,6 +151,16 @@
151 151 "type":"colorpicker",
152 152 "store":null
153 153 },
  154 + "plot.serie.timetick.lastsymbols.type":
  155 + {
  156 + "type":"combobox",
  157 + "store":"availableSymbolsTypes"
  158 + },
  159 + "plot.serie.timetick.lastsymbols.color":
  160 + {
  161 + "type":"colorpicker",
  162 + "store":null
  163 + },
154 164 "plot.serie.timetick.font.name":
155 165 {
156 166 "type":"combobox",
... ... @@ -171,6 +181,16 @@
171 181 "type":"colorpicker",
172 182 "store":null
173 183 },
  184 + "plot.serie.intervaltick.lastsymbols.type":
  185 + {
  186 + "type":"combobox",
  187 + "store":"availableSymbolsTypes"
  188 + },
  189 + "plot.serie.intervaltick.lastsymbols.color":
  190 + {
  191 + "type":"colorpicker",
  192 + "store":null
  193 + },
174 194 "plot.serie.intervaltick.font.name":
175 195 {
176 196 "type":"combobox",
... ...
help/MPPE.html 0 → 100755
... ... @@ -0,0 +1,20 @@
  1 +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2 +<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title> </title>
  3 +<link href="../js/resources/css/styles.css" rel="stylesheet" type="text/css" media="screen" />
  4 +<link rel="icon" href="../favicon.ico" type="image/x-icon">
  5 +<link rel="shortcut icon" href="../favicon.ico" type="image/x-icon">
  6 +</head>
  7 + <body>
  8 +<div id="content">
  9 +<div id="main">
  10 +<h3>
  11 + Mercury Plasma Particle Experiment (MPPE)
  12 +</h3>
  13 +</br>
  14 +
  15 +MPPE is funded by JAXA, CNES, the Center National de la Recherche scientifique (CNRS, France), the Italian Space Agency (ASI).
  16 +</br>
  17 +Using these data for publications should imply co-authorship of Y. Saito (MPPE PI) and/or Y. Saito (MIA) and/or D. Delcourt (MSA) and/or N. André (MEA) and/or S. Barabash (ENA) depending on the MPPE sensor(s) used in the study. Preferred collaboration is participation to analysis well ahead of publication.
  18 +
  19 +</div></div>
  20 +</body></html>
0 21 \ No newline at end of file
... ...
help/policy.html
... ... @@ -31,6 +31,7 @@
31 31 <li><a href="https://www.cosmos.esa.int/web/solar-orbiter/solar-orbiter-publication-acknowledgement" target="_blank">SOLAR ORBITER</a>
32 32 <li><a href="STEREO.html" target="_blank">STEREO</a>
33 33 <li><a href="http://themis.ssl.berkeley.edu/roadrules.shtml" target="_blank">THEMIS</a>
  34 + <li><a href="MPPE.html" target="_blank">BepiColombo/Mio/MPPE</a>
34 35 </ul>
35 36 </div>
36 37 </div>
... ...
js/app/models/PlotObjects/PlotBaseSerieObject.js
... ... @@ -23,7 +23,7 @@ Ext.define(&#39;amdaPlotObj.PlotBaseSerieObject&#39;, {
23 23 {name: 'serie-lines-style', type: 'string'},
24 24 {name: 'serie-lines-width', type: 'float'},
25 25 {name: 'serie-lines-color', type: 'string'},
26   - {name: 'serie-symbols-activated', type: 'boolean'},
  26 + {name: 'serie-symbols-activated', type: 'boolean'},
27 27 {name: 'serie-symbols-type', type: 'string'},
28 28 {name: 'serie-symbols-size', type: 'float'},
29 29 {name: 'serie-symbols-color', type: 'string'},
... ... @@ -45,6 +45,10 @@ Ext.define(&#39;amdaPlotObj.PlotBaseSerieObject&#39;, {
45 45 {name: 'serie-timetick-firstsymbols-type', type: 'string'},
46 46 {name: 'serie-timetick-firstsymbols-size', type: 'float'},
47 47 {name: 'serie-timetick-firstsymbols-color', type: 'string'},
  48 + {name: 'serie-timetick-lastsymbols-activated', type: 'boolean'},
  49 + {name: 'serie-timetick-lastsymbols-type', type: 'string'},
  50 + {name: 'serie-timetick-lastsymbols-size', type: 'float'},
  51 + {name: 'serie-timetick-lastsymbols-color', type: 'string'},
48 52 {name: 'serie-timetick-font-activated', type: 'boolean'},
49 53 {name: 'serie-timetick-font-name', type: 'string'},
50 54 {name: 'serie-timetick-font-size', type: 'int'},
... ... @@ -58,6 +62,10 @@ Ext.define(&#39;amdaPlotObj.PlotBaseSerieObject&#39;, {
58 62 {name: 'serie-intervaltick-symbols-type', type: 'string'},
59 63 {name: 'serie-intervaltick-symbols-size', type: 'float'},
60 64 {name: 'serie-intervaltick-symbols-color', type: 'string'},
  65 + {name: 'serie-intervaltick-lastsymbols-activated', type: 'boolean'},
  66 + {name: 'serie-intervaltick-lastsymbols-type', type: 'string'},
  67 + {name: 'serie-intervaltick-lastsymbols-size', type: 'float'},
  68 + {name: 'serie-intervaltick-lastsymbols-color', type: 'string'},
61 69 {name: 'serie-intervaltick-font-activated', type: 'boolean'},
62 70 {name: 'serie-intervaltick-font-name', type: 'string'},
63 71 {name: 'serie-intervaltick-font-size', type: 'int'},
... ... @@ -110,6 +118,10 @@ Ext.define(&#39;amdaPlotObj.PlotBaseSerieObject&#39;, {
110 118 this.set('serie-timetick-firstsymbols-type', amdaDefaultValues.plot.serie.timetick.firstsymbols.type);
111 119 this.set('serie-timetick-firstsymbols-size', amdaDefaultValues.plot.serie.timetick.firstsymbols.size);
112 120 this.set('serie-timetick-firstsymbols-color', amdaDefaultValues.plot.serie.timetick.firstsymbols.color);
  121 + this.set('serie-timetick-lastsymbols-activated', false);
  122 + this.set('serie-timetick-lastsymbols-type', amdaDefaultValues.plot.serie.timetick.lastsymbols.type);
  123 + this.set('serie-timetick-lastsymbols-size', amdaDefaultValues.plot.serie.timetick.lastsymbols.size);
  124 + this.set('serie-timetick-lastsymbols-color', amdaDefaultValues.plot.serie.timetick.lastsymbols.color);
113 125 this.set('serie-timetick-font-activated', false);
114 126 this.set('serie-timetick-font-name', amdaDefaultValues.plot.serie.timetick.font.name);
115 127 this.set('serie-timetick-font-size', amdaDefaultValues.plot.serie.timetick.font.size);
... ... @@ -122,6 +134,10 @@ Ext.define(&#39;amdaPlotObj.PlotBaseSerieObject&#39;, {
122 134 this.set('serie-intervaltick-symbols-type', amdaDefaultValues.plot.serie.intervaltick.symbols.type);
123 135 this.set('serie-intervaltick-symbols-size', amdaDefaultValues.plot.serie.intervaltick.symbols.size);
124 136 this.set('serie-intervaltick-symbols-color', amdaDefaultValues.plot.serie.intervaltick.symbols.color);
  137 + this.set('serie-intervaltick-lastsymbols-activated', false);
  138 + this.set('serie-intervaltick-lastsymbols-type', amdaDefaultValues.plot.serie.intervaltick.lastsymbols.type);
  139 + this.set('serie-intervaltick-lastsymbols-size', amdaDefaultValues.plot.serie.intervaltick.lastsymbols.size);
  140 + this.set('serie-intervaltick-lastsymbols-color', amdaDefaultValues.plot.serie.intervaltick.lastsymbols.color);
125 141 this.set('serie-intervaltick-font-activated', false);
126 142 this.set('serie-intervaltick-font-name', amdaDefaultValues.plot.serie.intervaltick.font.name);
127 143 this.set('serie-intervaltick-font-size', amdaDefaultValues.plot.serie.intervaltick.font.size);
... ... @@ -175,6 +191,10 @@ Ext.define(&#39;amdaPlotObj.PlotBaseSerieObject&#39;, {
175 191 serieValues['serie-timetick-firstsymbols-type'] = this.get('serie-timetick-firstsymbols-type');
176 192 serieValues['serie-timetick-firstsymbols-size'] = this.get('serie-timetick-firstsymbols-size');
177 193 serieValues['serie-timetick-firstsymbols-color'] = this.get('serie-timetick-firstsymbols-color');
  194 + serieValues['serie-timetick-lastsymbols-activated'] = this.get('serie-timetick-lastsymbols-activated');
  195 + serieValues['serie-timetick-lastsymbols-type'] = this.get('serie-timetick-lastsymbols-type');
  196 + serieValues['serie-timetick-lastsymbols-size'] = this.get('serie-timetick-lastsymbols-size');
  197 + serieValues['serie-timetick-lastsymbols-color'] = this.get('serie-timetick-lastsymbols-color');
178 198 serieValues['serie-timetick-font-activated'] = this.get('serie-timetick-font-activated');
179 199 serieValues['serie-timetick-font-name'] = this.get('serie-timetick-font-name');
180 200 serieValues['serie-timetick-font-size'] = this.get('serie-timetick-font-size');
... ... @@ -187,6 +207,10 @@ Ext.define(&#39;amdaPlotObj.PlotBaseSerieObject&#39;, {
187 207 serieValues['serie-intervaltick-symbols-type'] = this.get('serie-intervaltick-symbols-type');
188 208 serieValues['serie-intervaltick-symbols-size'] = this.get('serie-intervaltick-symbols-size');
189 209 serieValues['serie-intervaltick-symbols-color'] = this.get('serie-intervaltick-symbols-color');
  210 + serieValues['serie-intervaltick-lastsymbols-activated'] = this.get('serie-intervaltick-lastsymbols-activated');
  211 + serieValues['serie-intervaltick-lastsymbols-type'] = this.get('serie-intervaltick-lastsymbols-type');
  212 + serieValues['serie-intervaltick-lastsymbols-size'] = this.get('serie-intervaltick-lastsymbols-size');
  213 + serieValues['serie-intervaltick-lastsymbols-color'] = this.get('serie-intervaltick-lastsymbols-color');
190 214 serieValues['serie-intervaltick-font-activated'] = this.get('serie-intervaltick-font-activated');
191 215 serieValues['serie-intervaltick-font-name'] = this.get('serie-intervaltick-font-name');
192 216 serieValues['serie-intervaltick-font-size'] = this.get('serie-intervaltick-font-size');
... ...
js/app/models/PlotObjects/PlotIntervalsObject.js
... ... @@ -26,7 +26,9 @@ Ext.define(&#39;amdaPlotObj.PlotIntervalsObject&#39;, {
26 26 { name: 'legend-text-font-name', type: 'string', defaultValue: "sans-serif" },
27 27 { name: 'legend-text-font-size', type: 'int', defaultValue: "12" },
28 28 { name: 'legend-text-font-bold', type: 'boolean' },
29   - { name: 'legend-text-font-italic', type: 'boolean' }
  29 + { name: 'legend-text-font-italic', type: 'boolean' },
  30 + { name: 'intervals-column-show', type: 'boolean', defaultValue: false},
  31 + { name: 'intervals-param-show', type: 'string', defaultValue: ""}
30 32  
31 33 ],
32 34  
... ... @@ -64,7 +66,7 @@ Ext.define(&#39;amdaPlotObj.PlotIntervalsObject&#39;, {
64 66 {
65 67 var intervalsValues = new Object();
66 68 intervalsValues['intervals-color'] = this.get('intervals-color');
67   - intervalsValues['legend-text-activated'] = this.get('legend-text-activated');
  69 + intervalsValues['legend-text-activated'] = this.get('legend-text-activated');
68 70 intervalsValues['legend-text-value'] = this.get('legend-text-value');
69 71 intervalsValues['legend-text-position'] = this.get('legend-text-position');
70 72 intervalsValues['legend-text-color'] = this.get('legend-text-color');
... ... @@ -73,6 +75,8 @@ Ext.define(&#39;amdaPlotObj.PlotIntervalsObject&#39;, {
73 75 intervalsValues['legend-text-font-size'] = this.get('legend-text-font-size');
74 76 intervalsValues['legend-text-font-bold'] = this.get('legend-text-font-bold');
75 77 intervalsValues['legend-text-font-italic'] = this.get('legend-text-font-italic');
  78 + intervalsValues['intervals-column-show'] = this.get('intervals-column-show');
  79 + intervalsValues['intervals-param-show'] = this.get('intervals-param-show');
76 80  
77 81 return intervalsValues;
78 82 }
... ...
js/app/views/AstroImagesUI.js
... ... @@ -80,7 +80,7 @@ Ext.define(&#39;amdaUI.AstroImagesUI&#39;, {
80 80 {
81 81 var imageSrc = this.getPreviewUrl(image);
82 82 image.set('icon',imageSrc);
83   - image.set('iconCls','x-tree-icon-leaf');
  83 + image.set('iconCls','amda-astro-tree-icon-leaf');
84 84 }
85 85 else
86 86 {
... ... @@ -105,8 +105,6 @@ Ext.define(&#39;amdaUI.AstroImagesUI&#39;, {
105 105 if(image.get('checked'))
106 106 {
107 107 var name = image.get('name');
108   - if (!name.substr(name.lastIndexOf('.') + 1) != "fits")
109   - name+='.fits';
110 108 imgList.push({name:name,
111 109 url:me.getImageToSendUrl(image)});
112 110 }
... ...
js/app/views/PlotComponents/PlotBaseSerieForm.js
... ... @@ -62,6 +62,7 @@ Ext.define(&#39;amdaPlotComp.PlotBaseSerieForm&#39;, {
62 62 this.addColorsPicker('serie-timetick-color', 'Color', amdaDefaultConfigs.availableColorsNew),
63 63 this.addStandardFieldSet('Symbols', '', this.addStandardSymbolsItems('serie-timetick-symbols')),
64 64 this.addStandardFieldSet('First symbol', 'serie-timetick-firstsymbols-activated', this.addStandardSymbolsItems('serie-timetick-firstsymbols')),
  65 + this.addStandardFieldSet('Last symbol', 'serie-timetick-lastsymbols-activated', this.addStandardSymbolsItems('serie-timetick-lastsymbols')),
65 66 this.addStandardFont('serie-timetick-font')
66 67 ];
67 68 },
... ... @@ -73,6 +74,7 @@ Ext.define(&#39;amdaPlotComp.PlotBaseSerieForm&#39;, {
73 74 this.addStandardCombo('serie-intervaltick-mode', 'Mode', amdaDefaultConfigs.availableIntervalTickModes),
74 75 this.addColorsPicker('serie-intervaltick-color', 'Color', amdaDefaultConfigs.availableColorsNew),
75 76 this.addStandardFieldSet('Symbols', '', this.addStandardSymbolsItems('serie-intervaltick-symbols')),
  77 + this.addStandardFieldSet('Last symbol', 'serie-intervaltick-lastsymbols-activated', this.addStandardSymbolsItems('serie-intervaltick-lastsymbols')),
76 78 this.addStandardFont('serie-intervaltick-font')
77 79 ];
78 80 },
... ... @@ -106,8 +108,8 @@ Ext.define(&#39;amdaPlotComp.PlotBaseSerieForm&#39;, {
106 108 this.addStandardFieldSet('Lines', 'serie-lines-activated', this.addStandardLineItems('serie-lines')),
107 109 this.addStandardFieldSet('Symbols', 'serie-symbols-activated', this.addStandardSymbolsItems('serie-symbols')),
108 110 this.addStandardFieldSet('Time ticks', 'serie-timetick-activated', this.getTimeTickItems()),
109   - this.addStandardFieldSet('Interval ticks', 'serie-intervaltick-activated', this.getIntervalTickItems()),
110   - this.addStandardFieldSet('Spike Filtering ( ! Experimental ! )', 'filtering-activated', this.getFilteringItems())
  111 + this.addStandardFieldSet('Interval ticks', 'serie-intervaltick-activated', this.getIntervalTickItems()),
  112 + this.addStandardFieldSet('Spike Filtering ( ! Experimental ! )', 'filtering-activated', this.getFilteringItems())
111 113 ];
112 114 }
113 115 });
... ...
js/app/views/PlotComponents/PlotContextManager.js
... ... @@ -51,97 +51,55 @@ Ext.define(&#39;amdaPlotComp.PlotContextManager&#39;, {
51 51 return resPanel;
52 52 },
53 53  
54   - getIntervalCoordInfo: function (context, panel, crtTimestamp) {
55   - var intervalName = new Array();
56   - var intervalId = new Array();
57   - var intervalText = "";
58   - Ext.each(panel.intervals, function (interval) {
59   - if (crtTimestamp > interval.startTime && crtTimestamp < interval.stopTime) {
60   - intervalName.push(interval.name);
61   - intervalId.push(interval.id);
62   - }
63   - return;
64   - });
65   - if (intervalName.length > 0) {
66   - intervalText = 'TT: ' + intervalName[0] + ', id: [' + intervalId[0];
67   - for (i = 1; i < intervalName.length; i++) {
68   - if (intervalName[i] == intervalName[i - 1]) {
69   - intervalText += ', ' + intervalId[i];
70   - }
71   - else {
72   - intervalText += '] | TT: ' + intervalName[i] + ', id: [' + intervalId[i];
73   - }
74   - }
75   - intervalText += ']'
76   - }
77   - return intervalText;
78   - },
79   -
80   - getAllIntervalParams(context, panel, crtTimestamp) {
81   - var allParams = new Array();
82   -
83   - Ext.each(panel.intervals, function (interval) {
84   - if (crtTimestamp > interval.startTime && crtTimestamp < interval.stopTime && interval.params != "") {
85   - allParams.push(interval.params);
86   - }
87   - return;
88   -
89   - });
90   - return allParams;
91   - },
  54 + getIntervalsOverMouse: function (context, panel, crtTimestamp) {
  55 + var intervalsOver = {};
  56 + Ext.each(panel.parameters, function (parameter) {
  57 +
  58 + if (!parameter.ttorcat) {
  59 + return;
  60 + }
  61 +
  62 + if (!parameter.ttorcat.intervals) {
  63 + return;
  64 + }
92 65  
93   - getIntervalLinks(allintervalParams) {
94   - var links = new Array();
95   - Ext.each(allintervalParams, function (allParams) {
  66 + var columnToShow = parameter.ttorcat.hasOwnProperty('columnToShow') ? parameter.ttorcat.columnToShow : '';
  67 + var columnName = "";
96 68  
97   - var params = allParams.split('|');
  69 + if ((columnToShow != '') && parameter.ttorcat.columns) {
  70 + Ext.Object.each(parameter.ttorcat.columns, function (column_id, column_value) {
  71 + if (column_id == columnToShow) {
  72 + columnName = column_value.name;
  73 + }
  74 + });
  75 + }
98 76  
99   - Ext.each(params, function (param) {
100   - if (param.toLowerCase().startsWith("http://") || param.toLowerCase().startsWith("https://")) {
101   - links.push(param);
102   - }
103   - return;
104   - });
105   - return;
106   - });
107   - return links;
108   - },
  77 + Ext.Object.each(parameter.ttorcat.intervals, function (id, interval) {
  78 + if (crtTimestamp > interval.start && crtTimestamp < interval.stop) {
  79 + if (!intervalsOver.hasOwnProperty(parameter.ttorcat.name)) {
  80 + intervalsOver[parameter.ttorcat.name] = [];
  81 + }
  82 + var intToPush = {
  83 + 'id': id,
  84 + 'start': interval.start,
  85 + 'stop': interval.stop
  86 + };
  87 + if ((columnToShow != '') && (columnName != '') && interval.hasOwnProperty('params')) {
  88 + Ext.Object.each(interval.params, function (param_id, param_value) {
  89 + if (param_id == columnToShow) {
  90 + intToPush['info'] = columnName + ': ' + param_value;
  91 + return;
  92 + }
  93 + });
  94 + }
109 95  
110   - setIntervalsRef(links, menu) {
111   - var realLinks = new Array();
112   - for (i = 0; i < links.length; i++) {
113   - var isAlreadyHere = false
114   - for (j = 0; j < i; j++) {
115   - if (links[i] == links[j]) {
116   - isAlreadyHere = true;
117   - continue;
118   - }
119   - }
120   - if (isAlreadyHere == false) {
121   - realLinks.push(links[i]);
122   - }
123   - }
  96 + intervalsOver[parameter.ttorcat.name].push(intToPush);
124 97  
125   - Ext.each(realLinks, function (realLink) {
126   - menu.add({
127   - text: realLink,
128   - handler: function () {
129   - window.open(realLink, "_blank");
130   - }
131   - });
  98 + }
  99 + });
132 100 });
133   - return realLinks;
134   - },
135 101  
136   - isInterval: function (context, panel, crtTimestamp) {
137   - isInterval = false;
138   - Ext.each(panel.intervals, function (interval) {
139   - if (crtTimestamp > interval.startTime && crtTimestamp < interval.stopTime) {
140   - isInterval = true;
141   - }
142   - return;
143   - });
144   - return isInterval;
  102 + return intervalsOver;
145 103 },
146 104  
147 105 getInstantTimePrev :function(context)
... ... @@ -201,4 +159,4 @@ Ext.define(&#39;amdaPlotComp.PlotContextManager&#39;, {
201 159  
202 160 return axisContext.min + (pixelValue - pixelMin)/(pixelMax - pixelMin)*(axisContext.max-axisContext.min);
203 161 }
204   -});
205 162 \ No newline at end of file
  163 +});
... ...
js/app/views/PlotComponents/PlotIntervalsForm.js
... ... @@ -10,20 +10,56 @@
10 10  
11 11 Ext.define('amdaPlotComp.PlotIntervalsForm', {
12 12 extend: 'amdaPlotComp.PlotStandardForm',
  13 +
  14 + catalogsColumns: {},
  15 +
  16 + paramId: '',
13 17  
14 18 setObject : function(object) {
15 19 this.object = object.get('param-drawing-object');
16   - this.loadRecord(this.object);
  20 + paramId = object.get('paramid');
  21 + this.loadRecord(this.object);
  22 + this.updateColumnInfoCombo();
17 23 },
18   -
  24 +
  25 + updateColumnInfoCombo: function(){
  26 + var me = this;
  27 + if ((paramId.substring(0, 3) != 'cat') && (paramId.substring(0, 13) != 'sharedcatalog')) {
  28 + // Not available for TT
  29 + this.getForm().findField('intervals-column-show').setDisabled(true);
  30 + return;
  31 + }
  32 +
  33 + this.getForm().findField('intervals-column-show').setDisabled(false);
  34 + if (this.catalogsColumns.hasOwnProperty(paramId)) {
  35 + var combobox = this.getForm().findField('intervals-param-show');
  36 + combobox.store.loadData(this.catalogsColumns[paramId]);
  37 + combobox.setValue(this.object.get('intervals-param-show'));
  38 + }
  39 + else {
  40 + AmdaAction.getAllColumnNames(paramId, function(result){
  41 + if (result && result['success']) {
  42 + this.catalogsColumns[paramId] = result['result'];
  43 + me.updateColumnInfoCombo();
  44 + }
  45 + }, this);
  46 + }
  47 + },
  48 +
19 49 getFormItems: function() {
  50 + var me = this;
20 51 var legendItems = [
21 52 this.addStandardText('legend-text-value', 'Text'),
22 53 this.addStandardCombo('legend-text-position', 'Position', amdaDefaultConfigs.availableLegendTextPositions),
23 54 this.addStandardFont('legend-text-font')]
24   -
  55 +
25 56 return [
26 57 this.addColorsPicker('intervals-color', 'Color', amdaDefaultConfigs.availableColorsNew, 'none'),
  58 + this.addStandardFieldSet('Show column info','intervals-column-show', [
  59 + this.addStandardCombo('intervals-param-show', 'Parameter to show'),
  60 + ], function(name, value, oldValue) {
  61 + me.updateColumnInfoCombo();
  62 + }),
27 63 this.addStandardFieldSet('Legend', 'legend-text-activated', legendItems)
28 64 ];
29 65 }
... ...
js/app/views/PlotComponents/PlotResultImage.js
... ... @@ -30,6 +30,8 @@ Ext.define(&#39;amdaPlotComp.PlotResultImage&#39;, {
30 30  
31 31 showVerticalCursor : true,
32 32 showHorizontalCursor : true,
  33 +
  34 + tooltip: true,
33 35  
34 36 constructor: function(config) {
35 37 this.init(config);
... ... @@ -210,6 +212,7 @@ Ext.define(&#39;amdaPlotComp.PlotResultImage&#39;, {
210 212 height : config.height,
211 213 onMouseMove : config.onMouseMove,
212 214 onContextMenu : config.onContextMenu,
  215 + tooltip : null,
213 216 listeners : {
214 217 render : function(img, eOpts){
215 218 me.refreshMe();
... ... @@ -246,7 +249,18 @@ Ext.define(&#39;amdaPlotComp.PlotResultImage&#39;, {
246 249 me.onContextMenu(event.getX(), event.getY(), event.getX()-me.getPosition()[0], event.getY()-me.getPosition()[1]);
247 250 return false;
248 251 }
249   - }
  252 + },
  253 + afterrender: function(c) {
  254 + me.tooltip = Ext.create('Ext.tip.ToolTip', {
  255 + target: c.getEl(),
  256 + trackMouse: true,
  257 + dismissDelay: 0,
  258 + showDelay: 0,
  259 + hideDelay: 0,
  260 + autoHide: true,
  261 + disabled: true
  262 + });
  263 + }
250 264 }
251 265 };
252 266  
... ...
js/app/views/PlotComponents/intervalSelection/ZoomIntervalSelection.js
... ... @@ -30,13 +30,17 @@ Ext.define(&#39;amdaPlotComp.intervalSelection.ZoomIntervalSelection&#39;, {
30 30 if (this._notValidValues()) {
31 31 myDesktopApp.warningMsg('The Input Values are not defined');
32 32 } else {
  33 +
  34 + var minVal = Ext.Date.format(this.getField1Value(), 'Y-m-d\\TH:i:s.u');
  35 + var maxVal = Ext.Date.format(this.getField2Value(), 'Y-m-d\\TH:i:s.u');
  36 +
33 37 this.hostCmp.callInteractivePlot({
34 38 'action': 'zoom',
35 39 'interactiveId': this.interactiveId,
36 40 'panelId': this.panelId,
37 41 'axeId': this.type,
38   - 'min': this.getField1Value(),
39   - 'max': this.getField2Value()
  42 + 'min': minVal,
  43 + 'max': maxVal
40 44 });
41 45  
42 46 this._resetHostCmpSelection();
... ...
js/app/views/PlotTabResultUI.js
... ... @@ -326,8 +326,13 @@ Ext.define(&#39;amdaUI.PlotTabResultUI&#39;, {
326 326 var text = '';
327 327 if (me.panelImage) {
328 328 if (!panel) {
329   - me.panelImage.resetCursor();
330 329 text += 'No panel';
  330 + me.panelImage.resetCursor();
  331 + if (me.panelImage.tooltip.isVisible()) {
  332 + me.panelImage.tooltip.update('');
  333 + me.panelImage.tooltip.setDisabled(true);
  334 + me.panelImage.tooltip.hide();
  335 + }
331 336 }
332 337 else {
333 338 text += 'Panel Id : ';
... ... @@ -350,14 +355,14 @@ Ext.define(&#39;amdaUI.PlotTabResultUI&#39;, {
350 355 var yLeftText = '';
351 356 var colorText = '';
352 357 var yRightText = '';
353   - var intervalText = '';
  358 + var intervals = [];
354 359 var image=this;
355 360 Ext.each(panel.plotArea.axes, function (axis) {
356 361 switch (axis.id) {
357 362 case 'timeAxis':
358 363 var crtTimestamp = amdaPlotComp.PlotContextManager.toAxisValue(axis, panel.plotArea.x, panel.plotArea.x + panel.plotArea.width, sourceXPos);
359 364 var crtTime = new Date(crtTimestamp * 1000);
360   - intervalText = amdaPlotComp.PlotContextManager.getIntervalCoordInfo(me.crtContext, panel, crtTimestamp);
  365 + intervals = amdaPlotComp.PlotContextManager.getIntervalsOverMouse(me.crtContext, panel, crtTimestamp);
361 366 xText = crtTime.toJSON();
362 367 break;
363 368 case 'y-left':
... ... @@ -385,13 +390,34 @@ Ext.define(&#39;amdaUI.PlotTabResultUI&#39;, {
385 390 text += (', Y Left : ' + yLeftText);
386 391 if (yRightText != '')
387 392 text += (', Y Right : ' + yRightText);
388   - if (intervalText != '')
389   - text += (', ' + intervalText);
390 393 if (colorText != '')
391 394 text += (', Z : '+ colorText);
  395 +
  396 + // Update tooltip
  397 + if (Object.keys(intervals).length > 0) {
  398 + var tooltipText = me.getIntervalsTooltipText(intervals);
  399 + me.panelImage.tooltip.update(tooltipText);
  400 + me.panelImage.tooltip.setDisabled(false);
  401 + if (!me.panelImage.tooltip.isVisible()) {
  402 + me.panelImage.tooltip.show();
  403 + me.panelImage.tooltip.setDisabled(false);
  404 + }
  405 + }
  406 + else if (me.panelImage.tooltip.isVisible()) {
  407 + me.panelImage.tooltip.update('');
  408 + me.panelImage.tooltip.setDisabled(true);
  409 + me.panelImage.tooltip.hide();
  410 +
  411 + }
392 412 }
393   - else
  413 + else {
394 414 me.panelImage.resetCursor();
  415 + if (me.panelImage.tooltip.isVisible()) {
  416 + me.panelImage.tooltip.update('');
  417 + me.panelImage.tooltip.setDisabled(true);
  418 + me.panelImage.tooltip.hide();
  419 + }
  420 + }
395 421 }
396 422 }
397 423 me.coordinatesField.setText(text);
... ... @@ -474,18 +500,37 @@ Ext.define(&#39;amdaUI.PlotTabResultUI&#39;, {
474 500 }
475 501 ]);
476 502  
477   - if (timeAxisContext && amdaPlotComp.PlotContextManager.isInterval(me.crtContext, panel, crtTimestamp)) {
478   - var allintervalParams = amdaPlotComp.PlotContextManager.getAllIntervalParams(me.crtContext, panel, crtTimestamp);
479   - if (allintervalParams.length > 0) {
480   -
481   - var links = amdaPlotComp.PlotContextManager.getIntervalLinks(allintervalParams);
482   - if (links.length > 0) {
  503 + if (timeAxisContext) {
  504 + var intervals = amdaPlotComp.PlotContextManager.getIntervalsOverMouse(me.crtContext, panel, crtTimestamp);
  505 + if (Object.keys(intervals).length > 0) {
  506 + var links = [];
  507 + Ext.Object.each(intervals, function (ttorcatname, intervals) {
  508 + Ext.each(intervals, function (interval) {
  509 + if (interval.params) {
  510 + Ext.Object.each(interval.params, function (paramKey, paramValue) {
  511 + if (paramValue.toLowerCase().startsWith("http://") || paramValue.toLowerCase().startsWith("https://")) {
  512 + if (links.indexOf(paramValue) < 0) {
  513 + links.push(paramValue);
  514 + }
  515 + }
  516 + });
  517 + }
  518 + });
  519 + });
  520 + if (links.length > 0) {
483 521 var menu = Ext.create('Ext.menu.Menu', { plain: true });
484   - var realLinks = amdaPlotComp.PlotContextManager.setIntervalsRef(links, menu);
  522 + Ext.each(links, function (link) {
  523 + menu.add({
  524 + text: link,
  525 + handler: function () {
  526 + window.open(link, "_blank");
  527 + }
  528 + });
  529 + });
485 530 me.contextualMenu.add('-');
486 531 me.contextualMenu.add([
487 532 {
488   - text: 'Open references (' + realLinks.length + ')',
  533 + text: 'Open references (' + links.length + ')',
489 534 menu: menu,
490 535 scope: me
491 536 }]);
... ... @@ -524,6 +569,23 @@ Ext.define(&#39;amdaUI.PlotTabResultUI&#39;, {
524 569 this.panelImage.refreshMe();
525 570 },
526 571  
  572 + getIntervalsTooltipText: function(intervals) {
  573 + var intervalText = '';
  574 + Ext.Object.each(intervals, function (ttorcatname, intervals) {
  575 + intervalText += '<b>' + ttorcatname + ' :</b><br>';
  576 + Ext.each(intervals, function (interval) {
  577 + intervalText += " &bull; #" + interval.id + ': ' + new Date(parseFloat(interval.start)*1000).toISOString() + ' - ' + new Date(parseFloat(interval.stop)*1000).toISOString();
  578 + if (interval.info && interval.info != '') {
  579 + intervalText += ", " + interval.info;
  580 + }
  581 + intervalText += "<br>"
  582 + });
  583 + intervalText += '<br>';
  584 + });
  585 +
  586 + return intervalText;
  587 + },
  588 +
527 589 updateTimeTableInfo: function () {
528 590 if (!this.navToolBar)
529 591 return;
... ...
js/resources/css/amda.css
... ... @@ -638,4 +638,9 @@ p + p {
638 638 .cm-s-default .cm-amda {
639 639 color: rgb(9, 134, 218);
640 640 font-weight: bold;
  641 +}
  642 +
  643 +.amda-astro-tree-icon-leaf {
  644 + background-image: url(images/tree/leaf.gif);
  645 + background-size: contain;
641 646 }
642 647 \ No newline at end of file
... ...
php/classes/AmdaAction.php
... ... @@ -810,6 +810,18 @@ class AmdaAction
810 810 return $objectMgr->getObject($id, $nodeType);
811 811 }
812 812  
  813 + public function getAllColumnNames($id){
  814 + $objectMgr = new CatalogMgr();
  815 + $type = (strpos($id, 'sharedcatalog') === 0) ? 'sharedcatalog' : 'catalog';
  816 + $columnInfos = $objectMgr->getCatalogParamDescription(array('id' => $id, 'type' => $type));
  817 + if (!$columnInfos['success'])
  818 + return $columnInfos;
  819 + $columnNames = array();
  820 + foreach ($columnInfos['parameters'] as $columnInfo){
  821 + $columnNames[] = array("key" => $columnInfo['id'], "value" => $columnInfo['name']);
  822 + }
  823 + return array('success' => true ,"result" => $columnNames);
  824 + }
813 825 /*
814 826 * $obj = { id: node.id, leaf: node.leaf, nodeType: node.nodeType }
815 827 */
... ... @@ -1064,6 +1076,8 @@ class AmdaAction
1064 1076 // just convert TT / Catalog
1065 1077 if ($obj->nodeType == "download" && $obj->downloadSrc == "1")
1066 1078 return $this->executeRequest($obj, FunctionTypeEnumClass::TTCONVERT);
  1079 + else if ($obj->nodeType == "download" && $obj->downloadSrc == "2")
  1080 + return $this->executeRequest($obj, FunctionTypeEnumClass::DLOBJECT);
1067 1081 else if (isset($obj->action))
1068 1082 return $this->executeRequest($obj, FunctionTypeEnumClass::ACTION);
1069 1083 else
... ...
php/config.php
... ... @@ -218,6 +218,8 @@ $API = array(
218 218 'getParametersList' => array('len' => 0),
219 219 // Reset user password
220 220 'resetPwd' => array('len' => 1),
  221 + // Get column names for a cat
  222 + 'getAllColumnNames' => array('len' => 1),
221 223  
222 224 )
223 225 )
... ...