Package com.extjs.gxt.ui.client.widget.grid.filters

Source Code of com.extjs.gxt.ui.client.widget.grid.filters.StringFilter$StringFilterMessages

/*
* Sencha GXT 2.3.1 - Sencha for GWT
* Copyright(c) 2007-2013, Sencha, Inc.
* licensing@sencha.com
*
* http://www.sencha.com/products/gxt/license/
*/
package com.extjs.gxt.ui.client.widget.grid.filters;

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

import com.extjs.gxt.ui.client.GXT;
import com.extjs.gxt.ui.client.data.BaseFilterConfig;
import com.extjs.gxt.ui.client.data.BaseStringFilterConfig;
import com.extjs.gxt.ui.client.data.FilterConfig;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.FieldEvent;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.MenuEvent;
import com.extjs.gxt.ui.client.util.DelayedTask;
import com.extjs.gxt.ui.client.widget.form.Field;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.menu.Menu;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.user.client.Element;

public class StringFilter extends Filter {

  public static class StringFilterMessages extends FilterMessages {
    private String emptyText = GXT.MESSAGES.stringFilter_emptyText();

    /**
     * Returns the field's empty text.
     *
     * @return the empty text
     */
    public String getEmptyText() {
      return emptyText;
    }

    /**
     * Sets the field empty text (defaults to 'Enter filter text...').
     *
     * @param emptyText the empty text
     */
    public void setEmptyText(String emptyText) {
      this.emptyText = emptyText;
    }
  }

  private TextField<String> field;

  private DelayedTask updateTask = new DelayedTask(new Listener<BaseEvent>() {
    public void handleEvent(BaseEvent be) {
      fireUpdate();
    }
  });
  private int width = 125;

  public StringFilter(String dataIndex) {
    super(dataIndex);

    field = new TextField<String>() {
      @Override
      protected void onKeyUp(FieldEvent fe) {
        super.onKeyUp(fe);
        onFieldKeyUp(fe);
      }
    };
    setWidth(getWidth());
    menu = new Menu() {
      @Override
      protected void onRender(Element target, int index) {
        super.onRender(target, index);
        removeStyleName("x-unselectable");
      }
    };
    menu.add(field);
    menu.addListener(Events.BeforeHide, new Listener<MenuEvent>() {
      public void handleEvent(MenuEvent be) {
        // blur the field because of empty text
        field.el().firstChild().blur();
        blurField(field);
      }
    });
    setMessages(new StringFilterMessages());
  }

  @Override
  public StringFilterMessages getMessages() {
    return (StringFilterMessages) super.getMessages();
  }

  @Override
  public List<FilterConfig> getSerialArgs() {
    List<FilterConfig> configs = new ArrayList<FilterConfig>();
    BaseFilterConfig c = new BaseStringFilterConfig("string", getValue());
    configs.add(c);
    return configs;
  }

  @Override
  public Object getValue() {
    return field.getValue();
  }

  /**
   * Returns the field width.
   *
   * @return the field width
   */
  public int getWidth() {
    return width;
  }

  @Override
  public boolean isActivatable() {
    return field.getValue() != null && field.getValue().length() > 0;
  }

  @Override
  public void setMessages(FilterMessages messages) {
    super.setMessages(messages);
    if (field != null) {
      field.setEmptyText(getMessages().getEmptyText());
    }
  }

  @Override
  public void setValue(Object value) {
    field.setValue((String) value);
    fireUpdate();
  }

  /**
   * Sets the field width (defaults to 125).
   *
   * @param width the field width
   */
  public void setWidth(int width) {
    this.width = width;
    field.setWidth(width);
  }

  @Override
  public boolean validateModel(ModelData model) {
    String val = getModelValue(model);
    Object value = getValue();
    String v = value == null ? "" : value.toString();
    if (v.length() == 0 && (val == null || val.length() == 0)) {
      return true;
    } else if (val == null) {
      return false;
    } else {
      return val.toLowerCase().indexOf(v.toLowerCase()) > -1;
    }
  }

  protected void onFieldKeyUp(FieldEvent fe) {
    int key = fe.getKeyCode();
    if (key == KeyCodes.KEY_ENTER && field.isValid()) {
      fe.stopEvent();
      menu.hide(true);
      return;
    }
    updateTask.delay(getUpdateBuffer());
  }

  private native void blurField(Field<?> f) /*-{
    f.@com.extjs.gxt.ui.client.widget.form.Field::onBlur(Lcom/extjs/gxt/ui/client/event/ComponentEvent;)(null)
  }-*/;

}
 
TOP

Related Classes of com.extjs.gxt.ui.client.widget.grid.filters.StringFilter$StringFilterMessages

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.