/* * Copyright 2011 Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.facebook.tsdb.tsdash.client.presenter; import java.util.Map; import java.util.HashMap; import com.facebook.tsdb.tsdash.client.event.ViewChangeEvent; import com.facebook.tsdb.tsdash.client.model.ApplicationState; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.HasClickHandlers; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.client.ui.HasWidgets; public class TopMenuPresenter implements Presenter { public interface Widget { HasClickHandlers getGraphButton(); HasClickHandlers getLogButton(); void setSelected(Object object); Object getSelected(); } private final HandlerManager eventBus; private Widget widget; private final Map<String, HasClickHandlers> viewToButton = new HashMap<String, HasClickHandlers>(); private final Map<HasClickHandlers, String> buttonToView = new HashMap<HasClickHandlers, String>(); public TopMenuPresenter(HandlerManager eventBus, Widget widget) { this.eventBus = eventBus; bindWidget(widget); } private void bindWidget(final Widget widget) { // set mappings between buttons and view strings viewToButton.put(ViewChangeEvent.View.GRAPH.toString(), widget.getGraphButton()); buttonToView.put(widget.getGraphButton(), ViewChangeEvent.View.GRAPH.toString()); viewToButton.put(ViewChangeEvent.View.LOG.toString(), widget.getLogButton()); buttonToView.put(widget.getLogButton(), ViewChangeEvent.View.LOG.toString()); this.widget = widget; ClickHandler buttonHandler = new ClickHandler() { @Override public void onClick(ClickEvent event) { if (widget.getSelected() == event.getSource()) { // ignore the event return; } HasClickHandlers source = (HasClickHandlers) event.getSource(); ViewChangeEvent viewEvent = new ViewChangeEvent( buttonToView.get(source)); eventBus.fireEvent(viewEvent); } }; widget.getGraphButton().addClickHandler(buttonHandler); widget.getLogButton().addClickHandler(buttonHandler); } public void setSelected(ViewChangeEvent.View view) { widget.setSelected(viewToButton.get(view.toString())); } public void setSelected() { widget.setSelected(widget.getGraphButton()); } @Override public void go(final HasWidgets container, final ApplicationState appState) { container.clear(); container.add((com.google.gwt.user.client.ui.Widget) widget); // initialize setSelected(appState.view); } }