/******************************************************************************* * 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.gef.internal.selectors; import java.util.Iterator; import java.util.List; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.Toggle; import com.windowtester.runtime.IClickDescription; import com.windowtester.runtime.IUIContext; import com.windowtester.runtime.WidgetNotFoundException; import com.windowtester.runtime.WidgetSearchException; import com.windowtester.runtime.gef.internal.FigureReference; import com.windowtester.runtime.gef.internal.matchers.PaletteItemPartMatcher; import com.windowtester.runtime.locator.IWidgetLocator; import com.windowtester.runtime.locator.IWidgetReference; /** * A specialized selector for handling drawers. */ public class PaletteDrawerSelector extends RevealingFigureSelectorDelegate { private final IRevealer _paletteItemRevealer; public PaletteDrawerSelector(IRevealer paletteItemRevealer) { _paletteItemRevealer = paletteItemRevealer; } public IRevealer getPaletteItemRevealer() { return _paletteItemRevealer; } /** * Tests whether the given widget is a drawer reference. */ public boolean isDrawer(IWidgetReference widget) { IFigure figure = (IFigure) widget.getWidget(); return PaletteItemPartMatcher.isDrawerFigure(figure); } protected IWidgetReference getClickableDrawerFigure(IWidgetReference widget) throws WidgetNotFoundException { IFigure figure = (IFigure) widget.getWidget(); List children = figure.getChildren(); for (Iterator iterator = children.iterator(); iterator.hasNext();) { IFigure child = (IFigure) iterator.next(); if (child instanceof Toggle) return FigureReference.create(child); } throw new WidgetNotFoundException("drawer label not found"); } /* (non-Javadoc) * @see com.windowtester.runtime.gef.internal.selectors.RevealingFigureSelectorDelegate#doClick(com.windowtester.runtime.IUIContext, com.windowtester.runtime.locator.IWidgetReference, com.windowtester.runtime.IClickDescription) */ public IWidgetLocator doClick(IUIContext ui, IWidgetReference widget, IClickDescription click) throws WidgetSearchException { widget = getClickableDrawerFigure(widget); return super.doClick(ui, widget, click); } /* (non-Javadoc) * @see com.windowtester.runtime.gef.internal.selectors.RevealingFigureSelectorDelegate#doContextClick(com.windowtester.runtime.IUIContext, com.windowtester.runtime.locator.IWidgetReference, com.windowtester.runtime.IClickDescription, java.lang.String) */ public IWidgetLocator doContextClick(IUIContext ui, IWidgetReference widget, IClickDescription click, String menuItemPath) throws WidgetSearchException { widget = getClickableDrawerFigure(widget); return super.doContextClick(ui, widget, click, menuItemPath); } /* (non-Javadoc) * @see com.windowtester.runtime.gef.internal.selectors.RevealingFigureSelectorDelegate#doReveal(com.windowtester.runtime.IUIContext) */ public void doReveal(IUIContext ui) throws WidgetSearchException { getPaletteItemRevealer().reveal(ui); } }