package org.gcube.portlets.admin.authportletmanager.client.widget; import static com.google.gwt.dom.client.BrowserEvents.CLICK; import static com.google.gwt.dom.client.BrowserEvents.KEYDOWN; import com.google.gwt.cell.client.AbstractCell; import com.google.gwt.cell.client.ActionCell.Delegate; 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 ActionCellClass extends AbstractCell { private final SafeHtml html; private final Delegate delegate; /** * Construct a new {@link ActionCellClass}. * * @param message the message to display on the button * @param delegate the delegate that will handle events */ public ActionCellClass(SafeHtml message, Delegate delegate) { super(CLICK, KEYDOWN); this.delegate = delegate; String cssClass=""; if (message.asString().toLowerCase().equals("delete")) cssClass="btn-danger"; this.html = new SafeHtmlBuilder().appendHtmlConstant( "").toSafeHtml(); } /** * Construct a new {@link ActionCellClass} with a text String that does not contain * HTML markup. * * @param text the text to display on the button * @param delegate the delegate that will handle events */ public ActionCellClass(String text, Delegate delegate) { this(SafeHtmlUtils.fromString(text), delegate); } @Override public void onBrowserEvent(Context context, Element parent, C value, NativeEvent event, ValueUpdater 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 public void render(Context context, C value, SafeHtmlBuilder sb) { sb.append(html); } @Override protected void onEnterKeyDown(Context context, Element parent, C value, NativeEvent event, ValueUpdater valueUpdater) { delegate.execute(value); } }