Blame view

js/app/views/VisuUI.js 13.6 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',
5cfea1f2   elena   vizu draft
261
			store: store,
ccb80610   elena   added options
262
			axes:   [{
5cfea1f2   elena   vizu draft
263
264
265
266
267
268
269
270
271
272
273
274
275
276
				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
277
278
				showMarkers: true,
				highlight: true,
56ad05d0   elena   lightware chart
279
// 		 		markerConfig: {
f8448f55   elena   tooltip
280
 //		 			radius: 5,
56ad05d0   elena   lightware chart
281
282
// 		 			size: 5
// 				},
5cfea1f2   elena   vizu draft
283
284
285
		// 		//      axes: ['left', 'bottom'],
				xField: '',
				yField: '',
ccb80610   elena   added options
286
287
288
289
290
291
// 				label: {
// //   					display: 'under',
// //   					renderer: function(value, label, storeItem, item, i, display, animate, index) {
// //   						return storeItem.param3;
// //   					}
// 				},
f8448f55   elena   tooltip
292
293
294
295
296
				tips: {					
//					trackMouse: true,
					width: 10,
					height: 20,
					hideDelay: 100, //200 ms
ccb80610   elena   added options
297
					mouseOffset: [0,0],   //[15,18]
f8448f55   elena   tooltip
298
					renderer: function(storeItem, item) {						
ccb80610   elena   added options
299
						this.setTitle(storeItem.index + 1);
f8448f55   elena   tooltip
300
301
302
					}
				}	
			}				 
ccb80610   elena   added options
303
			]
5cfea1f2   elena   vizu draft
304
		}
f965628c   elena   plottype
305
		
fded4fcb   elena   reload corrected
306
307
308
309
		this.parList  = Ext.create('Ext.data.Store', {
				fields : [ 'text', 'id']	
			});
		
5cfea1f2   elena   vizu draft
310
311
312
313
314
		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
315
			store: this.parList,
5cfea1f2   elena   vizu draft
316
317
			queryMode: 'local',
			displayField: 'text',
95dbfcfd   elena   save chart
318
319
320
321
			valueField: 'id',
			listeners : {
				scope : this,
				change : function(combo, newValue, oldValue) {
fded4fcb   elena   reload corrected
322
323
324
325
326
327
328
					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
329
330
				}
			}
5cfea1f2   elena   vizu draft
331
		});
f965628c   elena   plottype
332
                   
5cfea1f2   elena   vizu draft
333
334
335
		this.parCombo1 = Ext.create('Ext.form.ComboBox', {
			emptyText: 'select parameter',
			editable: false,
fded4fcb   elena   reload corrected
336
			store: this.parList,
5cfea1f2   elena   vizu draft
337
338
			queryMode: 'local',
			displayField: 'text',
95dbfcfd   elena   save chart
339
340
341
342
			valueField: 'id',
			listeners : {
				scope : this,
				change : function(combo, newValue, oldValue) {
ccb80610   elena   added options
343
					if (newValue) {						
fded4fcb   elena   reload corrected
344
345
346
347
348
						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
349
350
				}
			}
f965628c   elena   plottype
351
352
353
354
355
		}); 
		
		var plotTypeCombo = Ext.create('Ext.form.ComboBox', {
			emptyText: 'select plot type',
			editable: false,
ccb80610   elena   added options
356
			store: ['scatter', 'line'],
f965628c   elena   plottype
357
			queryMode: 'local',
f965628c   elena   plottype
358
			valueField: 'type',
ccb80610   elena   added options
359
			value: 'scatter',
f965628c   elena   plottype
360
361
362
363
364
365
			listeners : {
				scope : this,
				change : function(combo, newValue, oldValue) {						 
					this.chartConfig.series[0].type = newValue;
				}
			}
ccb80610   elena   added options
366
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
		}); 
		
		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
410
411
412
413
414
415
416
417
418
419
420
421
		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
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
					{ 
						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
442
443
444
								xtype : 'fieldcontainer',
								layout: 'hbox',
								items: [{
ccb80610   elena   added options
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
								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
466
467
								}]
							},
ccb80610   elena   added options
468
469
// 							{ xtype : 'checkbox', boxLabel: 'Logarithmic'},
							{ xtype: 'textfield', fieldLabel: 'X title', name: 'xtitle'}
fded4fcb   elena   reload corrected
470
471
472
473
474
475
476
477
478
479
480
						]
					},
					{ 
					xtype : 'fieldset',
						title : 'Y axis',
						items : [
							this.parCombo1,                   
							{ 
							xtype : 'fieldcontainer',
							layout: 'hbox',
							items: [{
ccb80610   elena   added options
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
								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
503
						},
ccb80610   elena   added options
504
505
506
507
508
509
510
511
512
513
// 						{ xtype : 'checkbox', boxLabel: 'Logarithmic',
// 						listeners: {
// 							scope: this,
// 							change : function( check, newValue, oldValue) {
// 								
// 							}
// 						}
// 						},
						{ xtype: 'textfield', fieldLabel: 'Y title', name: 'ytitle'}
						
5cfea1f2   elena   vizu draft
514
515
						]
					},
fded4fcb   elena   reload corrected
516
517
518
519
					{ 
						xtype : 'fieldset',
						title : 'Plotting Options',
						items : [
ccb80610   elena   added options
520
521
								plotTypeCombo,
								plotThemeCombo
fded4fcb   elena   reload corrected
522
523
524
525
							]
						}
					],
					fbar:[
5cfea1f2   elena   vizu draft
526
527
528
529
530
531
532
533
					{   
						type: 'button',
						text: 'Plot',
						scope : this,
						handler: this.plotChart
						
					},{   
						type: 'button',
6a6e721d   elena   reset
534
535
536
						text: 'Reset',
						scope : this,
						handler: this.reset
5cfea1f2   elena   vizu draft
537
538
					
					}
fded4fcb   elena   reload corrected
539
540
541
542
543
544
545
					]
					}, {
					xtype: 'form',		               
			//		    padding: '3',
					flex: 2,
					items : [
						chart
5cfea1f2   elena   vizu draft
546
					],
fded4fcb   elena   reload corrected
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
					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({
								type: 'image/png'
							});
						}
						
					}
				]
				}    
			]  
5cfea1f2   elena   vizu draft
564
565
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
		}); 
		
	
		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));	
    }
	 
});