package ilarkesto.gwt.client; import ilarkesto.core.menu.StaticMenu; import ilarkesto.core.menu.StaticMenuItem; import ilarkesto.core.menu.StaticSubmenu; import ilarkesto.core.menu.Submenu; import com.google.gwt.user.client.ui.Widget; public class SwitchingNavigatorWidget extends NavigatorWidget<Object> { private SwitcherWidget switcher; public SwitchingNavigatorWidget(SwitcherWidget switcher) { assert switcher != null; this.switcher = switcher; } public void addGroup(String label, String key) { final StaticSubmenu submenu = new StaticSubmenu(label); submenu.setPayload(key); menu.addItem(submenu); } public void addItem(String group, String label, final Widget widget) { final Submenu<StaticMenuItem> groupItem = (Submenu<StaticMenuItem>) menu.getItemByPayload(group); assert groupItem != null; StaticMenu menu = (StaticMenu) groupItem.getMenu(); StaticMenuItem subItem = menu.addItem(new StaticMenuItem(label)); subItem.setPayload(widget); subItem.setOnSelect(new Runnable() { @Override public void run() { groupItem.select(); showItem(widget); } }); } public void addItem(String label, final Widget widget) { assert label != null; assert widget != null; addItem(label, widget, new Runnable() { @Override public void run() { showItem(widget); } }); } public SwitchAction createSwitchAction(Widget widget) { return new SwitchAction(widget); } protected void showItem(final Widget widget) { switcher.show(widget); } public class SwitchAction extends AAction { private Widget widget; private String label; public SwitchAction(Widget widget) { this.widget = widget; } @Override public String getLabel() { if (label != null) return label; StaticMenuItem item = menu.getItemByPayload(widget); return item.getLabel(); } @Override protected void onExecute() { select(widget); } public void setLabel(String label) { this.label = label; } } }