Mercurial > dive4elements > river
view gwt-client/src/main/java/org/dive4elements/river/client/client/ui/map/LegendWindow.java @ 9698:812a6a3eaaf5
another try
author | dnt_bjoernsen <d.tironi@bjoernsen.de> |
---|---|
date | Wed, 20 Jan 2021 17:19:59 +0100 |
parents | 15404504ea9e |
children | 94362af5928e |
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.dom.client.LoadEvent; import com.google.gwt.event.dom.client.LoadHandler; import com.google.gwt.event.shared.EventBus; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.event.shared.SimpleEventBus; 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) { theme.setActive(0); Canvas createLegendGraphicsRow = createLegendGraphicsRow((AttributedTheme) theme); // this.legendContainer.addMember(createLegendGraphicsRow); theme.setActive(1); Canvas createLegendGraphicsRow2 = createLegendGraphicsRow((AttributedTheme) theme); this.legendContainer.addMember(createLegendGraphicsRow2); } } catch (Exception e) { com.smartgwt.client.util.SC.say("exception at index " + themes.size()); continue; } } } 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); String url = "url"; if (img instanceof Image) { Image.prefetch(((Image) img).getUrl()); url = " url " + ((Image) img).getUrl(); MyLoadHandler handler = new MyLoadHandler(row, ((Image) img)); final HandlerRegistration handelReg = ((Image) img).addLoadHandler( handler); handler.setHandelReg(handelReg); } 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(); } }