package org.nocket.component.table.columns; import java.util.Set; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.behavior.Behavior; import org.apache.wicket.extensions.model.AbstractCheckBoxModel; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.model.IModel; import org.nocket.component.table.behavior.ClickAjaxEventBehavior; // TODO: Auto-generated Javadoc /** * Column adds check-box per table item. Information about the checked state is * hold in the Set. Clicks are submitted immediately via Ajax on the model. * * @author blaz02 * * @param <T> * Model object type following Java-Bean convention. */ @SuppressWarnings("serial") public class AjaxSetCheckBoxColum<T> extends SetCheckBoxColum<T> { /** The select checkbox js. */ protected final String selectCheckboxJS = "var val=$(this).attr('checked'); $('." + uuid + "').each(function() { if($(this).attr('checked') !== val) { $(this).click(); }});"; /** * Instantiates a new ajax set check box colum. * * @param displayModel the display model * @param selected the selected */ public AjaxSetCheckBoxColum(IModel<String> displayModel, Set<T> selected) { super(displayModel, selected); } /* (non-Javadoc) * @see org.nocket.component.table.columns.CheckBoxColumn#getTableHeaderCheckboxBehavior() */ protected Behavior getTableHeaderCheckboxBehavior() { return new Behavior() { public void onComponentTag(Component component, ComponentTag tag) { tag.put("onclick", selectCheckboxJS); } }; } /* (non-Javadoc) * @see org.nocket.component.table.columns.CheckBoxColumn#newCheckBox(java.lang.String, org.apache.wicket.model.IModel) */ protected CheckBox newCheckBox(String id, final IModel<Boolean> checkModel) { final CheckBox checkBox = new CheckBox("check", checkModel) { @Override protected void onComponentTag(ComponentTag tag) { super.onComponentTag(tag); if (checkModel.getObject() != null) { tag.append("class", uuid, " "); } } }; if (checkModel.getObject() != null) { // checkModel is null for the "select all" checkbox in the column header checkBox.add(new ClickAjaxEventBehavior<Boolean>(checkModel) { protected void onEvent(AjaxRequestTarget target, IModel<Boolean> model) { AbstractCheckBoxModel m = (AbstractCheckBoxModel) model; if (m.isSelected()) { m.unselect(); } else { m.select(); } target.add(checkBox); } }); } return checkBox; } }