Mercurial > dive4elements > river
view flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapThemePanel.java @ 1510:f7b3d5833f3b
Updated the MapOutputService to be able to request the new output type 'map'.
flys-client/trunk@3652 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Wed, 11 Jan 2012 14:28:46 +0000 |
parents | 0ba23e6fef0c |
children | c057ef91b268 |
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 de.intevation.flys.client.shared.MapUtils; import de.intevation.flys.client.shared.model.AttributedTheme; import de.intevation.flys.client.shared.model.Collection; 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.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 = 125; 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( Collection collection, MapOutputTab mapOut, OutputMode mode, ActivateCallback activateCallback ) { this(collection, mode, mapOut, activateCallback, null, null); } public MapThemePanel( Collection collection, OutputMode mode, MapOutputTab mapOut, ActivateCallback activateCallback, ThemeMovedCallback themeMovedCallback, LayerZoomCallback layerZoomCallback ) { super(collection, mode, null); 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.setWidth100(); list.setHeight100(); 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 :