package fi.utu.ville.exercises.stub;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.HorizontalLayout;
import fi.utu.ville.exercises.helpers.StandardSubmissionType;
import fi.utu.ville.exercises.model.ExecutionState;
import fi.utu.ville.exercises.model.ExecutionStateChangeListener;
import fi.utu.ville.exercises.model.Executor;
import fi.utu.ville.standardutils.Localizer;
import fi.utu.ville.standardutils.StandardUIFactory;
/**
* A class allowing user to call submit and reset of {@link Executor} through GUI. The look of the view is approximately the same as the what the menu looks in
* real ViLLE.
*
* @author Riku Haavisto
*/
class ResetSubmitControlView extends HorizontalLayout implements
Button.ClickListener {
/**
*
*/
private static final long serialVersionUID = 5645968253156502722L;
private final Executor<?, ?> exerciseExec;
/* Buttons */
private final Button resetButton, submitButton;
/**
* Constructs a new {@link ResetSubmitControlView} for controlling the given {@link Executor}.
*
* @param localizer
* {@link Localizer} to localize the GUI
* @param exerciseExec
* {@link Executor} to control
*/
public ResetSubmitControlView(Localizer localizer,
Executor<?, ?> exerciseExec) {
this.exerciseExec = exerciseExec;
setMargin(false);
setSpacing(false);
submitButton = StubUiFactory.getSubmitButton(localizer);
submitButton.addClickListener(this);
submitButton.setId("stub.submitbutton");
resetButton = StubUiFactory.getResetButton(localizer);
resetButton.addClickListener(this);
resetButton.setId("stub.resetbutton");
setWidth("100%");
addStyleName("exercisemenu-buttons-panel");
HorizontalLayout middleButtons = StandardUIFactory.getButtonPanel(
submitButton, resetButton);
// middleButtons.addComponent(submitButton);
//
// middleButtons.addComponent(resetButton);
addComponent(middleButtons);
setComponentAlignment(middleButtons, Alignment.MIDDLE_CENTER);
exerciseExec
.registerExecutionStateChangeListener(new ExecutionStateChangeListener() {
/**
*
*/
private static final long serialVersionUID = -7161676290058492324L;
@Override
public void actOnStateChange(ExecutionState newState) {
resetButton.setEnabled(newState.isAllowReset());
submitButton.setEnabled(newState.isAllowSubmit());
ResetSubmitControlView.this.setEnabled(newState
.isMenuEnabled());
resetButton.setVisible(newState.isResetShown());
submitButton.setVisible(newState.isSubmitShown());
}
});
}
@Override
public void buttonClick(ClickEvent event) {
if (event.getButton() == resetButton) {
exerciseExec.askReset();
} else if (event.getButton() == submitButton) {
exerciseExec.askSubmit(StandardSubmissionType.NORMAL);
}
}
}