1 if(!dojo._hasResource['openils.widget.AutoGrid']) {
2 dojo.provide('openils.widget.AutoGrid');
3 dojo.require('dojox.grid.DataGrid');
4 dojo.require('openils.widget.AutoWidget');
5 dojo.require('openils.widget.AutoFieldWidget');
6 dojo.require('openils.widget.EditDialog');
7 dojo.require('openils.Util');
10 'openils.widget.AutoGrid',
11 [dojox.grid.DataGrid, openils.widget.AutoWidget],
14 /* if true, pop up an edit dialog when user hits Enter on a give row */
17 startup : function() {
18 this.inherited(arguments);
20 var existing = (this.structure && this.structure[0].cells[0]) ?
21 this.structure[0].cells[0] : [];
23 for(var f in this.sortedFieldList) {
24 var field = this.sortedFieldList[f];
25 if(!field || field.virtual) continue;
26 var entry = existing.filter(function(i){return (i.field == field.name)})[0];
27 if(entry) entry.name = field.label;
28 else entry = {field:field.name, name:field.label};
31 entry.get = openils.widget.AutoGrid.defaultGetter
33 this.setStructure([{cells: [fields]}]);
34 this.setStore(this.buildAutoStore());
36 this._applyEditOnEnter();
39 /* capture keydown and launch edit dialog on enter */
40 _applyEditOnEnter : function() {
41 this.onMouseOverRow = function(e) {};
42 this.onMouseOutRow = function(e) {};
43 this.onCellFocus = function(cell, rowIndex) {
44 openils.Util.addCSSClass(
45 cell.getNode(rowIndex).parentNode,
46 'oils-grid-row-selected');
48 dojo.connect(this, 'onKeyDown',
50 if(e.keyCode == dojo.keys.ENTER) {
51 this.selection.deselectAll();
52 this.selection.select(this.focus.rowIndex);
53 this._drawEditDialog(this.selection.getFirstSelected(), this.focus.rowIndex);
59 _drawEditDialog : function(storeItem, rowIndex) {
61 var fmObject = new fieldmapper[this.fmClass]().fromStoreItem(storeItem);
62 var idents = grid.store.getIdentityAttributes();
63 var dialog = new openils.widget.EditDialog({
65 onPostApply : function() {
66 for(var i in fmObject._fields) {
67 var field = fmObject._fields[i];
68 if(idents.filter(function(j){return (j == field)})[0])
69 continue; // don't try to edit an identifier field
70 grid.store.setValue(storeItem, field, fmObject[field]());
76 dialog.editPane.fieldOrder = this.fieldOrder;
82 openils.widget.AutoGrid.markupFactory = dojox.grid.DataGrid.markupFactory;
84 openils.widget.AutoGrid.defaultGetter = function(rowIndex, item) {
86 var val = this.grid.store.getValue(item, this.field);
87 var autoWidget = new openils.widget.AutoFieldWidget({
88 fmClass: this.grid.fmClass,
92 return autoWidget.getDisplayString();