package name.pehl.karaka.client.cell;
import com.google.gwt.cell.client.ValueUpdater;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.EventTarget;
import com.google.gwt.dom.client.ImageElement;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.dom.client.TableCellElement;
import com.google.gwt.dom.client.TableRowElement;
import name.pehl.karaka.shared.model.BaseModel;
import static com.google.gwt.dom.client.Style.Visibility.HIDDEN;
import static com.google.gwt.dom.client.Style.Visibility.VISIBLE;
public class ModelActionCell<T extends BaseModel> extends ModelCell<T>
{
final String id;
public ModelActionCell(final String id, final ModelsTable<T> table, final ModelRenderer<T> renderer)
{
super(table, renderer);
this.id = id;
}
public void show(final TableRowElement row)
{
actionContainer(row).getStyle().setVisibility(VISIBLE);
}
public void hide(final TableRowElement row)
{
actionContainer(row).getStyle().setVisibility(HIDDEN);
}
protected DivElement actionContainer(final TableRowElement row)
{
NodeList<TableCellElement> cells = row.getCells();
if (cells.getLength() > 0)
{
TableCellElement cell = cells.getItem(cells.getLength() - 1);
// First div is generated by GWT, the second is the one from the html template
return cell.getFirstChildElement().getFirstChildElement().cast();
}
return Document.get().createDivElement();
}
@Override
protected void onClick(final Context context, final Element parent, final T value,
final NativeEvent event, final ValueUpdater<T> valueUpdater)
{
EventTarget eventTarget = event.getEventTarget();
if (eventTarget != null)
{
ImageElement img = eventTarget.cast();
if (ImageElement.is(img))
{
Element parentElement = img.getParentElement();
if (parentElement != null && parentElement.getAttribute("id") != null)
{
table.onAction(value, parentElement.getAttribute("id"));
}
}
}
}
}