package org.ovirt.engine.ui.webadmin.section.main.view.popup.scheduling.panels;
import org.gwtbootstrap3.client.ui.Button;
import org.gwtbootstrap3.client.ui.constants.IconType;
import org.ovirt.engine.core.common.scheduling.PolicyUnit;
import org.ovirt.engine.ui.common.widget.MenuBar;
import org.ovirt.engine.ui.uicommonweb.models.configure.scheduling.NewClusterPolicyModel;
import org.ovirt.engine.ui.webadmin.section.main.view.popup.scheduling.ClusterPolicyPopupView.WidgetStyle;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Position;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Label;
public class FunctionPolicyUnitPanel extends PolicyUnitPanel {
public static final String FUNCTION = "Function"; //$NON-NLS-1$
private Integer factor;
public FunctionPolicyUnitPanel(PolicyUnit policyUnit,
NewClusterPolicyModel model,
boolean used,
boolean locked,
WidgetStyle style,
Integer factor) {
super(policyUnit, model, used, locked, style);
this.factor = factor;
}
@Override
public void initWidget() {
FlowPanel namePanel = getNamePanel(policyUnit);
if (!used) {
namePanel.setStyleName(style.unusedPolicyUnitStyle());
} else {
final Label weightLabel = createWeightLabel();
final Button downButton = createDownButton(weightLabel);
if (factor == 1) {
downButton.setEnabled(false);
}
Button upButton = createUpButton(weightLabel, downButton);
if (!locked || policyUnit.isEnabled()) {
namePanel.insert(upButton, 0);
}
namePanel.insert(weightLabel, 0);
if (!locked || policyUnit.isEnabled()) {
namePanel.insert(downButton, 0);
}
namePanel.setStyleName(style.usedFilterPolicyUnitStyle());
}
if (!policyUnit.isEnabled()) {
namePanel.getElement().getStyle().setOpacity(0.5);
}
setWidget(namePanel);
}
private Button createUpButton(final Label weightLabel, final Button downButton) {
Button upButton = new Button("", IconType.PLUS, event -> {
factor++;
model.updateFactor(policyUnit, factor);
weightLabel.setText(String.valueOf(factor));
if (factor > 1) {
downButton.setEnabled(true);
}
});
upButton.getElement().getStyle().setFloat(Style.Float.LEFT);
upButton.getElement().getStyle().setPosition(Position.RELATIVE);
upButton.getElement().getStyle().setTop(1, Unit.PX);
upButton.getElement().getStyle().setMarginRight(5, Unit.PX);
return upButton;
}
private Button createDownButton(final Label weightLabel) {
final Button downButton = new Button("");
downButton.getElement().getStyle().setFloat(Style.Float.LEFT);
downButton.getElement().getStyle().setPosition(Position.RELATIVE);
downButton.getElement().getStyle().setTop(1, Unit.PX);
downButton.setIcon(IconType.MINUS);
downButton.addClickHandler(event -> {
factor--;
model.updateFactor(policyUnit, factor);
weightLabel.setText(String.valueOf(factor));
if (factor == 1) {
downButton.setEnabled(false);
}
});
return downButton;
}
private Label createWeightLabel() {
final Label weightLabel = new Label(String.valueOf(factor));
weightLabel.getElement().getStyle().setPaddingLeft(2, Unit.PX);
weightLabel.getElement().getStyle().setPaddingRight(2, Unit.PX);
weightLabel.getElement().getStyle().setFloat(Style.Float.LEFT);
return weightLabel;
}
@Override
protected void fillMenuBar(MenuBar menuBar) {
if (used) {
menuBar.addItem("Remove Function", () -> { //$NON-NLS-1$
model.removeFunction(policyUnit);
menuPopup.hide();
});
} else {
menuBar.addItem("Add Function", () -> { //$NON-NLS-1$
model.addFunction(policyUnit);
menuPopup.hide();
});
}
}
@Override
protected void addSubMenu(MenuBar menuBar) {
// No sub menu
}
@Override
protected String getType() {
return FUNCTION;
}
}