Package com.sencha.gxt.theme.base.client.statusproxy

Source Code of com.sencha.gxt.theme.base.client.statusproxy.StatusProxyBaseAppearance$StatusProxyStyle

/**
* Sencha GXT 3.1.0-beta - Sencha for GWT
* Copyright(c) 2007-2014, Sencha, Inc.
* licensing@sencha.com
*
* http://www.sencha.com/products/gxt/license/
*/
package com.sencha.gxt.theme.base.client.statusproxy;

import com.google.gwt.dom.client.Element;
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.user.client.ui.AbstractImagePrototype;
import com.sencha.gxt.core.client.XTemplates;
import com.sencha.gxt.core.client.dom.XElement;
import com.sencha.gxt.core.client.resources.StyleInjectorHelper;
import com.sencha.gxt.dnd.core.client.StatusProxy.StatusProxyAppearance;

public abstract class StatusProxyBaseAppearance implements StatusProxyAppearance {

  public interface StatusProxyResources {

    ImageResource dropAllowed();

    ImageResource dropNotAllowed();

    StatusProxyStyle style();

  }

  public interface StatusProxyStyle extends CssResource {

    String dragGhost();

    String dropAllowed();

    String dropDisallowed();

    String dropIcon();

    String proxy();

  }

  public interface StatusProxyTemplates extends XTemplates {

    @XTemplate("<div class=\"{style.proxy}\"><div class=\"{style.dropIcon}\"></div><div class=\"{style.dragGhost}\"></div></div>")
    SafeHtml template(StatusProxyBaseAppearance.StatusProxyStyle style);

  }

  private final StatusProxyTemplates templates;
  private final StatusProxyResources resources;
  private final StatusProxyStyle style;

  public StatusProxyBaseAppearance(StatusProxyBaseAppearance.StatusProxyResources resources,
      StatusProxyBaseAppearance.StatusProxyTemplates templates) {
    this.resources = resources;
    style = resources.style();
    this.templates = templates;

    StyleInjectorHelper.ensureInjected(style, true);
  }

  @Override
  public void render(SafeHtmlBuilder builder) {
    builder.append(templates.template(style));
  }

  @Override
  public void setStatus(Element parent, boolean allowed) {
    if (allowed) {
      setStatus(parent, resources.dropAllowed());
    } else {
      setStatus(parent, resources.dropNotAllowed());
    }
  }

  @Override
  public void setStatus(Element parent, ImageResource icon) {
    XElement wrap = iconWrap(parent);
    wrap.setInnerHTML("");
    if (icon != null) {
      wrap.appendChild(getImage(icon));
    }
  }

  @Override
  public void update(Element parent, String html) {
    getDragGhost(parent).setInnerHTML(html);
  }

  protected XElement iconWrap(Element parent) {
    return parent.getFirstChildElement().cast();
  }

  private Element getDragGhost(Element parent) {
    return XElement.as(parent).select("." + style.dragGhost()).getItem(0);
  }

  private Element getImage(ImageResource ir) {
    return AbstractImagePrototype.create(ir).createElement();
  }

}
TOP

Related Classes of com.sencha.gxt.theme.base.client.statusproxy.StatusProxyBaseAppearance$StatusProxyStyle

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.