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.

Reply via email to