view gwt-client/src/main/java/org/dive4elements/river/client/client/ui/map/LegendWindow.java @ 9694:94b976204a0a

legendwindow debug
author dnt_bjoernsen <d.tironi@bjoernsen.de>
date Wed, 20 Jan 2021 11:22:54 +0100
parents 2197a7ccb4a8
children e388db7fd72e
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.http.client.URL;
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();
        com.smartgwt.client.util.SC.say("themescount " + themes.size());
        
        
        for (int i = 0; i< themes.size() ; i++) {
        	final Theme theme = themes.get(i);
            if (theme.getActive() == 0) {
                continue;
            }
            try {
            if (theme instanceof AttributedTheme) {
                this.legendContainer.addMember(createLegendGraphicsRow((AttributedTheme) theme));
            } } catch (Exception e) {
                com.smartgwt.client.util.SC.say("exception at index " + themes.size());
            	continue;
            }
        }
    }

    private Canvas createLegendGraphicsRow(final AttributedTheme at) {
    	 com.smartgwt.client.util.SC.say("init");
        final Label label = new Label(at.getDescription());
        final Widget img = createLegendGraphics(at);

        final HLayout row = new HLayout();
        row.addMember(label);
        row.addMember(img);
        
        String url = "url";
        
        if (img instanceof Image) {
        	setDimensions( row, ((Image) img).getHeight(),  ((Image) img).getWidth());
        	url = " url " + ((Image) img).getUrl();
        }
        else if (img instanceof Img) {
        	setDimensions( row, ((Img) img).getHeight(),  ((Img) img).getWidth());
        	url = " dataPath " + ((Img) img).getDataPath();
        }
        else {
        	setDimensions( row, 150,  400); //not sure when this is executed
        }
        String labelText =   at.getDescription() +", height: "+ row.getHeight()+"width: "+ row.getWidth()+" "+url;
   //   
//        final HLayout row2= new HLayout();
//        row.addMember(new Label(labelText));

        com.smartgwt.client.util.SC.say(labelText);
        return row;
    }

	private void setDimensions(HLayout row, int height, int width ) {
		final int minHeight = 30;
		row.setHeight(height < minHeight ? minHeight : height);
		row.setWidth(width);
	}

    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 String imgUrl = URL.encode(GWT.getHostPageBaseURL() + "images/wms_legend/" + legend);

            final Image image = new Image(imgUrl);
            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) {
                image.setSize((int) (imageWidth / widthPercent) + "px", (int) (imageHeight / widthPercent) + "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