/*
* 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.mapcontrolpanel;
import org.geomajas.gwt2.client.event.LayerAddedEvent;
import org.geomajas.gwt2.client.event.LayerOrderChangedEvent;
import org.geomajas.gwt2.client.event.LayerOrderChangedHandler;
import org.geomajas.gwt2.client.event.LayerRemovedEvent;
import org.geomajas.gwt2.client.event.MapCompositionHandler;
import org.geomajas.gwt2.client.map.MapPresenter;
import org.geomajas.gwt2.client.map.layer.Layer;
import org.geomajas.gwt2.plugin.corewidget.client.map.layercontrolpanel.LayerControlPanel;
import java.util.logging.Logger;
/**
* Default implementation of
* {@link org.geomajas.gwt2.plugin.corewidget.client.map.layercontrolpanel.LayerControlPanelPresenter}.
*
* @author Dosi Bingov
*
*/
public class MapControlPanelPresenterImpl implements MapControlPanelPresenter {
private Logger log = Logger.getLogger(MapControlPanelPresenterImpl.class.getName());
private MapControlPanelView view;
private boolean disableToggleOutOfRange;
private MapPresenter mapPresenter;
public MapControlPanelPresenterImpl(MapControlPanelView view, MapPresenter mapPresenter,
boolean disableToggleOutOfRange) {
this.view = view;
this.mapPresenter = mapPresenter;
this.disableToggleOutOfRange = disableToggleOutOfRange;
init();
}
// ------------------------------------------------------------------------
// Public methods:
// ------------------------------------------------------------------------
// ------------------------------------------------------------------------
// Protected methods:
// ------------------------------------------------------------------------
/**
* Add a layer to the legend drop down panel.
*
* @param layer
* The layer who's legend to add to the drop down panel.
* @return success or not.
*/
protected boolean addLayer(Layer layer) {
int index = getLayerIndex(layer);
if (index < 0) {
view.add(new LayerControlPanel(mapPresenter, layer, disableToggleOutOfRange));
return true;
}
return false;
}
/**
* Remove a layer from the drop down content panel again.
*
* @param layer
* The layer to remove.
* @return success or not.
*/
protected boolean removeLayer(Layer layer) {
int index = getLayerIndex(layer);
if (index >= 0) {
//contentPanel.remove(index);
view.removeWidget(index);
return true;
}
return false;
}
// ------------------------------------------------------------------------
// Private methods:
// ------------------------------------------------------------------------
private int getLayerIndex(Layer layer) {
for (int i = 0; i < view.getWidgetCount(); i++) {
LayerControlPanel layerPanel = (LayerControlPanel) view.getWidgetAt(i);
if (layerPanel.getLayer() == layer) {
return i;
}
}
return -1;
}
private void init() {
// Add all layers (if there are any):
for (int i = mapPresenter.getLayersModel().getLayerCount() - 1 ; i >= 0 ; i--) {
addLayer(mapPresenter.getLayersModel().getLayer(i));
}
// Keep track of new layers being added or layers being removed. Change the legend accordingly:
mapPresenter.getEventBus().addMapCompositionHandler(new MapCompositionHandler() {
public void onLayerRemoved(LayerRemovedEvent event) {
removeLayer(event.getLayer());
}
public void onLayerAdded(LayerAddedEvent event) {
addLayer(event.getLayer());
}
});
// Keep track of layer order within the LayersModel:
mapPresenter.getEventBus().addLayerOrderChangedHandler(new LayerOrderChangedHandler() {
public void onLayerOrderChanged(LayerOrderChangedEvent event) {
view.moveWidget(event.getFromIndex(), event.getToIndex());
}
});
}
@Override
public void setDisableToggleOutOfRange(boolean disable) {
this.disableToggleOutOfRange = disable;
}
}