Mercurial > lada > lada-client
diff app/view/widget/DynamicGrid.js @ 1007:23bfcbdb4527
merged.
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Wed, 20 Jan 2016 17:33:33 +0100 |
parents | 7867752a0d58 |
children | 52b02b0225e8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/view/widget/DynamicGrid.js Wed Jan 20 17:33:33 2016 +0100 @@ -0,0 +1,112 @@ +/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz + * Software engineering by Intevation GmbH + * + * This file is Free Software under the GNU GPL (v>=3) + * and comes with ABSOLUTELY NO WARRANTY! Check out + * the documentation coming with IMIS-Labordaten-Application for details. + */ + +/** + * Grid to list the result of the Filter + */ +Ext.define('Lada.view.widget.DynamicGrid', { + extend: 'Ext.grid.Panel', + + store: null, + + border: false, + multiSelect: true, + allowDeselect: true, + + isDynamic: true, + + viewConfig: { + deferEmptyText: false + }, + + initComponent: function() { + var i18n = Lada.getApplication().bundle; + this.callParent(arguments); + }, + + /** + * This sets the Store of the DynamicGrid + */ + setStore: function(store){ + var i18n = Lada.getApplication().bundle; + + this.removeDocked(Ext.getCmp('ptbar'), true); + this.reconfigure(store); + this.addDocked([{ + xtype: 'pagingtoolbar', + id: 'ptbar', + dock: 'bottom', + store: store, + displayInfo: true + }]); + + }, + + /** + * Setup columns of the Grid dynamically based on a list of given cols. + * The function is called from the {@link Lada.controller.Filter#search + * search event} + * The Images for the Read-Write Icon are defined in CSS + */ + setupColumns: function(cols) { + var caf = this.generateColumnsAndFields(cols); + var columns = caf[0]; + var fields = caf[1]; + this.store.model.setFields(fields); + this.reconfigure(this.store, columns); + }, + + /** + * generateColumnsAndFields + * generates an array of columns which are used for the dynamic grid + * @return an array of two arrays: [0] is an array of colums [1] an array + * of fields + **/ + generateColumnsAndFields: function(cols) { + var resultColumns = []; + var fields = []; + + fields.push(new Ext.data.Field({ + name: 'owner' + })); + fields.push(new Ext.data.Field({ + name: 'readonly' + })); + + resultColumns.push({ + xtype: 'actioncolumn', + text: 'RW', + dataIndex: 'readonly', + sortable: false, + tooltip: 'Probe öffnen', + width: 30, + getClass: function (val, meta, rec) { + return rec.get('readonly') === false ? "edit" : "noedit"; + }, + handler: function(grid, rowIndex, colIndex) { + var rec = grid.getStore().getAt(rowIndex); + grid.fireEvent('itemdblclick', grid, rec); + } + }); + + for (var i = cols.length - 1; i >= 0; i--) { + if (cols[i] === 'id') { + continue; + } + resultColumns.push(cols[i]); + fields.push(new Ext.data.Field({ + name: cols[i].dataIndex + })); + } + var caf = new Array(); + caf[0] = resultColumns; + caf[1] = fields; + return caf; + } +}); +