ImageCells by themselves don't care about click events. What I did was
made a decorator that wraps any cell to handle click events and
delegates them to the FieldUpdater:
public class ClickableCellDecorator<C> implements Cell<C> {
private static final String CLICK_EVENT = "click";
private final Cell<C> cell;
private final Set<String> events;
/**
* Constructor accepts the cell to be wrapped.
*
* @param cell
* The wrapped cell.
*/
public ClickableCellDecorator(final Cell<C> cell) {
super();
this.cell = cell;
// Add the click event to the wrapped cell's list of consumed
events
Set<String> wrappedEvents = this.cell.getConsumedEvents();
if (wrappedEvents == null || wrappedEvents.isEmpty()) {
this.events = Collections.singleton(CLICK_EVENT);
} else {
this.events = new HashSet<String>(wrappedEvents);
this.events.add(CLICK_EVENT);
}
}
@Override
public boolean dependsOnSelection() {
return cell.dependsOnSelection();
}
@Override
public Set<String> getConsumedEvents() {
return events;
}
@Override
public boolean handlesSelection() {
return cell.handlesSelection();
}
@Override
public boolean isEditing(
final com.google.gwt.cell.client.Cell.Context context,
final Element parent, final C value) {
return cell.isEditing(context, parent, value);
}
@Override
public void onBrowserEvent(
final com.google.gwt.cell.client.Cell.Context context,
final Element parent, final C value, final NativeEvent event,
final ValueUpdater<C> valueUpdater) {
if (CLICK_EVENT.equals(event.getType()) && valueUpdater != null)
{
valueUpdater.update(value);
}
cell.onBrowserEvent(context, parent, value, event,
valueUpdater);
}
@Override
public void render(final com.google.gwt.cell.client.Cell.Context
context,
final C value, final SafeHtmlBuilder sb) {
cell.render(context, value, sb);
}
@Override
public boolean resetFocus(
final com.google.gwt.cell.client.Cell.Context context,
final Element parent, final C value) {
return cell.resetFocus(context, parent, value);
}
@Override
public void setValue(final com.google.gwt.cell.client.Cell.Context
context,
final Element parent, final C value) {
cell.setValue(context, parent, value);
}
}
It was much easier and more flexible than extending every cell type i
wanted to be clickable.
Now you can just use new ClickableCellDecorator(new ImageCell())) and
you should see events.
Hope this helps,
Adam
On Oct 17, 4:36 am, Thomas Trebbien Pedersen