/* * 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 com.facebook.tsdb.tsdash.client.event.PlotOptionsEvent; 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.HasValue; import com.google.gwt.user.client.ui.HasWidgets; public class PlotOptionsPresenter implements Presenter { public interface Widget { HasClickHandlers interactiveMode(); HasClickHandlers imageMode(); void selectedMode(Object button); Object selectedMode(); void imageOptionsVisible(boolean visible); HasClickHandlers lineChartButton(); HasClickHandlers surfaceButton(); HasValue<Boolean> lineChart(); HasValue<Boolean> surface(); void setImageTypeSelected(Object selected); void setSurfaceOptionsVisible(boolean visible); HasClickHandlers colorButton(); boolean colorPaletteSelected(); void colorPaletteSelected(boolean selected); } private final HandlerManager eventBus; private final Widget widget; public PlotOptionsPresenter(HandlerManager eventBus, Widget widget) { this.eventBus = eventBus; this.widget = widget; bindWidget(); } private void bindWidget() { // MODE ClickHandler modeHandler = new ClickHandler() { @Override public void onClick(ClickEvent event) { if (event.getSource() == widget.selectedMode()) { return; } widget.selectedMode(event.getSource()); boolean interactive = widget.selectedMode() == widget .interactiveMode(); widget.imageOptionsVisible(!interactive); eventBus.fireEvent(new PlotOptionsEvent(interactive, widget .surface().getValue(), widget.colorPaletteSelected())); } }; widget.imageMode().addClickHandler(modeHandler); widget.interactiveMode().addClickHandler(modeHandler); // IMAGE TYPE ClickHandler imageTypeHandler = new ClickHandler() { @Override public void onClick(ClickEvent event) { boolean surface = widget.surface().getValue(); widget.setSurfaceOptionsVisible(surface); eventBus.fireEvent(new PlotOptionsEvent( widget.selectedMode() == widget.interactiveMode(), widget.surface().getValue(), widget .colorPaletteSelected())); } }; widget.lineChartButton().addClickHandler(imageTypeHandler); widget.surfaceButton().addClickHandler(imageTypeHandler); widget.colorButton().addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { eventBus.fireEvent(new PlotOptionsEvent( widget.selectedMode() == widget.interactiveMode(), widget.surface().getValue(), widget .colorPaletteSelected())); } }); } @Override public void go(HasWidgets container, ApplicationState appState) { container.add((com.google.gwt.user.client.ui.Widget) widget); if (appState.interactive) { widget.selectedMode(widget.interactiveMode()); widget.imageOptionsVisible(false); } else { widget.selectedMode(widget.imageMode()); if (appState.surface) { widget.setImageTypeSelected(widget.surfaceButton()); } else { widget.setImageTypeSelected(widget.lineChartButton()); } } } }