/** * Project AMDA-NG * Name StatisticsUI.js * @class amdaUI.statisticsUI * @extends Ext.container.Container * @brief Statistics Module UI definition (View) * @author elena */ Ext.define('amdaUI.StatisticsUI', { extend: 'Ext.container.Container', alias: 'widget.panelStatistics', requires : [ // 'amdaModel.Function' 'amdaUI.TimeSelectorUI' ], statics : { // functionStore : null }, constructor: function(config) { this.init(config); this.callParent(arguments); // if (this.object) this.loadObject(); }, addParam : function(ParamName,isLeaf) { var r = Ext.create('amdaModel.AmdaObject', { name: ParamName }); this.paramGrid.getStore().add(r); this.paramGrid.getSelectionModel().select(this.paramGrid.getStore().getCount()-1); }, addTT : function(TTname,TTid) { this.timeSelector.addTT(TTname, TTid); ; }, generateCatalog : function(){ var module = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.statistics.id); if (module) module.linkedNode.execute(); }, /** * update this.object from form */ updateObject : function(){ // get the basic form of the left var basicForm = this.formPanel.items.items[0].getForm(); var updateStatus = true; var formValues = basicForm.getValues(); // this.object.set('name',formValues.name); // this.object.set('description',formValues.description); var recs = this.paramGrid.getStore().getNewRecords(); var paramArr = new Array(); Ext.Array.each(recs, function(rec, index,allItems) { var obj = new Object(); obj.param = rec.get('name'); obj.function = rec.get('function'); if (obj.function == null) { myDesktopApp.warningMsg('Please select function : `click to select`'); updateStatus = false; return; } paramArr.push(obj); }); this.object.set('parameter', paramArr); var timeSource = this.timeSelector.getActiveTimeSource(); if (timeSource === amdaModel.AmdaTimeObject.inputTimeSrc[0] // timeSource 'TimeTable' && this.timeSelector.TTGrid.getStore().count() == 0) { myDesktopApp.warningMsg('You\'ve chosen Time Selection `by TimeTable` but no timeTable was added!' +'
You must add one or choose Time Selection `by Interval`'); return false; } basicForm.updateRecord(this.object); this.object.set('timesrc', timeSource); // set valid intervals into TimeTable object if (timeSource === amdaModel.AmdaTimeObject.inputTimeSrc[0]) this.object.set('timeTables',this.timeSelector.TTGrid.getStore().data.items); return updateStatus; }, /** * Check if changes were made before closing window * @return true if changes */ fclose : function() { if (this.status == null) return false; var isDirty = this.formPanel.getForm().isDirty() || (this.status.isModified) || (this.status.nbModified > 0) || (this.status.nbNew > 0); return isDirty; }, /** * View configuration */ init : function (config) { // var functions = Ext.create('Ext.data.Store', { // fields: ['id', 'name'], // data : [ // {"id":"min", "name":"MIN"}, // {"id":"max", "name":"MAX"}, // {"id":"mean","name":"MEAN"} // ] // }); this.fieldName = new Ext.form.field.Text({ fieldLabel: 'Catalog Name', allowBlank : false, stripCharsRe: /(^\s+|\s+$)/g, emptyText: 'Please no spaces!', name: 'name', // anchor: '100%', validateOnChange: false, validateOnBlur: false, validFlag: false, validator : function() { return this.validFlag; } }); var ttStore = Ext.create('Ext.data.Store', { fields: [ 'name', 'hidden_id'] }); this.timeSelector = new amdaUI.TimeSelectorUI({id: 'statisticsTimeSelector', height : 160}); var store = Ext.create('Ext.data.Store', { fields: ['name', 'function'] }); this.paramGrid = Ext.create('Ext.grid.Panel', { title: 'Select Parameter & Apply Function', selType : 'rowmodel', // flex: 2, height :250, store : store, columns: [ { xtype: 'rownumberer' }, { header: 'parameter', dataIndex: 'name', menuDisabled : true, sortable : false }, { header: 'function', dataIndex: 'function', menuDisabled : true, sortable : false, editor: { xtype: 'combo', queryMode : 'local', // emptyText : 'please click to select function', store: [ 'min', 'max', 'mean' ], triggerAction: 'all', // lazyInit: false, listeners: { focus: function(obj) { obj.expand(); } } }, renderer: function(v) { if(v != null && v.length > 0 ) return v; else return 'click to select'; } }, { menuDisabled : true, width: 30, renderer: function(){ return '
'; } } ], plugins: [ Ext.create('Ext.grid.plugin.CellEditing', { clicksToEdit: 1 }) ], listeners : { render : function(o,op) { var me = this; var el = me.body.dom; var dropTarget = Ext.create('Ext.dd.DropTarget', el, { ddGroup: 'explorerTree', notifyOver : function(ddSource, e, data) { if (data.records[0].data.nodeType == 'localParam' && data.records[0].get('notyet')) { this.valid = false; return this.dropNotAllowed; } if (((data.records[0].data.nodeType == 'localParam') || (data.records[0].data.nodeType == 'remoteParam') || (data.records[0].data.nodeType == 'remoteSimuParam') || (data.records[0].data.nodeType == 'derivedParam') || (data.records[0].data.nodeType == 'myDataParam') || (data.records[0].data.nodeType == 'alias'))&& (data.records[0].isLeaf() || data.records[0].data.isParameter) && !data.records[0].data.disable) { this.valid = true; return this.dropAllowed; } this.valid = false; return this.dropNotAllowed; }, notifyDrop : function(ddSource, e, data) { if (!this.valid) return false; var nameToSent; switch (data.records[0].data.nodeType) { case 'localParam' : case 'remoteParam': case 'remoteSimuParam': nameToSent = data.records[0].get('id'); if (data.records[0].get('alias')!= "" ) var nameToSent = "#"+data.records[0].get('alias'); break; case 'alias' : nameToSent = "#"+data.records[0].get('text'); break; case 'derivedParam' : nameToSent = "ws_"+data.records[0].get('text'); break; case 'myDataParam' : nameToSent = "wsd_"+data.records[0].get('text'); break; default : return false; } var module = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.statistics.id); if (module) { if (data.records[0].get('needsArgs') && !data.records[0].get('isSpectra')) { module.getUiContent().fireEvent('openParamEditor',nameToSent); } else { module.addParam(nameToSent,true); } } return true; } }); }, cellclick : function(grid, cell, cellIndex, record){ if (cellIndex == 3) grid.getStore().remove(record); } } }); this.formPanel = Ext.create('Ext.form.Panel', { region: 'center', layout: 'hbox', // bodyStyle: {background : '#dfe8f6'}, defaults: { bodyStyle: {background : '#dfe8f6'}, padding : '3'}, fieldDefaults: { labelWidth: 80, labelAlign : 'top' }, items: [ { xtype: 'form', flex : 1, layout: {type: 'vbox', pack: 'start', align: 'stretch'}, items : [ this.paramGrid, this.timeSelector ] }, { xtype: 'form', title: 'Additional Information', flex : 1, layout: {type: 'vbox', pack: 'start', align: 'stretch', padding : '3'}, items : [ this.fieldName, { xtype: 'textarea', name: 'description', fieldLabel: 'Description', height: 200 } ], fbar: [ { type: 'button', text: 'Generate Catalog', scope : this, handler: function(){ // update object with user's values // if the return is true (object had been updated) if(this.updateObject()){ this.updateObject(); this.generateCatalog(); } } }, { type: 'button', text: 'Reset', scope : this, handler: function() { } } ] } ] }); 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+'statisticsHOWTO' } } ] }; Ext.apply (this, Ext.apply(arguments, myConf)); } });