package org.jboss.tools.switchyard.reddeer.utils; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.jboss.reddeer.core.util.Display; import org.jboss.reddeer.core.util.ResultRunnable; /** * * @author apodhrad * */ public class ControlUtils { private List<Control> allWidgets; public static Rectangle getBounds(final Control control) { return Display.syncExec(new ResultRunnable<Rectangle>() { @Override public Rectangle run() { return control.getBounds(); } }); } public static Rectangle getAbsoluteBounds(final Control control) { Point point = getAbsolutePoint(control); Rectangle rec = getBounds(control); return new Rectangle(rec.x + point.x, rec.y + point.y, rec.width, rec.height); } public static Point getAbsolutePoint(final Control control) { return Display.syncExec(new ResultRunnable<Point>() { @Override public Point run() { return control.toDisplay(0, 0); } }); } public static Point getCentralPoint(final Control control) { return getCentralPoint(getBounds(control)); } public static Point getAbsoluteCentralPoint(final Control control) { return getCentralPoint(getAbsoluteBounds(control)); } private static Point getCentralPoint(Rectangle rec) { return new Point(rec.x + rec.width / 2, rec.y + rec.height / 2); } public List<Control> findAllWidgets(final Control parent) { allWidgets = new ArrayList<Control>(); Display.syncExec(new Runnable() { @Override public void run() { findWidgets(parent); } }); return allWidgets; } private void findWidgets(Control control) { allWidgets.add(control); if (control instanceof Composite) { Composite composite = (Composite) control; for (Control child : composite.getChildren()) { findWidgets(child); } } } }