Mercurial > dive4elements > river
view flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapThemePanel.java @ 3847:f3b821735e39
Calculate the info url via i18n
Don't fetch the info url from the artifact service and use i18n to calculate the
url by using the official gauge and river number.
flys-client/trunk@5582 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Bjoern Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Mon, 24 Sep 2012 08:39:22 +0000 |
parents | 4c9486a6d628 |
children | 61020a61ed38 |
line wrap: on
line source
package de.intevation.flys.client.client.ui.map; import com.google.gwt.core.client.GWT; import com.smartgwt.client.util.SC; import com.smartgwt.client.util.BooleanCallback; import com.smartgwt.client.types.ImageStyle; import com.smartgwt.client.types.ListGridFieldType; import com.smartgwt.client.types.VerticalAlignment; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Img; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.client.widgets.menu.Menu; import com.smartgwt.client.widgets.menu.MenuItem; import com.smartgwt.client.widgets.menu.events.ClickHandler; import com.smartgwt.client.widgets.menu.events.MenuItemClickEvent; import com.smartgwt.client.widgets.grid.events.HeaderDoubleClickHandler; import com.smartgwt.client.widgets.grid.events.HeaderDoubleClickEvent; import de.intevation.flys.client.shared.MapUtils; import de.intevation.flys.client.shared.model.AttributedTheme; import de.intevation.flys.client.shared.model.FacetRecord; import de.intevation.flys.client.shared.model.Theme; import de.intevation.flys.client.shared.model.OutputMode; import de.intevation.flys.client.client.FLYSConstants; import de.intevation.flys.client.client.ui.CollectionView; import de.intevation.flys.client.client.ui.ThemePanel; /** * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ public class MapThemePanel extends ThemePanel { public static final int CELL_HEIGHT = 75; public static final int STYLE_CELL_WIDTH = 150; public interface ActivateCallback { void activate(Theme theme, boolean activate); } public interface ThemeMovedCallback { void onThemeMoved(Theme theme, int oldIdx, int newIdx); } public interface LayerZoomCallback { void onLayerZoom(Theme theme, String extent); } private FLYSConstants MSG = GWT.create(FLYSConstants.class); protected ActivateCallback activateCallback; protected ThemeMovedCallback themeMovedCallback; protected LayerZoomCallback layerZoomCallback; protected ListGridRecord[] oldRecords; public static final String GRID_FIELD_ACTIVE = "active"; public static final String GRID_FIELD_STYLE = "style"; public static final String GRID_FIELD_NAME = "name"; protected MapOutputTab mapOut; public MapThemePanel( CollectionView view, OutputMode mode, MapOutputTab mapOut, ActivateCallback activateCallback, ThemeMovedCallback themeMovedCallback, LayerZoomCallback layerZoomCallback ) { super(mode, view); this.mapOut = mapOut; this.activateCallback = activateCallback; this.themeMovedCallback = themeMovedCallback; this.layerZoomCallback = layerZoomCallback; initGrid(); initLayout(); updateGrid(); } protected void initLayout() { setWidth100(); setHeight100(); VLayout layout = new VLayout(); layout.setWidth100(); layout.setHeight100(); layout.addMember(list); layout.addMember(navigation); addChild(layout); } protected void initGrid() { list.setCanEdit(true); list.setCanSort(false); list.setShowRecordComponents(false); list.setShowRecordComponentsByCell(true); list.setShowHeader(true); list.setShowHeaderContextMenu(false); list.setCanReorderFields(false); list.setWidth100(); list.setHeight100(); list.addHeaderDoubleClickHandler(new HeaderDoubleClickHandler() { public void onHeaderDoubleClick(HeaderDoubleClickEvent event) { // cancel the event. return; } }); list.setCellHeight(CELL_HEIGHT); list.setShowRecordComponents(true); list.setShowRecordComponentsByCell(true); list.setShowAllRecords(true); list.addEditCompleteHandler(this); ListGridField active = new ListGridField(GRID_FIELD_ACTIVE, " ", 20); active.setType(ListGridFieldType.BOOLEAN); active.setCanDragResize(false); ListGridField style = new ListGridField( GRID_FIELD_STYLE, MSG.map_themepanel_header_style(), STYLE_CELL_WIDTH); style.setCanEdit(false); style.setCanDragResize(false); ListGridField name = new ListGridField( GRID_FIELD_NAME, MSG.chart_themepanel_header_themes()); name.setType(ListGridFieldType.TEXT); list.setFields(active, style, name); } @Override protected ListGrid createNewGrid() { ListGrid grid = new ListGrid() { @Override protected Canvas createRecordComponent(final ListGridRecord record, Integer colNum) { String fieldname = getFieldName(colNum); if (fieldname.equals(GRID_FIELD_STYLE)) { FacetRecord r = (FacetRecord) record; AttributedTheme at = (AttributedTheme) r.getTheme(); String imgUrl = MapUtils.getLegendGraphicUrl( at.getAttr("url"), at.getAttr("layers")); HLayout layout = new HLayout(); layout.setAlign(VerticalAlignment.CENTER); layout.setLayoutAlign(VerticalAlignment.CENTER); Img img = new Img(imgUrl); img.setImageType(ImageStyle.CENTER); layout.addMember(img); return layout; } return super.createRecordComponent(record, colNum); } }; return grid; } @Override protected void clearGrid() { oldRecords = list.getRecords(); super.clearGrid(); } @Override protected void addFacetRecord(FacetRecord rec) { Theme newTheme = rec.getTheme(); boolean isNew = true; for (ListGridRecord old: getOldRecords()) { FacetRecord fr = (FacetRecord) old; if (newTheme.equals(fr.getTheme())) { isNew = false; break; } } if (isNew && mapOut != null) { mapOut.addLayer(mapOut.createWMSLayer(newTheme)); } super.addFacetRecord(rec); } @Override protected Menu getSingleContextMenu(final ListGridRecord[] records) { Menu menu = super.getSingleContextMenu(records); MenuItem layerZoom = createLayerZoomItem(records); if (layerZoom != null) { menu.addItem(layerZoom); } return menu; } @Override protected MenuItem createRemoveItem(final ListGridRecord[] records) { MenuItem item = super.createRemoveItem(records); item.addClickHandler(new ClickHandler() { @Override public void onClick(MenuItemClickEvent evt) { SC.ask(MSG.askThemeRemove(), new BooleanCallback() { @Override public void execute(Boolean value) { if (value) { for (ListGridRecord record: records) { FacetRecord facet = (FacetRecord) record; Theme theme = facet.getTheme(); theme.setVisible(0); theme.setActive(0); AttributedTheme at = (AttributedTheme) theme; getMapOutputTab().removeLayer(at.getAttr("layers")); } updateCollection(); } } }); } }); return item; } protected MenuItem createLayerZoomItem(final ListGridRecord[] recs) { final FacetRecord fr = (FacetRecord) recs[0]; final AttributedTheme at = (AttributedTheme) fr.getTheme(); final String extent = at.getAttr("extent"); if (extent == null || extent.length() == 0) { return null; } MenuItem zoom = new MenuItem(MSG.zoomToLayer()); zoom.addClickHandler(new ClickHandler() { @Override public void onClick(MenuItemClickEvent evt) { if (layerZoomCallback != null) { layerZoomCallback.onLayerZoom(at, extent); } } }); return zoom; } @Override public void activateTheme(Theme theme, boolean active) { if (activateCallback != null) { activateCallback.activate(theme, active); } theme.setActive(active ? 1 : 0); } @Override protected void fireThemeMoved(Theme theme, int oldIdx, int newIdx) { if (themeMovedCallback != null) { themeMovedCallback.onThemeMoved(theme, oldIdx, newIdx); } } protected ListGridRecord[] getOldRecords() { return oldRecords != null ? oldRecords : new ListGridRecord[0]; } protected MapOutputTab getMapOutputTab() { return mapOut; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :