Package net.mygwt.ui.client.viewer

Source Code of net.mygwt.ui.client.viewer.ListViewer

/*******************************************************************************
* Copyright (c) 2000, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     IBM Corporation - initial API and implementation
*     Darrell Meyer <darrell@mygwt.net> - derived implementation
*******************************************************************************/
package net.mygwt.ui.client.viewer;

import java.util.ArrayList;
import java.util.Iterator;

import net.mygwt.ui.client.Events;
import net.mygwt.ui.client.event.BaseEvent;
import net.mygwt.ui.client.event.Listener;
import net.mygwt.ui.client.widget.Component;
import net.mygwt.ui.client.widget.List;
import net.mygwt.ui.client.widget.ListItem;

import com.google.gwt.user.client.ui.Widget;

/**
* A concrete viewer based for a <code>List</code>.
*
* <p>
* This code is based on JFace API from the Eclipse Project.
* </p>
*
* @see List
*/
public class ListViewer extends Viewer implements ICheckable {

  private List list;
  private ListenerList checkChangeListener;

  /**
   * Creates a new list intance.
   *
   * @param list the list
   */
  public ListViewer(List list) {
    this.list = list;
    hookWidget(list);
  }

  public void add(Object elem) {
    renderItem(elem, list.getWidgetCount());
  }

  public void addCheckStateListener(ICheckStateListener listener) {
    if (checkChangeListener == null) {
      checkChangeListener = new ListenerList();
    }
    checkChangeListener.add(listener);
  }

  public Widget findItem(Object elem) {
    int size = list.getWidgetCount();
    for (int i = 0; i < size; i++) {
      ListItem item = list.getItem(i);
      if (item.getData() == elem) {
        return item;
      }
    }
    return null;
  }

  public boolean getChecked(Object element) {
    ListItem item = (ListItem) findItem(element);

    if (item != null) {
      return item.isChecked();
    }

    return false;
  }

  /**
   * Returns the viewer's list widget.
   *
   * @return the list
   */
  public List getList() {
    return list;
  }

  public Widget getWidget() {
    return list;
  }

  public void insert(Object elem, int index) {
    renderItem(elem, index);
  }

  public void remove(Object elem) {
    ListItem item = (ListItem) findItem(elem);
    if (item != null) {
      removeElement(elem);
      item.setData(null);
    }
  }

  public void removeCheckStateListener(ICheckStateListener listener) {
    if (checkChangeListener != null) {
      checkChangeListener.remove(listener);
    }
  }

  public boolean setChecked(Object element, boolean state) {
    ListItem item = (ListItem) findItem(element);

    if (item != null) {
      item.setChecked(state);
      return true;
    }

    return false;
  }
 

  public void setSelection(ISelection selection, boolean reveal) {
    java.util.List selected = selection.toList();
    int ct = list.getWidgetCount();
    for (int i = 0; i < ct; i++) {
      ListItem item = list.getItem(i);
      Object elem = item.getData();
      if (selected.contains(elem)) {
        list.select(i);
      } else {
        list.deselect(i);
      }
    }
  }

  public void update() {
    int ct = list.getWidgetCount();
    for (int i = 0; i < ct; i++) {
      updateInternal(list.getItem(i));
    }
  }

  public void update(Object elem) {
    ListItem item = (ListItem) findItem(elem);
    updateInternal(item);
  }

  protected java.util.List getSelectedFromWidget() {
    // java.util.List items = list.getSelection();
    ArrayList elems = new ArrayList();
    // for (int i = 0; i < items.size(); i++) {
    // ListItem item = (ListItem) items.get(i);
    // elems.add(item.ext().getData());
    // }
    return elems;
  }

  protected void hookWidget(Component widget) {
    super.hookWidget(widget);
    widget.addListener(Events.CheckChange, new Listener() {

      public void handleEvent(BaseEvent be) {
        fireCheckStateChanged(be);
      }
    });
  }

  protected void onInputReceived(Object input) {
    renderList();
  }

  private void fireCheckStateChanged(BaseEvent be) {
    if (checkChangeListener != null) {
      ListItem item = (ListItem) be.item;

      CheckStateChangedEvent evt = new CheckStateChangedEvent(this, item.getData(),
          item.isChecked());
      Iterator it = checkChangeListener.iterator();

      while (it.hasNext()) {
        ((ICheckStateListener) it.next()).checkStateChanged(evt);
      }
    }
  }

  private void renderItem(Object elem, int position) {
    ILabelProvider lp = (ILabelProvider) getLabelProvider();
    ListItem item = new ListItem();
    item.setData(elem);
    item.setText(lp.getText(elem));
    String style = lp.getIconStyle(elem);
    if (style != null) {
      item.setIconStyle(lp.getIconStyle(elem));
    }
    list.insert(item, position);
  }

  private void renderList() {
    list.removeAll();
    Object[] elems = filter(elements);
    elems = sortElements(elems);
    for (int i = 0; i < elems.length; i++) {
      Object element = elems[i];
      renderItem(element, i);
    }
  }

  private void updateInternal(ListItem item) {
    ILabelProvider lp = (ILabelProvider) getLabelProvider();
    Object elem = item.getData();
    item.setText(lp.getText(elem));
    String style = lp.getIconStyle(elem);
    if (style != null) {
      item.setIconStyle(lp.getIconStyle(elem));
    }

  }

}
TOP

Related Classes of net.mygwt.ui.client.viewer.ListViewer

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.