/******************************************************************************* * 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; import com.windowtester.internal.runtime.MouseConfig; import com.windowtester.internal.runtime.provisional.WTInternal; import com.windowtester.runtime.locator.ILocator; import com.windowtester.runtime.locator.IWidgetLocator; import com.windowtester.runtime.locator.XYLocator; /** * Basic {@link IClickDescription} implementation. * @noextend This class is not intended to be subclassed by clients. */ public class ClickDescription implements IClickDescription { //in the future this may be retrieved from the XYLocator private static final int DEFAULT_RELATIVITY = WTInternal.TOP | WTInternal.LEFT; private int _clicks; private int _relative; private int _x; private int _y; private int _modifierMask; public static ClickDescription forClick(int clicks){ return new ClickDescription(clicks); } public ClickDescription atXY(int x, int y){ _x = x; _y = y; return this; } public ClickDescription relativeTo(int relativity){ _relative = relativity; return this; } public ClickDescription withModifiers(int modifierMask){ _modifierMask = modifierMask; return this; } public static IClickDescription singleClickAtXY(int x, int y) { return new ClickDescription(1, DEFAULT_RELATIVITY, x, y, MouseConfig.PRIMARY_BUTTON); } public static IClickDescription singleClick() { return new ClickDescription(1, DEFAULT_CENTER_CLICK, DEFAULT_CENTER_CLICK, DEFAULT_CENTER_CLICK, MouseConfig.PRIMARY_BUTTON); } public static IClickDescription create(int clicks, XYLocator xy, int modifierMask) { //sanity check mask modifierMask = fixMask(modifierMask); return new ClickDescription(clicks, DEFAULT_RELATIVITY, xy.x(), xy.y(), modifierMask); } private static int fixMask(int modifierMask) { /* * To make life easier for clients, omitted mouse buttons are assumed * to be primary. */ if (MouseConfig.getButton(modifierMask) == MouseConfig.UNSPECIFIED) modifierMask |= WT.BUTTON1; // note this is the same as SWT.BUTTON1 return modifierMask; } public static IClickDescription create(int clickCount, ILocator locator, int buttonMask) { //sanity check mask buttonMask = fixMask(buttonMask); if (locator instanceof XYLocator) return create(clickCount, (XYLocator)locator, buttonMask); if (locator instanceof IWidgetLocator) //TODO: change default sentinel to something more expressive than -1s... return new ClickDescription(clickCount, DEFAULT_CENTER_CLICK, DEFAULT_CENTER_CLICK, DEFAULT_CENTER_CLICK, buttonMask); throw new IllegalArgumentException(); } public static ClickDescription copy(IClickDescription click){ return new ClickDescription(click.clicks()).relativeTo(click.relative()).atXY(click.x(), click.y()).withModifiers(click.modifierMask()); } private ClickDescription(int clicks) { _clicks = clicks; } ClickDescription(int clicks, int relative, int x, int y, int modifierMask) { _clicks = clicks; _relative = relative; _x = x; _y = y; _modifierMask = modifierMask; } public int clicks() { return _clicks; } public int relative() { return _relative; } public int x() { return _x; } public int y() { return _y; } public int modifierMask() { return _modifierMask; } /* (non-Javadoc) * @see com.windowtester.runtime.IClickDescription#isDefaultCenterClick() */ public boolean isDefaultCenterClick() { return _relative == DEFAULT_CENTER_CLICK; } /* (non-Javadoc) * @see java.lang.Object#toString() */ public String toString() { //TODO: mods and relativity return "ClickDescription[clicks: " + clicks() + ", x: " + x() + ", y: " + y() + "]"; } }