package kornell.gui.client.presentation.admin.courseversion.courseversion.wizard.edit; import java.util.ArrayList; import java.util.List; import com.github.gwtbootstrap.client.ui.CheckBox; import com.github.gwtbootstrap.client.ui.TextBox; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.event.dom.client.KeyUpHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.user.client.ui.FlowPanel; import com.google.web.bindery.autobean.shared.AutoBeanCodex; import com.google.web.bindery.autobean.shared.AutoBeanUtils; import kornell.core.util.StringUtils; import kornell.gui.client.presentation.admin.courseversion.courseversion.AdminCourseVersionContentView.Presenter; import kornell.gui.client.presentation.admin.courseversion.courseversion.autobean.wizard.WizardSlideItem; import kornell.gui.client.presentation.admin.courseversion.courseversion.autobean.wizard.WizardSlideItemQuiz; import kornell.gui.client.presentation.admin.courseversion.courseversion.wizard.WizardUtils; import kornell.gui.client.util.forms.FormHelper; import kornell.gui.client.util.forms.formfield.KornellFormFieldWrapper; import kornell.gui.client.util.view.KornellNotification; public class WizardSlideItemQuizView extends FlowPanel implements IWizardView { private FormHelper formHelper = GWT.create(FormHelper.class); private String countsTowardsCertificateLabel, givesInstantFeedbackLabel, redosCountLabel; private KornellFormFieldWrapper countsTowardsCertificate, givesInstantFeedback, redosCount; private List<KornellFormFieldWrapper> fields; private FlowPanel slideItemFields; private String changedString = "(*) "; private WizardSlideItemView wizardSlideItemView; private WizardSlideItem wizardSlideItem; private WizardSlideItemQuiz wizardSlideQuiz; private KeyUpHandler refreshFormKeyUpHandler; private Presenter presenter; public WizardSlideItemQuizView(WizardSlideItem wizardSlideItem, WizardSlideItemView wizardSlideItemView, Presenter presenter) { super(); this.presenter = presenter; this.wizardSlideItem = wizardSlideItem; this.wizardSlideItemView = wizardSlideItemView; String extra = wizardSlideItem.getExtra() == null ? "{}" : wizardSlideItem.getExtra(); this.wizardSlideQuiz = AutoBeanCodex.decode(WizardUtils.WIZARD_FACTORY, WizardSlideItemQuiz.class, extra).as(); if(wizardSlideQuiz.getRedosCount() == null){ wizardSlideQuiz.setRedosCount(0); } this.addStyleName("slideItemWrapper extendedSlideItemWrapper left fillWidth"); slideItemFields = new FlowPanel(); slideItemFields.addStyleName("fieldsWrapper"); this.add(slideItemFields); init(); } public void init() { fields = new ArrayList<KornellFormFieldWrapper>(); slideItemFields.clear(); refreshFormKeyUpHandler = new KeyUpHandler() { @Override public void onKeyUp(KeyUpEvent event) { wizardSlideItemView.refreshForm(); } }; countsTowardsCertificateLabel = "Nota conta para o certificado"; countsTowardsCertificate = new KornellFormFieldWrapper(countsTowardsCertificateLabel, formHelper.createCheckBoxFormField(wizardSlideQuiz.getCountsTowardsCertificate()), true, null, "Deixe essa opção desmarcada no caso desse quiz ser somente um exercício de aprendizado."); fields.add(countsTowardsCertificate); slideItemFields.add(countsTowardsCertificate); ((CheckBox)countsTowardsCertificate.getFieldWidget()).addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { wizardSlideItemView.refreshForm(); } }); givesInstantFeedbackLabel = "Mostrar respostas corretas"; givesInstantFeedback = new KornellFormFieldWrapper(givesInstantFeedbackLabel, formHelper.createCheckBoxFormField(wizardSlideQuiz.getGivesInstantFeedback()), true, null, "Ao final de cada questão desse quiz, o participante terá acesso à resposta correta, além de uma nota opcional com mais explicações."); fields.add(givesInstantFeedback); slideItemFields.add(givesInstantFeedback); ((CheckBox)givesInstantFeedback.getFieldWidget()).addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { wizardSlideItemView.refreshForm(); } }); redosCountLabel = "Quantas Tentativas"; redosCount = new KornellFormFieldWrapper(redosCountLabel, formHelper.createTextBoxFormField(""+wizardSlideQuiz.getRedosCount()), true, null, "Deixe Zero ou em branco para tentativas eliminadas. Caso definido um número, assim que o participante usar todas as tentativas, o quiz não poderá ser mais refeito."); ((TextBox)redosCount.getFieldWidget()).addKeyUpHandler(refreshFormKeyUpHandler); ((TextBox)redosCount.getFieldWidget()).getElement().setAttribute("type", "number"); fields.add(redosCount); slideItemFields.add(redosCount); } @Override public void resetFormToOriginalValues(){ ((CheckBox)countsTowardsCertificate.getFieldWidget()).setValue(wizardSlideQuiz.getCountsTowardsCertificate()); ((CheckBox)givesInstantFeedback.getFieldWidget()).setValue(wizardSlideQuiz.getGivesInstantFeedback()); ((TextBox)redosCount.getFieldWidget()).setText(""+wizardSlideQuiz.getRedosCount()); presenter.valueChanged(wizardSlideItem, false); refreshForm(); } @Override public boolean refreshForm(){ boolean valueHasChanged = refreshFormElementLabel(countsTowardsCertificate, countsTowardsCertificateLabel, ""+wizardSlideQuiz.getCountsTowardsCertificate()) || refreshFormElementLabel(givesInstantFeedback, givesInstantFeedbackLabel, ""+wizardSlideQuiz.getGivesInstantFeedback()) || refreshFormElementLabel(redosCount, redosCountLabel, ""+wizardSlideQuiz.getRedosCount()); presenter.valueChanged(wizardSlideItem, valueHasChanged); validateFields(); return valueHasChanged; } private boolean refreshFormElementLabel(KornellFormFieldWrapper kornellFormFieldWrapper, String label, String originalValue){ boolean valueHasChanged = !kornellFormFieldWrapper.getFieldPersistText().equals(originalValue); kornellFormFieldWrapper.setFieldLabelText((valueHasChanged ? changedString : "") + label); return valueHasChanged; } @Override public boolean validateFields() { formHelper.clearErrors(fields); return !formHelper.checkErrors(fields); } @Override public void updateWizard() { if(StringUtils.isNone(redosCount.getFieldPersistText())){ wizardSlideQuiz.setRedosCount(0); ((TextBox)redosCount.getFieldWidget()).setValue("0"); } wizardSlideQuiz.setCountsTowardsCertificate(countsTowardsCertificate.getFieldPersistText().equals("true")); wizardSlideQuiz.setGivesInstantFeedback(givesInstantFeedback.getFieldPersistText().equals("true")); wizardSlideQuiz.setRedosCount(redosCount.getFieldPersistText().length() > 0 ? new Integer(redosCount.getFieldPersistText()) : null); wizardSlideItem.setExtra(AutoBeanCodex.encode(AutoBeanUtils.getAutoBean(wizardSlideQuiz)).getPayload().toString()); presenter.valueChanged(wizardSlideQuiz, false); refreshForm(); } public WizardSlideItem getWizardSlideItem() { return wizardSlideItem; } }