/*
* Ext GWT - Ext for GWT
* Copyright(c) 2007-2009, Ext JS, LLC.
* licensing@extjs.com
*
* http://extjs.com/license
*/
package com.extjs.gxt.ui.client.widget.form;
import com.extjs.gxt.ui.client.GXT;
import com.extjs.gxt.ui.client.Style;
import com.extjs.gxt.ui.client.core.El;
import com.extjs.gxt.ui.client.event.ComponentEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
/**
* A 2-trigger TriggerField.
*
* <dl>
* <dt><b>Events:</b></dt>
*
* <dd><b>TwinTriggerClick</b> : FieldEvent(field, event)<br>
* <div>Fires after the twin trigger is clicked.</div>
* <ul>
* <li>field : this</li>
* <li>event : event</li>
* </ul>
* </dd>
* </dl>
*
* <dl>
* <dt>Inherited Events:</dt>
* <dd>Field Focus</dd>
* <dd>Field Blur</dd>
* <dd>Field Change</dd>
* <dd>Field Invalid</dd>
* <dd>Field Valid</dd>
* <dd>Field KeyPress</dd>
* <dd>Field SpecialKey</dd>
* <dd>TriggerField TriggerClick</dd>
* </dl>
*/
public class TwinTriggerField<D> extends TriggerField<D> {
protected El twinTrigger;
private String twinTriggerStyle;
private El span;
/**
* Returns the twin trigger style.
*
* @return the twin trigger style
*/
public String getTwinTriggerStyle() {
return twinTriggerStyle;
}
@Override
public void onComponentEvent(ComponentEvent ce) {
super.onComponentEvent(ce);
int type = ce.getEventTypeInt();
if (ce.getTarget() == twinTrigger.dom && type == Event.ONCLICK) {
onTwinTriggerClick(ce);
}
}
/**
* Sets the field's twin trigger style
*
* @param twinTriggerStyle the twin trigger style
*/
public void setTwinTriggerStyle(String twinTriggerStyle) {
this.twinTriggerStyle = twinTriggerStyle;
}
@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, twinTrigger.dom);
DOM.appendChild(span.dom, trigger.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");
if (isHideTrigger()) {
span.setVisible(false);
}
super.onRender(target, index);
DOM.sinkEvents(twinTrigger.dom, Event.ONCLICK | Event.MOUSEEVENTS);
}
@Override
protected void onResize(int width, int height) {
super.onResize(width, height);
int tw = span.getWidth();
if (width != Style.DEFAULT) {
getInputEl().setWidth(width - tw);
}
}
protected void onTwinTriggerClick(ComponentEvent ce) {
fireEvent(Events.TwinTriggerClick, ce);
}
}