Author: konstantin.mishin
Date: 2007-12-26 13:15:40 -0500 (Wed, 26 Dec 2007)
New Revision: 5021
Modified:
trunk/ui/scrollableDataTable/src/main/java/org/richfaces/renderkit/html/ScrollableDataTableBaseRenderer.java
trunk/ui/scrollableDataTable/src/main/javascript/ClientUI/controls/grid/GridBody.js
trunk/ui/scrollableDataTable/src/main/javascript/ClientUI/controls/grid/GridHeader.js
trunk/ui/scrollableDataTable/src/main/templates/org/richfaces/scrollable-data-table.jspx
Log:
merged scrollable-data-table with 3/1/x branch
Modified:
trunk/ui/scrollableDataTable/src/main/java/org/richfaces/renderkit/html/ScrollableDataTableBaseRenderer.java
===================================================================
---
trunk/ui/scrollableDataTable/src/main/java/org/richfaces/renderkit/html/ScrollableDataTableBaseRenderer.java 2007-12-26
18:15:20 UTC (rev 5020)
+++
trunk/ui/scrollableDataTable/src/main/java/org/richfaces/renderkit/html/ScrollableDataTableBaseRenderer.java 2007-12-26
18:15:40 UTC (rev 5021)
@@ -335,7 +335,7 @@
if (kid.isRendered()) {
if (kid instanceof Column){
- if(state.isFrozenColumn() && !frozenTRRendered){
+ if(state.isFrozenColumn() && !frozenTRRendered &&
state.getFrozenColumnCount() > 0){
state.setFrozenPart(true);
frozenTRRendered = true;
@@ -470,15 +470,15 @@
state.setFrozenPart(isFrozen);
state.setClientId(grid.getClientId(context));
- grid.walk(context, rowsRenderer, state);
-
- int fakeRowsCount = grid.getRows() - grid.getRowCount();
- state.setFake(true);
- for (int i = 0; i < fakeRowsCount; i++) {
- rowsRenderer.process(context, null, state);
+ if (!isFrozen || state.getFrozenColumnCount() > 0) {
+ grid.walk(context, rowsRenderer, state);
+ int fakeRowsCount = grid.getRows() - grid.getRowCount();
+ state.setFake(true);
+ for (int i = 0; i < fakeRowsCount; i++) {
+ rowsRenderer.process(context, null, state);
+ }
+ state.setFake(false);
}
-
- state.setFake(false);
state.setRowIndex(0);
grid.setRowKey(null);
}
@@ -500,8 +500,26 @@
state.setFrozenPart(isFrozen);
state.setClientId(grid.getClientId(context));
state.setSepOffset(new Integer(0));
-
- ColumnWalker.iterateOverColumns(context, grid, headerCellRenderer, writer, state);
+ if (!isFrozen || state.getFrozenColumnCount() > 0) {
+ writer.startElement(HTML.TR_ELEMENT, grid);
+ getUtils().writeAttribute(
+ writer,
+ "class",
+ "dr-sdt-hr rich-std-header-row"
+ + grid.getAttributes().get("headerClass"));
+ ColumnWalker.iterateOverColumns(context, grid, headerCellRenderer,
+ writer, state);
+ if (!isFrozen) {
+ writer.startElement(HTML.th_ELEM, grid);
+ getUtils().writeAttribute(writer, "class",
+ "dr-sdt-hc rich-sdt-header-cell");
+ writer.startElement(HTML.DIV_ELEM, grid);
+ getUtils().writeAttribute(writer, "class", "dr-sdt-hcbody");
+ writer.endElement(HTML.DIV_ELEM);
+ writer.endElement(HTML.th_ELEM);
+ }
+ writer.endElement(HTML.TR_ELEMENT);
+ }
}
public void renderCols(FacesContext context, UIScrollableDataTable grid, boolean
isFrozen) throws IOException{
@@ -707,6 +725,8 @@
grid.walk(context, ajaxRowsRenderer, state);
int fakeRowsCount = grid.getRows() - grid.getRowCount();
+ ScrollableDataTableRendererState.restoreState(context);
+ grid.setRowKey(null);
state.setFake(true);
for (int i = 0; i < fakeRowsCount; i++) {
ajaxRowsRenderer.process(context, null, state);
@@ -728,9 +748,6 @@
renderHiddenScrollInput(context, grid);
ajaxContext.addRenderedArea(client_id+":si");
-
- ScrollableDataTableRendererState.restoreState(context);
- grid.setRowKey(null);
ajaxContext.setResponseData(grid.getResponseData());
Modified:
trunk/ui/scrollableDataTable/src/main/javascript/ClientUI/controls/grid/GridBody.js
===================================================================
---
trunk/ui/scrollableDataTable/src/main/javascript/ClientUI/controls/grid/GridBody.js 2007-12-26
18:15:20 UTC (rev 5020)
+++
trunk/ui/scrollableDataTable/src/main/javascript/ClientUI/controls/grid/GridBody.js 2007-12-26
18:15:40 UTC (rev 5021)
@@ -139,35 +139,34 @@
this.sizeBox.setHeight(this.templNormal.getElement().offsetHeight);
},
parseTemplate: function(templFrozen, templNormal) {
- if(!templNormal || !templNormal.rows || templNormal.rows.length===0) {
- return false;
+ var result = false;
+ if(templNormal && templNormal.rows && templNormal.rows.length != 0) {
+ var columns = this.grid.getHeader().getColumns();
+ var i=0, j=0;
+ var cols = this.templFrozen.getElement().getElementsByTagName("col");
+ for(i=0; i<cols.length; i++) {
+ columns[j].bodyCol = $(cols[i]);
+ j++;
+ }
+ cols = this.templNormal.getElement().getElementsByTagName("col");
+ for(i=0; i<cols.length; i++) {
+ columns[j].bodyCol = $(cols[i]);
+ j++;
+ }
+
+ this.rowsCount = Math.min(templNormal.rows.length, this.grid.dataModel.getCount());
+
+ //if(ClientUILib.isGecko) {
+ // this.defaultRowHeight -= this.getBorderWidth("tb") +
this.getPadding("tb");
+ //}
+ this.helpObj = new ClientUI.common.box.Box(templFrozen, null, true);
+ this.countToLoad = 0;
+ this.startRow = 0;
+ this.startIndex = 0;
+ result = true;
}
-
- var columns = this.grid.getHeader().getColumns();
- var i=0, j=0;
- var cols = this.templFrozen.getElement().getElementsByTagName("col");
- for(i=0; i<cols.length; i++) {
- columns[j].bodyCol = $(cols[i]);
- j++;
- }
- cols = this.templNormal.getElement().getElementsByTagName("col");
- for(i=0; i<cols.length; i++) {
- columns[j].bodyCol = $(cols[i]);
- j++;
- }
-
- this.rowsCount = Math.min(templNormal.rows.length, this.grid.dataModel.getCount());
-
- //if(ClientUILib.isGecko) {
- // this.defaultRowHeight -= this.getBorderWidth("tb") +
this.getPadding("tb");
- //}
- this.helpObj = new ClientUI.common.box.Box(templFrozen, null, true);
- this.countToLoad = 0;
- this.startRow = 0;
- this.startIndex = 0;
this.currRange = $R(0, this.rowsCount);
-
- return true;
+ return result;
},
setScrollPos: function(pos) {
this.contentBox.getElement().scrollTop = pos;
@@ -334,8 +333,10 @@
}.bind(this), this.grid.dataModel.getRequestDelay());
},
adjustColumnWidth: function(column, width) {
- var columns = this.grid.getHeader().getColumns();
- columns[column].bodyCol.width = width>0 ? width : 1;
+ var bodyCol = this.grid.getHeader().getColumns()[column].bodyCol;
+ if (bodyCol) {
+ bodyCol.width = width>0 ? width : 1;
+ }
},
setFakeColumnWidth: function() {
@@ -726,7 +727,7 @@
this.scrollBox.getElement().scrollTop = 0;
this.currRange.start = -this.rowsCount;
this.currRange.end = -1;
- this._onContentVScroll(0);
+ this._onContentVScroll({memo:{pos:0}});
},
_getRowIndex: function(rowId) {
return Number(rowId.split(this.grid.getElement().id)[1].split(":")[2]);
Modified:
trunk/ui/scrollableDataTable/src/main/javascript/ClientUI/controls/grid/GridHeader.js
===================================================================
---
trunk/ui/scrollableDataTable/src/main/javascript/ClientUI/controls/grid/GridHeader.js 2007-12-26
18:15:20 UTC (rev 5020)
+++
trunk/ui/scrollableDataTable/src/main/javascript/ClientUI/controls/grid/GridHeader.js 2007-12-26
18:15:40 UTC (rev 5021)
@@ -20,7 +20,7 @@
$super(template);
// register event handlers
- this.eventSepDblClick = this.OnSepDblClick.bindAsEventListener(this);
+ this.eventSepClick = this.OnSepClick.bindAsEventListener(this);
this.eventSepMouseDown = this.OnSepMouseDown.bindAsEventListener(this);
this.eventSepMouseUp = this.OnSepMouseUp.bindAsEventListener(this);
this.eventSepMouseMove = this.OnSepMouseMove.bindAsEventListener(this);
@@ -107,7 +107,8 @@
this.helpObj = new ClientUI.common.box.Box(this.frozenContentBox.getElement(), null,
true);
- var fcount = this.headerFrozenRow.getElement().rows[0].cells.length;
+ var rows = this.headerFrozenRow.getElement().rows
+ var fcount = rows.length?rows[0].cells.length:0;
var ncount = this.headerRow.getElement().rows[0].cells.length;
var columns = new Array(fcount + ncount);
var defaultWidth = 0;
@@ -118,11 +119,11 @@
// Get columns information
var i = 0, h, j=0, cell;
var cols = this.headerFrozenRow.getElement().getElementsByTagName("col");
- var cells = this.headerFrozenRow.getElement().rows[0].cells;
+ this.frozenCells = fcount?this.headerFrozenRow.getElement().rows[0].cells:[];
var ids = this.grid.options.ids;
- var count = cells.length;
+ var count = this.frozenCells.length;
for(i=0; i<count; i++) {
- cell = cells[i];
+ cell = this.cells[i];
columns[j] = {
columnId: ids[i],
col: cols[i],
@@ -151,7 +152,7 @@
columns[j].sep = new ClientUI.common.box.InlineBox(details[0], null, true);
columns[j].sep.getElement().columnIndex = j;
if(!columns[j].fixedWidth) {
- Event.observe(columns[j].sep.getElement(), 'dblclick',
this.eventSepDblClick);
+ Event.observe(columns[j].sep.getElement(), 'click', this.eventSepClick);
Event.observe(columns[j].sep.getElement(), 'mousedown',
this.eventSepMouseDown);
}
else {
@@ -165,10 +166,10 @@
}
cols = this.headerRow.getElement().getElementsByTagName("col");
- cells = this.headerRow.getElement().rows[0].cells;
- count = cells.length;
+ this.cells = this.headerRow.getElement().rows[0].cells;
+ count = this.cells.length;
for(i=0; i<count; i++) {
- cell = cells[i];
+ cell = this.cells[i];
columns[j] = {
columnId: ids[i],
@@ -199,7 +200,7 @@
columns[j].sep = new ClientUI.common.box.InlineBox(details[0], null, true);
columns[j].sep.getElement().columnIndex = j;
if(!columns[j].fixedWidth) {
- Event.observe(columns[j].sep.getElement(), 'dblclick',
this.eventSepDblClick);
+ Event.observe(columns[j].sep.getElement(), 'click', this.eventSepClick);
Event.observe(columns[j].sep.getElement(), 'mousedown',
this.eventSepMouseDown);
}
else {
@@ -238,19 +239,17 @@
},
agjustSeparators: function() {
var i=0;
- var fcells = this.headerFrozenRow.getElement().rows[0].cells;
- var ncells = this.headerRow.getElement().rows[0].cells;
- var length = fcells.length;
+ var length = this.frozenCells.length;
var delta = 4;
- if (ncells[0].offsetWidth == ncells[0].clientWidth) {
+ if (this.cells[0].offsetWidth == this.cells[0].clientWidth) {
delta--;
}
for(var j=0; j<length; i++,j++) {
- this._columns[i].sep.moveToX(fcells[j].offsetLeft + fcells[j].offsetWidth - delta);
+ this._columns[i].sep.moveToX(this.frozenCells[j].offsetLeft +
this.frozenCells[j].offsetWidth - delta);
}
- var length = ncells.length - 1;
+ var length = this.cells.length - 1;
for(var j=0; j<length; i++,j++) {
- this._columns[i].sep.moveToX(ncells[j].offsetLeft + ncells[j].offsetWidth - delta);
+ this._columns[i].sep.moveToX(this.cells[j].offsetLeft + this.cells[j].offsetWidth -
delta);
}
},
updateSize: function() {
@@ -361,8 +360,8 @@
Event.stop(event);
}
},
- OnSepDblClick: function(event) {
- ClientUILib.log(ClientUILogger.INFO, "OnSepDblClick");
+ OnSepClick: function(event) {
+ Event.stop(event);
},
_showSplitter: function(index) {
if(!this.columnSplitter) {
Modified:
trunk/ui/scrollableDataTable/src/main/templates/org/richfaces/scrollable-data-table.jspx
===================================================================
---
trunk/ui/scrollableDataTable/src/main/templates/org/richfaces/scrollable-data-table.jspx 2007-12-26
18:15:20 UTC (rev 5020)
+++
trunk/ui/scrollableDataTable/src/main/templates/org/richfaces/scrollable-data-table.jspx 2007-12-26
18:15:40 UTC (rev 5021)
@@ -100,13 +100,11 @@
</jsp:scriptlet>
<thead>
- <tr class="dr-sdt-hr rich-std-header-row
#{component.attributes['headerClass']}">
- <jsp:scriptlet>
- <![CDATA[
- renderHeaders(context, component, true);
- ]]>
- </jsp:scriptlet>
- </tr>
+ <jsp:scriptlet>
+ <![CDATA[
+ renderHeaders(context, component, true);
+ ]]>
+ </jsp:scriptlet>
</thead>
</table>
</span>
@@ -121,16 +119,11 @@
</jsp:scriptlet>
<col width="1"/>
<thead>
- <tr class="dr-sdt-hr rich-std-header-row
#{component.attributes['headerClass']}">
- <jsp:scriptlet>
- <![CDATA[
- renderHeaders(context, component, false);
- ]]>
- </jsp:scriptlet>
- <th class="dr-sdt-hc rich-sdt-header-cell">
- <div class="dr-sdt-hcbody" />
- </th>
- </tr>
+ <jsp:scriptlet>
+ <![CDATA[
+ renderHeaders(context, component, false);
+ ]]>
+ </jsp:scriptlet>
</thead>
</table>
</span>