org.fusesource.ide.foundation.ui.util.Viewers.java Source code

Java tutorial

Introduction

Here is the source code for org.fusesource.ide.foundation.ui.util.Viewers.java

Source

/*******************************************************************************
 * Copyright (c) 2013 Red Hat, Inc.
 * Distributed under license by Red Hat, Inc. All rights reserved.
 * This program is 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:
 *     Red Hat, Inc. - initial API and implementation
 ******************************************************************************/

package org.fusesource.ide.foundation.ui.util;

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

import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Tree;

public class Viewers {

    private Viewers() {
    }

    public static Viewer getViewer(Object object) {
        if (object instanceof Viewer) {
            return (Viewer) object;
        }
        return null;
    }

    public static void expand(Viewer viewer, Object elementOrTreePath, int level) {
        if (viewer instanceof TreeViewer) {
            TreeViewer tv = (TreeViewer) viewer;
            tv.expandToLevel(elementOrTreePath, level);
        }

    }

    /**
     * Refreshes the viewer and by default makes sure the selection is viewable too
     * @param viewer
     */
    public static void refresh(final Viewer viewer) {
        Display.getDefault().syncExec(new Runnable() {
            @Override
            public void run() {
                if (isValid(viewer)) {
                    viewer.refresh();
                    Control control = viewer.getControl();
                    if (control instanceof Table) {
                        ((Table) control).showSelection();
                    } else if (control instanceof Tree) {
                        ((Tree) control).showSelection();
                    }
                }
            }
        });
    }

    public static void async(Runnable runnable) {
        Display display = getDisplay();
        if (display != null) {
            display.asyncExec(runnable);
        }
    }

    public static Display getDisplay() {
        Display display = Display.getDefault();
        if (display == null) {
            display = Display.getCurrent();
        }
        return display;
    }

    public static void refreshAsync(final Viewer viewer) {
        async(() -> refresh(viewer));
    }

    /**
     * Returns true if the viewer is not disposed and is visible
     */
    public static boolean isValid(Viewer viewer) {
        boolean valid = false;
        if (viewer != null) {
            Control widget = viewer.getControl();
            valid = Widgets.isValid(widget);// && widget.isVisible();
        }
        return valid;
    }

    /**
     * Reveals the given element in the view t
     */
    public static void reveal(Viewer viewer, Object element) {
        if (viewer instanceof StructuredViewer) {
            StructuredViewer sv = (StructuredViewer) viewer;
            sv.reveal(element);
        }
    }

    public static void setInput(Viewer viewer, Object input) {
        if (viewer != null && isValid(viewer)) {
            viewer.setInput(input);
        }
    }

    public static boolean isVisible(Viewer viewer) {
        if (isValid(viewer)) {
            Control control = viewer.getControl();
            return control != null && control.isVisible();
        }
        return false;
    }

    public static void setSelected(Viewer viewer, ISelection selection) {
        if (viewer != null) {
            viewer.setSelection(selection);
        }
    }

    public static void addExpanded(Viewer viewer, final Object... expanded) {
        if (viewer instanceof AbstractTreeViewer) {
            final AbstractTreeViewer cv = (AbstractTreeViewer) viewer;
            Object[] expandedElements = cv.getExpandedElements();
            List<Object> list = new ArrayList<>();
            if (expandedElements != null) {
                list.addAll(Arrays.asList(expandedElements));
            }
            list.addAll(Arrays.asList(expanded));
            cv.setExpandedElements(expanded);
        }
    }

}