package com.akjava.gwt.lib.client.widget.cell; import com.google.gwt.cell.client.AbstractCell; import com.google.gwt.cell.client.ValueUpdater; 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.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.safehtml.shared.SafeHtmlUtils; public class StyleImageButtonCell extends AbstractCell<String> { private String styleName; public StyleImageButtonCell(String styleName){ super("click", "keydown"); this.styleName=styleName; } @Override public void render(Context context,String value, SafeHtmlBuilder sb) { // Always do a null check on the value. Cell widgets can pass null to cells // if the underlying data contains a null, or if the data arrives out of order. if (value == null) { return; } // If the value comes from the user, we escape it to avoid XSS attacks. SafeHtml safeValue = SafeHtmlUtils.fromString(value); // Append some HTML that sets the text color. sb.appendHtmlConstant("<img class=\"" + styleName + "\" src=\""+value+"\">"); //sb.append(safeValue); sb.appendHtmlConstant("</img>"); } @Override public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { super.onBrowserEvent(context, parent, value, event, valueUpdater); if ("click".equals(event.getType())) { EventTarget eventTarget = event.getEventTarget(); if (!Element.is(eventTarget)) { return; } if (parent.getFirstChildElement().isOrHasChild(Element.as(eventTarget))) { // Ignore clicks that occur outside of the main element. onEnterKeyDown(context, parent, value, event, valueUpdater); } } } @Override protected void onEnterKeyDown(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { if (valueUpdater != null) { valueUpdater.update(value); } } }