package au.com.vaadinutils.crud;
import com.google.common.base.Preconditions;
import com.vaadin.shared.ui.MarginInfo;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.themes.ValoTheme;
public class BaseCrudSaveCancelButtonTray extends HorizontalLayout
{
private static final long serialVersionUID = 1L;
private boolean disallowEdit;
private boolean disallowNew;
private Button saveButton = new Button("Save");
private Button cancelButton = new Button("Cancel");
private ButtonListener buttonListener;
public BaseCrudSaveCancelButtonTray(boolean disallowEdit, boolean disallowNew, final ButtonListener listener)
{
this.disallowEdit = disallowEdit;
this.disallowNew = disallowNew;
this.buttonListener = listener;
if (disallowEdit && disallowNew)
{
// hide the buttons completely
setHeight("0");
return;
}
setMargin(new MarginInfo(false, true, false, true));
setSizeFull();
setWidth("100%");
addComponent(cancelButton);
addComponent(saveButton);
saveButton.setId("CrudSaveButton");
setComponentAlignment(saveButton, Alignment.MIDDLE_RIGHT);
setComponentAlignment(cancelButton, Alignment.MIDDLE_LEFT);
setHeight("35");
saveButton.addClickListener(new ClickListener()
{
private static final long serialVersionUID = 1L;
@Override
public void buttonClick(ClickEvent event)
{
buttonListener.saveClicked();
}
});
saveButton.setStyleName(ValoTheme.BUTTON_PRIMARY);
saveButton.setDisableOnClick(true);
cancelButton.addClickListener(new ClickListener()
{
private static final long serialVersionUID = 1L;
@Override
public void buttonClick(ClickEvent event)
{
buttonListener.cancelClicked();
}
});
setDefaultState();
}
public void startNewPhase()
{
Preconditions.checkArgument(!disallowNew, "New is not allowed!");
saveButton.setEnabled(true);
cancelButton.setEnabled(true);
}
public void setDefaultState()
{
saveButton.setEnabled(!disallowEdit);
cancelButton.setEnabled(!disallowEdit);
}
public Button getSaveButton()
{
return saveButton;
}
public Button getCancelButton()
{
return cancelButton;
}
public ButtonListener getButtonListener()
{
return buttonListener;
}
}