Package com.extjs.gxt.ui.client.binder

Source Code of com.extjs.gxt.ui.client.binder.DataViewBinder

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

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

import com.extjs.gxt.ui.client.core.El;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.ModelStringProvider;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.store.StoreEvent;
import com.extjs.gxt.ui.client.widget.Component;
import com.extjs.gxt.ui.client.widget.DataView;
import com.extjs.gxt.ui.client.widget.DataViewItem;
import com.extjs.gxt.ui.client.widget.ListView;

/**
* A <code>StoreBinder</code> implementation for <code>DataView</code>.
*
* @param <M> the model type
*
* @deprecated @link {@link ListView}
*/
public class DataViewBinder<M extends ModelData> extends StoreBinder<ListStore<M>, DataView, M> {

  private DataView view;
  private ListStore<M> store;

  /**
   * Creates a new data view binder.
   *
   * @param view the data view
   * @param store the list store
   */
  public DataViewBinder(DataView view, ListStore<M> store) {
    super(store, view);
    this.view = view;
    this.store = store;
  }

  @Override
  public Component findItem(M model) {
    for (DataViewItem item : view.getItems()) {
      if (store.getModelComparer().equals(item.<M>getModel(), model)) {
        return item;
      }
    }
    return null;
  }

  /**
   * Returns the binder's store.
   *
   * @return the store
   */
  public ListStore<M> getStore() {
    return store;
  }

  /**
   * Returns the data view.
   *
   * @return this view
   */
  public DataView getView() {
    return view;
  }

  @Override
  protected void createAll() {
    view.removeAll();
    for (M m : store.getModels()) {
      view.add(createItem(m));
    }
  }

  protected DataViewItem createItem(M model) {
    Map<String, Object> values = model.getProperties();
    if (view.getTemplate() != null && view.getTemplate().getStringProvider() != null) {
      ModelStringProvider<ModelData> provider = view.getTemplate().getStringProvider();
      for (String s : values.keySet()) {
        String val = provider.getStringValue(model, s);
        if (val != null) {
          values.put(s, val);
        }
      }
    }
    DataViewItem item = new DataViewItem(values);
    setModel(item, model);
    return item;
  }

  @Override
  protected List<M> getSelectionFromComponent() {
    List<M> selection = new ArrayList<M>();

    List<DataViewItem> sel = view.getSelectedItems();
    for (DataViewItem item : sel) {
      selection.add(item.<M>getModel());
    }
    return selection;
  }

  @Override
  protected void onAdd(StoreEvent<M> se) {
    List<M> models = se.getModels();
    for (int i = models.size() - 1; i >= 0; i--) {
      view.insert(createItem(models.get(i)), se.getIndex());
    }
  }

  @Override
  protected void onDataChanged(StoreEvent<M> se) {
    createAll();
  }

  @Override
  protected void onFilter(StoreEvent<M> se) {
    if (store.isFiltered()) {
      for (DataViewItem item : view.getItems()) {
        M m = item.<M>getModel();
        item.setVisible(store.contains(m));
      }
    } else {
      for (DataViewItem item : view.getItems()) {
        item.setVisible(true);
      }
    }
  }

  @Override
  protected void onRemove(StoreEvent<M> se) {
    DataViewItem item = (DataViewItem) findItem((M) se.getModel());
    if (item != null) {
      view.remove(item);
    }
  }

  @Override
  protected void onSort(StoreEvent<M> se) {
    if (view.getItemCount() > 0) {
      El parent = view.getItem(0).el().getParent();
      int count = store.getCount();
      for (int i = 0; i < count; i++) {
        M m = store.getAt(i);
        DataViewItem item = (DataViewItem) findItem(m);
        parent.dom.appendChild(item.getElement());
      }
    }
  }

  @Override
  protected void onUpdate(StoreEvent<M> se) {
    if (se.getModel() != null) {
      update(se.getModel());
    }
  }

  @Override
  protected void removeAll() {
    view.removeAll();
  }

  @Override
  protected void setSelectionFromProvider(List<M> selection) {
    List<DataViewItem> sel = new ArrayList<DataViewItem>();
    for (M m : selection) {
      DataViewItem item = (DataViewItem) findItem(m);
      if (item != null) {
        sel.add(item);
      }
    }
    view.setSelectedItems(sel);
  }

  @Override
  protected void update(M model) {
    DataViewItem item = (DataViewItem) findItem(model);
    if (item != null) {
      int idx = store.indexOf(model);
      view.remove(item);
      view.insert(createItem(model), idx);
    }
  }

}
TOP

Related Classes of com.extjs.gxt.ui.client.binder.DataViewBinder

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.