package org.ovirt.engine.ui.common.widget.dialog;
import org.ovirt.engine.ui.common.CommonApplicationConstants;
import org.ovirt.engine.ui.common.CommonApplicationResources;
import org.ovirt.engine.ui.common.CommonApplicationTemplates;
import org.ovirt.engine.ui.common.gin.AssetProvider;
import org.ovirt.engine.ui.common.view.popup.FocusableComponentsContainer;
import org.ovirt.engine.ui.common.widget.PatternFlyCompatible;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style.Display;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.AbstractImagePrototype;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.ToggleButton;
public class AdvancedParametersExpander extends Composite implements FocusableComponentsContainer,
PatternFlyCompatible {
@UiField
ToggleButton expander;
private Element expanderContent;
private static final CommonApplicationTemplates templates = AssetProvider.getTemplates();
private static final CommonApplicationResources resources = AssetProvider.getResources();
private static final CommonApplicationConstants constants = AssetProvider.getConstants();
private String titleExpanded = constants.advancedParameters();
private String titleCollapsed = constants.advancedParameters();
@UiField
Style style;
interface ViewUiBinder extends UiBinder<ToggleButton, AdvancedParametersExpander> {
ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
}
interface Style extends CssResource {
String expander();
String expanderPf();
}
public AdvancedParametersExpander() {
initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
}
public void initWithContent(Element expanderContent) {
this.expanderContent = expanderContent;
initStyle();
initListener();
initContent();
}
public void setUsePatternFly(boolean use) {
if (use) {
expander.removeStyleName(style.expander());
expander.addStyleName(style.expanderPf());
}
}
private void initStyle() {
SafeHtml expandImage =
SafeHtmlUtils.fromTrustedString(AbstractImagePrototype.create(resources.expanderImage()).getHTML());
expander.getUpFace().setHTML(templates.imageTextButton(expandImage, titleCollapsed));
SafeHtml collapseImage =
SafeHtmlUtils.fromTrustedString(AbstractImagePrototype.create(resources.expanderDownImage()).getHTML());
expander.getDownFace().setHTML(templates.imageTextButton(collapseImage, titleExpanded));
}
private void initContent() {
expanderContent.getStyle().setDisplay(Display.NONE);
}
private void initListener() {
expander.addClickHandler(event -> expanderContent.getStyle().setDisplay(expander.isDown() ? Display.BLOCK : Display.NONE));
}
public void addClickHandler(ClickHandler clickHandler) {
expander.addClickHandler(clickHandler);
}
public boolean isDown() {
return expander.isDown();
}
@Override
public int setTabIndexes(int nextTabIndex) {
expander.setTabIndex(nextTabIndex++);
return nextTabIndex;
}
public void setTitleWhenExpanded(String title) {
titleExpanded = title;
initStyle();
}
public void setTitleWhenCollapsed(String title) {
titleCollapsed = title;
initStyle();
}
}