Package com.onpositive.commons.ui.viewers

Source Code of com.onpositive.commons.ui.viewers.DeferedContentProvider

package com.onpositive.commons.ui.viewers;

import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.widgets.Display;

public class DeferedContentProvider implements ITreeContentProvider {

  private final ITreeContentProvider parent;
  private int limit = 300;
  private TreeViewer viewer;

  public DeferedContentProvider(ITreeContentProvider parent) {
    this.parent = parent;
  }

  public Object[] getChildren(Object parentElement) {
    return parent.getChildren(parentElement);
  }

  public Object getParent(Object element) {
    return parent.getParent(element);
  }

  public boolean hasChildren(Object element) {
    return parent.hasChildren(element);
  }

  public Object[] getElements(Object inputElement) {
    Object[] elements = parent.getElements(inputElement);
    ViewerSorter sorter = viewer.getSorter();
    if (sorter!=null){
      sorter.sort(viewer, elements);
    }
    if (elements.length > limit) {
      final Object[][] newElements = new Object[elements.length / limit
          + (elements.length % limit == 0 ? 0 : 1)][];
      for (int b = 0; b < newElements.length; b++) {
        if (b == newElements.length - 1 && elements.length % limit != 0) {
          newElements[b] = new Object[elements.length % limit];
        } else {
          newElements[b] = new Object[limit];
        }
      }
      for (int a = 0; a < elements.length; a++) {
        newElements[a / limit][a % limit] = elements[a];
      }
      for (int b = 1; b < newElements.length; b++) {
        final int index = b;
        Display.getCurrent().timerExec(b * 100, new Runnable() {

          public void run() {
            if (viewer.getContentProvider() == DeferedContentProvider.this
                && !viewer.getTree().isDisposed()) {
              viewer.getControl().setRedraw(false);
              try {
                viewer.add(viewer.getInput(),
                    newElements[index]);
              } finally {
                viewer.getControl().setRedraw(true);
              }
            }
          }

        });
      }
      return newElements[0];
    }
    return elements;
  }

  public void dispose() {
    parent.dispose();
  }

  public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    parent.inputChanged(viewer, oldInput, newInput);
    this.viewer = (TreeViewer) viewer;
  }

  public IContentProvider getBase() {
    return parent;
  }

}
TOP

Related Classes of com.onpositive.commons.ui.viewers.DeferedContentProvider

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.