/*******************************************************************************
* Copyright (c) 2015 Development Gateway, Inc and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the MIT License (MIT)
* which accompanies this distribution, and is available at
* https://opensource.org/licenses/MIT
*
* Contributors:
* Development Gateway - initial API and implementation
*******************************************************************************/
package org.devgateway.toolkit.forms.wicket.components.form;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.model.IModel;
import de.agilecoders.wicket.core.util.Attributes;
import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.checkbox.bootstraptoggle.BootstrapToggle;
import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.checkbox.bootstraptoggle.BootstrapToggleConfig;
/**
* @author mpostelnicu
*
*/
public class CheckBoxToggleBootstrapFormComponent
extends GenericEnablingBootstrapFormComponent<Boolean, BootstrapToggle> {
private static final long serialVersionUID = -4032850928243673675L;
private Boolean isFloatedInput = false;
private BootstrapToggleConfig config;
private CheckBox wrappedCheckbox;
public CheckBoxToggleBootstrapFormComponent(final String id, final IModel<String> labelModel,
final IModel<Boolean> model) {
super(id, labelModel, model);
}
/**
* @param id
* @param model
*/
public CheckBoxToggleBootstrapFormComponent(final String id, final IModel<Boolean> model) {
super(id, model);
}
public CheckBoxToggleBootstrapFormComponent(final String id) {
super(id);
}
@Override
protected void onComponentTag(final ComponentTag tag) {
super.onComponentTag(tag);
if (isFloatedInput) {
Attributes.addClass(tag, "floated-input");
}
}
@Override
protected FormComponent<Boolean> updatingBehaviorComponent() {
return wrappedCheckbox;
}
@Override
protected BootstrapToggle inputField(final String id, final IModel<Boolean> model) {
config = new BootstrapToggleConfig();
config.withOnStyle(BootstrapToggleConfig.Style.info).withOffStyle(BootstrapToggleConfig.Style.warning)
.withStyle("customCssClass");
final BootstrapToggle checkBoxToggle = new BootstrapToggle("field", initFieldModel(), config) {
private static final long serialVersionUID = 1L;
@Override
protected CheckBox newCheckBox(final String id, final IModel<Boolean> model) {
wrappedCheckbox = super.newCheckBox(id, model);
wrappedCheckbox.add(new AjaxFormComponentUpdatingBehavior("change") {
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(final AjaxRequestTarget target) {
CheckBoxToggleBootstrapFormComponent.this.onUpdate(target);
}
});
return wrappedCheckbox;
}
};
return checkBoxToggle;
}
@Override
public String getUpdateEvent() {
return "change";
}
public Boolean getIsFloatedInput() {
return isFloatedInput;
}
public void setIsFloatedInput(final Boolean isFloatedInput) {
this.isFloatedInput = isFloatedInput;
}
@Override
protected boolean boundComponentsVisibilityAllowed(final Boolean selectedValue) {
return selectedValue;
}
public BootstrapToggleConfig getConfig() {
return config;
}
}