diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/GridTabRowRenderer.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/GridTabRowRenderer.java index bef4d72b34..6cbf3560e8 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/GridTabRowRenderer.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/GridTabRowRenderer.java @@ -54,7 +54,6 @@ import org.zkoss.zul.RendererCtrl; import org.zkoss.zul.Row; import org.zkoss.zul.RowRenderer; import org.zkoss.zul.RowRendererExt; -import org.zkoss.zhtml.Input; import org.zkoss.zhtml.Label; import org.zkoss.zhtml.Text; @@ -66,9 +65,8 @@ import org.zkoss.zhtml.Text; *
  • BF [ 2996608 ] GridPanel is not displaying time * https://sourceforge.net/tracker/?func=detail&aid=2996608&group_id=176962&atid=955896 */ -public class GridTabRowRenderer implements RowRenderer, RowRendererExt, RendererCtrl { +public class GridTabRowRenderer implements RowRenderer, RowRendererExt, RendererCtrl { - private static final String CURRENT_ROW_STYLE = "background-color: #BDEDFF"; private static final int MAX_TEXT_LENGTH = 60; private GridTab gridTab; private int windowNo; @@ -98,9 +96,19 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt, Renderer this.dataBinder = new GridTabDataBinder(gridTab); } - private WEditor getEditorCell(GridField gridField, Object object, int i) { + private WEditor getEditorCell(GridField gridField) { WEditor editor = editors.get(gridField); if (editor != null) { + prepareFieldEditor(gridField, editor); + } + editor.addValueChangeListener(dataBinder); + gridField.removePropertyChangeListener(editor); + gridField.addPropertyChangeListener(editor); + editor.setValue(gridField.getValue()); + return editor; + } + + private void prepareFieldEditor(GridField gridField, WEditor editor) { if (editor instanceof WButtonEditor) { if (m_windowPanel != null) @@ -117,21 +125,11 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt, Renderer } } } - else - { - editor.addValueChangeListener(dataBinder); - } - gridField.removePropertyChangeListener(editor); - gridField.addPropertyChangeListener(editor); - editor.setValue(gridField.getValue()); //streach component to fill grid cell - if (editor.getComponent() instanceof Textbox) - ((HtmlBasedComponent)editor.getComponent()).setWidth("98%"); - else + if (editor.getComponent() instanceof HtmlBasedComponent) { editor.fillHorizontal(); } - return editor; } private int getColumnIndex(GridField field) { @@ -309,7 +307,7 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt, Renderer else child = parent; } - Component component = div.getFirstChild(); + Component component = (Component) div.getAttribute("display.component"); if (updateCellLabel) { if (component instanceof Label) { Label label = (Label)component; @@ -325,13 +323,14 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt, Renderer checkBox.setChecked(false); } } - component.setVisible(true); if (row == null) row = ((Row)div.getParent()); entry.getValue().getComponent().detach(); entry.getKey().removePropertyChangeListener(entry.getValue()); entry.getValue().removeValuechangeListener(dataBinder); + + div.appendChild(component); } } @@ -345,7 +344,7 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt, Renderer * @see RowRenderer#render(Row, Object) */ @Override - public void render(Row row, Object data, int index) throws Exception { + public void render(Row row, Object[] data, int index) throws Exception { //don't render if not visible if (gridPanel != null && !gridPanel.isVisible()) { return; @@ -357,7 +356,7 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt, Renderer if (rowListener == null) rowListener = new RowListener((Grid)row.getParent().getParent()); - currentValues = (Object[])data; + currentValues = data; int columnCount = gridTab.getTableModel().getColumnCount(); GridField[] gridField = gridTab.getFields(); Grid grid = (Grid) row.getParent().getParent(); @@ -368,9 +367,18 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt, Renderer rowIndex = (paging.getActivePage() * paging.getPageSize()) + rowIndex; } + Div indicatorDiv = new Div(); + indicatorDiv.setStyle("text-align: center; border: none; width: 100%; height: 100%;"); + indicatorDiv.appendChild(new Label()); + //TODO: checkbox for selection and batch action ( delete, export, complete, etc ) +// indicatorDiv.appendChild(new Checkbox()); + row.appendChild(indicatorDiv); + int colIndex = -1; - int compCount = 0; for (int i = 0; i < columnCount; i++) { + if (editors.get(gridField[i]) == null) + editors.put(gridField[i], WebEditorFactory.getEditor(gridField[i], true)); + if (!gridField[i].isDisplayed()) { continue; } @@ -380,13 +388,9 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt, Renderer String divStyle = "border: none; width: 100%; height: 100%;"; org.zkoss.zul.Column column = (org.zkoss.zul.Column) columns.getChildren().get(colIndex); if (column.isVisible()) { - compCount++; Component component = getDisplayComponent(rowIndex, currentValues[i], gridField[i]); div.appendChild(component); -// if (compCount == 1) { - //add hidden input component to help focusing to row - div.appendChild(createAnchorInput()); -// } + div.setAttribute("display.component", component); if (DisplayType.YesNo == gridField[i].getDisplayType() || DisplayType.Image == gridField[i].getDisplayType()) { divStyle += "text-align:center; "; @@ -399,6 +403,7 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt, Renderer div.setAttribute("columnName", gridField[i].getColumnName()); div.addEventListener(Events.ON_CLICK, rowListener); div.addEventListener(Events.ON_DOUBLE_CLICK, rowListener); + row.addEventListener(Events.ON_CLICK, rowListener); row.appendChild(div); } @@ -408,28 +413,27 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt, Renderer row.addEventListener(Events.ON_OK, rowListener); } - /** - * @param component - * @return - */ - private Input createAnchorInput() { - Input input = new Input(); - input.setDynamicProperty("type", "text"); - input.setValue(""); - input.setDynamicProperty("readonly", "readonly"); - input.setStyle("border: none; display: none; width: 3px;"); - return input; - } - /** * @param row */ public void setCurrentRow(Row row) { if (currentRow != null && currentRow.getParent() != null && currentRow != row) { - currentRow.setStyle(null); + Div div = (Div) currentRow.getFirstChild(); + if (div != null) { + Label label = (Label) div.getFirstChild(); + label.getChildren().clear(); + } } currentRow = row; - currentRow.setStyle(CURRENT_ROW_STYLE); + Div div = (Div) currentRow.getFirstChild(); + if (div != null) { + Label label = (Label) div.getFirstChild(); + label.getChildren().clear(); + label.appendChild(new Text(">>")); + label.setStyle("color: darkblue; font-weight: bold; text-align: center"); + } + currentRowIndex = gridTab.getCurrentRow(); + if (currentRowIndex == gridTab.getCurrentRow()) { if (editing) { stopEditing(false); @@ -466,20 +470,19 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt, Renderer int columnCount = gridTab.getTableModel().getColumnCount(); GridField[] gridField = gridTab.getFields(); org.zkoss.zul.Columns columns = grid.getColumns(); - int colIndex = -1; + //skip indicator column + int colIndex = 0; for (int i = 0; i < columnCount; i++) { if (!gridField[i].isDisplayed()) { continue; } colIndex ++; - if (editors.get(gridField[i]) == null) - editors.put(gridField[i], WebEditorFactory.getEditor(gridField[i], true)); org.zkoss.zul.Column column = (org.zkoss.zul.Column) columns.getChildren().get(colIndex); if (column.isVisible()) { Div div = (Div) currentRow.getChildren().get(colIndex); - div.getFirstChild().setVisible(false); - WEditor editor = getEditorCell(gridField[i], currentValues[i], i); + div.getFirstChild().detach(); + WEditor editor = getEditorCell(gridField[i]); div.appendChild(editor.getComponent()); WEditorPopupMenu popupMenu = editor.getPopupMenu(); @@ -596,7 +599,7 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt, Renderer this.gridPanel = gridPanel; } - class RowListener implements EventListener { + class RowListener implements EventListener { private Grid _grid; @@ -608,6 +611,7 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt, Renderer if (Events.ON_CLICK.equals(event.getName())) { Event evt = new Event(Events.ON_CLICK, _grid, event.getTarget()); Events.sendEvent(_grid, evt); + evt.stopPropagation(); } else if (Events.ON_DOUBLE_CLICK.equals(event.getName())) { Event evt = new Event(Events.ON_DOUBLE_CLICK, _grid, _grid);