/*******************************************************************************
* 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.commons;
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.fusesource.ide.commons.ui.Widgets;
public class 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 table = (Table) control;
table.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(new Runnable() {
@Override
public void run() {
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<Object>();
if (expandedElements != null) {
list.addAll(Arrays.asList(expandedElements));
}
list.addAll(Arrays.asList(expanded));
cv.setExpandedElements(expanded);
}
}
}