package org.ovirt.engine.ui.common.widget.action;
import java.util.List;
import org.ovirt.engine.ui.uicommonweb.UICommand;
import com.google.gwt.event.logical.shared.InitializeEvent;
import com.google.gwt.event.logical.shared.InitializeHandler;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.resources.client.ImageResource.ImageOptions;
import com.google.gwt.safehtml.shared.SafeHtml;
public abstract class UiMenuBarButtonDefinition<T> extends ImageUiCommandButtonDefinition<T> {
private final List<ActionButtonDefinition<T>> subActions;
// Indicated whether this action has a title (and have to be shifted)
private boolean subTitledAction;
private boolean asTitle;
/**
* A ClientBundle that provides images for this widget.
*/
public interface Resources extends ClientBundle {
@Source("org/ovirt/engine/ui/webadmin/images/triangle_down.gif")
@ImageOptions(width = 7, height = 5)
ImageResource triangle_down();
}
public UiMenuBarButtonDefinition(EventBus eventBus,
String title, List<ActionButtonDefinition<T>> subActions,
boolean subTitledAction, CommandLocation commandLocation,
boolean asTitle, Resources resources) {
super(eventBus, title, resources.triangle_down(), resources.triangle_down(),
true, true, commandLocation);
this.subActions = subActions;
this.subTitledAction = subTitledAction;
this.asTitle = asTitle;
}
public UiMenuBarButtonDefinition(EventBus eventBus,
String title, List<ActionButtonDefinition<T>> subActions,
Resources resources) {
this(eventBus, title, subActions, false, resources);
}
public UiMenuBarButtonDefinition(EventBus eventBus,
String title, List<ActionButtonDefinition<T>> subActions,
CommandLocation commandLocation, Resources resources) {
this(eventBus, title, subActions, false, commandLocation, false, resources);
}
public UiMenuBarButtonDefinition(EventBus eventBus,
String title, List<ActionButtonDefinition<T>> subActions,
boolean asTitle, Resources resources) {
this(eventBus, title, subActions, false, CommandLocation.ContextAndToolBar, asTitle, resources);
}
@Override
public boolean isAccessible(List<T> selectedItems) {
return true;
}
@Override
public HandlerRegistration addInitializeHandler(InitializeHandler handler) {
return eventBus.addHandler(InitializeEvent.getType(), handler);
}
@Override
public void fireEvent(GwtEvent<?> event) {
eventBus.fireEvent(event);
}
@Override
public void onClick(List<T> selectedItems) {
// Do nothing
}
@Override
public boolean isEnabled(List<T> selectedItems) {
boolean isEnabled = false;
for (ActionButtonDefinition<T> subAction : getSubActions()) {
if (subAction.isEnabled(selectedItems) && subAction.isVisible(selectedItems)) {
return true;
}
}
return isEnabled;
}
@Override
public void update() {
// Do nothing
}
/**
* This function returns the sub menu actions
*
* @return the sub menu actions
*/
public List<ActionButtonDefinition<T>> getSubActions() {
return subActions;
}
@Override
public String getUniqueId() {
return getText();
}
@Override
public boolean isSubTitledAction() {
return subTitledAction;
}
@Override
public SafeHtml getMenuItemTooltip() {
return null;
}
@Override
protected UICommand resolveCommand() {
return null;
}
public boolean isAsTitle() {
return asTitle;
}
}