view gwt-client/src/main/java/org/dive4elements/river/client/client/ui/map/LegendWindow.java @ 9635:a03c54129819

pos 21 another review...
author dnt_bjoernsen <d.tironi@bjoernsen.de>
date Thu, 31 Oct 2019 15:24:23 +0100
parents 63bbd5e45839
children 152299dadb36
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU AGPL (>=v3)
 * and comes with ABSOLUTELY NO WARRANTY! Check out the
 * documentation coming with Dive4Elements River for details.
 */

package org.dive4elements.river.client.client.ui.map;

import java.util.List;

import org.dive4elements.river.client.client.FLYSConstants;
import org.dive4elements.river.client.shared.MapUtils;
import org.dive4elements.river.client.shared.model.AttributedTheme;
import org.dive4elements.river.client.shared.model.Theme;
import org.dive4elements.river.client.shared.model.ThemeList;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Widget;
import com.smartgwt.client.types.ImageStyle;
import com.smartgwt.client.types.VerticalAlignment;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Img;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;

public class LegendWindow extends Window {

    protected FLYSConstants MSG = GWT.create(FLYSConstants.class);

    private ThemeList themeList;

    private final VLayout legendContainer;

    public LegendWindow(final ThemeList themeList) {
        this.themeList = themeList;
        this.legendContainer = new VLayout();

        init();
    }

    public void update(final ThemeList themeList) {
        this.themeList = themeList;

        final Canvas[] legends = this.legendContainer.getMembers();
        this.legendContainer.removeMembers(legends);

        addLegends();
    }

    private void addLegends() {
        final List<Theme> themes = this.themeList.getActiveThemes();

        for (final Theme theme : themes) {
            if (theme.getActive() == 0) {
                continue;
            }

            if (theme instanceof AttributedTheme) {
                this.legendContainer.addMember(createLegendGraphicsRow((AttributedTheme) theme));
            }
        }
    }

    private Canvas createLegendGraphicsRow(final AttributedTheme at) {
        final Label label = new Label(at.getDescription());
        final Widget img = createLegendGraphics(at);

        final HLayout row = new HLayout();
        row.addMember(label);
        row.addMember(img);

        row.setHeight(150);
        row.setWidth(400);

        return row;
    }

    private Widget createLegendGraphics(final AttributedTheme at) {

        final String legend = at.getAttr("legend");
        // TEST: final Image img = new Image("/images/FLYS_Donau.png"); (funktioniert!), ebenso FLYSResources.getTest();
        if (legend != null && !"".equals(legend)) {
            final Image image = new Image("/images/wms_legend/" + legend);
            final int imageWidth = image.getWidth();
            final int imageHeight = image.getHeight();
            final double widthPercent = imageWidth / 400.;

            // removing the limit of 150px height (legend can have an infinite height now,
            // as long as the width is less/eq 400px; if the width is >400,
            // the legend will be scaled to 400px width; the ratio will be kept)

            // final double heightPercent = imageHeight / 150.;
            if (widthPercent > 1)// || heightPercent > 1) {
                // if (widthPercent > heightPercent)
                image.setSize((int) (imageWidth / widthPercent) + "px", (int) (imageHeight / widthPercent) + "px");
            // else
            // image.setSize((int) (imageWidth / heightPercent) + "px", (int) (imageHeight / heightPercent) + "px");
            // }
            return image;
        }
        final String imgUrl = MapUtils.getLegendGraphicUrl(at.getAttr("url"), at.getAttr("layers"));

        final Img img = new Img(imgUrl);
        img.setImageType(ImageStyle.CENTER);
        img.setAutoFit(true);

        return img;
    }

    private void init() {
        this.legendContainer.setAutoHeight();
        this.legendContainer.setLayoutAlign(VerticalAlignment.TOP);
        this.legendContainer.setAlign(VerticalAlignment.CENTER);

        setTitle(this.MSG.wms_legend());
        setAutoSize(true);
        setCanDragResize(true);
        setIsModal(false);
        setShowModalMask(false);
        setLayoutAlign(VerticalAlignment.TOP);
        setAlign(VerticalAlignment.TOP);

        addItem(this.legendContainer);
        addLegends();

        centerInPage();
    }
}

http://dive4elements.wald.intevation.org