ingo@805: package de.intevation.flys.client.client.ui.map; ingo@805: ingo@805: import com.google.gwt.core.client.GWT; ingo@805: ingo@1327: import com.smartgwt.client.types.ImageStyle; ingo@805: import com.smartgwt.client.types.ListGridFieldType; ingo@1327: import com.smartgwt.client.types.VerticalAlignment; ingo@1327: import com.smartgwt.client.widgets.Canvas; ingo@1327: import com.smartgwt.client.widgets.Img; ingo@1327: import com.smartgwt.client.widgets.grid.ListGrid; ingo@805: import com.smartgwt.client.widgets.grid.ListGridField; ingo@1327: import com.smartgwt.client.widgets.grid.ListGridRecord; ingo@1327: import com.smartgwt.client.widgets.layout.HLayout; ingo@805: import com.smartgwt.client.widgets.layout.VLayout; ingo@1377: import com.smartgwt.client.widgets.menu.Menu; ingo@1377: import com.smartgwt.client.widgets.menu.MenuItem; ingo@1377: import com.smartgwt.client.widgets.menu.events.ClickHandler; ingo@1377: import com.smartgwt.client.widgets.menu.events.MenuItemClickEvent; ingo@805: ingo@1327: import de.intevation.flys.client.shared.MapUtils; ingo@1327: import de.intevation.flys.client.shared.model.AttributedTheme; ingo@805: import de.intevation.flys.client.shared.model.Collection; ingo@1327: import de.intevation.flys.client.shared.model.FacetRecord; ingo@805: import de.intevation.flys.client.shared.model.Theme; ingo@805: import de.intevation.flys.client.shared.model.OutputMode; ingo@805: ingo@805: import de.intevation.flys.client.client.FLYSConstants; ingo@805: import de.intevation.flys.client.client.ui.ThemePanel; ingo@805: ingo@805: ingo@805: /** ingo@805: * @author Ingo Weinzierl ingo@805: */ ingo@805: public class MapThemePanel extends ThemePanel { ingo@805: ingo@1327: public static final int CELL_HEIGHT = 75; ingo@1327: public static final int STYLE_CELL_WIDTH = 125; ingo@1327: ingo@1327: ingo@806: public interface ActivateCallback { ingo@806: void activate(Theme theme, boolean activate); ingo@806: } ingo@806: ingo@806: ingo@1303: public interface ThemeMovedCallback { ingo@1303: void onThemeMoved(Theme theme, int oldIdx, int newIdx); ingo@1303: } ingo@1303: ingo@1377: public interface LayerZoomCallback { ingo@1377: void onLayerZoom(Theme theme, String extent); ingo@1377: } ingo@1377: ingo@1303: ingo@806: ingo@805: private FLYSConstants MSG = GWT.create(FLYSConstants.class); ingo@805: ingo@805: ingo@1303: protected ActivateCallback activateCallback; ingo@1303: protected ThemeMovedCallback themeMovedCallback; ingo@1377: protected LayerZoomCallback layerZoomCallback; ingo@806: ingo@806: ingo@805: public static final String GRID_FIELD_ACTIVE = "active"; ingo@1327: public static final String GRID_FIELD_STYLE = "style"; ingo@805: public static final String GRID_FIELD_NAME = "name"; ingo@805: ingo@805: ingo@805: protected MapOutputTab mapOut; ingo@805: ingo@805: ingo@806: public MapThemePanel( ingo@1303: Collection collection, ingo@1303: OutputMode mode, ingo@1303: ActivateCallback activateCallback ingo@1303: ) { ingo@1377: this(collection, mode, activateCallback, null, null); ingo@1303: } ingo@1303: ingo@1303: ingo@1303: public MapThemePanel( ingo@1303: Collection collection, ingo@1303: OutputMode mode, ingo@1303: ActivateCallback activateCallback, ingo@1377: ThemeMovedCallback themeMovedCallback, ingo@1377: LayerZoomCallback layerZoomCallback ingo@1303: ) { ingo@805: super(collection, mode); ingo@805: ingo@1303: this.activateCallback = activateCallback; ingo@1303: this.themeMovedCallback = themeMovedCallback; ingo@1377: this.layerZoomCallback = layerZoomCallback; ingo@806: ingo@805: initGrid(); ingo@805: initLayout(); ingo@805: ingo@805: updateGrid(); ingo@805: } ingo@805: ingo@805: ingo@805: protected void initLayout() { ingo@805: setWidth100(); ingo@805: setHeight100(); ingo@805: ingo@805: VLayout layout = new VLayout(); ingo@805: layout.setWidth100(); ingo@805: layout.setHeight100(); ingo@805: ingo@805: layout.addMember(list); ingo@805: layout.addMember(navigation); ingo@805: ingo@805: addChild(layout); ingo@805: } ingo@805: ingo@805: ingo@805: protected void initGrid() { ingo@805: list.setCanEdit(true); ingo@805: list.setCanSort(false); ingo@805: list.setShowRecordComponents(false); ingo@805: list.setShowRecordComponentsByCell(true); ingo@805: list.setShowHeader(true); ingo@805: list.setShowHeaderContextMenu(false); ingo@805: list.setWidth100(); ingo@805: list.setHeight100(); ingo@805: ingo@1327: list.setCellHeight(CELL_HEIGHT); ingo@1327: list.setShowRecordComponents(true); ingo@1327: list.setShowRecordComponentsByCell(true); ingo@1327: list.setShowAllRecords(true); ingo@1327: ingo@805: list.addEditCompleteHandler(this); ingo@805: ingo@805: ListGridField active = new ListGridField(GRID_FIELD_ACTIVE, " ", 20); ingo@805: active.setType(ListGridFieldType.BOOLEAN); ingo@1327: active.setCanDragResize(false); ingo@1327: ingo@1327: ListGridField style = new ListGridField( ingo@1327: GRID_FIELD_STYLE, ingo@1327: MSG.map_themepanel_header_style(), ingo@1327: STYLE_CELL_WIDTH); ingo@1327: style.setCanEdit(false); ingo@1327: style.setCanDragResize(false); ingo@805: ingo@805: ListGridField name = new ListGridField( ingo@805: GRID_FIELD_NAME, MSG.chart_themepanel_header_themes()); ingo@805: name.setType(ListGridFieldType.TEXT); ingo@805: ingo@1327: list.setFields(active, style, name); ingo@1327: } ingo@1327: ingo@1327: ingo@1327: @Override ingo@1327: protected ListGrid createNewGrid() { ingo@1327: ListGrid grid = new ListGrid() { ingo@1327: @Override ingo@1327: protected Canvas createRecordComponent(final ListGridRecord record, Integer colNum) { ingo@1327: String fieldname = getFieldName(colNum); ingo@1327: ingo@1327: if (fieldname.equals(GRID_FIELD_STYLE)) { ingo@1327: FacetRecord r = (FacetRecord) record; ingo@1327: AttributedTheme at = (AttributedTheme) r.getTheme(); ingo@1327: ingo@1327: String imgUrl = MapUtils.getLegendGraphicUrl( ingo@1327: at.getAttr("url"), ingo@1327: at.getAttr("layers")); ingo@1327: ingo@1327: HLayout layout = new HLayout(); ingo@1327: layout.setAlign(VerticalAlignment.CENTER); ingo@1327: layout.setLayoutAlign(VerticalAlignment.CENTER); ingo@1327: ingo@1327: Img img = new Img(imgUrl); ingo@1327: img.setImageType(ImageStyle.CENTER); ingo@1327: ingo@1327: layout.addMember(img); ingo@1327: ingo@1327: return layout; ingo@1327: } ingo@1327: ingo@1327: return super.createRecordComponent(record, colNum); ingo@1327: } ingo@1327: }; ingo@1327: ingo@1327: return grid; ingo@805: } ingo@805: ingo@805: ingo@805: @Override ingo@1377: protected Menu getSingleContextMenu(final ListGridRecord[] records) { ingo@1377: Menu menu = super.getSingleContextMenu(records); ingo@1377: ingo@1377: MenuItem layerZoom = createLayerZoomItem(records); ingo@1377: if (layerZoom != null) { ingo@1377: menu.addItem(layerZoom); ingo@1377: } ingo@1377: ingo@1377: return menu; ingo@1377: } ingo@1377: ingo@1377: ingo@1377: protected MenuItem createLayerZoomItem(final ListGridRecord[] recs) { ingo@1377: final FacetRecord fr = (FacetRecord) recs[0]; ingo@1377: final AttributedTheme at = (AttributedTheme) fr.getTheme(); ingo@1377: ingo@1377: final String extent = at.getAttr("extent"); ingo@1377: ingo@1377: if (extent == null || extent.length() == 0) { ingo@1377: return null; ingo@1377: } ingo@1377: ingo@1377: MenuItem zoom = new MenuItem(MSG.zoomToLayer()); ingo@1377: zoom.addClickHandler(new ClickHandler() { ingo@1377: @Override ingo@1377: public void onClick(MenuItemClickEvent evt) { ingo@1377: if (layerZoomCallback != null) { ingo@1377: layerZoomCallback.onLayerZoom(at, extent); ingo@1377: } ingo@1377: } ingo@1377: }); ingo@1377: ingo@1377: return zoom; ingo@1377: } ingo@1377: ingo@1377: ingo@1377: @Override ingo@805: public void activateTheme(Theme theme, boolean active) { ingo@806: if (activateCallback != null) { ingo@806: activateCallback.activate(theme, active); ingo@806: } ingo@806: ingo@805: theme.setActive(active ? 1 : 0); ingo@805: } ingo@1303: ingo@1303: ingo@1303: @Override ingo@1303: protected void fireThemeMoved(Theme theme, int oldIdx, int newIdx) { ingo@1303: if (themeMovedCallback != null) { ingo@1303: themeMovedCallback.onThemeMoved(theme, oldIdx, newIdx); ingo@1303: } ingo@1303: } ingo@805: } ingo@805: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :