package gov.wa.wsdot.mobile.client.activities.trafficmap.menu; import com.google.gwt.aria.client.Roles; import com.google.gwt.core.client.GWT; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.storage.client.Storage; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.*; import com.googlecode.mgwt.dom.client.event.tap.TapEvent; import com.googlecode.mgwt.ui.client.MGWT; import com.googlecode.mgwt.ui.client.widget.button.Button; import com.googlecode.mgwt.ui.client.widget.header.HeaderTitle; import com.googlecode.mgwt.ui.client.widget.input.checkbox.MCheckBox; import com.googlecode.mgwt.ui.client.widget.list.celllist.CellList; import com.googlecode.mgwt.ui.client.widget.list.celllist.CellSelectedEvent; import com.googlecode.mgwt.ui.client.widget.list.widgetlist.WidgetList; import com.googlecode.mgwt.ui.client.widget.panel.Panel; import com.googlecode.mgwt.ui.client.widget.panel.flex.FlexSpacer; import com.googlecode.mgwt.ui.client.widget.panel.scroll.ScrollPanel; import gov.wa.wsdot.mobile.client.widget.celllist.MyBasicCell; import gov.wa.wsdot.mobile.shared.Topic; import java.util.List; /** * Created by simsl on 4/8/16. */ public class TrafficMenuViewGwtImpl extends Composite implements TrafficMenuView { /** * The UiBinder interface. */ interface MenuViewGwtImplUiBinder extends UiBinder<Widget, TrafficMenuViewGwtImpl> { } /** * The UiBinder used to generate the view. */ private static MenuViewGwtImplUiBinder uiBinder = GWT .create(MenuViewGwtImplUiBinder.class); @UiField HeaderTitle heading; @UiField(provided = true) CellList<Topic> cellList; @UiField(provided = true) WidgetList mapLayersList; @UiField Button doneButton; @UiField ScrollPanel scrollPanel; @UiField FlexSpacer leftFlexSpacer; private Presenter presenter; private static Storage localStorage = Storage.getLocalStorageIfSupported(); public TrafficMenuViewGwtImpl() { cellList = new CellList<Topic>(new MyBasicCell<Topic>() { @Override public String getDisplayString(Topic model) { return model.getName(); } @Override public boolean canBeSelected(Topic model) { return true; } }); mapLayersList = new WidgetList(); initWidget(uiBinder.createAndBindUi(this)); accessibilityPrepare(); if (MGWT.getOsDetection().isAndroid()) { leftFlexSpacer.setVisible(false); scrollPanel.setBounce(false); } } @UiHandler("cellList") protected void onCellSelected(CellSelectedEvent event) { if (presenter != null) { int index = event.getIndex(); presenter.onItemSelected(index); } } @UiHandler("doneButton") protected void onDoneButtonPressed(TapEvent event) { if (presenter != null) { presenter.onDoneButtonPressed(); } } @Override public void setPresenter(Presenter presenter) { this.presenter = presenter; } @Override public void render(List<Topic> createTopicsList, List<Topic> layersList) { mapLayersList.clear(); cellList.render(createTopicsList); for (Topic layer : layersList){ HorizontalPanel cell = new HorizontalPanel(); if (layer.getName().equals("Rest Areas")) { MCheckBox mCheckBox = new MCheckBox(); mCheckBox.setValue(Boolean.valueOf(localStorage.getItem("KEY_SHOW_RESTAREAS"))); mCheckBox.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { localStorage.setItem("KEY_SHOW_RESTAREAS", String.valueOf(event.getValue())); } }); cell.setWidth("100%"); Label title = new Label(layer.getName()); cell.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); cell.add(title); cell.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); cell.add(mCheckBox); } mapLayersList.add(cell); } } @Override public void setSelected(int lastIndex, boolean b) { cellList.setSelectedIndex(lastIndex, b); } private void accessibilityPrepare(){ // Add ARIA roles for accessibility Roles.getButtonRole().set(doneButton.getElement()); Roles.getButtonRole().setAriaLabelProperty(doneButton.getElement(), "back"); Roles.getHeadingRole().set(heading.getElement()); } }