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
<[email protected]> wrote:
> Hi Adam,
>
> Yes thank you, this helps a lot - I havn't thought about that.
>
> But am now having trouble constructing an CompositeCell with the 2
> images. Can you help me a bit here with a little code example.
>
> I have to do something like this right:
>
> List<HasCell<T, C>> hasCells = new ArrayList<HasCell<T, C>>();
> hasCells.add(new HasCell<T, C>() {
> // Setup the image here?
> });
> hasCells.add(new HasCell<T, C>() {
> // Setup the image here?
> });
>
> CompositeCell myCell = new CompositeCell<C>(hasCells) {
>
> // Then add the myCell to the CellTable here
>
> Maybe you can help me in the right direction.
>
> Thanks,
> \Thomas
>
> On 14 Okt., 19:16, Adam <[email protected]> wrote:
>
>
>
>
>
>
>
> > I use CompositeCell for this type of thing. Create a composite of 2
> > cells, each with an image in them, and each cell handling "click"
> > events. Each cell can detect clicks in their respective FieldUpdaters
> > and still be rendered in the same cell.
>
> > Hope this helps,
> > Adam
>
> > On Oct 14, 9:41 am, Thomas Trebbien Pedersen
>
> > <[email protected]> wrote:
> > > Hi,
>
> > > I have a celltable where I would like to sort the rows by clicking
> > > either a up or a down arrow. The two sort-direction arrows are placed
> > > in a single cell on each row.
>
> > > Now how do I add a click event to each image? I know a cell has a
> > > onBrowserEvent(...) put thats for the entire cell right? What about
> > > multiple images in a cell?
>
> > > Does anyone have some good suggestions.
>
> > > Thanks.
--
You received this message because you are subscribed to the Google Groups
"Google Web Toolkit" group.
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.