package com.googlecode.gwt.charts.showcase.client; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import com.google.gwt.dom.client.Style.Overflow; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.HasSelectionHandlers; import com.google.gwt.event.logical.shared.SelectionEvent; import com.google.gwt.event.logical.shared.SelectionHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; public class SideMenu extends Composite implements HasSelectionHandlers<String> { private FlowPanel flowPanel; private Map<String, Widget> keyMap; public SideMenu() { super(); initialize(); } public void add(String string) { Label label = new Label(string); label.setStyleName(Resources.INSTANCE.css().menuHeader()); flowPanel.add(label); } public void add(String string, String key) { final Label label = new Label(string); label.setStyleName(Resources.INSTANCE.css().menuItem()); label.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { setSelection(label, true); } }); keyMap.put(key, label); flowPanel.add(label); } @Override public HandlerRegistration addSelectionHandler(SelectionHandler<String> handler) { return addHandler(handler, SelectionEvent.getType()); } public void setSelection(String key, boolean fireEvents) { for (int i = 0; i < flowPanel.getWidgetCount(); i++) { Label label = (Label) flowPanel.getWidget(i); if (keyMap.get(key) == label) { label.addStyleName(Resources.INSTANCE.css().menuItemSelected()); } else { label.removeStyleName(Resources.INSTANCE.css().menuItemSelected()); } } if (fireEvents) { SelectionEvent.fire(this, key); } } public void setSelection(Widget widget, boolean fireEvents) { for (Entry<String, Widget> entry : keyMap.entrySet()) { if (entry.getValue().equals(widget)) { setSelection(entry.getKey(), fireEvents); } } } private FlowPanel getFlowPanel() { if (flowPanel == null) { flowPanel = new FlowPanel(); flowPanel.getElement().getStyle().setOverflow(Overflow.AUTO); } return flowPanel; } private void initialize() { initWidget(getFlowPanel()); keyMap = new HashMap<String, Widget>(); } }