gwt - Disable ButtonCell in a celltable -
in celltable, 1 column has buttoncells. need disable theses buttoncells clicking on button located outside celltable.
you create own button cell class. example:
import com.google.gwt.cell.client.abstractsafehtmlcell; import com.google.gwt.cell.client.cell; 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.text.shared.safehtmlrenderer; import com.google.gwt.text.shared.simplesafehtmlrenderer; /** * {@link cell} used render button. */ public class styledbuttoncell extends abstractsafehtmlcell<string> { private string disabledstring = ""; private boolean disabled = false; /** * construct new buttoncell use {@link simplesafehtmlrenderer}. */ public styledbuttoncell() { this(simplesafehtmlrenderer.getinstance()); } /** * construct new buttoncell use given {@link safehtmlrenderer}. * * @param renderer {@link safehtmlrenderer safehtmlrenderer<string>} instance */ public styledbuttoncell(safehtmlrenderer<string> renderer) { super(renderer, "click", "keydown"); } @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 occur outside of main element. onenterkeydown(context, parent, value, event, valueupdater); } } } @override public void render(context context, safehtml data, safehtmlbuilder sb) { sb.appendhtmlconstant("<button type=\"button\" tabindex=\"-1\"" + disabledstring + ">"); if (data != null) { sb.append(data); } sb.appendhtmlconstant("</button>"); } @override protected void onenterkeydown(context context, element parent, string value, nativeevent event, valueupdater<string> valueupdater) { if (valueupdater != null) { valueupdater.update(value); } } public boolean isdisabled() { return disabled; } public void setdisabled(boolean disabled) { this.disabled = disabled; if (disabled) { disabledstring = "disabled=\"disabled\""; } else { disabledstring = ""; } } }
then use cell table:
final styledbuttoncell buttoncell = new styledbuttoncell(); buttoncolumn = new column<someitem, string>(buttoncell) { public string getvalue(someitem object) { // value display in button. return "go"; } };
to disable button, call:
buttoncell.setdisabled(true); table.redraw();
Comments
Post a Comment