/*
* GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007
*/
package hudson.gwtmarketplace.client.components;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FocusWidget;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.InlineLabel;
import com.google.gwt.user.client.ui.Widget;
public class LabeledContainer<T extends Widget> extends Composite implements FocusHandler, BlurHandler {
private HorizontalPanel panel;
private InlineLabel formLabel;
private T component;
private String label;
public LabeledContainer(String label, T component) {
this.label = label;
this.component = component;
this.panel = new HorizontalPanel();
this.panel.addStyleName("labeled-field");
this.formLabel = new InlineLabel(label);
this.formLabel.addStyleName("field-label");
this.panel.add(this.formLabel);
this.panel.add(this.component);
this.component = component;
if (component instanceof FocusWidget && !(component instanceof Anchor)) {
((FocusWidget) this.component).addFocusHandler(( this));
((FocusWidget) this.component).addBlurHandler(this);
}
String componentId = DOM.createUniqueId();
this.component.getElement().setAttribute("id", componentId);
this.formLabel.getElement().setAttribute("for", componentId);
initWidget(this.panel);
}
@Override
public void addStyleName(String style) {
getComponent().addStyleName(style);
}
@Override
public void setStyleName(String style) {
getComponent().addStyleName(style);
}
public void onFocus(FocusEvent event) {
this.panel.addStyleName("field-focus");
}
public void onBlur(BlurEvent event) {
this.panel.removeStyleName("field-focus");
}
public T getComponent() {
return component;
}
public void setLabel(String label) {
formLabel.setText(label);
this.label = label;
}
public String getLabel() {
return label;
}
}