package com.yoursway.swt.inspector; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Decorations; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Scrollable; import org.eclipse.swt.widgets.Shell; public class SwtInspector { private static final int MASK = SWT.ALT | SWT.SHIFT; private static Listener listener = new Listener() { public void handleEvent(Event event) { if ((event.stateMask & MASK) == MASK && event.keyCode == SWT.F2) { event.doit = false; showSwtInspector(); } } }; private static boolean listenerInstalled = false; private static void doHookSwtInspectorHotkey() { if (listenerInstalled) return; listenerInstalled = true; Display.getDefault().addFilter(SWT.KeyDown, listener); } public static void hookSwtInspectorHotkey() { Display.getDefault().asyncExec(new Runnable() { public void run() { doHookSwtInspectorHotkey(); } }); } public static void showSwtInspector() { hookSwtInspectorHotkey(); final Display display = Display.getDefault(); ControlRegistry cr = new ControlRegistry(); cr.register(Control.class, "BORDER, LEFT_TO_RIGHT, RIGHT_TO_LEFT"); cr.register(Label.class, "SEPARATOR, HORIZONTAL, VERTICAL, SHADOW_IN, SHADOW_OUT, SHADOW_NONE, " + "CENTER, LEFT, RIGHT, WRAP"); cr.register(Scrollable.class, "H_SCROLL, V_SCROLL"); cr.register(Composite.class, "NO_BACKGROUND, NO_FOCUS, NO_MERGE_PAINTS, NO_REDRAW_RESIZE, " + "NO_RADIO_GROUP, EMBEDDED, DOUBLE_BUFFERED"); cr.register(Canvas.class, ""); cr.register(Decorations.class, "BORDER, CLOSE, MIN, MAX, NO_TRIM, RESIZE, TITLE, ON_TOP, TOOL"); cr.register(Shell.class, "APPLICATION_MODAL, MODELESS, PRIMARY_MODAL, SYSTEM_MODAL"); cr.register(Button.class, "ARROW, CHECK, PUSH, RADIO, TOGGLE, FLAT, UP, DOWN, LEFT, RIGHT, CENTER"); // cr.register(Button.class, ""); SwtInspectorController controller = new SwtInspectorController(display, new SwtInspectorViewFactory() { public SwtInspectorView createView(SwtInspectorViewCallback callback, SwtInspectorModel model) { return new SwtInspectorView(display, callback, model); } }, cr); controller.show(); } }