Package com.extjs.gxt.ui.client.dnd

Source Code of com.extjs.gxt.ui.client.dnd.TreePanelDragSource

/*
* Ext GWT 2.2.4 - Ext for GWT
* Copyright(c) 2007-2010, Ext JS, LLC.
* licensing@extjs.com
*
* http://extjs.com/license
*/
package com.extjs.gxt.ui.client.dnd;

import java.util.ArrayList;
import java.util.List;

import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.TreeModel;
import com.extjs.gxt.ui.client.dnd.DND.Operation;
import com.extjs.gxt.ui.client.dnd.DND.TreeSource;
import com.extjs.gxt.ui.client.event.ComponentEvent;
import com.extjs.gxt.ui.client.event.DNDEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.store.TreeStore;
import com.extjs.gxt.ui.client.util.Format;
import com.extjs.gxt.ui.client.widget.treepanel.TreePanel;
import com.extjs.gxt.ui.client.widget.treepanel.TreePanel.TreeNode;
import com.google.gwt.user.client.Element;

/**
* <code>DragSource</code> implementation for TreePanel.
*/
public class TreePanelDragSource extends DragSource {

  protected TreePanel<ModelData> tree;
  protected TreeSource treeSource = TreeSource.BOTH;
  protected boolean treeStoreState = true;

  @SuppressWarnings({"unchecked", "rawtypes"})
  public TreePanelDragSource(TreePanel tree) {
    super(tree);
    this.tree = tree;
    setStatusText("{0} items selected");

    tree.addListener(Events.OnMouseDown, new Listener<ComponentEvent>() {
      public void handleEvent(ComponentEvent be) {
        TreePanelDragSource.this.tree.focus();
      }
    });
  }

  /**
   * Returns the type of items that can be dragged.
   *
   * @return the tree source type
   */
  public TreeSource getTreeSource() {
    return treeSource;
  }

  /**
   * Returns true if tree store state is enabled.
   *
   * @return the tree store state
   */
  public boolean isTreeStoreState() {
    return treeStoreState;
  }

  /**
   * Sets which tree items can be dragged (defaults to BOTH).
   *
   * @param treeSource the tree source type
   */
  public void setTreeSource(TreeSource treeSource) {
    this.treeSource = treeSource;
  }

  /**
   * True to use {@link TreeStore#getModelState(ModelData)} when setting the
   * drag data (defaults to true). False to return a flat list of the selected
   * models in the tree.
   *
   * @param treeStoreState true to use model state
   */
  public void setTreeStoreState(boolean treeStoreState) {
    this.treeStoreState = treeStoreState;
  }

  @Override
  protected void onDragDrop(DNDEvent event) {
    if (event.getOperation() == Operation.MOVE) {
      List<TreeModel> sel = event.getData();
      for (TreeModel tm : sel) {
        ModelData m = (ModelData) tm.get("model");
        tree.getStore().remove(m);
      }
    }
  }

  @Override
  @SuppressWarnings({"unchecked", "rawtypes"})
  protected void onDragStart(DNDEvent e) {
    TreeNode n = tree.findNode((Element) e.getDragEvent().getStartElement());
    if (n == null) {
      e.setCancelled(true);
      return;
    }
    ModelData m = n.getModel();
    if (!tree.getView().isSelectableTarget(m, (Element) e.getDragEvent().getStartElement())) {
      e.setCancelled(true);
      return;
    }

    boolean leaf = treeSource == TreeSource.LEAF || treeSource == TreeSource.BOTH;
    boolean node = treeSource == TreeSource.NODE || treeSource == TreeSource.BOTH;

    List<ModelData> sel = tree.getSelectionModel().getSelectedItems();
    if (sel.size() > 0) {
      boolean ok = true;
      for (ModelData mi : sel) {
        if ((leaf && tree.isLeaf(mi)) || (node && !tree.isLeaf(mi))) {
          continue;
        }
        ok = false;
        break;
      }
      if (ok) {
        List models = new ArrayList();
        for (ModelData mi : sel) {
          models.add(treeStoreState ? tree.getStore().getModelState(mi) : mi);
        }
        e.setData(models);
        e.setCancelled(false);
        e.getStatus().update(Format.substitute(getStatusText(), sel.size()));

      } else {
        e.setCancelled(true);
      }
    } else {
      e.setCancelled(true);
    }
  }
}
TOP

Related Classes of com.extjs.gxt.ui.client.dnd.TreePanelDragSource

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.