Package org.odlabs.wiquery.sortable

Source Code of org.odlabs.wiquery.sortable.SortablePanel

package org.odlabs.wiquery.sortable;

import java.util.List;

import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.RequiredTextField;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.PropertyModel;
import org.odlabs.wiquery.core.javascript.JsScopeContext;
import org.odlabs.wiquery.sortable.model.SimpleSortableElement;
import org.odlabs.wiquery.ui.core.JsScopeUiEvent;
import org.odlabs.wiquery.ui.sortable.SortableBehavior;
import org.odlabs.wiquery.ui.sortable.SortableBehavior.ToleranceEnum;
import org.odlabs.wiquery.ui.sortable.SortableRevert;

/**
* @author Stephane Gleizes
*/
public class SortablePanel extends Panel {

  private static final long serialVersionUID = 1L;

  private ListView<SimpleSortableElement> sortableListView;
 
  private SortableBehavior sortableBehavior;
 
  private boolean sortMode;

  public SortablePanel(String id, IModel<List<? extends SimpleSortableElement>> listModel) {
    super(id);
    setOutputMarkupId(true);
   
    Form<List<? extends SimpleSortableElement>> form = new Form<List<? extends SimpleSortableElement>>("form", listModel) {
      private static final long serialVersionUID = 1L;

      @Override
      public void onSubmit() {
        sortableListView.getModel().detach();
        sortableListView.removeAll();
       
        SortablePanel.this.setSortMode(false);
        throw new RestartResponseException(getPage());
      }
    };
    add(form);
   
    // List view
    sortableListView = new ListView<SimpleSortableElement>("elements", listModel) {
      private static final long serialVersionUID = 1L;
     
      @Override
      protected void populateItem(ListItem<SimpleSortableElement> item) {
        item.setOutputMarkupId(true);
        IModel<Integer> positionModel = new PropertyModel<Integer>(item.getModel(), "position");
       
        item.add(new RequiredTextField<Integer>("positionField", positionModel));
       
        item.add(new Label("positionLabel", positionModel));
        item.add(new Label("element", item.getModelObject().getName()));
      }
    };
   
    WebMarkupContainer elementsContainer = new WebMarkupContainer("elementsContainer");
    sortableBehavior = new SortableBehavior();
    sortableBehavior
      .setUpdateEvent(new JsScopeUiEvent() {
        private static final long serialVersionUID = 1L;
       
        @Override
        protected void execute(JsScopeContext scopeContext) {
          scopeContext.append("onSortableUpdate($(this));");
        }
      })
      .setPlaceholder("element-placeholder")
      .setRevert(new SortableRevert(true))
      .setForcePlaceholderSize(true)
      .setTolerance(ToleranceEnum.POINTER)
      .setDisabled(!isSortMode());
    elementsContainer.add(sortableListView);
    elementsContainer.add(sortableBehavior);
    elementsContainer.add(new AttributeAppender("class", new LoadableDetachableModel<String>() {
      private static final long serialVersionUID = 1L;
     
      @Override
      protected String load() {
        if (!SortablePanel.this.isSortMode()) {
          return "ui-sortable-disabled";
        }
        return null;
      }
    }, " "));
    form.add(elementsContainer);
   
    // Actions
    WebMarkupContainer actions = new WebMarkupContainer("actions");
    form.add(actions);
   
    AjaxLink<?> editOrder = new AjaxLink<Void>("editOrder") {
      private static final long serialVersionUID = 1L;
     
      @Override
      public void onClick(AjaxRequestTarget target) {
        SortablePanel.this.sortableBehavior.enable(target);
        SortablePanel.this.setSortMode(true);
        target.add(SortablePanel.this);
      }
     
      @Override
      protected void onConfigure() {
        super.onConfigure();
        setVisible(!SortablePanel.this.isSortMode());
      }
    };
    actions.add(editOrder);
   
    Button saveOrder = new Button("saveOrder") {
      private static final long serialVersionUID = 1L;
     
      @Override
      protected void onConfigure() {
        super.onConfigure();
        setVisible(SortablePanel.this.isSortMode());
      }
    };
    actions.add(saveOrder);
   
    AjaxLink<?> cancelOrder = new AjaxLink<Void>("cancelOrder") {
      private static final long serialVersionUID = 1L;
     
      @Override
      public void onClick(AjaxRequestTarget target) {
        SortablePanel.this.setSortMode(false);
        SortablePanel.this.sortableBehavior.disable(target);
        target.add(SortablePanel.this);
      }
     
      @Override
      protected void onConfigure() {
        super.onConfigure();
        setVisible(SortablePanel.this.isSortMode());
      }
    };
    actions.add(cancelOrder);
  }
 
  public boolean isSortMode() {
    return sortMode;
  }
 
  public void setSortMode(boolean sortMode) {
    this.sortMode = sortMode;
  }
}
TOP

Related Classes of org.odlabs.wiquery.sortable.SortablePanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.