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

com.sencha.gxt.theme.base.client.field.TriggerFieldDefaultAppearance Maven / Gradle / Ivy

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

import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.resources.client.ImageResource.ImageOptions;
import com.google.gwt.resources.client.ImageResource.RepeatStyle;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.sencha.gxt.cell.core.client.form.FieldCell.FieldAppearanceOptions;
import com.sencha.gxt.cell.core.client.form.TriggerFieldCell.TriggerFieldAppearance;
import com.sencha.gxt.core.client.GXT;
import com.sencha.gxt.core.client.dom.XElement;
import com.sencha.gxt.theme.base.client.field.TextFieldDefaultAppearance.TextFieldStyle;

public class TriggerFieldDefaultAppearance extends ValueBaseFieldDefaultAppearance implements TriggerFieldAppearance {

  public interface TriggerFieldResources extends ValueBaseFieldResources, ClientBundle {

    @Source({"ValueBaseField.css", "TextField.css", "TriggerField.css"})
    TriggerFieldStyle css();

    @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
    ImageResource textBackground();

    ImageResource triggerArrow();

    ImageResource triggerArrowOver();

    ImageResource triggerArrowClick();

    ImageResource triggerArrowFocus();

    ImageResource triggerArrowFocusOver();

    ImageResource triggerArrowFocusClick();

    @ImageOptions(repeatStyle = RepeatStyle.Horizontal, preventInlining = true)
    ImageResource invalidLine();
  }

  public interface TriggerFieldStyle extends TextFieldStyle {

    String trigger();

    String over();

    String click();

    String noedit();

  }

  private final TriggerFieldResources resources;
  private final TriggerFieldStyle style;

  public TriggerFieldDefaultAppearance() {
    this(GWT. create(TriggerFieldResources.class));
  }

  public TriggerFieldDefaultAppearance(TriggerFieldResources resources) {
    super(resources);
    this.resources = resources;
    this.style = resources.css();
  }

  @Override
  public XElement getInputElement(Element parent) {
    return parent.cast().selectNode("input");
  }

  protected XElement getTrigger(Element parent) {
    return parent.cast().selectNode("." + resources.css().trigger());
  }

  @Override
  public void render(SafeHtmlBuilder sb, String value, FieldAppearanceOptions options) {

    int width = options.getWidth();
    boolean hideTrigger = options.isHideTrigger();
    String name = options.getName();
    
    if (width == -1) {
      width = 150;
    }
    
    String inputStyles = "";
    String wrapStyles = "";
    
    if (width != -1) {
      wrapStyles += "width:" + width + "px;";
      if (!GXT.isBorderBox()) {
        // 6px margin, 2px border
        width -= 8;
      }
      if (!hideTrigger) {
        width -= resources.triggerArrow().getWidth();
      }
      inputStyles += "width:" + width + "px;";
    }

    String cls = style.field() + " " + style.text();
    
    if (value.equals("") && options.getEmptyText() != null) {
      cls += " " + style.empty();
      value = options.getEmptyText();
    }
    
    if (!options.isEditable()) {
      cls += " " + style.noedit();
    }
    
    String ro = " ";
    if (options.isReadonly() || !options.isEditable()) {
      ro = " readonly ";
    }
    
    String input = "";

    sb.appendHtmlConstant("
"); if (!hideTrigger) { sb.appendHtmlConstant(""); sb.appendHtmlConstant(""); sb.appendHtmlConstant("
"); sb.appendHtmlConstant(input); sb.appendHtmlConstant("
"); } else { sb.appendHtmlConstant(input); } sb.appendHtmlConstant("
"); } @Override public void onFocus(Element parent, boolean focus) { parent.cast().setClassName(resources.css().focus(), focus); getInputElement(parent).setClassName(resources.css().focus(), focus); } @Override public void onTriggerClick(XElement parent, boolean click) { getTrigger(parent).setClassName(resources.css().click(), click); } @Override public void onTriggerOver(XElement parent, boolean over) { parent.setClassName(resources.css().over(), over); } @Override public void setTriggerVisible(XElement parent, boolean visible) { getTrigger(parent).setVisible(visible); } @Override public boolean triggerIsOrHasChild(XElement parent, Element target) { return parent.isOrHasChild(target) && target. cast().is("." + resources.css().trigger()); } @Override public void setEditable(XElement parent, boolean editable) { getInputElement(parent).setClassName(style.noedit(), !editable); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy