/*******************************************************************************
* 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 java.util.concurrent.Callable;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Widget;
import com.windowtester.runtime.internal.factory.WTRuntimeManager;
import com.windowtester.runtime.swt.internal.finder.SWTHierarchyHelper;
/**
* A {@link Menu} reference.
*/
public class MenuReference extends SWTWidgetReference<Menu> {
public MenuReference(Menu menu) {
super(menu);
}
/**
* Gets the menu item count.
*
* @return the number of items in the menu.
*/
public int getItemCount() {
return displayRef.execute(new Callable<Integer>() {
public Integer call() throws Exception {
return widget.getItemCount();
}
});
}
public boolean isEnabled() {
return displayRef.execute(new Callable<Boolean>() {
public Boolean call() throws Exception {
return widget.isEnabled();
}
});
}
/* (non-Javadoc)
* @see com.windowtester.runtime.swt.internal.widgets.SWTWidgetReference#getParent()
*/
public CompositeReference<? extends Composite> getParent() {
// TODO[pq]: this could actually return a Decorations
return displayRef.execute(new Callable<CompositeReference<Composite>>() {
public CompositeReference<Composite> call() throws Exception {
// TODO[pq]: move this logic out of SWTHierarchyHelper
Widget parent = new SWTHierarchyHelper(displayRef.getDisplay()).getParent(widget);
if (parent == null)
return null;
return new CompositeReference<Composite>((Composite) parent);
}
});
}
/**
* Proxy for {@link Menu#getItems()}.
*/
public MenuItemReference[] getItems() {
return displayRef.execute(new Callable<MenuItemReference[]>() {
public MenuItemReference[] call() throws Exception {
return asReferencesOfType(widget.getItems(), MenuItemReference.class);
}
});
}
/**
* Proxy for {@link Menu#getParentItem()}.
*/
public MenuItemReference getParentItem() {
return displayRef.execute(new Callable<MenuItemReference>() {
public MenuItemReference call() throws Exception {
MenuItem parentItem = widget.getParentItem();
if (parentItem == null)
return null;
// return new MenuItemReference(parentItem);
return (MenuItemReference) WTRuntimeManager.asReference(parentItem);
}
});
}
// /* (non-Javadoc)
// * @see com.windowtester.runtime.swt.internal.widgets.SWTWidgetReference#accept(com.windowtester.runtime.swt.internal.widgets.SWTWidgetReference.Visitor)
// */
// @Override
// public void accept(SWTWidgetReference.Visitor visitor) {
// visitor.visit(this);
// visitor.visitEnter(this);
// for (MenuItemReference item: getItems())
// item.accept(visitor);
// visitor.visitLeave(this);
// }
/* (non-Javadoc)
* @see com.windowtester.runtime.swt.internal.widgets.CompositeReference#setChildren(com.windowtester.runtime.swt.internal.widgets.SWTWidgetReference.ChildSet)
*/
@Override
protected void setChildren(ChildSet children) {
children.add(getItems());
}
}