Blame view

js/app/views/VisuUI.js 13.7 KB
5cfea1f2   elena   vizu draft
1
2
3
4
5
6
/**
 * Project       AMDA-NG
 * Name          VisuUI.js
 * @class 	   amdaUI.visuUI
 * @extends      Ext.container.Container
 * @brief	   Visualization Module UI definition (View)
9d412dda   elena   catalog tmp and r...
7
 * @author 	  elena
5cfea1f2   elena   vizu draft
8
9
10
11
 */

Ext.define('amdaUI.VisuUI', {
	extend: 'Ext.container.Container',
9d412dda   elena   catalog tmp and r...
12
13
	alias: 'widget.panelVisu', 
	
5cfea1f2   elena   vizu draft
14
15
16
	constructor: function(config) 
	{
		this.init(config);
9d412dda   elena   catalog tmp and r...
17
18
		this.callParent(arguments);	
		if (this.object) this.reformObject();
5cfea1f2   elena   vizu draft
19
20
	},
	
9d412dda   elena   catalog tmp and r...
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
	setObject : function (obj) {
		
		this.object = obj;
		this.reformObject();
	},
	
	updateObject : function () {
		
		 return true;
	},
	
	reformObject : function () 
	{	     	    		
		this.fromPlugin = this.object.get('fromPlugin');	
		
		if (this.fromPlugin) {
			this.object.set('id',this.object.get('folderId'));	
			this.object.set('objName',this.object.get('objName'));
		}
		else {
			this.object.set('id',this.object.get('id'));
			this.object.set('name',this.object.get('name'));
		}
5cfea1f2   elena   vizu draft
44
		// load object into view
f8448f55   elena   tooltip
45
46
		if (this.object.get('id') != '')						
				this.loadObject();
5cfea1f2   elena   vizu draft
47
	},
9d412dda   elena   catalog tmp and r...
48
		 	
fded4fcb   elena   reload corrected
49
	reset : function() {
ccb80610   elena   added options
50
51
52
53
54
55
56
57
58

		//reset all fieldsets except the first one (name, intervals)
		var form = this.items.items[0].items.items[0];
		for (var i = 1;  i < 4; i++) {
			var fieldset = form.items.items[i];
			Ext.each(fieldset.query('field'), function(field) {
				field.reset();
			});
		}
fded4fcb   elena   reload corrected
59
60
61
		this.resetChart();
                     
	},
5cfea1f2   elena   vizu draft
62
63
64
65
66
	/**
	 * load object catalog into this view
	 */
	loadObject : function()
	{ 	  
9d412dda   elena   catalog tmp and r...
67
		    
5cfea1f2   elena   vizu draft
68
69
70
71
72
73
74
75
76
77
78
79
80
		var me = this;
		
		var onAfterInit = function(result, e) 
		{		
			if (!result || !result.success)
			{
				if (result.message)
					myDesktopApp.errorMsg(result.message);
				else
					myDesktopApp.errorMsg('Unknown error during catalog cache initialisation');
				return;
			}

9d412dda   elena   catalog tmp and r...
81
82
			me.object.set('name', result.name);
			me.object.set('nbIntervals', result.totalCount);						 			 
5cfea1f2   elena   vizu draft
83
84
			 
			var fields = [], i = 0, index;
9d412dda   elena   catalog tmp and r...
85
			 
5cfea1f2   elena   vizu draft
86
87
			Ext.Array.each(result.parameters, function(obj) 
			{
95dbfcfd   elena   save chart
88
				
86263051   elena   visu second draft
89
				index = 'param'+i.toString();			
5cfea1f2   elena   vizu draft
90
91
92
93
94
95
96
97
98
				fields[i] = Ext.create('Ext.data.Field', { name : index, id: index, text : obj.name,
					convert: function(value, record) {						
						return parseFloat(value);
					}
				}
				);
								
				i++;
			});
fded4fcb   elena   reload corrected
99
100
101
102
103
104

			if (me.chartStore) {				 
				me.parList.removeAll();
				me.reset();
				me.chartStore = null;
			}
5cfea1f2   elena   vizu draft
105
			
fded4fcb   elena   reload corrected
106
	              me.parList.add(fields);
5cfea1f2   elena   vizu draft
107
108
			
			me.chartStore = Ext.create('Ext.data.Store', {
fded4fcb   elena   reload corrected
109
110
				fields : fields,				
		//		autoDestroy: false,
5cfea1f2   elena   vizu draft
111
112
113
114
115
116
117
118
119
		//				pageSize : 200,
		//				buffered : true, 
		//				purgePageCount: 0,
		//				remoteSort: true,
				autoload: false,
				proxy: {
					type: 'direct',
					api :
					{
86263051   elena   visu second draft
120
						read   :  AmdaAction.readIntervalsForChart
5cfea1f2   elena   vizu draft
121
122
					},
					// remplir automatiquement tt, sharedtt , catalog, shared catalog
9d412dda   elena   catalog tmp and r...
123
124
					extraParams : {'typeTT' : 'catalog', 'id' : me.object.get('id'), 
						         'name' : me.object.get('objName'), 'fromPlugin' : me.fromPlugin},
5cfea1f2   elena   vizu draft
125
126
127
128
129
130
131
132
133
134
135
					reader:
					{
						type: 'json',
						root: 'intervals',
						totalProperty : 'totalCount'
					}
				},
				listeners: {
					scope : me,
					load: function(store,records) {        
						//TODO enable plot button
9d412dda   elena   catalog tmp and r...
136
137
						// me.object.set('nbIntervals',me.chartStore.getTotalCount());

fded4fcb   elena   reload corrected
138
139
140
						// load object into form
						var formPanel =  me.items.items[0].items.items[0];
						formPanel.getForm().loadRecord(me.object);
5cfea1f2   elena   vizu draft
141
142
143
					}
				}
			});
56ad05d0   elena   lightware chart
144
145
			
			me.chartStore.load();			 
5cfea1f2   elena   vizu draft
146
		}
56ad05d0   elena   lightware chart
147
				 
9d412dda   elena   catalog tmp and r...
148
		AmdaAction.initForChart(this.object.get('id'), this.object.get('objName'), this.fromPlugin, 'catalog', onAfterInit);  
f8448f55   elena   tooltip
149
		 	  		
5cfea1f2   elena   vizu draft
150
151
	},
	
5cfea1f2   elena   vizu draft
152
153
154
155
156
157
158
159
160
	
	/**
	 * Check if changes were made before closing window 
	 * @return true if changes
	 */	
	fclose : function() 
	{
		  
	return false;
fded4fcb   elena   reload corrected
161
162
163
164
	},

	resetChart : function () {
		
ccb80610   elena   added options
165
166
167
168
169
170
171
172
173
174
175
176
177
178
		var emptyAxesConfig =   [{
			type: 'Numeric',
			position: 'bottom',
			fields: [],
			title: 'x axe',
			grid : true
			}, {
			type: 'Numeric',
			position: 'left',
			fields: [],
			title: 'y axe',
			grid: true
		}];
		
fded4fcb   elena   reload corrected
179
180
		this.chartConfig.series[0].xField = '';
		this.chartConfig.series[0].yField = '';
fded4fcb   elena   reload corrected
181
		
ccb80610   elena   added options
182
183
184
185
		this.chartConfig.theme = 'Blue';
		
		this.chartConfig.axes = emptyAxesConfig; 
		 
fded4fcb   elena   reload corrected
186
187
188
189
		var chart =  Ext.create('Ext.chart.Chart', this.chartConfig);		
		this.replaceChart(chart);
										 
	},
5cfea1f2   elena   vizu draft
190
191
192
	
	plotChart : function () {
		
ccb80610   elena   added options
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
		this.chartConfig.store = this.chartStore;	
		
		var xTitle = this.items.items[0].items.items[0].items.items[1].items.items[2].getValue(); 
		var yTitle = this.items.items[0].items.items[0].items.items[2].items.items[2].getValue(); 
		
		if (xTitle) this.chartConfig.axes[0].title = xTitle;
		if (xTitle) this.chartConfig.axes[1].title = yTitle;
	    
		// axis modifs
		if (this.comboXrange.getValue() == 'manual') {
			var minX = this.comboXrange.next().next().getValue();			
			var maxX = this.comboXrange.next().next().next().next().getValue();
			this.chartConfig.axes[0].minimum = minX;
			this.chartConfig.axes[0].maximum = maxX ;
		} else {
			// unset min/max in config
			delete this.chartConfig.axes[0].minimum;
			delete this.chartConfig.axes[0].maximum;
		}
		if (this.comboYrange.getValue() == 'manual') {
			var minX = this.comboYrange.next().next().getValue();
			var maxX = this.comboYrange.next().next().next().next().getValue();
		//	if (minX && maxX) {
			this.chartConfig.axes[1].minimum = minX;
			this.chartConfig.axes[1].maximum = maxX;
		//	}						
		} else {
			// unset min/max in config
			delete this.chartConfig.axes[1].minimum;
			delete this.chartConfig.axes[1].maximum;
		}
		
		var chart =  Ext.create('Ext.chart.Chart', this.chartConfig);	
					 
fded4fcb   elena   reload corrected
227
228
229
230
		this.replaceChart(chart);
										 
	},
	
ccb80610   elena   added options
231
	     
fded4fcb   elena   reload corrected
232
	replaceChart: function(chart) {
5cfea1f2   elena   vizu draft
233
		
5cfea1f2   elena   vizu draft
234
235
236
237
		var chartPanel =  this.items.items[0].items.items[1];
		var oldChart = chartPanel.down('chart');
		oldIndex = chartPanel.items.indexOf(oldChart);
		chartPanel.remove(oldChart);
fded4fcb   elena   reload corrected
238
		chartPanel.insert(oldIndex, chart);	
5cfea1f2   elena   vizu draft
239
240
241
242
243
244
245
246
247
	},
	
	init : function (config) 
	{	 
		var store = Ext.create('Ext.data.Store', {
			fields      :  [],			
			autoload    : false
		});
		
ccb80610   elena   added options
248
249
250
251
252
253
		var rangeStore = Ext.create('Ext.data.Store', {
			fields      :  [],			
			autoload    : false
		});
		
		
5cfea1f2   elena   vizu draft
254
255
256
		this.chartConfig = {			
			width: 500,
			height: 500,
56ad05d0   elena   lightware chart
257
258
259
			animate: false,
			mask: false,
			shadow: false,
ccb80610   elena   added options
260
			theme:'Blue',
790fbd62   Elena.Budnik   local drawEngineI...
261
			background: { fill : "#fff" },
5cfea1f2   elena   vizu draft
262
			store: store,
ccb80610   elena   added options
263
			axes:   [{
5cfea1f2   elena   vizu draft
264
265
266
267
268
269
270
271
272
273
274
275
276
277
				type: 'Numeric',
				position: 'bottom',
				fields: [],
				title: 'x axe',
				grid : true
				}, {
				type: 'Numeric',
				position: 'left',
				fields: [],
				title: 'y axe',
				grid: true
			}],
			series: [{
				type: 'scatter',
ccb80610   elena   added options
278
279
				showMarkers: true,
				highlight: true,
56ad05d0   elena   lightware chart
280
// 		 		markerConfig: {
f8448f55   elena   tooltip
281
 //		 			radius: 5,
56ad05d0   elena   lightware chart
282
283
// 		 			size: 5
// 				},
5cfea1f2   elena   vizu draft
284
285
286
		// 		//      axes: ['left', 'bottom'],
				xField: '',
				yField: '',
ccb80610   elena   added options
287
288
289
290
291
292
// 				label: {
// //   					display: 'under',
// //   					renderer: function(value, label, storeItem, item, i, display, animate, index) {
// //   						return storeItem.param3;
// //   					}
// 				},
f8448f55   elena   tooltip
293
294
295
296
297
				tips: {					
//					trackMouse: true,
					width: 10,
					height: 20,
					hideDelay: 100, //200 ms
ccb80610   elena   added options
298
					mouseOffset: [0,0],   //[15,18]
f8448f55   elena   tooltip
299
					renderer: function(storeItem, item) {						
ccb80610   elena   added options
300
						this.setTitle(storeItem.index + 1);
f8448f55   elena   tooltip
301
302
303
					}
				}	
			}				 
ccb80610   elena   added options
304
			]
5cfea1f2   elena   vizu draft
305
		}
f965628c   elena   plottype
306
		
fded4fcb   elena   reload corrected
307
308
309
310
		this.parList  = Ext.create('Ext.data.Store', {
				fields : [ 'text', 'id']	
			});
		
5cfea1f2   elena   vizu draft
311
312
313
314
315
		var chart = Ext.create('Ext.chart.Chart', this.chartConfig);				
 
		this.parCombo = Ext.create('Ext.form.ComboBox', {
			emptyText: 'select parameter',
			editable: false,
fded4fcb   elena   reload corrected
316
			store: this.parList,
5cfea1f2   elena   vizu draft
317
318
			queryMode: 'local',
			displayField: 'text',
95dbfcfd   elena   save chart
319
320
321
322
			valueField: 'id',
			listeners : {
				scope : this,
				change : function(combo, newValue, oldValue) {
fded4fcb   elena   reload corrected
323
324
325
326
327
328
329
					if (newValue) {
						this.chartConfig.axes[0].fields = [newValue];
						var rec = combo.findRecordByValue(newValue);
						
						this.chartConfig.axes[0].title = rec.get('text'); 
						this.chartConfig.series[0].xField = newValue;
					}
95dbfcfd   elena   save chart
330
331
				}
			}
5cfea1f2   elena   vizu draft
332
		});
f965628c   elena   plottype
333
                   
5cfea1f2   elena   vizu draft
334
335
336
		this.parCombo1 = Ext.create('Ext.form.ComboBox', {
			emptyText: 'select parameter',
			editable: false,
fded4fcb   elena   reload corrected
337
			store: this.parList,
5cfea1f2   elena   vizu draft
338
339
			queryMode: 'local',
			displayField: 'text',
95dbfcfd   elena   save chart
340
341
342
343
			valueField: 'id',
			listeners : {
				scope : this,
				change : function(combo, newValue, oldValue) {
ccb80610   elena   added options
344
					if (newValue) {						
fded4fcb   elena   reload corrected
345
346
347
348
349
						this.chartConfig.axes[1].fields = [newValue];
						var rec = combo.findRecordByValue(newValue);
						this.chartConfig.axes[1].title = rec.get('text'); 
						this.chartConfig.series[0].yField = newValue;
					}
95dbfcfd   elena   save chart
350
351
				}
			}
f965628c   elena   plottype
352
353
354
355
356
		}); 
		
		var plotTypeCombo = Ext.create('Ext.form.ComboBox', {
			emptyText: 'select plot type',
			editable: false,
ccb80610   elena   added options
357
			store: ['scatter', 'line'],
f965628c   elena   plottype
358
			queryMode: 'local',
f965628c   elena   plottype
359
			valueField: 'type',
ccb80610   elena   added options
360
			value: 'scatter',
f965628c   elena   plottype
361
362
363
364
365
366
			listeners : {
				scope : this,
				change : function(combo, newValue, oldValue) {						 
					this.chartConfig.series[0].type = newValue;
				}
			}
ccb80610   elena   added options
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
		}); 
		
		var plotThemeCombo = Ext.create('Ext.form.ComboBox', {
			emptyText: 'select theme',
			editable: false,
			store: ['Base','Green','Sky','Red','Purple','Blue','Yellow'],
			//'Category1','Category2','Category3','Category4','Category5','Category6'],
			queryMode: 'local',
			valueField: 'type',
			value: 'Blue',
			listeners : {
				scope : this,
				change : function(combo, newValue, oldValue) {						 
					this.chartConfig.theme = newValue;
				}
			}
		});
		
		var comboRangeConfig = {
		//	fieldLabel:'X Range',
			name:'scaling',
			valueField: 'scaling',
			queryMode:'local',
			store:['auto','manual'],
			forceSelection:true,
			value: 'auto',
			width: 80,
			listeners : {
				scope : this,
				change : function(combo, newValue, oldValue) {					
					var minValue = combo.next().next();
					var maxValue  = minValue.next().next();
					var disabled = newValue == "auto";
					minValue.reset();
					maxValue.reset();
					minValue.setDisabled(disabled);										  
					maxValue.setDisabled(disabled);	  										  
				}
			}
		};
		
		this.comboXrange = Ext.create('Ext.form.ComboBox', comboRangeConfig);
		this.comboYrange = Ext.create('Ext.form.ComboBox', comboRangeConfig);
		
5cfea1f2   elena   vizu draft
411
412
413
414
415
416
417
418
419
420
421
422
		var formPanel =  Ext.create('Ext.form.Panel', { 
			region : 'center',
			layout:  'hbox', 
			bodyStyle: {background : '#dfe8f6'},
			defaults: { border : false, align: 'stretch',  padding: '3'},
			fieldDefaults: { labelWidth: 80, labelAlign : 'top' },
			items: [ 
				{            
				xtype: 'form',
				flex : 1,
				bodyStyle: {background : '#dfe8f6'}, 
				items: [
fded4fcb   elena   reload corrected
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
					{ 
						xtype : 'fieldset',				    
						items : [					 
						{
							xtype: 'fieldcontainer',
							layout: 'hbox',		      
							items: [
								{ xtype:'textfield', fieldLabel: 'Catalog Name', name: 'name', readOnly: true}, 		  
								{ xtype: 'splitter' },			 			 
								{ xtype:'textfield', fieldLabel: 'Intervals', name: 'nbIntervals', readOnly: true}
							]                                                                       
						}					
						]
					},
					{ 
						xtype : 'fieldset',
						title : 'X axis',
						items : [ 
								this.parCombo,          
								{ 
5cfea1f2   elena   vizu draft
443
444
445
								xtype : 'fieldcontainer',
								layout: 'hbox',
								items: [{
ccb80610   elena   added options
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
								xtype:'fieldset',
								title: 'X Range',
								border: false,
								layout: 'hbox',
								items: [ 
									this.comboXrange, 
									{
									xtype: 'splitter'
									}, {
									xtype: 'numberfield',
									hideTrigger: true,
									width: 50,
									disabled: true
									},{
									xtype: 'splitter'
									},{
									xtype: 'numberfield',
									hideTrigger: true,
									width: 50,
									disabled: true
									}]
fded4fcb   elena   reload corrected
467
468
								}]
							},
ccb80610   elena   added options
469
470
// 							{ xtype : 'checkbox', boxLabel: 'Logarithmic'},
							{ xtype: 'textfield', fieldLabel: 'X title', name: 'xtitle'}
fded4fcb   elena   reload corrected
471
472
473
474
475
476
477
478
479
480
481
						]
					},
					{ 
					xtype : 'fieldset',
						title : 'Y axis',
						items : [
							this.parCombo1,                   
							{ 
							xtype : 'fieldcontainer',
							layout: 'hbox',
							items: [{
ccb80610   elena   added options
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
								xtype:'fieldset',
								title: 'Y Range',
								border: false,
								layout: 'hbox',
								items: [ 
									this.comboYrange, 
									{
									xtype: 'splitter'
									}, {
									xtype: 'numberfield',
									hideTrigger: true,
									width: 50,
									disabled: true
									},{
									xtype: 'splitter'
									},{
									xtype: 'numberfield',
									hideTrigger: true,
									width: 50,
									disabled: true
									}]
								}] 
5cfea1f2   elena   vizu draft
504
						},
ccb80610   elena   added options
505
506
507
508
509
510
511
512
513
514
// 						{ xtype : 'checkbox', boxLabel: 'Logarithmic',
// 						listeners: {
// 							scope: this,
// 							change : function( check, newValue, oldValue) {
// 								
// 							}
// 						}
// 						},
						{ xtype: 'textfield', fieldLabel: 'Y title', name: 'ytitle'}
						
5cfea1f2   elena   vizu draft
515
516
						]
					},
fded4fcb   elena   reload corrected
517
518
519
520
					{ 
						xtype : 'fieldset',
						title : 'Plotting Options',
						items : [
ccb80610   elena   added options
521
522
								plotTypeCombo,
								plotThemeCombo
fded4fcb   elena   reload corrected
523
524
525
526
							]
						}
					],
					fbar:[
5cfea1f2   elena   vizu draft
527
528
529
530
531
532
533
534
					{   
						type: 'button',
						text: 'Plot',
						scope : this,
						handler: this.plotChart
						
					},{   
						type: 'button',
6a6e721d   elena   reset
535
536
537
						text: 'Reset',
						scope : this,
						handler: this.reset
5cfea1f2   elena   vizu draft
538
539
					
					}
fded4fcb   elena   reload corrected
540
541
542
543
544
545
546
					]
					}, {
					xtype: 'form',		               
			//		    padding: '3',
					flex: 2,
					items : [
						chart
5cfea1f2   elena   vizu draft
547
					],
fded4fcb   elena   reload corrected
548
549
550
551
552
553
554
555
556
					fbar:[
						{   
						type: 'button',
						text: 'Save Chart',
						scope: this,
						handler: function() {
							var chartPanel =  this.items.items[0].items.items[1];
							var chart = chartPanel.down('chart');
							chart.save({
790fbd62   Elena.Budnik   local drawEngineI...
557
558
								type: 'image/png',
								defaultUrl : window.location //'http://apus.irap.omp.eu/NEWAMDA/'
fded4fcb   elena   reload corrected
559
560
561
562
563
564
565
							});
						}
						
					}
				]
				}    
			]  
5cfea1f2   elena   vizu draft
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
		}); 
		
	
		var myConf = {
			layout: 'border',
			items: [		   
				formPanel, 		     
				{
				xtype: 'panel', 
				region: 'south',
				title: 'Information',
				collapsible: true,
				height: 100,
				autoHide: false,
				bodyStyle: 'padding:5px',
				iconCls:  'icon-information',
				loader: {
					autoLoad: true,
					url: helpDir+'visuHOWTO'
				} 
				}
			] 
		};
	    
		Ext.apply (this, Ext.apply(arguments, myConf));	
    }
	 
});