/* * This is part of Geomajas, a GIS framework, http://www.geomajas.org/. * * Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium. * * The program is available in open source according to the GNU Affero * General Public License. All contributions in this program are covered * by the Geomajas Contributors License Agreement. For full licensing * details, see LICENSE.txt in the project root. */ package org.geomajas.gwt2.plugin.corewidget.client.map.layercontrolpanel; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; import org.geomajas.gwt2.client.map.layer.Layer; import org.geomajas.gwt2.plugin.corewidget.client.map.layercontrolpanel.resource.LayerControlPanelResource; import java.util.logging.Logger; /** * Default implementation of {@link LayerControlPanelView}. * * @author Dosi Bingov */ public class LayerControlPanelViewImpl implements LayerControlPanelView { private Logger log = Logger.getLogger(LayerControlPanelViewImpl.class.getName()); private LayerControlPanelPresenter presenter; private Layer layer; private HorizontalPanel widget; @UiField protected CheckBox visibilityToggle; @UiField protected Label title; private LayerControlPanelResource resource; private static final LayerControlPanelUiBinder UIBINDER = GWT.create(LayerControlPanelUiBinder.class); /** * UI binder interface. * * @author Dosi Bingov * */ interface LayerControlPanelUiBinder extends UiBinder<Widget, LayerControlPanelViewImpl> { } public LayerControlPanelViewImpl(LayerControlPanelResource layerControlPanelResource) { resource = layerControlPanelResource; widget = (HorizontalPanel) UIBINDER.createAndBindUi(this); widget.setStyleName(layerControlPanelResource.css().layerControlPanel()); title.setStyleName(layerControlPanelResource.css().layerControlPanelTitle()); visibilityToggle.addStyleName(layerControlPanelResource.css().layerControlPanelToggle()); resource.css().ensureInjected(); bindEvents(); } // ------------------------------------------------------------------------ // Public methods: // ------------------------------------------------------------------------ @Override public Widget asWidget() { return widget; } @Override public Layer getLayer() { return this.layer; } @Override public void setLayer(Layer layer) { this.layer = layer; } @Override public void setPresenter(LayerControlPanelPresenter presenter) { this.presenter = presenter; } @Override public void setLayerVisible(boolean visible) { visibilityToggle.setValue(visible); } @Override public void enableVisibilityToggle(boolean enable) { visibilityToggle.setEnabled(enable); } @Override public void setLayerTitle(String title) { this.title.setText(title); } // ------------------------------------------------------------------------ // Private methods: // ------------------------------------------------------------------------ private void bindEvents() { visibilityToggle.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { if (visibilityToggle.isEnabled()) { presenter.toggleLayerVisibility(); visibilityToggle.setEnabled(true); // Works because JavaScript is single threaded... } } }); } }