/******************************************************************************* * Copyright (c) 2012 Google, Inc. * All rights reserved. This program and the accompanying materials * are 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: * Google, Inc. - initial API and implementation *******************************************************************************/ package com.windowtester.runtime.swt.internal.widgets; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Widget; import com.windowtester.internal.runtime.util.StringUtils; import com.windowtester.runtime.internal.concurrent.VoidCallable; import com.windowtester.runtime.swt.internal.widgets.SWTWidgetReference.Visitor; public class WidgetPrinter implements Visitor { StringBuilder sb = new StringBuilder(); int indent = 0; public <W extends Widget> void visit(SWTWidgetReference<W> visitor) { append(visitor); } private void append(SWTWidgetReference<?> visitor) { sb.append(indent()).append(getString(visitor)).append(StringUtils.NEW_LINE); } public String getString(SWTWidgetReference<?> widget) { return widget.toString() + detailString(widget); } private String detailString(SWTWidgetReference<?> widget) { String desc = " is visible: " + widget.isVisible(); // TODO[pq]: push this into a WidgetDescription map object if (widget instanceof ToolItemReference){ String id = ((ToolItemReference)widget).getActionDefinitionId(); if (id != null) desc += " action id: " + id; } return desc; // IWidgetLocator locator = Resolver.resolve(widget); // return " - locator: " + locator; } private String indent() { int spaces = indent*3; StringBuilder space = new StringBuilder(); for (int i = 0; i < spaces; i++) { space.append(' '); } return space.toString(); } public <T extends com.windowtester.runtime.swt.internal.widgets.SWTWidgetReference<?>> void visitEnter(T composite) { ++indent; } public <T extends com.windowtester.runtime.swt.internal.widgets.SWTWidgetReference<?>> void visitLeave(T composite) { --indent; } public <W extends Composite> void visit(CompositeReference<W> visitor) { append(visitor); } public String asString(){ return sb.toString(); } /** * Convenience method. */ public void print(){ final DisplayReference display = DisplayReference.getDefault(); display.execute(new VoidCallable() { @Override public void call() throws Exception { display.getActiveShell().accept(WidgetPrinter.this); } }); System.out.println(asString()); } }