All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sencha.gxt.theme.base.client.tree.TreeBaseAppearance Maven / Gradle / Ivy

/**
 * Ext GWT 3.0.0-rc - Ext for GWT
 * Copyright(c) 2007-2011, Sencha, Inc.
 * [email protected]
 *
 * http://sencha.com/license
 */
package com.sencha.gxt.theme.base.client.tree;

import com.google.gwt.dom.client.Element;
import com.google.gwt.resources.client.ClientBundle.Source;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.AbstractImagePrototype;
import com.sencha.gxt.core.client.GXT;
import com.sencha.gxt.core.client.dom.XDOM;
import com.sencha.gxt.core.client.dom.XElement;
import com.sencha.gxt.widget.core.client.tree.Tree.CheckState;
import com.sencha.gxt.widget.core.client.tree.Tree.Joint;
import com.sencha.gxt.widget.core.client.tree.Tree.TreeAppearance;
import com.sencha.gxt.widget.core.client.tree.TreeStyle;
import com.sencha.gxt.widget.core.client.tree.TreeView.TreeViewRenderMode;

public abstract class TreeBaseAppearance implements TreeAppearance {

  public interface TreeBaseStyle extends CssResource {
    String check();

    String container();

    String dragOver();

    String drop();

    String element();

    String icon();

    String joint();

    String node();

    String over();

    String selected();

    String text();

    String tree();

  }

  public interface TreeResources {

    ImageResource checked();

    ImageResource folderClosed();

    ImageResource folderOpened();

    @Source("treeCollapsed.png")
    ImageResource jointCollapsedIcon();

    @Source("treeExpanded.png")
    ImageResource jointExpandedIcon();

    ImageResource partialChecked();

    TreeBaseStyle style();

    ImageResource unchecked();

  }

  private final TreeResources resources;
  private final TreeBaseStyle style;

  public TreeBaseAppearance(TreeResources resources) {
    this.resources = resources;
    this.style = this.resources.style();
    this.style.ensureInjected();
  }

  @Override
  public ImageResource closeNodeIcon() {
    return resources.folderClosed();
  }

  @Override
  public String elementSelector() {
    return "." + style.element();
  }

  public XElement findIconElement(XElement target) {
    return target.selectNode("." + style.icon());
  }

  @Override
  public XElement findJointElement(XElement target) {
    return target.selectNode("." + style.joint());
  }

  @Override
  public XElement getCheckElement(XElement container) {
    return container.getChildNodes().getItem(2).cast();
  }

  @Override
  public XElement getContainerElement(XElement node) {
    return node.getFirstChildElement().cast();
  }

  @Override
  public XElement getIconElement(XElement container) {
    return container.getChildNodes().getItem(3).cast();
  }

  @Override
  public XElement getJointElement(XElement container) {
    return container.getChildNodes().getItem(1).cast();
  }

  @Override
  public XElement getTextElement(XElement container) {
    return container.getChildNodes().getItem(4).cast();
  }

  @Override
  public boolean isCheckElement(XElement target) {
    return target.hasClassName(style.check());
  }

  @Override
  public boolean isJointElement(XElement target) {
    if (GXT.isIE6()) {
      target = target.getParentElement().cast();
      return target.hasClassName(style.joint());
    } else {
      return target.hasClassName(style.joint());
    }
  }
  
  @Override
  public String itemSelector() {
    return "." + style.node();
  }

  @Override
  public XElement onCheckChange(XElement node, XElement checkElement, boolean checkable, CheckState state) {
    Element e = null;
    if (checkable) {
      switch (state) {
        case CHECKED:
          e = getImage(resources.checked());
          break;
        case UNCHECKED:
          e = getImage(resources.unchecked());
          break;
        case PARTIAL:
          e = getImage(resources.partialChecked());
          break;
      }
    } else {
      e = DOM.createSpan();
    }
    e.addClassName(style.check());
    e = (Element) node.getFirstChild().insertBefore(e, checkElement);
    checkElement.removeFromParent();
    return e.cast();
  }

  @Override
  public void onDropOver(XElement node, boolean over) {
    node.setClassName(style.dragOver(), over);
  }

  @Override
  public void onHover(XElement node, boolean over) {
    node.setClassName(style.over(), over);
  }

  @Override
  public XElement onJointChange(XElement node, XElement jointElement, Joint joint, TreeStyle ts) {
    Element e;
    switch (joint) {
      case COLLAPSED:
        e = getImage(ts.getJointCloseIcon() == null ? resources.jointCollapsedIcon() : ts.getJointCloseIcon());
        break;
      case EXPANDED:
        e = getImage(ts.getJointOpenIcon() == null ? resources.jointExpandedIcon() : ts.getJointOpenIcon());
        break;
      default:
        e = XDOM.create("");
    }

    e.addClassName(style.joint());
    e = (Element) node.getFirstChild().insertBefore(e, jointElement);
    jointElement.removeFromParent();
    return e.cast();
  }

  @Override
  public void onSelect(XElement node, boolean select) {
    node.setClassName(style.selected(), select);
  }

  @Override
  public ImageResource openNodeIcon() {
    return resources.folderOpened();
  }

  @Override
  public void render(SafeHtmlBuilder sb) {
    sb.appendHtmlConstant("
"); } @Override public void renderContainer(SafeHtmlBuilder sb) { sb.appendHtmlConstant("
"); } @Override public void renderNode(SafeHtmlBuilder sb, String id, SafeHtml text, TreeStyle ts, ImageResource icon, boolean checkable, CheckState checked, Joint joint, int level, TreeViewRenderMode renderMode) { if (renderMode == TreeViewRenderMode.ALL || renderMode == TreeViewRenderMode.BUFFER_WRAP) { sb.appendHtmlConstant("
"); sb.appendHtmlConstant("
"); } if (renderMode == TreeViewRenderMode.ALL || renderMode == TreeViewRenderMode.BUFFER_BODY) { sb.appendHtmlConstant(""); Element jointElement = null; switch (joint) { case COLLAPSED: jointElement = getImage(ts.getJointCloseIcon() == null ? resources.jointCollapsedIcon() : ts.getJointCloseIcon()); break; case EXPANDED: jointElement = getImage(ts.getJointOpenIcon() == null ? resources.jointExpandedIcon() : ts.getJointOpenIcon()); break; } if (jointElement != null) { jointElement.addClassName(style.joint()); } sb.appendHtmlConstant(jointElement == null ? "" : jointElement.getString()); // checkable if (checkable) { Element e = null; switch (checked) { case CHECKED: e = getImage(resources.checked()); break; case UNCHECKED: e = getImage(resources.unchecked()); break; case PARTIAL: e = getImage(resources.partialChecked()); break; } e.addClassName(style.check()); sb.appendHtmlConstant(e.getString()); } else { sb.appendHtmlConstant(""); } if (icon != null) { Element e = getImage(icon); e.addClassName(style.icon()); sb.appendHtmlConstant(e.getString()); } else { sb.appendHtmlConstant(""); } sb.appendHtmlConstant("" + text.asString() + ""); } if (renderMode == TreeViewRenderMode.ALL || renderMode == TreeViewRenderMode.BUFFER_WRAP) { sb.appendHtmlConstant("
"); sb.appendHtmlConstant("
"); } } @Override public String textSelector() { return "." + style.text(); } private Element getImage(ImageResource ir) { return AbstractImagePrototype.create(ir).createElement(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy