package ilarkesto.gwt.client;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.ui.MenuBar;
import com.google.gwt.user.client.ui.MenuItem;
import com.google.gwt.user.client.ui.Widget;
public class DropdownMenuButtonWidget extends AWidget {
private LinkedHashMap<String, List<AAction>> actionGroups;
// private List<AAction> actions;
private MenuBar menu;
private MenuItem popup;
private String icon;
private String label;
@Override
protected Widget onInitialization() {
actionGroups = new LinkedHashMap<String, List<AAction>>();
menu = new MenuBar(true);
MenuBar menuBar = new MenuBar();
String title = "<img src='dropdown.png' alt='Dropdown Menu' width='16' height='16'>";
if (icon != null) title = "<img src='" + icon + "' width='16' height='16' alt='ico'>" + title;
if (label != null) title = "<div style='float: left; margin-top: 4px;'>" + label + "</div> " + title;
popup = menuBar.addItem(title, true, menu);
menuBar.setPopupPosition(MenuBar.PopupPosition.LEFT);
Widget wrapper = TableBuilder.row(false, 0, menuBar);
wrapper.setStyleName("DropdownMenuButtonWidget");
return wrapper;
}
@Override
protected void onUpdate() {
menu.clearItems();
if (actionGroups.isEmpty()) {
menu.setVisible(false);
} else {
menu.setVisible(true);
int i = 0;
for (List<AAction> actions : actionGroups.values()) {
for (AAction action : actions) {
if (!action.isExecutable()) continue;
MenuItem menuItem;
if (action.isPermitted()) {
menuItem = new MenuItem(action.getLabel(), action);
} else {
menuItem = new MenuItem(action.getLabel(), (Command) null);
menuItem.addStyleName("MenuItem-disabled");
}
menuItem.setTitle(action.getTooltip());
// Gwt.addHtmlTooltip(menuItem, action.getTooltip());
menu.addItem(menuItem);
}
i++;
if (i < actionGroups.size()) menu.addSeparator();
}
}
}
public void addAction(AAction action) {
addAction("default", action);
}
public void addAction(String groupName, AAction action) {
initialize();
if (actionGroups.get(groupName) == null) {
actionGroups.put(groupName, new LinkedList<AAction>());
}
actionGroups.get(groupName).add(action);
}
public void addSeparator() {
menu.addSeparator();
}
public void clear() {
initialize();
actionGroups.clear();
}
public void setLabel(String label) {
this.label = label;
}
public void setIcon(String icon) {
this.icon = icon;
}
}