Subversion Repositories Applications.papyrus

Rev

Blame | Last modification | View Log | RSS feed

if(!dojo._hasResource["dojox.grid._data.editors"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojox.grid._data.editors"] = true;
dojo.provide("dojox.grid._data.editors");
dojo.provide("dojox.grid.editors");

dojo.declare("dojox.grid.editors.Base", null, {
        // summary:
        //      base grid editor class. Other grid editors should inherited from this class.
        constructor: function(inCell){
                this.cell = inCell;
        },
        //private
        _valueProp: "value",
        _formatPending: false,
        format: function(inDatum, inRowIndex){
                // summary:
                //      formats the cell for editing
                // inDatum: anything
                //      cell data to edit
                // inRowIndex: int
                //      grid row index
                // returns: string of html to place in grid cell
        },
        //protected
        needFormatNode: function(inDatum, inRowIndex){
                this._formatPending = true;
                dojox.grid.whenIdle(this, "_formatNode", inDatum, inRowIndex);
        },
        cancelFormatNode: function(){
                this._formatPending = false;
        },
        //private
        _formatNode: function(inDatum, inRowIndex){
                if(this._formatPending){
                        this._formatPending = false;
                        // make cell selectable
                        dojo.setSelectable(this.cell.grid.domNode, true);
                        this.formatNode(this.getNode(inRowIndex), inDatum, inRowIndex);
                }
        },
        //protected
        getNode: function(inRowIndex){
                return (this.cell.getNode(inRowIndex) || 0).firstChild || 0;
        },
        formatNode: function(inNode, inDatum, inRowIndex){
                // summary:
                //      format the editing dom node. Use when editor is a widget.
                // inNode: dom node
                // dom node for the editor
                // inDatum: anything
                //      cell data to edit
                // inRowIndex: int
                //      grid row index
                if(dojo.isIE){
                        // IE sux bad
                        dojox.grid.whenIdle(this, "focus", inRowIndex, inNode);
                }else{
                        this.focus(inRowIndex, inNode);
                }
        },
        dispatchEvent: function(m, e){
                if(m in this){
                        return this[m](e);
                }
        },
        //public
        getValue: function(inRowIndex){
                // summary:
                //      returns value entered into editor
                // inRowIndex: int
                // grid row index
                // returns:
                //      value of editor
                return this.getNode(inRowIndex)[this._valueProp];
        },
        setValue: function(inRowIndex, inValue){
                // summary:
                //      set the value of the grid editor
                // inRowIndex: int
                // grid row index
                // inValue: anything
                //      value of editor
                var n = this.getNode(inRowIndex);
                if(n){
                        n[this._valueProp] = inValue
                };
        },
        focus: function(inRowIndex, inNode){
                // summary:
                //      focus the grid editor
                // inRowIndex: int
                // grid row index
                // inNode: dom node
                //      editor node
                dojox.grid.focusSelectNode(inNode || this.getNode(inRowIndex));
        },
        save: function(inRowIndex){
                // summary:
                //      save editor state
                // inRowIndex: int
                // grid row index
                this.value = this.value || this.getValue(inRowIndex);
                //console.log("save", this.value, inCell.index, inRowIndex);
        },
        restore: function(inRowIndex){
                // summary:
                //      restore editor state
                // inRowIndex: int
                // grid row index
                this.setValue(inRowIndex, this.value);
                //console.log("restore", this.value, inCell.index, inRowIndex);
        },
        //protected
        _finish: function(inRowIndex){
                // summary:
                //      called when editing is completed to clean up editor
                // inRowIndex: int
                // grid row index
                dojo.setSelectable(this.cell.grid.domNode, false);
                this.cancelFormatNode(this.cell);
        },
        //public
        apply: function(inRowIndex){
                // summary:
                //      apply edit from cell editor
                // inRowIndex: int
                // grid row index
                this.cell.applyEdit(this.getValue(inRowIndex), inRowIndex);
                this._finish(inRowIndex);
        },
        cancel: function(inRowIndex){
                // summary:
                //      cancel cell edit
                // inRowIndex: int
                // grid row index
                this.cell.cancelEdit(inRowIndex);
                this._finish(inRowIndex);
        }
});
dojox.grid.editors.base = dojox.grid.editors.Base; // back-compat

dojo.declare("dojox.grid.editors.Input", dojox.grid.editors.Base, {
        // summary
        // grid cell editor that provides a standard text input box
        constructor: function(inCell){
                this.keyFilter = this.keyFilter || this.cell.keyFilter;
        },
        // keyFilter: object
        // optional regex for disallowing keypresses
        keyFilter: null,
        format: function(inDatum, inRowIndex){
                this.needFormatNode(inDatum, inRowIndex);
                return '<input class="dojoxGrid-input" type="text" value="' + inDatum + '">';
        },
        formatNode: function(inNode, inDatum, inRowIndex){
                this.inherited(arguments);
                // FIXME: feels too specific for this interface
                this.cell.registerOnBlur(inNode, inRowIndex);
        },
        doKey: function(e){
                if(this.keyFilter){
                        var key = String.fromCharCode(e.charCode);
                        if(key.search(this.keyFilter) == -1){
                                dojo.stopEvent(e);
                        }
                }
        },
        _finish: function(inRowIndex){
                this.inherited(arguments);
                var n = this.getNode(inRowIndex);
                try{
                        dojox.grid.fire(n, "blur");
                }catch(e){}
        }
});
dojox.grid.editors.input = dojox.grid.editors.Input; // back compat

dojo.declare("dojox.grid.editors.Select", dojox.grid.editors.Input, {
        // summary:
        // grid cell editor that provides a standard select
        // options: text of each item
        // values: value for each item
        // returnIndex: editor returns only the index of the selected option and not the value
        constructor: function(inCell){
                this.options = this.options || this.cell.options;
                this.values = this.values || this.cell.values || this.options;
        },
        format: function(inDatum, inRowIndex){
                this.needFormatNode(inDatum, inRowIndex);
                var h = [ '<select class="dojoxGrid-select">' ];
                for (var i=0, o, v; (o=this.options[i])&&(v=this.values[i]); i++){
                        h.push("<option", (inDatum==o ? ' selected' : ''), /*' value="' + v + '"',*/ ">", o, "</option>");
                }
                h.push('</select>');
                return h.join('');
        },
        getValue: function(inRowIndex){
                var n = this.getNode(inRowIndex);
                if(n){
                        var i = n.selectedIndex, o = n.options[i];
                        return this.cell.returnIndex ? i : o.value || o.innerHTML;
                }
        }
});
dojox.grid.editors.select = dojox.grid.editors.Select; // back compat

dojo.declare("dojox.grid.editors.AlwaysOn", dojox.grid.editors.Input, {
        // summary:
        // grid cell editor that is always on, regardless of grid editing state
        // alwaysOn: boolean
        // flag to use editor to format grid cell regardless of editing state.
        alwaysOn: true,
        _formatNode: function(inDatum, inRowIndex){
                this.formatNode(this.getNode(inRowIndex), inDatum, inRowIndex);
        },
        applyStaticValue: function(inRowIndex){
                var e = this.cell.grid.edit;
                e.applyCellEdit(this.getValue(inRowIndex), this.cell, inRowIndex);
                e.start(this.cell, inRowIndex, true);
        }
});
dojox.grid.editors.alwaysOn = dojox.grid.editors.AlwaysOn; // back-compat

dojo.declare("dojox.grid.editors.Bool", dojox.grid.editors.AlwaysOn, {
        // summary:
        // grid cell editor that provides a standard checkbox that is always on
        _valueProp: "checked",
        format: function(inDatum, inRowIndex){
                return '<input class="dojoxGrid-input" type="checkbox"' + (inDatum ? ' checked="checked"' : '') + ' style="width: auto" />';
        },
        doclick: function(e){
                if(e.target.tagName == 'INPUT'){
                        this.applyStaticValue(e.rowIndex);
                }
        }
});
dojox.grid.editors.bool = dojox.grid.editors.Bool; // back-compat

}