/******************************************************************************* * Copyright (c) 2012 Google, Inc., Phillip Jensen * 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 * Phillip Jensen - added visitSlider method *******************************************************************************/ package com.windowtester.runtime.swt.internal.widgets; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Caret; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.CoolBar; import org.eclipse.swt.widgets.CoolItem; import org.eclipse.swt.widgets.Decorations; import org.eclipse.swt.widgets.Item; import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.ScrollBar; import org.eclipse.swt.widgets.Scrollable; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Slider; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.swt.widgets.Widget; import org.eclipse.ui.forms.widgets.Hyperlink; import com.windowtester.runtime.internal.factory.WTRuntimeFactory; import com.windowtester.runtime.locator.IWidgetReference; /** * A factory for creating instances of SWT widget references. */ public class WTRuntimeFactorySWT implements WTRuntimeFactory { /** * Instantiates a new {@link IWidgetReference} for the specified widget * if possible, or returns <code>null</code> if not. * * @param widget the widget * @return the widget reference or <code>null</code> if no widget reference can be * created for the specified widget. */ public IWidgetReference createReference(Object widget) { if (widget instanceof Widget) return new ReferenceMapper((Widget) widget).findReference(); return null; } public class ReferenceMapper extends SWTWidgetHierarchy.Visitor { private ISWTWidgetReference<?> reference; private final Widget widget; ReferenceMapper(Widget widget){ this.widget = widget; } public ISWTWidgetReference<?> getReference() { return reference; } @Override public void visitButton(Button widget) { reference = new ButtonReference(widget); } @Override public void visitControl(Control widget) { reference = new ControlReference<Control>(widget); } @Override public void visitDecorations(Decorations widget) { reference = new DecorationsReference<Decorations>(widget); } @Override public void visitShell(Shell widget) { reference = new ShellReference(widget); } @Override public void visitItem(Item widget) { reference = new ItemReference<Item>(widget); } @Override public void visitCCombo(CCombo widget) { reference = new CComboReference(widget); } @Override public void visitCombo(Combo widget) { reference = new ComboReference(widget); } @Override public void visitCoolBar(CoolBar widget) { reference = new CoolBarReference(widget); } @Override public void visitComposite(Composite widget) { reference = new CompositeReference<Composite>(widget); } @Override public void visitList(List widget) { reference = new ListReference(widget); } @Override public void visitMenu(Menu widget) { reference = new MenuReference(widget); } @Override public void visitMenuItem(MenuItem widget) { reference = new MenuItemReference(widget); } @Override public void visitScrollable(Scrollable widget) { reference = new ScrollableReference<Scrollable>(widget); } @Override public void visitScrollBar(ScrollBar widget) { reference = new ScrollBarReference(widget); } @Override public void visitToolBar(ToolBar widget) { reference = new ToolBarReference(widget); } @Override public void visitToolItem(ToolItem widget) { reference = new ToolItemReference(widget); } @Override public void visitCTabFolder(CTabFolder widget) { reference = new CTabFolderReference(widget); } @Override public void visitTable(Table widget) { reference = new TableReference(widget); } @Override public void visitTableItem(TableItem widget) { reference = new TableItemReference(widget); } @Override public void visitTableColumn(TableColumn widget) { reference = new TableColumnReference(widget); } @Override public void visitTabFolder(TabFolder widget) { reference = new TabFolderReference(widget); } @Override public void visitTreeItem(TreeItem widget) { reference = new TreeItemReference(widget); } @Override public void visitCoolItem(CoolItem widget) { reference = new CoolItemReference(widget); } @Override public void visitTabItem(TabItem widget) { reference = createTabItemReference(widget); } @Override public void visitCTabItem(CTabItem widget) { reference = new CTabItemReference(widget); } @Override public void visitTree(Tree widget) { reference = new TreeReference(widget); } @Override public void visitWidget(Widget widget) { reference = new SWTWidgetReference<Widget>(widget); } @Override public void visitCaret(Caret widget) { reference = new CaretReference(widget); } @Override public void visitHyperlink(Hyperlink widget) { // reference = new HyperlinkControlReference(widget); // TODO[pq]: this will get upgraded to a hyperlink control reference = new CanvasReference<Hyperlink>(widget); } @Override public void visitSlider(Slider widget) { reference = new SliderReference(widget); } public ISWTWidgetReference<?> findReference() { SWTWidgetHierarchy.accept(widget, this); return getReference(); } } protected TabItemReference createTabItemReference(TabItem widget) { return new TabItemReference(widget); } }