X-Git-Url: http://git.roojs.org/?p=roojs1;a=blobdiff_plain;f=Roo%2Fgrid%2FGrid.js;h=473270564dea5a88c9437fe5f310c6dc6f03981c;hp=3032673a31522b73a6249444e2e2678da1b5e713;hb=8673c23959602f121d1fb75c6a7ec7a656352897;hpb=070881aaee7b327c9b65952b35ac46047591224f diff --git a/Roo/grid/Grid.js b/Roo/grid/Grid.js index 3032673a31..473270564d 100644 --- a/Roo/grid/Grid.js +++ b/Roo/grid/Grid.js @@ -77,7 +77,7 @@ Roo.grid.Grid = function(container, config){ this.dataSource= Roo.factory(this.dataSource, Roo.data); this.ds = this.dataSource; this.ds.xmodule = this.xmodule || false; - + } @@ -91,123 +91,123 @@ Roo.grid.Grid = function(container, config){ } /** @private */ this.addEvents({ - // raw events - /** - * @event click - * The raw click event for the entire grid. - * @param {Roo.EventObject} e - */ - "click" : true, - /** - * @event dblclick - * The raw dblclick event for the entire grid. - * @param {Roo.EventObject} e - */ - "dblclick" : true, - /** - * @event contextmenu - * The raw contextmenu event for the entire grid. - * @param {Roo.EventObject} e - */ - "contextmenu" : true, - /** - * @event mousedown - * The raw mousedown event for the entire grid. - * @param {Roo.EventObject} e - */ - "mousedown" : true, - /** - * @event mouseup - * The raw mouseup event for the entire grid. - * @param {Roo.EventObject} e - */ - "mouseup" : true, - /** - * @event mouseover - * The raw mouseover event for the entire grid. - * @param {Roo.EventObject} e - */ - "mouseover" : true, - /** - * @event mouseout - * The raw mouseout event for the entire grid. - * @param {Roo.EventObject} e - */ - "mouseout" : true, - /** - * @event keypress - * The raw keypress event for the entire grid. - * @param {Roo.EventObject} e - */ - "keypress" : true, - /** - * @event keydown - * The raw keydown event for the entire grid. - * @param {Roo.EventObject} e - */ - "keydown" : true, - - // custom events - - /** - * @event cellclick - * Fires when a cell is clicked - * @param {Grid} this - * @param {Number} rowIndex - * @param {Number} columnIndex - * @param {Roo.EventObject} e - */ - "cellclick" : true, - /** - * @event celldblclick - * Fires when a cell is double clicked - * @param {Grid} this - * @param {Number} rowIndex - * @param {Number} columnIndex - * @param {Roo.EventObject} e - */ - "celldblclick" : true, - /** - * @event rowclick - * Fires when a row is clicked - * @param {Grid} this - * @param {Number} rowIndex - * @param {Roo.EventObject} e - */ - "rowclick" : true, - /** - * @event rowdblclick - * Fires when a row is double clicked - * @param {Grid} this - * @param {Number} rowIndex - * @param {Roo.EventObject} e - */ - "rowdblclick" : true, - /** - * @event headerclick - * Fires when a header is clicked - * @param {Grid} this - * @param {Number} columnIndex - * @param {Roo.EventObject} e - */ - "headerclick" : true, - /** - * @event headerdblclick - * Fires when a header cell is double clicked - * @param {Grid} this - * @param {Number} columnIndex - * @param {Roo.EventObject} e - */ - "headerdblclick" : true, - /** - * @event rowcontextmenu - * Fires when a row is right clicked - * @param {Grid} this - * @param {Number} rowIndex - * @param {Roo.EventObject} e - */ - "rowcontextmenu" : true, - /** + // raw events + /** + * @event click + * The raw click event for the entire grid. + * @param {Roo.EventObject} e + */ + "click" : true, + /** + * @event dblclick + * The raw dblclick event for the entire grid. + * @param {Roo.EventObject} e + */ + "dblclick" : true, + /** + * @event contextmenu + * The raw contextmenu event for the entire grid. + * @param {Roo.EventObject} e + */ + "contextmenu" : true, + /** + * @event mousedown + * The raw mousedown event for the entire grid. + * @param {Roo.EventObject} e + */ + "mousedown" : true, + /** + * @event mouseup + * The raw mouseup event for the entire grid. + * @param {Roo.EventObject} e + */ + "mouseup" : true, + /** + * @event mouseover + * The raw mouseover event for the entire grid. + * @param {Roo.EventObject} e + */ + "mouseover" : true, + /** + * @event mouseout + * The raw mouseout event for the entire grid. + * @param {Roo.EventObject} e + */ + "mouseout" : true, + /** + * @event keypress + * The raw keypress event for the entire grid. + * @param {Roo.EventObject} e + */ + "keypress" : true, + /** + * @event keydown + * The raw keydown event for the entire grid. + * @param {Roo.EventObject} e + */ + "keydown" : true, + + // custom events + + /** + * @event cellclick + * Fires when a cell is clicked + * @param {Grid} this + * @param {Number} rowIndex + * @param {Number} columnIndex + * @param {Roo.EventObject} e + */ + "cellclick" : true, + /** + * @event celldblclick + * Fires when a cell is double clicked + * @param {Grid} this + * @param {Number} rowIndex + * @param {Number} columnIndex + * @param {Roo.EventObject} e + */ + "celldblclick" : true, + /** + * @event rowclick + * Fires when a row is clicked + * @param {Grid} this + * @param {Number} rowIndex + * @param {Roo.EventObject} e + */ + "rowclick" : true, + /** + * @event rowdblclick + * Fires when a row is double clicked + * @param {Grid} this + * @param {Number} rowIndex + * @param {Roo.EventObject} e + */ + "rowdblclick" : true, + /** + * @event headerclick + * Fires when a header is clicked + * @param {Grid} this + * @param {Number} columnIndex + * @param {Roo.EventObject} e + */ + "headerclick" : true, + /** + * @event headerdblclick + * Fires when a header cell is double clicked + * @param {Grid} this + * @param {Number} columnIndex + * @param {Roo.EventObject} e + */ + "headerdblclick" : true, + /** + * @event rowcontextmenu + * Fires when a row is right clicked + * @param {Grid} this + * @param {Number} rowIndex + * @param {Roo.EventObject} e + */ + "rowcontextmenu" : true, + /** * @event cellcontextmenu * Fires when a cell is right clicked * @param {Grid} this @@ -216,95 +216,95 @@ Roo.grid.Grid = function(container, config){ * @param {Roo.EventObject} e */ "cellcontextmenu" : true, - /** - * @event headercontextmenu - * Fires when a header is right clicked - * @param {Grid} this - * @param {Number} columnIndex - * @param {Roo.EventObject} e - */ - "headercontextmenu" : true, - /** - * @event bodyscroll - * Fires when the body element is scrolled - * @param {Number} scrollLeft - * @param {Number} scrollTop - */ - "bodyscroll" : true, - /** - * @event columnresize - * Fires when the user resizes a column - * @param {Number} columnIndex - * @param {Number} newSize - */ - "columnresize" : true, - /** - * @event columnmove - * Fires when the user moves a column - * @param {Number} oldIndex - * @param {Number} newIndex - */ - "columnmove" : true, - /** - * @event startdrag - * Fires when row(s) start being dragged - * @param {Grid} this - * @param {Roo.GridDD} dd The drag drop object - * @param {event} e The raw browser event - */ - "startdrag" : true, - /** - * @event enddrag - * Fires when a drag operation is complete - * @param {Grid} this - * @param {Roo.GridDD} dd The drag drop object - * @param {event} e The raw browser event - */ - "enddrag" : true, - /** - * @event dragdrop - * Fires when dragged row(s) are dropped on a valid DD target - * @param {Grid} this - * @param {Roo.GridDD} dd The drag drop object - * @param {String} targetId The target drag drop object - * @param {event} e The raw browser event - */ - "dragdrop" : true, - /** - * @event dragover - * Fires while row(s) are being dragged. "targetId" is the id of the Yahoo.util.DD object the selected rows are being dragged over. - * @param {Grid} this - * @param {Roo.GridDD} dd The drag drop object - * @param {String} targetId The target drag drop object - * @param {event} e The raw browser event - */ - "dragover" : true, - /** - * @event dragenter - * Fires when the dragged row(s) first cross another DD target while being dragged - * @param {Grid} this - * @param {Roo.GridDD} dd The drag drop object - * @param {String} targetId The target drag drop object - * @param {event} e The raw browser event - */ - "dragenter" : true, - /** - * @event dragout - * Fires when the dragged row(s) leave another DD target while being dragged - * @param {Grid} this - * @param {Roo.GridDD} dd The drag drop object - * @param {String} targetId The target drag drop object - * @param {event} e The raw browser event - */ - "dragout" : true, /** - * @event rowclass - * Fires when the dragged row(s) leave another DD target while being dragged - * @param {GridView} gridview The grid view - * @param {Object} rowcfg, contains record, rowIndex and rowClass - set rowClass to add a style. - */ + * @event headercontextmenu + * Fires when a header is right clicked + * @param {Grid} this + * @param {Number} columnIndex + * @param {Roo.EventObject} e + */ + "headercontextmenu" : true, + /** + * @event bodyscroll + * Fires when the body element is scrolled + * @param {Number} scrollLeft + * @param {Number} scrollTop + */ + "bodyscroll" : true, + /** + * @event columnresize + * Fires when the user resizes a column + * @param {Number} columnIndex + * @param {Number} newSize + */ + "columnresize" : true, + /** + * @event columnmove + * Fires when the user moves a column + * @param {Number} oldIndex + * @param {Number} newIndex + */ + "columnmove" : true, + /** + * @event startdrag + * Fires when row(s) start being dragged + * @param {Grid} this + * @param {Roo.GridDD} dd The drag drop object + * @param {event} e The raw browser event + */ + "startdrag" : true, + /** + * @event enddrag + * Fires when a drag operation is complete + * @param {Grid} this + * @param {Roo.GridDD} dd The drag drop object + * @param {event} e The raw browser event + */ + "enddrag" : true, + /** + * @event dragdrop + * Fires when dragged row(s) are dropped on a valid DD target + * @param {Grid} this + * @param {Roo.GridDD} dd The drag drop object + * @param {String} targetId The target drag drop object + * @param {event} e The raw browser event + */ + "dragdrop" : true, + /** + * @event dragover + * Fires while row(s) are being dragged. "targetId" is the id of the Yahoo.util.DD object the selected rows are being dragged over. + * @param {Grid} this + * @param {Roo.GridDD} dd The drag drop object + * @param {String} targetId The target drag drop object + * @param {event} e The raw browser event + */ + "dragover" : true, + /** + * @event dragenter + * Fires when the dragged row(s) first cross another DD target while being dragged + * @param {Grid} this + * @param {Roo.GridDD} dd The drag drop object + * @param {String} targetId The target drag drop object + * @param {event} e The raw browser event + */ + "dragenter" : true, + /** + * @event dragout + * Fires when the dragged row(s) leave another DD target while being dragged + * @param {Grid} this + * @param {Roo.GridDD} dd The drag drop object + * @param {String} targetId The target drag drop object + * @param {event} e The raw browser event + */ + "dragout" : true, + /** + * @event rowclass + * Fires when a row is rendered, so you can change add a style to it. + * @param {GridView} gridview The grid view + * @param {Object} rowcfg contains record rowIndex and rowClass - set rowClass to add a style. + */ 'rowclass' : true, - + /** * @event render * Fires when the grid is rendered @@ -319,74 +319,74 @@ Roo.extend(Roo.grid.Grid, Roo.util.Observable, { /** * @cfg {String} ddGroup - drag drop group. - */ - + */ + /** * @cfg {Number} minColumnWidth The minimum width a column can be resized to. Default is 25. - */ - minColumnWidth : 25, + */ + minColumnWidth : 25, /** - * @cfg {Boolean} autoSizeColumns True to automatically resize the columns to fit their content - * on initial render. It is more efficient to explicitly size the columns - * through the ColumnModel's {@link Roo.grid.ColumnModel#width} config option. Default is false. - */ - autoSizeColumns : false, + * @cfg {Boolean} autoSizeColumns True to automatically resize the columns to fit their content + * on initial render. It is more efficient to explicitly size the columns + * through the ColumnModel's {@link Roo.grid.ColumnModel#width} config option. Default is false. + */ + autoSizeColumns : false, - /** - * @cfg {Boolean} autoSizeHeaders True to measure headers with column data when auto sizing columns. Default is true. - */ - autoSizeHeaders : true, + /** + * @cfg {Boolean} autoSizeHeaders True to measure headers with column data when auto sizing columns. Default is true. + */ + autoSizeHeaders : true, - /** - * @cfg {Boolean} monitorWindowResize True to autoSize the grid when the window resizes. Default is true. - */ - monitorWindowResize : true, + /** + * @cfg {Boolean} monitorWindowResize True to autoSize the grid when the window resizes. Default is true. + */ + monitorWindowResize : true, - /** - * @cfg {Boolean} maxRowsToMeasure If autoSizeColumns is on, maxRowsToMeasure can be used to limit the number of - * rows measured to get a columns size. Default is 0 (all rows). - */ - maxRowsToMeasure : 0, + /** + * @cfg {Boolean} maxRowsToMeasure If autoSizeColumns is on, maxRowsToMeasure can be used to limit the number of + * rows measured to get a columns size. Default is 0 (all rows). + */ + maxRowsToMeasure : 0, - /** - * @cfg {Boolean} trackMouseOver True to highlight rows when the mouse is over. Default is true. - */ - trackMouseOver : true, + /** + * @cfg {Boolean} trackMouseOver True to highlight rows when the mouse is over. Default is true. + */ + trackMouseOver : true, /** - * @cfg {Boolean} enableDrag True to enable drag of rows. Default is false. (double check if this is needed?) - */ + * @cfg {Boolean} enableDrag True to enable drag of rows. Default is false. (double check if this is needed?) + */ - /** - * @cfg {Boolean} enableDragDrop True to enable drag and drop of rows. Default is false. - */ - enableDragDrop : false, - - /** - * @cfg {Boolean} enableColumnMove True to enable drag and drop reorder of columns. Default is true. - */ - enableColumnMove : true, - - /** - * @cfg {Boolean} enableColumnHide True to enable hiding of columns with the header context menu. Default is true. - */ - enableColumnHide : true, - - /** - * @cfg {Boolean} enableRowHeightSync True to manually sync row heights across locked and not locked rows. Default is false. - */ - enableRowHeightSync : false, - - /** - * @cfg {Boolean} stripeRows True to stripe the rows. Default is true. - */ - stripeRows : true, - - /** - * @cfg {Boolean} autoHeight True to fit the height of the grid container to the height of the data. Default is false. - */ - autoHeight : false, + /** + * @cfg {Boolean} enableDragDrop True to enable drag and drop of rows. Default is false. + */ + enableDragDrop : false, + + /** + * @cfg {Boolean} enableColumnMove True to enable drag and drop reorder of columns. Default is true. + */ + enableColumnMove : true, + + /** + * @cfg {Boolean} enableColumnHide True to enable hiding of columns with the header context menu. Default is true. + */ + enableColumnHide : true, + + /** + * @cfg {Boolean} enableRowHeightSync True to manually sync row heights across locked and not locked rows. Default is false. + */ + enableRowHeightSync : false, + + /** + * @cfg {Boolean} stripeRows True to stripe the rows. Default is true. + */ + stripeRows : true, + + /** + * @cfg {Boolean} autoHeight True to fit the height of the grid container to the height of the data. Default is false. + */ + autoHeight : false, /** * @cfg {String} autoExpandColumn The id (or dataIndex) of a column in this grid that should expand to fill unused space. This id can not be 0. Default is false. @@ -405,18 +405,21 @@ Roo.extend(Roo.grid.Grid, Roo.util.Observable, { autoExpandMax : 1000, /** - * @cfg {Object} view The {@link Roo.grid.GridView} used by the grid. This can be set before a call to render(). - */ - view : null, + * @cfg {Object} view The {@link Roo.grid.GridView} used by the grid. This can be set before a call to render(). + */ + view : null, - /** - * @cfg {Object} loadMask An {@link Roo.LoadMask} config or true to mask the grid while loading. Default is false. - */ - loadMask : false, /** - * @cfg {Roo.dd.DropTarget} dragTarget An {@link Roo.dd.DragTarget} config - */ - dropTarget: false, + * @cfg {Object} loadMask An {@link Roo.LoadMask} config or true to mask the grid while loading. Default is false. + */ + loadMask : false, + /** + * @cfg {Roo.dd.DropTarget} dropTarget An {@link Roo.dd.DropTarget} config + */ + dropTarget: false, + + + // private rendered : false, @@ -431,7 +434,8 @@ Roo.extend(Roo.grid.Grid, Roo.util.Observable, { * Called once after all setup has been completed and the grid is ready to be rendered. * @return {Roo.grid.Grid} this */ - render : function(){ + render : function() + { var c = this.container; // try to detect autoHeight/width mode if((!c.dom.offsetHeight || c.dom.offsetHeight < 20) || c.getStyle("height") == "auto"){ @@ -444,6 +448,9 @@ Roo.extend(Roo.grid.Grid, Roo.util.Observable, { c.on("dblclick", this.onDblClick, this); c.on("contextmenu", this.onContextMenu, this); c.on("keydown", this.onKeyDown, this); + if (Roo.isTouch) { + c.on("touchstart", this.onTouchStart, this); + } this.relayEvents(c, ["mousedown","mouseup","mouseover","mouseout","keypress"]); @@ -459,7 +466,7 @@ Roo.extend(Roo.grid.Grid, Roo.util.Observable, { if (this.toolbar && this.toolbar.xtype) { this.toolbar.container = this.getView().getHeaderPanel(true); - this.toolbar = new Ext.Toolbar(this.toolbar); + this.toolbar = new Roo.Toolbar(this.toolbar); } if (this.footer && this.footer.xtype) { this.footer.dataSource = this.getDataSource(); @@ -468,7 +475,7 @@ Roo.extend(Roo.grid.Grid, Roo.util.Observable, { } if (this.dropTarget && this.dropTarget.xtype) { delete this.dropTarget.xtype; - this.dropTarget = new Ext.dd.DropTarget(this.getView().mainBody, this.dropTarget); + this.dropTarget = new Roo.dd.DropTarget(this.getView().mainBody, this.dropTarget); } @@ -477,12 +484,12 @@ Roo.extend(Roo.grid.Grid, Roo.util.Observable, { return this; }, - /** - * Reconfigures the grid to use a different Store and Column Model. - * The View will be bound to the new objects and refreshed. - * @param {Roo.data.Store} dataSource The new {@link Roo.data.Store} object - * @param {Roo.grid.ColumnModel} The new {@link Roo.grid.ColumnModel} object - */ + /** + * Reconfigures the grid to use a different Store and Column Model. + * The View will be bound to the new objects and refreshed. + * @param {Roo.data.Store} dataSource The new {@link Roo.data.Store} object + * @param {Roo.grid.ColumnModel} The new {@link Roo.grid.ColumnModel} object + */ reconfigure : function(dataSource, colModel){ if(this.loadMask){ this.loadMask.destroy(); @@ -494,7 +501,41 @@ Roo.extend(Roo.grid.Grid, Roo.util.Observable, { this.colModel = colModel; this.view.refresh(true); }, - + /** + * addColumns + * Add's a column, default at the end.. + + * @param {int} position to add (default end) + * @param {Array} of objects of column configuration see {@link Roo.grid.ColumnModel} + */ + addColumns : function(pos, ar) + { + + for (var i =0;i< ar.length;i++) { + var cfg = ar[i]; + cfg.id = typeof(cfg.id) == 'undefined' ? Roo.id() : cfg.id; // don't normally use this.. + this.cm.lookup[cfg.id] = cfg; + } + + + if (typeof(pos) == 'undefined' || pos >= this.cm.config.length) { + pos = this.cm.config.length; //this.cm.config.push(cfg); + } + pos = Math.max(0,pos); + ar.unshift(0); + ar.unshift(pos); + this.cm.config.splice.apply(this.cm.config, ar); + + + + this.view.generateRules(this.cm); + this.view.refresh(true); + + }, + + + + // private onKeyDown : function(e){ this.fireEvent("keydown", e); @@ -523,15 +564,47 @@ Roo.extend(Roo.grid.Grid, Roo.util.Observable, { // private processEvent : function(name, e){ - this.fireEvent(name, e); + // does this fire select??? + //Roo.log('grid:processEvent ' + name); + + if (name != 'touchstart' ) { + this.fireEvent(name, e); + } + var t = e.getTarget(); var v = this.view; var header = v.findHeaderIndex(t); if(header !== false){ - this.fireEvent("header" + name, this, header, e); + var ename = name == 'touchstart' ? 'click' : name; + + this.fireEvent("header" + ename, this, header, e); }else{ var row = v.findRowIndex(t); var cell = v.findCellIndex(t); + if (name == 'touchstart') { + // first touch is always a click. + // hopefull this happens after selection is updated.? + name = false; + + if (typeof(this.selModel.getSelectedCell) != 'undefined') { + var cs = this.selModel.getSelectedCell(); + if (row == cs[0] && cell == cs[1]){ + name = 'dblclick'; + } + } + if (typeof(this.selModel.getSelections) != 'undefined') { + var cs = this.selModel.getSelections(); + var ds = this.dataSource; + if (cs.length == 1 && ds.getAt(row) == cs[0]){ + name = 'dblclick'; + } + } + if (!name) { + return; + } + } + + if(row !== false){ this.fireEvent("row" + name, this, row, e); if(cell !== false){ @@ -545,6 +618,10 @@ Roo.extend(Roo.grid.Grid, Roo.util.Observable, { onClick : function(e){ this.processEvent("click", e); }, + // private + onTouchStart : function(e){ + this.processEvent("touchstart", e); + }, // private onContextMenu : function(e, t){