This is a solution for 2.0.1
PS: this can be used for any class that extends TriggerField (ComboBox, DateField, TimeField, and so on).
PS: this was based on the TwinTriggerField code.
Code:
public class XComboBox<D extends ModelData> extends ComboBox<D> {
protected El twinTrigger;
private final String twinTriggerStyle = "x-form-clear-trigger";
private El span;
@Override
protected void onResize(int width, int height) {
super.onResize(width, height);
int tw = span.getWidth();
if (width != Style.DEFAULT) {
getInputEl().setWidth(width - tw);
}
}
@Override
protected void afterRender() {
super.afterRender();
addStyleOnOver(twinTrigger.dom, "x-form-trigger-over");
}
@Override
public void onComponentEvent(ComponentEvent ce) {
super.onComponentEvent(ce);
int type = ce.getEventTypeInt();
if ((ce.getTarget() == twinTrigger.dom) && (type == Event.ONCLICK)) {
onTwinTriggerClick(ce);
}
}
@Override
protected void onRender(Element target, int index) {
input = new El(DOM.createInputText());
wrap = new El(DOM.createDiv());
wrap.dom.setClassName("x-form-field-wrap");
trigger = new El(DOM.createImg());
trigger.dom.setClassName("x-form-trigger " + triggerStyle);
trigger.dom.setPropertyString("src", GXT.BLANK_IMAGE_URL);
twinTrigger = new El(DOM.createImg());
twinTrigger.dom.setClassName("x-form-trigger " + twinTriggerStyle);
twinTrigger.dom.setPropertyString("src", GXT.BLANK_IMAGE_URL);
span = new El(DOM.createSpan());
span.dom.setClassName("x-form-twin-triggers");
DOM.appendChild(span.dom, trigger.dom);
DOM.appendChild(span.dom, twinTrigger.dom);
DOM.appendChild(wrap.dom, input.dom);
DOM.appendChild(wrap.dom, span.dom);
setElement(wrap.dom, target, index);
addStyleOnOver(twinTrigger.dom, "x-form-trigger-over");
addStyleOnOver(trigger.dom, "x-form-trigger-over");
if (isHideTrigger()) {
span.setVisible(false);
}
super.onRender(target, index);
if (!isEditable()) {
setEditable(true);
setEditable(false);
}
DOM.sinkEvents(twinTrigger.dom, Event.ONCLICK | Event.MOUSEEVENTS);
DOM.sinkEvents(wrap.dom, Event.FOCUSEVENTS);
DOM.sinkEvents(trigger.dom, Event.ONCLICK | Event.MOUSEEVENTS);
}
protected void onTwinTriggerClick(ComponentEvent ce) {
setValue(null);
clearInvalid();
fireEvent(Events.TwinTriggerClick, ce);
}
}
Regards,
Michel.