Example usage for org.eclipse.jface.viewers ILazyTreePathContentProvider updateElement

List of usage examples for org.eclipse.jface.viewers ILazyTreePathContentProvider updateElement

Introduction

In this page you can find the example usage for org.eclipse.jface.viewers ILazyTreePathContentProvider updateElement.

Prototype

public void updateElement(TreePath parentPath, int index);

Source Link

Document

Called when a previously-blank item becomes visible in the TreeViewer.

Usage

From source file:org.eclipe.debug.tests.viewer.model.TreeModelViewerAutopopulateAgent.java

License:Open Source License

public void updateComplete(IViewerUpdate update) {
    if (update instanceof IChildrenCountUpdate) {
        TreePath path = update.getElementPath();
        ILazyTreePathContentProvider contentProvider = (ILazyTreePathContentProvider) fViewer
                .getContentProvider();//from w w  w . j av  a 2  s.  co  m

        Widget[] items = fViewer.testFindItems(update.getElement());
        for (int i = 0; i < items.length; i++) {
            if (path.equals(getTreePath(items[i]))) {
                int itemCount = getItemChildCount(items[i]);
                for (int j = 0; j < itemCount; j++) {
                    contentProvider.updateElement(path, j);
                }
            }
        }
    }
}

From source file:org.eclipse.debug.tests.viewer.model.TreeModelViewerAutopopulateAgent.java

License:Open Source License

@Override
public void updateComplete(IViewerUpdate update) {
    if (update instanceof IChildrenCountUpdate) {
        TreePath path = update.getElementPath();
        ILazyTreePathContentProvider contentProvider = (ILazyTreePathContentProvider) fViewer
                .getContentProvider();// ww w  . ja v  a 2  s  .c  o m

        Widget[] items = fViewer.testFindItems(update.getElement());
        for (int i = 0; i < items.length; i++) {
            if (path.equals(getTreePath(items[i]))) {
                int itemCount = getItemChildCount(items[i]);
                for (int j = 0; j < itemCount; j++) {
                    contentProvider.updateElement(path, j);
                }
            }
        }
    }
}

From source file:org.key_project.sed.ui.util.SEDUIUtil.java

License:Open Source License

/**
 * Injects all unknown elements of the {@link TreeViewer} in the
 * parent hierarchy order defined by the given {@link Deque}.
 * @param treeViewer The {@link TreeViewer} to make elements known in.
 * @param injectQue The {@link Deque} which contains the unknown elements from parent to leaf.
 * @param monitor The {@link IProgressMonitor} to use.
 * @throws DebugException Occurred Exception
 *//* w w  w .j a v  a 2  s . c o m*/
protected static void injectElements(final TreeViewer treeViewer, Deque<Object> injectQue,
        final IProgressMonitor monitor) throws DebugException {
    SWTUtil.checkCanceled(monitor);
    // Check if something must be done
    if (!CollectionUtil.isEmpty(injectQue)) {
        // Check if the provider is of the expected form.
        IContentProvider cp = treeViewer.getContentProvider();
        if (cp instanceof ILazyTreePathContentProvider) {
            final ILazyTreePathContentProvider lazyContentProvider = (ILazyTreePathContentProvider) cp;
            // Create tree path to last known element
            final LinkedList<Object> tpElements = new LinkedList<Object>();
            Object knownParent = getParent(injectQue.getFirst());
            while (knownParent != null) {
                SWTUtil.checkCanceled(monitor);
                tpElements.addFirst(knownParent);
                knownParent = getParent(knownParent);
            }
            // Injects elements starting at the root to make them familiar in tree
            for (final Object toInject : injectQue) {
                SWTUtil.checkCanceled(monitor);
                // Compute index on parent
                Object parent = getParent(toInject);
                final int viewIndex = ArrayUtil.indexOf(getChildren(parent), toInject);
                if (viewIndex >= 0) {
                    // Create tree path to current element
                    final TreePath tp = new TreePath(tpElements.toArray());
                    // Create job collector to collect update jobs started by the Debug API
                    IFilter<Job> jobFilter = new IFilter<Job>() {
                        @Override
                        public boolean select(Job element) {
                            String className = element.getClass().getName();
                            return className.startsWith("org.eclipse.debug")
                                    || className.startsWith("org.eclipse.ui.internal.progress");
                        }
                    };
                    ScheduledJobCollector collector = new ScheduledJobCollector(jobFilter);
                    try {
                        // Start collecting update jobs started by the debug view
                        collector.start();
                        IRunnableWithException run = new AbstractRunnableWithException() {
                            @Override
                            public void run() {
                                try {
                                    // Inject the element into the TreeViewer
                                    lazyContentProvider.updateChildCount(tp, 0);
                                    lazyContentProvider.updateElement(tp, viewIndex);
                                } catch (Exception e) {
                                    setException(e);
                                }
                            }
                        };
                        if (!treeViewer.getControl().isDisposed()) {
                            treeViewer.getControl().getDisplay().syncExec(run);
                            if (run.getException() != null) {
                                throw new DebugException(LogUtil.getLogger().createErrorStatus(
                                        run.getException().getMessage(), run.getException()));
                            }
                        } else {
                            monitor.setCanceled(true);
                        }
                    } finally {
                        // Stop collecting update jobs
                        collector.stop();
                    }
                    // Wait until all update jobs have finished before
                    Job[] jobs = collector.getJobs();
                    for (Job job : jobs) {
                        SWTUtil.checkCanceled(monitor);
                        JobUtil.waitFor(job, 10);
                    }
                    // Wait until the element is known by the viewer since sometimes waiting for jobs is not enough.
                    int numOfTries = 0;
                    while (!treeViewer.getControl().isDisposed()
                            && SWTUtil.testFindItem(treeViewer, toInject) == null && numOfTries < 200) { // Try at most for two seconds
                        SWTUtil.checkCanceled(monitor);
                        try {
                            Thread.sleep(10);
                        } catch (InterruptedException e) {
                            // Nothing to do.
                        } finally {
                            numOfTries++;
                        }
                    }
                    // Update tree path for next loop iteration
                    tpElements.add(toInject);
                    // Update monitor
                    monitor.worked(1);
                } else {
                    // Something has changed in between and injection is not possible.
                    monitor.setCanceled(true);
                }
            }
        }
    }
}