123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- /*
- Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
- Available via Academic Free License >= 2.1 OR the modified BSD license.
- see: http://dojotoolkit.org/license for details
- */
- if(!dojo._hasResource["dojox.grid.enhanced.plugins.GridSource"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
- dojo._hasResource["dojox.grid.enhanced.plugins.GridSource"] = true;
- dojo.provide("dojox.grid.enhanced.plugins.GridSource");
- dojo.require("dojo.dnd.Source");
- dojo.require("dojox.grid.enhanced.plugins.DnD");
- (function(){
- var _joinToArray = function(arrays){
- var a = arrays[0];
- for(var i = 1; i < arrays.length; ++i){
- a = a.concat(arrays[i]);
- }
- return a;
- };
- dojo.declare("dojox.grid.enhanced.plugins.GridSource", dojo.dnd.Source, {
- // summary:
- // A special source that can accept grid contents.
- // Only for non-grid widgets or domNodes.
- accept: ["grid/cells", "grid/rows", "grid/cols", "text"],
-
- // insertNodesForGrid:
- // If you'd like to insert some sort of nodes into your dnd source, turn this on,
- // and override getCellContent/getRowContent/getColumnContent
- // to populate the dnd data in your desired format.
- insertNodesForGrid: false,
-
- markupFactory: function(params, node){
- return new dojox.grid.enhanced.plugins.GridSource(node, params);
- },
- checkAcceptance: function(source, nodes){
- if(source instanceof dojox.grid.enhanced.plugins.GridDnDSource){
- if(nodes[0]){
- var item = source.getItem(nodes[0].id);
- if(item && (dojo.indexOf(item.type, "grid/rows") >= 0 || dojo.indexOf(item.type, "grid/cells") >= 0) &&
- !source.dndPlugin._allDnDItemsLoaded()){
- return false;
- }
- }
- this.sourcePlugin = source.dndPlugin;
- }
- return this.inherited(arguments);
- },
- onDraggingOver: function(){
- if(this.sourcePlugin){
- this.sourcePlugin._isSource = true;
- }
- },
- onDraggingOut: function(){
- if(this.sourcePlugin){
- this.sourcePlugin._isSource = false;
- }
- },
- onDropExternal: function(source, nodes, copy){
- if(source instanceof dojox.grid.enhanced.plugins.GridDnDSource){
- var ranges = dojo.map(nodes, function(node){
- return source.getItem(node.id).data;
- });
- var item = source.getItem(nodes[0].id);
- var grid = item.dndPlugin.grid;
- var type = item.type[0];
- var range;
- try{
- switch(type){
- case "grid/cells":
- nodes[0].innerHTML = this.getCellContent(grid, ranges[0].min, ranges[0].max) || "";
- this.onDropGridCells(grid, ranges[0].min, ranges[0].max);
- break;
- case "grid/rows":
- range = _joinToArray(ranges);
- nodes[0].innerHTML = this.getRowContent(grid, range) || "";
- this.onDropGridRows(grid, range);
- break;
- case "grid/cols":
- range = _joinToArray(ranges);
- nodes[0].innerHTML = this.getColumnContent(grid, range) || "";
- this.onDropGridColumns(grid, range);
- break;
- }
- if(this.insertNodesForGrid){
- this.selectNone();
- this.insertNodes(true, [nodes[0]], this.before, this.current);
- }
- item.dndPlugin.onDragOut(!copy);
- }catch(e){
- console.warn("GridSource.onDropExternal() error:",e);
- }
- }else{
- this.inherited(arguments);
- }
- },
- getCellContent: function(grid, leftTopCell, rightBottomCell){
- // summary:
- // Fill node innerHTML for dnd grid cells.
- // sample code:
- // var cells = grid.layout.cells;
- // var store = grid.store;
- // var cache = grid._by_idx;
- // var res = "Grid Cells from " + grid.id + ":<br/>";
- // for(var r = leftTopCell.row; r <= rightBottomCell.row; ++r){
- // for(var c = leftTopCell.col; c <= rightBottomCell.col; ++c){
- // res += store.getValue(cache[r].item, cells[c].field) + ", ";
- // }
- // res = res.substring(0, res.length - 2) + ";<br/>";
- // }
- // return res;
- },
- getRowContent: function(grid, rowIndexes){
- // summary:
- // Fill node innerHTML for dnd grid rows.
- // sample code:
- // var cells = grid.layout.cells;
- // var store = grid.store;
- // var cache = grid._by_idx;
- // var res = "Grid Rows from " + grid.id + ":<br/>";
- // for(var i = 0; i < rowIndexes.length; ++i){
- // var r = rowIndexes[i];
- // res += "Row " + r + ": ";
- // for(var j = 0; j < cells.length; ++j){
- // if(!cells[j].hidden){
- // res += store.getValue(cache[r].item, cells[j].field) + ", ";
- // }
- // }
- // res = res.substring(0, res.length - 2) + ";<br/>";
- // }
- // return res;
- },
- getColumnContent: function(grid, colIndexes){
- // summary:
- // Fill node innerHTML for dnd grid columns.
- // sample code:
- // var cells = grid.layout.cells;
- // var res = "Grid Columns from " + grid.id + ":";
- // for(var i = 0; i < colIndexes.length; ++i){
- // var c = colIndexes[i];
- // res += (cells[c].name || cells[c].field) + ", ";
- // }
- // return res.substring(0, res.length - 2);
- },
- onDropGridCells: function(grid, leftTopCell, rightBottomCell){
-
- },
- onDropGridRows: function(grid, rowIndexes){
-
- },
- onDropGridColumns: function(grid, colIndexes){
-
- }
- });
- })();
- }
|