view gwt-client/src/main/java/org/dive4elements/river/client/client/ui/map/LegendWindow.java @ 9701:0caaca0df028

another try for river axis legend
author dnt_bjoernsen <d.tironi@bjoernsen.de>
date Wed, 20 Jan 2021 19:25:47 +0100
parents b2768f367dff
children 20456a3c92e2
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.event.shared.HandlerRegistration;
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();

		for (int i = 0; i < themes.size(); i++) {
			final Theme theme = themes.get(i);
			if (theme.getActive() == 0) {
				continue;
			}
			try {
				if (theme instanceof AttributedTheme) {
					Canvas createLegendGraphicsRow = createLegendGraphicsRow((AttributedTheme) theme);
					 this.legendContainer.addMember(createLegendGraphicsRow);
				}
			} catch (Exception e) {
				continue;
			}
		}
	}

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

		row.addMember(label);
		row.addMember(img);

//		String url = "url";
		if (img instanceof Image) {
//			url = " url " + ((Image) img).getUrl();
			new MyLoadHandler(row, ((Image) img));

//		} 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;

//		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(HLayout row, 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);
			new MyWMSLoadHandler(row, image);

			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