Package com.extjs.gxt.ui.client.widget.treepanel

Source Code of com.extjs.gxt.ui.client.widget.treepanel.TreePanelView

/*
* 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.widget.treepanel;

import com.extjs.gxt.ui.client.GXT;
import com.extjs.gxt.ui.client.aria.FocusFrame;
import com.extjs.gxt.ui.client.core.El;
import com.extjs.gxt.ui.client.core.XDOM;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.event.TreePanelEvent;
import com.extjs.gxt.ui.client.store.Store;
import com.extjs.gxt.ui.client.store.TreeStore;
import com.extjs.gxt.ui.client.util.IconHelper;
import com.extjs.gxt.ui.client.util.Util;
import com.extjs.gxt.ui.client.widget.Component;
import com.extjs.gxt.ui.client.widget.treepanel.TreePanel.Joint;
import com.extjs.gxt.ui.client.widget.treepanel.TreePanel.TreeNode;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.AbstractImagePrototype;
import com.google.gwt.user.client.ui.Accessibility;

@SuppressWarnings({"unchecked", "rawtypes"})
public class TreePanelView<M extends ModelData> {

  public enum TreeViewRenderMode {
    ALL, BODY, CONTAINER, MAIN
  };

  protected TreeNode over;
  protected TreePanel<M> tree;
  protected TreeStore<M> treeStore;

  private int cacheSize = 20;
  private int cleanDelay = 500;
  private int scrollDelay = 0;

  public void bind(Component component, Store store) {
    this.tree = (TreePanel) component;
    this.treeStore = (TreeStore) store;
  }

  public void collapse(TreeNode node) {
    getContainer(node).getStyle().setProperty("display", "none");
    tree.refresh((M) node.m);
    if (GXT.isFocusManagerEnabled()) {
      Accessibility.setState((Element) node.getElement().getFirstChildElement(), "aria-expanded", "false");
      FocusFrame.get().sync(tree);
    }
  }

  public void expand(TreeNode node) {
    getContainer(node).getStyle().setProperty("display", "block");
    tree.refresh((M) node.m);
    if (GXT.isFocusManagerEnabled()) {
      FocusFrame.get().sync(tree);
      Accessibility.setState((Element) node.getElement().getFirstChildElement(), "aria-expanded", "true");
    }
  }

  public int getCacheSize() {
    return cacheSize;
  }

  public Element getCheckElement(TreeNode node) {
    if (node.check == null) {
      node.check = getElementContainer(node) != null
          ? ((NodeList<Element>) getElementContainer(node).getChildNodes().cast()).getItem(2) : null;
    }
    return node.check;
  }

  public int getCleanDelay() {
    return cleanDelay;
  }

  public Element getContainer(TreeNode node) {
    if (node.container == null) {
      String s = getTemplate(node.m, null, null, null, false, false, null, 0, TreeViewRenderMode.CONTAINER);
      node.container = node.getElement().appendChild(XDOM.create(s));
    }
    return node.container;
  }

  public Element getElementContainer(TreeNode node) {
    if (node.elContainer == null) {
      node.elContainer = node.getElement() != null ? (Element) node.getElement().getFirstChild() : null;
    }
    return node.elContainer;
  }

  public Element getIconElement(TreeNode node) {
    if (node.icon == null) {
      node.icon = getElementContainer(node) != null
          ? ((NodeList<Element>) getElementContainer(node).getChildNodes().cast()).getItem(3) : null;
    }
    return node.icon;
  }

  public Element getJointElement(TreeNode node) {
    if (node.joint == null) {
      node.joint = ((NodeList<Element>) getElementContainer(node).getChildNodes().cast()).getItem(1);
    }
    return node.joint;
  }

  public int getScrollDelay() {
    return scrollDelay;
  }

  public String getTemplate(ModelData m, String id, String text, AbstractImagePrototype icon, boolean checkable,
      boolean checked, Joint joint, int level, TreeViewRenderMode renderMode) {
    if (renderMode == TreeViewRenderMode.CONTAINER) {
      return "<div unselectable=on class=\"x-tree3-node-ct\" role=\"group\"></div>";
    }
    StringBuilder sb = new StringBuilder();
    if (renderMode == TreeViewRenderMode.ALL || renderMode == TreeViewRenderMode.MAIN) {
      sb.append("<div unselectable=on id=\"");
      sb.append(id);
      sb.append("\"");

      sb.append(" class=\"x-tree3-node\"  role=\"presentation\">");

      String cls = "x-tree3-el";
      if (GXT.isHighContrastMode) {
        switch (joint) {
          case COLLAPSED:
            cls += " x-tree3-node-joint-collapse";
            break;
          case EXPANDED:
            cls += " x-tree3-node-joint-expand";
            break;
        }
      }

      sb.append("<div unselectable=on class=\"" + cls + "\" id=\"" + tree.getId() + "__" + id + "\" role=\"treeitem\" ");
      sb.append(" aria-level=\"" + (level + 1) + "\">");
    }
    if (renderMode == TreeViewRenderMode.ALL || renderMode == TreeViewRenderMode.BODY) {
      Element jointElement = null;
      switch (joint) {
        case COLLAPSED:
          jointElement = (Element) tree.getStyle().getJointCollapsedIcon().createElement().cast();
          break;
        case EXPANDED:
          jointElement = (Element) tree.getStyle().getJointExpandedIcon().createElement().cast();
          break;
      }

      if (jointElement != null) {
        El.fly(jointElement).addStyleName("x-tree3-node-joint");
      }

      sb.append("<img src=\"");
      sb.append(GXT.BLANK_IMAGE_URL);
      sb.append("\" style=\"height: 18px; width: ");
      sb.append(level * getIndenting(findNode((M) m)));
      sb.append("px;\" />");
      sb.append(jointElement == null ? "<img src=\"" + GXT.BLANK_IMAGE_URL
          + "\" style=\"width: 16px\" class=\"x-tree3-node-joint\" />" : DOM.toString(jointElement));
      if (checkable) {
        Element e = (Element) (checked ? GXT.IMAGES.checked().createElement().cast()
            : GXT.IMAGES.unchecked().createElement().cast());
        El.fly(e).addStyleName("x-tree3-node-check");
        sb.append(DOM.toString(e));
      } else {
        sb.append("<span class=\"x-tree3-node-check\"></span>");
      }
      if (icon != null) {
        Element e = icon.createElement().cast();
        El.fly(e).addStyleName("x-tree3-node-icon");
        sb.append(DOM.toString(e));
      } else {
        sb.append("<span class=\"x-tree3-node-icon\"></span>");
      }
      sb.append("<span  unselectable=on class=\"x-tree3-node-text\">");
      sb.append(text);
      sb.append("</span>");
    }

    if (renderMode == TreeViewRenderMode.ALL || renderMode == TreeViewRenderMode.MAIN) {
      sb.append("</div>");
      sb.append("</div>");
    }
    return sb.toString();
  }

  public Element getTextElement(TreeNode node) {
    if (node.text == null) {
      node.text = getElementContainer(node) != null
          ? ((NodeList<Element>) getElementContainer(node).getChildNodes().cast()).getItem(4) : null;
    }
    return node.text;

  }

  public boolean isSelectableTarget(M m, Element target) {
    TreeNode n = findNode(m);
    if (n == null) {
      return false;
    }
    boolean isNotJointTarget = false;
    if (GXT.isIE6) {
      isNotJointTarget = !El.fly(target).getParent().hasStyleName("x-tree3-node-joint");
    } else {
      isNotJointTarget = !El.fly(target).hasStyleName("x-tree3-node-joint");
    }
    if (isNotJointTarget && tree.isCheckable()) {
      boolean isNotCheckTarget = !El.fly(target).hasStyleName("x-tree3-node-check");
      return isNotCheckTarget;
    }
    return isNotJointTarget;
  }
 
  public void onCheckChange(TreeNode node, boolean checkable, boolean check) {
    Element checkEl = (Element) getCheckElement(node);
    if (checkEl != null) {
      Element e;
      if (checkable) {
        if (check) {
          e = (Element) GXT.IMAGES.checked().createElement().cast();
        } else {
          e = (Element) GXT.IMAGES.unchecked().createElement().cast();
        }
      } else {
        e = DOM.createSpan();
      }
      El.fly(e).addStyleName("x-tree3-node-check");
      node.check = (Element) node.getElement().getFirstChild().insertBefore(e, checkEl);
      El.fly(checkEl).remove();
    }
  }

  public void onDropChange(TreeNode node, boolean drop) {
    El.fly(getElementContainer(node)).setStyleName("x-ftree2-node-drop", drop);
  }

  public void onEvent(TreePanelEvent ce) {
    int type = ce.getEventTypeInt();
    switch (type) {
      case Event.ONMOUSEOVER:
        if (tree.isTrackMouseOver()) {
          onMouseOver(ce);
        }
        break;
      case Event.ONMOUSEOUT:
        if (tree.isTrackMouseOver()) {
          onMouseOut(ce);
        }
        break;
    }
  }

  public void onIconStyleChange(TreeNode node, AbstractImagePrototype icon) {
    Element iconEl = getIconElement(node);
    if (iconEl != null) {
      Element e;
      if (icon != null) {
        e = (Element) icon.createElement().cast();
      } else {
        e = DOM.createSpan();
      }
      El.fly(e).addStyleName("x-tree3-node-icon");
      node.icon = (Element) node.getElement().getFirstChild().insertBefore(e, iconEl);
      El.fly(iconEl).remove();
    }
  }

  public void onJointChange(TreeNode node, Joint joint) {
    Element jointEl = getJointElement(node);
    if (jointEl != null) {
      Element e;
      switch (joint) {
        case COLLAPSED:
          e = (Element) tree.getStyle().getJointCollapsedIcon().createElement().cast();
          if (GXT.isHighContrastMode) {
            El.fly(node.elContainer).addStyleName("x-tree3-node-joint-collapse").removeStyleName(
                "x-tree3-node-joint-expand");
          }
          break;
        case EXPANDED:
          e = (Element) tree.getStyle().getJointExpandedIcon().createElement().cast();
          if (GXT.isHighContrastMode) {
            El.fly(node.elContainer).addStyleName("x-tree3-node-joint-expand").removeStyleName(
                "x-tree3-node-joint-collapse");
          }
          break;
        default:
          e = XDOM.create("<img src=\"" + GXT.BLANK_IMAGE_URL + "\" width=\"16px\"/>");
          if (GXT.isHighContrastMode) {
            El.fly(node.elContainer).removeStyleName("x-tree3-node-joint-collapse").removeStyleName(
                "x-tree3-node-joint-expand");
          }
      }

      El.fly(e).addStyleName("x-tree3-node-joint");
      node.joint = (Element) node.getElement().getFirstChild().insertBefore(e, jointEl);
      El.fly(jointEl).remove();
    }
  }

  public void onLoading(TreeNode node) {
    onIconStyleChange(node, IconHelper.createStyle("x-tree3-loading"));
  }

  public void onOverChange(TreeNode node, boolean select) {
    El.fly(getElementContainer(node)).setStyleName("x-ftree2-node-over", select);
  }

  public void onSelectChange(M model, boolean select) {
    if (select) {
      tree.setExpanded(treeStore.getParent(model), true);
    }
    TreeNode node = findNode(model);
    if (node != null) {
      Element e = getElementContainer(node);
      if (e != null) {
        El.fly(e).setStyleName("x-ftree2-selected", select);
        if (select) {
          String tid = tree.getId();
          Accessibility.setState(tree.getElement(), "aria-activedescendant", tid + "__" + node.getElement().getId());
        }
      }
    }
  }

  public void onTextChange(TreeNode node, String text) {
    Element textEl = getTextElement(node);
    if (textEl != null) {
      textEl.setInnerHTML(Util.isEmptyString(text) ? "&#160;" : text);
    }
  }

  public void setCacheSize(int cacheSize) {
    this.cacheSize = cacheSize;
  }

  public void setCleanDelay(int cleanDelay) {
    this.cleanDelay = cleanDelay;
  }

  public void setScrollDelay(int scrollDelay) {
    this.scrollDelay = scrollDelay;
  }

  protected TreeNode findNode(M m){
    return tree.findNode(m);
  }

  protected int getCalculatedRowHeight() {
    return 21;
  }

  protected int getIndenting(TreeNode node) {
    return 18;
  }

  protected void onMouseOut(TreePanelEvent ce) {
    if (over != null) {
      onOverChange(over, false);
      over = null;
    }
  }

  protected void onMouseOver(TreePanelEvent ce) {
    if (ce.getNode() != null) {
      if (over != ce.getNode()) {
        onMouseOut(ce);
        over = ce.getNode();
        onOverChange(over, true);
      }
    }
  }

}
TOP

Related Classes of com.extjs.gxt.ui.client.widget.treepanel.TreePanelView

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.