package org.ovirt.engine.ui.common.widget.dialog.tab;
import java.util.ArrayList;
import java.util.List;
import org.ovirt.engine.ui.common.widget.AbstractValidatedWidget;
import org.ovirt.engine.ui.common.widget.HasValidation;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiChild;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.HasEnabled;
import com.google.gwt.user.client.ui.IndexedPanel;
import com.google.gwt.user.client.ui.Widget;
public class DialogTab extends AbstractValidatedWidget {
interface WidgetUiBinder extends UiBinder<Widget, DialogTab> {
WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class);
}
@UiField(provided=true)
OvirtTabListItem tabListItem;
private Widget tabContent;
public DialogTab() {
tabListItem = new OvirtTabListItem("#"); //$NON-NLS-1$
initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this));
}
@Override
protected Widget getValidatedWidget() {
return tabListItem;
}
public String getLabel() {
return tabListItem.getText();
}
public void setLabel(String label) {
tabListItem.setText(label);
}
public OvirtTabListItem getTabListItem() {
return tabListItem;
}
@UiChild(tagname = "content", limit = 1)
public void setContent(Widget widget) {
this.tabContent = widget;
}
public Widget getContent() {
return tabContent;
}
public void activate() {
getTabListItem().setEnabled(true);
}
public void deactivate() {
getTabListItem().setEnabled(false);
}
public void setTabLabelStyle(String styleName) {
tabListItem.setStyleName(styleName);
}
public void setTabAnchorStyle(String styleName) {
tabListItem.setAnchorStyle(styleName);
}
/**
* Disables the content widget recursively, using {@link HasEnabled} interface.
*/
public void disableContent() {
disable(getContent());
}
private void disable(Widget content) {
if (content instanceof IndexedPanel) {
for (int i = 0; i < ((IndexedPanel) content).getWidgetCount(); i++) {
disable(((IndexedPanel) content).getWidget(i));
}
} else if (content instanceof HasEnabled) {
((HasEnabled) content).setEnabled(false);
}
}
public List<HasValidation> getInvalidWidgets() {
return getInvalidWidgets(getContent());
}
private List<HasValidation> getInvalidWidgets(Widget content) {
List<HasValidation> hasValidations = new ArrayList<>();
if (content instanceof IndexedPanel) {
for (int i = 0; i < ((IndexedPanel) content).getWidgetCount(); i++) {
hasValidations.addAll(getInvalidWidgets(((IndexedPanel) content).getWidget(i)));
}
} else if (content instanceof HasValidation && !((HasValidation) content).isValid()) {
hasValidations.add((HasValidation) content);
}
return hasValidations;
}
public int setTabIndexes(int nextTabIndex) {
tabListItem.setTabIndex(nextTabIndex++);
return nextTabIndex;
}
@Override
public void setVisible(boolean visible) {
super.setVisible(visible);
tabListItem.setVisible(visible);
}
public HandlerRegistration addClickHandler(ClickHandler clickHandler) {
return tabListItem.addClickHandler(clickHandler);
}
}