Hello, I've a problem using a custom cell in a cellTable. My custom renderer renders the data with templates and includes a table. On mouseOver the main cellTable highlights the row, but on mouseOver on the included table, the highlight of the row gets lost.
How can I get the row highlighted even if I hover the internal table? Thanks for help. Here's a small example: Playground.java (implementing EntryPoint): ---------- package com.heiler.playground.client; import com.google.gwt.cell.client.TextCell; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.user.cellview.client.CellTable; import com.google.gwt.user.cellview.client.Column; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.view.client.ListDataProvider; import com.heiler.playground.shared.MainObject; public class Playground implements EntryPoint { @Override public void onModuleLoad() { ListDataProvider<MainObject> dataProvider = new ListDataProvider<MainObject>(); for (int i = 0; i < 5; i++) { dataProvider.getList().add(new MainObject(i)); } CellTable<MainObject> mainTable = new CellTable<MainObject>(); Column<MainObject, String> idColumn = new Column<MainObject, String>( new TextCell()) { @Override public String getValue(MainObject object) { return Integer.toString(object.getId()); } }; Column<MainObject, MainObject> subColumn = new Column<MainObject, MainObject>( new CustomCell()) { @Override public MainObject getValue(MainObject object) { return object; } }; mainTable.addColumn(idColumn, "ID"); mainTable.addColumn(subColumn, "Sub"); dataProvider.addDataDisplay(mainTable); mainTable.setWidth("800px"); RootPanel.get().add(mainTable); } } ------------------- CustomCell.java: ------------------- package com.heiler.playground.client; import java.util.List; import com.google.gwt.cell.client.AbstractCell; import com.google.gwt.cell.client.Cell; import com.google.gwt.cell.client.ValueUpdater; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.EventTarget; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.safehtml.client.SafeHtmlTemplates; import com.google.gwt.safehtml.client.SafeHtmlTemplates.Template; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Event; import com.heiler.playground.shared.MainObject; import com.heiler.playground.shared.SubObject; public class CustomCell extends AbstractCell<MainObject> { interface Template extends SafeHtmlTemplates { @Template("<div cellspacing=\"0\" cellpadding=\"0\">") SafeHtml stockInfoTableBegin(); @Template("</div>") SafeHtml stockInfoTableEnd(); @Template("<div>") SafeHtml stockInfoRowBegin(); @Template("</div>") SafeHtml stockInfoRowEnd(); @Template("<div class=\"itemsTableWidget-StockInfoHeaderColumn\">{0} </div>") SafeHtml stockInfoColumn(String columnName); @Template("<div class=\"itemsTableWidget-StockInfoDataColumn\">{0}</ div>") SafeHtml stockInfoBodyData(String data); @Template("<div class=\"itemsTableWidget-clearLayout\"></div>") SafeHtml clearStockInfoLayout(); } private static Template template = GWT.create(Template.class); /** * Creates and initializes new instance of this class. */ public CustomCell() { super("click", "mouseover", "mouseout"); } @Override public void render(Cell.Context context, MainObject value, SafeHtmlBuilder sb) { if (value != null) { renderStockInfo(context, value, sb); } } private void renderStockInfo(Cell.Context context, MainObject value, SafeHtmlBuilder sb) { SubObject itemStockInfo = value.getSub(); List<String> columnNameList = value.getColumnNames(); // stockinfo row start // table start sb.append(template.stockInfoTableBegin()); // header start sb.append(template.stockInfoRowBegin()); for (String columnName : columnNameList) { sb.append(template.stockInfoColumn(columnName)); } sb.append(template.stockInfoRowEnd()); // header end // info rows sb.append(template.stockInfoRowBegin()); sb.append(template.stockInfoBodyData(itemStockInfo.getMessage())); sb.append(template.stockInfoRowEnd()); sb.append(template.stockInfoTableEnd()); // table end sb.append(template.clearStockInfoLayout()); // container end } @Override public void onBrowserEvent(Context context, Element parent, MainObject value, NativeEvent event, ValueUpdater<MainObject> valueUpdater) { super.onBrowserEvent(context, parent, value, event, valueUpdater); EventTarget eventTarget = event.getEventTarget(); if (!Element.is(eventTarget)) { return; } switch (DOM.eventGetType((Event) event)) { case Event.ONCLICK: GWT.log("onClick"); break; case Event.ONMOUSEOUT: GWT.log("onMouseOut"); break; case Event.ONMOUSEOVER: GWT.log("onMouseOver"); break; default: break; } } } ---------------- MainObject.java (My root object contains a subObject): ---------------- package com.heiler.playground.shared; import java.util.ArrayList; import java.util.List; public class MainObject { Integer id; String name = "MainObject"; SubObject sub; String message = "This is the message of the main object"; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } List<String> columnNames = new ArrayList<String>(); public MainObject(int id) { this.id = id; this.sub = new SubObject(id); columnNames.add("id"); columnNames.add("Name"); columnNames.add("Dat"); } public List<String> getColumnNames() { return columnNames; } public void setColumnNames(List<String> columnNames) { this.columnNames = columnNames; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public SubObject getSub() { return sub; } public void setSub(SubObject sub) { this.sub = sub; } } -------------------- SubObject.java: -------------------- package com.heiler.playground.shared; public class SubObject { String name = "SubObject"; String dat = "Data"; Integer id = 10; String message = "This is the message"; public SubObject(int id) { this.id = id; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDat() { return dat; } public void setDat(String dat) { this.dat = dat; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } } -------------------- -- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.