/******************************************************************************* * Copyright (c) 2008 Ketan Padegaonkar and others. * 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: * Ketan Padegaonkar - initial API and implementation *******************************************************************************/ package org.eclipse.swtbot.swt.finder.widgets; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.List; import org.eclipse.swtbot.swt.finder.ReferenceBy; import org.eclipse.swtbot.swt.finder.SWTBotWidget; import org.eclipse.swtbot.swt.finder.exceptions.WidgetNotFoundException; import org.eclipse.swtbot.swt.finder.results.ArrayResult; import org.eclipse.swtbot.swt.finder.results.IntResult; import org.eclipse.swtbot.swt.finder.results.StringResult; import org.eclipse.swtbot.swt.finder.results.VoidResult; import org.eclipse.swtbot.swt.finder.utils.MessageFormat; import org.eclipse.swtbot.swt.finder.utils.StringUtils; import org.eclipse.swtbot.swt.finder.utils.internal.Assert; import org.hamcrest.SelfDescribing; /** * @author Ketan Padegaonkar <KetanPadegaonkar [at] gmail [dot] com> * @author Joshua Gosse <jlgosse [at] ca [dot] ibm [dot] com> * @version $Id$ */ @SWTBotWidget(clasz = List.class, preferredName = "list", referenceBy = { ReferenceBy.LABEL }) public class SWTBotList extends AbstractSWTBotControl<List> { /** * Constructs an isntance of this with the given list widget. * * @param list the list. * @throws WidgetNotFoundException if the widget is <code>null</code> or widget has been disposed. */ public SWTBotList(List list) throws WidgetNotFoundException { this(list, null); } /** * Constructs an isntance of this with the given list widget. * * @param list the list. * @param description the description of the widget, this will be reported by {@link #toString()} * @throws WidgetNotFoundException if the widget is <code>null</code> or widget has been disposed. */ public SWTBotList(List list, SelfDescribing description) throws WidgetNotFoundException { super(list, description); } /** * Selects the item matching the given text. * * @param item the item to select in the list. */ public void select(final String item) { log.debug(MessageFormat.format("Set selection {0} to text {1}", this, item)); //$NON-NLS-1$ waitForEnabled(); final int indexOf = indexOf(item); Assert.isTrue(indexOf != -1, "Item `" + item + "' not found in list."); //$NON-NLS-1$ //$NON-NLS-2$ asyncExec(new VoidResult() { public void run() { widget.setSelection(indexOf); } }); notifySelect(); } /** * Selects the given index. * * @param index the selection index. */ public void select(final int index) { log.debug(MessageFormat.format("Set selection {0} to index {1}", this, index)); //$NON-NLS-1$ waitForEnabled(); int itemCount = itemCount(); Assert.isTrue(index <= itemCount, java.text.MessageFormat.format( "The index ({0}) is more than the number of items ({1}) in the list.", index, itemCount)); //$NON-NLS-1$ asyncExec(new VoidResult() { public void run() { widget.setSelection(index); } }); notifySelect(); } /** * Gets the item count in the list * * @return the number of items in the list. */ public int itemCount() { return syncExec(new IntResult() { public Integer run() { return widget.getItemCount(); } }); } /** * Gets the selection count. * * @return the number of selected items in the list. */ public int selectionCount() { return syncExec(new IntResult() { public Integer run() { return widget.getSelectionCount(); } }); } /** * Gets the arrray of selected items. * * @return the selected items in the list. */ public String[] selection() { return syncExec(new ArrayResult<String>() { public String[] run() { return widget.getSelection(); } }); } /** * Selects the indexes provided. * * @param indices the indices to select in the list. */ public void select(final int... indices) { log.debug(MessageFormat.format("Set selection {0} to indices {1}]", this, StringUtils.join(indices, ", "))); //$NON-NLS-1$ //$NON-NLS-2$ waitForEnabled(); asyncExec(new VoidResult() { public void run() { widget.setSelection(indices); } }); notifySelect(); } /** * Sets the selection to the given list of items. * * @param items the items to select in the list. */ public void select(final String... items) { log.debug(MessageFormat.format("Set selection {0} to items [{1}]", this, StringUtils.join(items, ", "))); //$NON-NLS-1$ //$NON-NLS-2$ waitForEnabled(); asyncExec(new VoidResult() { public void run() { widget.deselectAll(); for (String item : items) { int index = widget.indexOf(item); if (index != -1) widget.select(index); } } }); notifySelect(); } /** * Notifies of a selection. */ protected void notifySelect() { notify(SWT.MouseDown); notify(SWT.Selection); notify(SWT.MouseUp); } /** * Unselects everything. */ public void unselect() { asyncExec(new VoidResult() { public void run() { widget.deselectAll(); } }); notifySelect(); } /** * Gets the index of the given item. * * @param item the search item. * @return the index of the item, or -1 if the item does not exist. */ public int indexOf(final String item) { return syncExec(new IntResult() { public Integer run() { return widget.indexOf(item); } }); } /** * Gets the item at the given index. * * @param index the zero based index. * @return the item at the specified index. */ public String itemAt(final int index) { return syncExec(new StringResult() { public String run() { return widget.getItem(index); } }); } /** * Gets the array of Strings from the List * * @return an array of Strings */ public String[] getItems() { return syncExec(new ArrayResult<String>() { public String[] run() { return widget.getItems(); } }); } }