package org.ovirt.engine.ui.common.widget;
import java.util.Iterator;
import org.ovirt.engine.ui.common.widget.label.EnableableFormLabel;
import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasEnabled;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Widget;
public class GenericWidgetWithLabel extends Composite implements HasWidgets, HasEnabled {
interface WidgetUiBinder extends UiBinder<Widget, GenericWidgetWithLabel> {
WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class);
}
protected interface Style extends CssResource {
String wrapper_legacy();
String label_legacy();
String contentWidgetContainer_legacy();
}
@UiField
protected Style style;
public GenericWidgetWithLabel() {
initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this));
setEnabled(true);
}
@UiField
FlowPanel childrenPanel;
@UiField
EnableableFormLabel label;
@UiField
HTMLPanel wrapperPanel;
@Override
public void add(Widget w) {
childrenPanel.add(w);
}
public void setUsePatternFly(boolean use) {
if (use) {
wrapperPanel.removeStyleName(style.wrapper_legacy());
label.removeStyleName(style.label_legacy());
childrenPanel.removeStyleName(style.contentWidgetContainer_legacy());
}
}
@Override
public void clear() {
childrenPanel.clear();
}
@Override
public Iterator<Widget> iterator() {
return childrenPanel.iterator();
}
@Override
public boolean remove(Widget w) {
return childrenPanel.remove(w);
}
@Override
public boolean isEnabled() {
return label.isEnabled();
}
@Override
public void setEnabled(boolean enabled) {
label.setEnabled(enabled);
applySetEnabledRecursively(enabled, childrenPanel);
}
public void setLabel(String labelText) {
label.setText(labelText);
}
private void applySetEnabledRecursively(boolean enabled, HasWidgets panel) {
for (Widget widget : panel) {
if (widget instanceof HasEnabled) {
((HasEnabled) widget).setEnabled(enabled);
} else if (widget instanceof HasWidgets) {
final HasWidgets widgetContainer = (HasWidgets) widget;
applySetEnabledRecursively(enabled, widgetContainer);
}
}
}
}