Subversion Repositories Applications.papyrus

Rev

Blame | Last modification | View Log | RSS feed

if(!dojo._hasResource["dojox.grid._data.dijitEditors"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojox.grid._data.dijitEditors"] = true;
dojo.provide("dojox.grid._data.dijitEditors");
dojo.require("dojox.grid._data.editors");
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.form.TimeTextBox");
dojo.require("dijit.form.ComboBox");
dojo.require("dijit.form.CheckBox");
dojo.require("dijit.form.TextBox");
dojo.require("dijit.form.NumberSpinner");
dojo.require("dijit.form.NumberTextBox");
dojo.require("dijit.form.CurrencyTextBox");
dojo.require("dijit.form.Slider");
dojo.require("dijit.Editor");

dojo.declare("dojox.grid.editors.Dijit", dojox.grid.editors.base, {
        editorClass: "dijit.form.TextBox",
        constructor: function(inCell){
                this.editor = null;
                this.editorClass = dojo.getObject(this.cell.editorClass || this.editorClass);
        },
        format: function(inDatum, inRowIndex){
                this.needFormatNode(inDatum, inRowIndex);
                return "<div></div>";
        },
        getValue: function(inRowIndex){
                return this.editor.getValue();
        },
        setValue: function(inRowIndex, inValue){
                if(this.editor&&this.editor.setValue){
                        this.editor.setValue(inValue);
                }else{
                        this.inherited(arguments);
                }
        },
        getEditorProps: function(inDatum){
                return dojo.mixin({}, this.cell.editorProps||{}, {
                        constraints: dojo.mixin({}, this.cell.constraint) || {}, //TODO: really just for ValidationTextBoxes
                        value: inDatum
                });
        },
        createEditor: function(inNode, inDatum, inRowIndex){
                return new this.editorClass(this.getEditorProps(inDatum), inNode);

        },
        attachEditor: function(inNode, inDatum, inRowIndex){
                inNode.appendChild(this.editor.domNode);
                this.setValue(inRowIndex, inDatum);
        },
        formatNode: function(inNode, inDatum, inRowIndex){
                if(!this.editorClass){
                        return inDatum;
                }
                if(!this.editor){
                        this.editor = this.createEditor.apply(this, arguments);
                }else{
                        this.attachEditor.apply(this, arguments);
                }
                this.sizeEditor.apply(this, arguments);
                this.cell.grid.rowHeightChanged(inRowIndex);
                this.focus();
        },
        sizeEditor: function(inNode, inDatum, inRowIndex){
                var
                        p = this.cell.getNode(inRowIndex),
                        box = dojo.contentBox(p);
                dojo.marginBox(this.editor.domNode, {w: box.w});
        },
        focus: function(inRowIndex, inNode){
                if(this.editor){
                        setTimeout(dojo.hitch(this.editor, function(){
                                dojox.grid.fire(this, "focus");
                        }), 0);
                }
        },
        _finish: function(inRowIndex){
                this.inherited(arguments);
                dojox.grid.removeNode(this.editor.domNode);
        }
});

dojo.declare("dojox.grid.editors.ComboBox", dojox.grid.editors.Dijit, {
        editorClass: "dijit.form.ComboBox",
        getEditorProps: function(inDatum){
                var items=[];
                dojo.forEach(this.cell.options, function(o){
                        items.push({name: o, value: o});
                });
                var store = new dojo.data.ItemFileReadStore({data: {identifier:"name", items: items}});
                return dojo.mixin({}, this.cell.editorProps||{}, {
                        value: inDatum,
                        store: store
                });
        },
        getValue: function(){
                var e = this.editor;
                // make sure to apply the displayed value
                e.setDisplayedValue(e.getDisplayedValue());
                return e.getValue();
        }
});

dojo.declare("dojox.grid.editors.DateTextBox", dojox.grid.editors.Dijit, {
        editorClass: "dijit.form.DateTextBox",
        setValue: function(inRowIndex, inValue){
                if(this.editor){
                        this.editor.setValue(new Date(inValue));
                }else{
                        this.inherited(arguments);
                }
        },
        getEditorProps: function(inDatum){
                return dojo.mixin(this.inherited(arguments), {
                        value: new Date(inDatum)
                });
        }
});


dojo.declare("dojox.grid.editors.CheckBox", dojox.grid.editors.Dijit, {
        editorClass: "dijit.form.CheckBox",
        getValue: function(){
                return this.editor.checked;
        }
});


dojo.declare("dojox.grid.editors.Editor", dojox.grid.editors.Dijit, {
        editorClass: "dijit.Editor",
        getEditorProps: function(inDatum){
                return dojo.mixin({}, this.cell.editorProps||{}, {
                        height: this.cell.editorHeight || "100px"
                });
        },
        createEditor: function(inNode, inDatum, inRowIndex){
                // editor needs its value set after creation
                var editor = new this.editorClass(this.getEditorProps(inDatum), inNode);
                editor.setValue(inDatum);
                return editor;
        },
        formatNode: function(inNode, inDatum, inRowIndex){
                this.inherited(arguments);
                // FIXME: seem to need to reopen the editor and display the toolbar
                var e = this.editor;
                e.open();
                if(this.cell.editorToolbar){
                        dojo.place(e.toolbar.domNode, e.editingArea, "before");
                }
        }
});

}