Package org.geomajas.widget.advancedviews.client.widget

Source Code of org.geomajas.widget.advancedviews.client.widget.LayerActions

/*
* This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
*
* Copyright 2008-2011 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.widget.advancedviews.client.widget;

import org.geomajas.gwt.client.map.layer.Layer;
import org.geomajas.gwt.client.map.layer.RasterLayer;
import org.geomajas.gwt.client.map.layer.VectorLayer;
import org.geomajas.widget.advancedviews.client.AdvancedViewsMessages;
import org.geomajas.widget.advancedviews.client.util.LayerIconHelper;

import com.google.gwt.core.client.GWT;
import com.smartgwt.client.types.ImageStyle;
import com.smartgwt.client.types.TitleOrientation;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Img;
import com.smartgwt.client.widgets.Slider;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.events.ValueChangedEvent;
import com.smartgwt.client.widgets.events.ValueChangedHandler;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.CheckboxItem;
import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
import com.smartgwt.client.widgets.form.fields.events.ChangedHandler;
import com.smartgwt.client.widgets.layout.VLayout;

/**
* A simple layeractions window.
* @author Kristof Heirwegh
*
*/
public class LayerActions extends Window {

  private static final String BTN_SHOWLEGEND_IMG = "[ISOMORPHIC]/geomajas/silk/information.png";
  private static final String BTN_REMOVEFILTER_IMG = "[SKIN]/actions/remove.png";

  private AdvancedViewsMessages messages = GWT.create(AdvancedViewsMessages.class);

  private Img layerImg;
  private Img layerLabelOverlay;
  private Img layerTransparencyUnderlay;
  private Slider transparencySlider;
  private CheckboxItem labels;
  private VectorLayer vectorLayer;
  private RasterLayer rasterLayer;

  public LayerActions(Layer<?> layer) {
    super();
    if (layer instanceof VectorLayer) {
      this.vectorLayer = (VectorLayer) layer;
    } else {
      this.rasterLayer = (RasterLayer) layer;
    }

    setTitle(messages.layerActionsWindowTitle() + " - " + layer.getLabel());
    setAutoCenter(true);
    setAutoSize(true);
    setKeepInParentRect(true);

    VLayout layout = new VLayout();
    layout.setPadding(5);
    layout.setMembersMargin(5);

    // ----------------------------------------------------------

    layerImg = LayerIconHelper.getLargeLayerIcon(layer);
    layerImg.setImageType(ImageStyle.NORMAL);
    layerLabelOverlay = LayerIconHelper.getLabelOverlayImg();
    layerLabelOverlay.setImageType(ImageStyle.NORMAL);
    layerTransparencyUnderlay = LayerIconHelper.getTransparencyUnderlayImg();
    layerTransparencyUnderlay.setImageType(ImageStyle.NORMAL);

    // ----------------------------------------------------------

    if (vectorLayer != null) {
      Canvas sampleMap = new Canvas();
      sampleMap.setAutoHeight();
      sampleMap.setAutoWidth();
      // sampleMap.setSize("89px", "89px");
      sampleMap.addChild(layerImg);
      sampleMap.addChild(layerLabelOverlay);

      labels = new CheckboxItem();
      initLabels();

      DynamicForm  form = new DynamicForm();
      form.setTitleOrientation(TitleOrientation.TOP);
      form.setHeight(40);
      form.setFields(labels);

      layout.addMember(sampleMap);
      layout.addMember(form);

    } else {
      Canvas sampleMap = new Canvas();
      sampleMap.setAutoHeight();
      sampleMap.setAutoWidth();
      // sampleMap.setSize("89px", "89px");
      layerImg.setUseOpacityFilter(true);
      sampleMap.addChild(layerTransparencyUnderlay);
      sampleMap.addChild(layerImg);

      transparencySlider = new Slider(messages.layerActionsOpacity());
      String raw = rasterLayer.getLayerInfo().getStyle();
      double opacity = 1d;
      if (raw != null && !"".equals(raw)) {
        try {
          opacity = Double.parseDouble(raw);
        } catch (Exception e) {
          // ignore
        }
      }
      initSlider((int) Math.round(opacity * 100));

      layout.addMember(sampleMap);
      layout.addMember(transparencySlider);
    }

    // ----------------------------------------------------------

    if (vectorLayer != null && vectorLayer.getFilter() != null && !"".equals(vectorLayer.getFilter())) {
      final IButton removeFilter = new IButton(messages.layerActionsRemoveFilter());
      removeFilter.setIcon(BTN_REMOVEFILTER_IMG);
      removeFilter.setWidth(230);
      String tooltip = vectorLayer.getFilter();
      if ( tooltip.length() > 1000) {
        tooltip = tooltip.substring(0, 1000);
      }
      removeFilter.setTooltip(tooltip);
      removeFilter.addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {
          vectorLayer.setFilter(null);
          removeFilter.setVisible(false);
        }
      });
      layout.addMember(removeFilter);
    }

    // ----------------------------------------------------------

    IButton legendInfo = new IButton(messages.layerActionsShowLegend());
    legendInfo.setIcon(BTN_SHOWLEGEND_IMG);
    legendInfo.setWidth(230);
    legendInfo.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {
        showLegend();
      }
    });
    layout.addMember(legendInfo);

    // ----------------------------------------------------------

    addItem(layout);
  }

  private void initLabels() {
    labels.setTitle(messages.layerActionsLabels());
    labels.setTooltip(messages.layerActionsLabelsToolTip());
    labels.setTitleOrientation(TitleOrientation.LEFT);
    labels.setValue(vectorLayer.isLabelsVisible());
    Boolean val = vectorLayer.isLabelsVisible();
    layerLabelOverlay.setVisible(val);
    labels.addChangedHandler(new ChangedHandler() {
      public void onChanged(ChangedEvent event) {
        Boolean val = labels.getValueAsBoolean();
        layerLabelOverlay.setVisible(val);
        vectorLayer.setLabeled(val);
      }
    });
  }

  private void initSlider(int initialValue) {
    transparencySlider.setValue(initialValue);
    transparencySlider.setMinValue(0);
    transparencySlider.setMaxValue(100);
    transparencySlider.setNumValues(101);
    transparencySlider.setMaxValueLabel("100%");
    transparencySlider.setVertical(false);
    transparencySlider.setWidth(230);
    transparencySlider.setLabelWidth(Integer.parseInt(messages.layerActionsOpacitySliderLabelWidth()));
    transparencySlider.addValueChangedHandler(new ValueChangedHandler() {
      public void onValueChanged(ValueChangedEvent event) {
        double val = transparencySlider.getValue();
        layerImg.setOpacity((int) val);
        if (val > 0) {
          val /= 100;
        }
        rasterLayer.setOpacity(val);
      }
    });
  }

  private void showLegend() {
    LayerInfo li = new LayerInfo((vectorLayer != null ? vectorLayer : rasterLayer));
    li.draw();
  }
}
TOP

Related Classes of org.geomajas.widget.advancedviews.client.widget.LayerActions

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.