package org.ovirt.engine.ui.webadmin.widget.errata;
import org.gwtbootstrap3.client.ui.ButtonGroup;
import org.gwtbootstrap3.client.ui.CheckBoxButton;
import org.ovirt.engine.ui.uicommonweb.models.ErrataFilterValue;
import org.ovirt.engine.ui.webadmin.ApplicationConstants;
import org.ovirt.engine.ui.webadmin.gin.AssetProvider;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
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;
/**
* Composite panel that renders three check box buttons that allow the user to (client-side) filter
* a grid of errata by errata Type.
*/
public class ErrataFilterPanel extends Composite {
interface ViewUiBinder extends UiBinder<ButtonGroup, ErrataFilterPanel> {
ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
}
public interface Style extends CssResource {
String errataSummaryLabel();
}
private static final ApplicationConstants constants = AssetProvider.getConstants();
@UiField
CheckBoxButton securityCheckbox;
@UiField
CheckBoxButton bugCheckbox;
@UiField
CheckBoxButton enhancementCheckbox;
public ErrataFilterPanel() {
initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
init();
showPanelItems(false);
localize();
}
public void init() {
init(true, true, true);
}
public void init(boolean security, boolean bugs, boolean enhancements) {
securityCheckbox.setActive(security);
bugCheckbox.setActive(bugs);
enhancementCheckbox.setActive(enhancements);
showPanelItems(true);
}
private void showPanelItems(boolean show) {
securityCheckbox.setVisible(show);
bugCheckbox.setVisible(show);
enhancementCheckbox.setVisible(show);
}
public void addValueChangeHandler(final ValueChangeHandler<ErrataFilterValue> handler) {
ValueChangeHandler<Boolean> internalHandler = event -> {
// Do this deferred to give the javascript time to activate/deactivate the buttons.
Scheduler.get().scheduleDeferred(() -> {
// one of the checkboxes changed, but get all three checkbox values for the event
ErrataFilterValue value = new ErrataFilterValue(securityCheckbox.isActive(),
bugCheckbox.isActive(), enhancementCheckbox.isActive());
handler.onValueChange(new ValueChangeEvent<ErrataFilterValue>(value) {});
});
};
securityCheckbox.addValueChangeHandler(internalHandler);
bugCheckbox.addValueChangeHandler(internalHandler);
enhancementCheckbox.addValueChangeHandler(internalHandler);
}
private void localize() {
securityCheckbox.setHTML(constants.security());
bugCheckbox.setHTML(constants.bugs());
enhancementCheckbox.setHTML(constants.enhancements());
}
}