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.

Reply via email to