Subversion Repositories Applications.papyrus

Rev

Blame | Last modification | View Log | RSS feed

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

dojo.declare("dojox.grid.selection", null, {
        // summary:
        //      Manages row selection for grid. Owned by grid and used internally 
        //      for selection. Override to implement custom selection.
        constructor: function(inGrid){
                this.grid = inGrid;
                this.selected = [];
        },
        multiSelect: true,
        selected: null,
        updating: 0,
        selectedIndex: -1,
        onCanSelect: function(inIndex){
                return this.grid.onCanSelect(inIndex);
        },
        onCanDeselect: function(inIndex){
                return this.grid.onCanDeselect(inIndex);
        },
        onSelected: function(inIndex){
                return this.grid.onSelected(inIndex);
        },
        onDeselected: function(inIndex){
                return this.grid.onDeselected(inIndex);
        },
        //onSetSelected: function(inIndex, inSelect) { };
        onChanging: function(){
        },
        onChanged: function(){
                return this.grid.onSelectionChanged();
        },
        isSelected: function(inIndex){
                return this.selected[inIndex];
        },
        getFirstSelected: function(){
                for(var i=0, l=this.selected.length; i<l; i++){
                        if(this.selected[i]){
                                return i;
                        }
                }
                return -1;
        },
        getNextSelected: function(inPrev){
                for(var i=inPrev+1, l=this.selected.length; i<l; i++){
                        if(this.selected[i]){
                                return i;
                        }
                }
                return -1;
        },
        getSelected: function(){
                var result = [];
                for(var i=0, l=this.selected.length; i<l; i++){
                        if(this.selected[i]){
                                result.push(i);
                        }
                }
                return result;
        },
        getSelectedCount: function(){
                var c = 0;
                for(var i=0; i<this.selected.length; i++){
                        if(this.selected[i]){
                                c++;
                        }
                }
                return c;
        },
        beginUpdate: function(){
                if(this.updating == 0){
                        this.onChanging();
                }
                this.updating++;
        },
        endUpdate: function(){
                this.updating--;
                if(this.updating == 0){
                        this.onChanged();
                }
        },
        select: function(inIndex){
                this.unselectAll(inIndex);
                this.addToSelection(inIndex);
        },
        addToSelection: function(inIndex){
                inIndex = Number(inIndex);
                if(this.selected[inIndex]){
                        this.selectedIndex = inIndex;
                }else{
                        if(this.onCanSelect(inIndex) !== false){
                                this.selectedIndex = inIndex;
                                this.beginUpdate();
                                this.selected[inIndex] = true;
                                this.grid.onSelected(inIndex);
                                //this.onSelected(inIndex);
                                //this.onSetSelected(inIndex, true);
                                this.endUpdate();
                        }
                }
        },
        deselect: function(inIndex){
                inIndex = Number(inIndex);
                if(this.selectedIndex == inIndex){
                        this.selectedIndex = -1;
                }
                if(this.selected[inIndex]){
                        if(this.onCanDeselect(inIndex) === false){
                                return;
                        }
                        this.beginUpdate();
                        delete this.selected[inIndex];
                        this.grid.onDeselected(inIndex);
                        //this.onDeselected(inIndex);
                        //this.onSetSelected(inIndex, false);
                        this.endUpdate();
                }
        },
        setSelected: function(inIndex, inSelect){
                this[(inSelect ? 'addToSelection' : 'deselect')](inIndex);
        },
        toggleSelect: function(inIndex){
                this.setSelected(inIndex, !this.selected[inIndex])
        },
        insert: function(inIndex){
                this.selected.splice(inIndex, 0, false);
                if(this.selectedIndex >= inIndex){
                        this.selectedIndex++;
                }
        },
        remove: function(inIndex){
                this.selected.splice(inIndex, 1);
                if(this.selectedIndex >= inIndex){
                        this.selectedIndex--;
                }
        },
        unselectAll: function(inExcept){
                for(var i in this.selected){
                        if((i!=inExcept)&&(this.selected[i]===true)){
                                this.deselect(i);
                        }
                }
        },
        shiftSelect: function(inFrom, inTo){
                var s = (inFrom >= 0 ? inFrom : inTo), e = inTo;
                if(s > e){
                        e = s;
                        s = inTo;
                }
                for(var i=s; i<=e; i++){
                        this.addToSelection(i);
                }
        },
        clickSelect: function(inIndex, inCtrlKey, inShiftKey){
                this.beginUpdate();
                if(!this.multiSelect){
                        this.select(inIndex);
                }else{
                        var lastSelected = this.selectedIndex;
                        if(!inCtrlKey){
                                this.unselectAll(inIndex);
                        }
                        if(inShiftKey){
                                this.shiftSelect(lastSelected, inIndex);
                        }else if(inCtrlKey){
                                this.toggleSelect(inIndex);
                        }else{
                                this.addToSelection(inIndex)
                        }
                }
                this.endUpdate();
        },
        clickSelectEvent: function(e){
                this.clickSelect(e.rowIndex, e.ctrlKey, e.shiftKey);
        },
        clear: function(){
                this.beginUpdate();
                this.unselectAll();
                this.endUpdate();
        }
});

}