Known issue, fixed in trunk:
http://code.google.com/p/google-web-toolkit/issues/detail?id=5714&q=cell%20table%20event
On Wednesday, March 21, 2012 3:22:04 PM UTC+1, Musicman75 wrote:
>
> 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 view this discussion on the web visit
https://groups.google.com/d/msg/google-web-toolkit/-/45PqDmhFWYwJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-web-toolkit?hl=en.