ingo@799: package de.intevation.flys.client.client.ui.map;
ingo@799:
ingo@799: import com.google.gwt.core.client.GWT;
christian@4472:
ingo@1433: import com.smartgwt.client.types.Alignment;
ingo@799: import com.smartgwt.client.types.SelectionType;
ingo@1315: import com.smartgwt.client.util.SC;
ingo@1364: import com.smartgwt.client.widgets.Button;
ingo@800: import com.smartgwt.client.widgets.Canvas;
ingo@799: import com.smartgwt.client.widgets.ImgButton;
ingo@1433: import com.smartgwt.client.widgets.Label;
ingo@799: import com.smartgwt.client.widgets.events.ClickEvent;
ingo@799: import com.smartgwt.client.widgets.events.ClickHandler;
christian@2983: import com.smartgwt.client.widgets.layout.HLayout;
christian@2983:
christian@2983: import de.intevation.flys.client.client.FLYSConstants;
christian@2983: import de.intevation.flys.client.client.ui.ImgLink;
christian@2983: import de.intevation.flys.client.client.ui.Toolbar;
christian@2983: import de.intevation.flys.client.client.utils.EnableDisableCmd;
christian@2983: import de.intevation.flys.client.shared.model.Collection;
christian@4473: import de.intevation.flys.client.shared.model.Property;
christian@4473: import de.intevation.flys.client.shared.model.PropertySetting;
christian@4473: import de.intevation.flys.client.shared.model.Settings;
ingo@4329: import de.intevation.flys.client.shared.model.ThemeList;
ingo@799:
christian@4473: import java.util.List;
christian@4473:
felix@4436: import org.gwtopenmaps.openlayers.client.Bounds;
felix@4436: import org.gwtopenmaps.openlayers.client.Map;
felix@4436: import org.gwtopenmaps.openlayers.client.control.DragPan;
felix@4436: import org.gwtopenmaps.openlayers.client.control.SelectFeature;
felix@4436: import org.gwtopenmaps.openlayers.client.control.SelectFeatureOptions;
felix@4436: import org.gwtopenmaps.openlayers.client.control.ZoomBox;
felix@4436: import org.gwtopenmaps.openlayers.client.event.MapZoomListener;
felix@4436: import org.gwtopenmaps.openlayers.client.feature.VectorFeature;
felix@4436: import org.gwtopenmaps.openlayers.client.layer.Vector;
felix@4436: import org.gwtopenmaps.openlayers.client.util.Attributes;
felix@4436:
ingo@799:
ingo@799: /**
felix@4436: * Toolbar for the Map views.
ingo@799: * @author Ingo Weinzierl
ingo@799: */
sascha@2509: public class MapToolbar
sascha@2509: extends Toolbar
sascha@2509: implements MapZoomListener
sascha@2509: {
ingo@799: protected FLYSConstants MSG = GWT.create(FLYSConstants.class);
ingo@799:
ingo@1400: protected FloodMap floodMap;
ingo@1400: protected DragPan pan;
ingo@1400: protected ZoomBox zoomBox;
ingo@1400: protected SelectFeature selectFeature;
ingo@1400: protected GetFeatureInfo getFeatureInfo;
ingo@799:
christian@2983: protected Button manageThemesButton;
ingo@1364: protected Button datacageButton;
ingo@4329: protected Button legendButton;
ingo@1364:
ingo@1406: protected ImgButton addWMSButton;
ingo@799: protected ImgButton zoomToMaxButton;
ingo@799: protected ImgButton zoomBoxButton;
ingo@799: protected ImgButton zoomOutButton;
ingo@799: protected ImgButton panButton;
ingo@800: protected ImgButton selectButton;
ingo@1400: protected ImgButton infoButton;
ingo@800: protected ImgButton removeButton;
ingo@1315: protected ImgButton elevationButton;
sascha@2507: protected ImgLink printMapLink;
felix@4436: protected ImgButton printMapSettings;
ingo@800:
ingo@1433: protected Label epsgLabel;
ingo@1433:
ingo@802: protected DrawControl drawControl;
ingo@802: protected MeasureControl measureControl;
ingo@800:
ingo@4329: protected LegendWindow legendWindow;
ingo@4329:
ingo@800: protected Canvas position;
ingo@799:
ingo@799:
raimund@1386: public MapToolbar(FloodMap floodMap, boolean digitize) {
raimund@1386: this(null, floodMap, digitize);
ingo@1364: }
ingo@1364:
ingo@1364:
ingo@1364: public MapToolbar(
ingo@1364: MapOutputTab mapTab,
ingo@1364: FloodMap floodMap,
ingo@1364: boolean digitize)
ingo@1364: {
ingo@1364: super(mapTab);
ingo@799:
ingo@799: setWidth100();
raimund@2452: setHeight(38);
ingo@799: setMembersMargin(10);
ingo@799: setPadding(5);
ingo@799: setBorder("1px solid black");
ingo@799: this.floodMap = floodMap;
ingo@799:
ingo@799: zoomToMaxButton = createMaxExtentControl();
ingo@799: zoomBoxButton = createZoomBoxControl();
ingo@799: zoomOutButton = createZoomOutControl();
ingo@799: panButton = createPanControl();
ingo@800: drawControl = createDrawControl();
ingo@800: selectButton = createSelectFeatureControl();
ingo@1400: infoButton = createGetFeatureInfo();
ingo@833: measureControl = createMeasureControl();
raimund@1386: position = createMousePosition();
ingo@800: removeButton = createRemoveFeatureControl();
ingo@1315: elevationButton = createElevationControl();
ingo@1433: epsgLabel = createEPSGLabel();
ingo@799:
ingo@1364: if (mapTab != null) {
christian@2983: manageThemesButton = createManageThemesControl();
christian@2983: addMember(manageThemesButton);
christian@2983:
ingo@1364: datacageButton = createDatacageControl();
ingo@1364: addMember(datacageButton);
ingo@1406:
ingo@4329: legendButton = createLegendControl();
ingo@4329: addMember(legendButton);
ingo@4329:
ingo@1406: addWMSButton = createWMSControl();
ingo@1406: addMember(addWMSButton);
sascha@2507:
sascha@2507: printMapLink = createPrintMapLink();
sascha@2507: addMember(printMapLink);
felix@4436:
felix@4436: printMapSettings = createMapPrintSettingsControl();
felix@4436: addMember(printMapSettings);
ingo@1364: }
ingo@1364:
ingo@799: addMember(zoomToMaxButton);
ingo@799: addMember(zoomBoxButton);
ingo@799: addMember(zoomOutButton);
ingo@799: addMember(panButton);
ingo@833:
ingo@833: if (digitize) {
ingo@833: addMember(drawControl);
ingo@833: addMember(selectButton);
ingo@833: addMember(removeButton);
ingo@1315: addMember(elevationButton);
ingo@833: }
ingo@833:
ingo@1400: if (infoButton != null) {
ingo@1400: addMember(infoButton);
ingo@1400: }
ingo@1400:
ingo@802: addMember(measureControl);
ingo@1433: addMember(createRightPanel());
ingo@1433: }
ingo@1433:
ingo@1433:
ingo@1433: protected HLayout createRightPanel() {
ingo@1433: HLayout right = new HLayout();
ingo@1433: right.setAlign(Alignment.RIGHT);
ingo@1433:
ingo@1433: right.addMember(epsgLabel);
ingo@1433: right.addMember(position);
ingo@1433:
ingo@1433: return right;
ingo@799: }
ingo@799:
ingo@799:
ingo@799: protected Map getMap() {
ingo@799: return floodMap.getMap();
ingo@799: }
ingo@799:
ingo@799:
ingo@799: protected void activatePan(boolean activate) {
ingo@799: if (activate) {
ingo@799: panButton.select();
ingo@799: pan.activate();
ingo@799: }
ingo@799: else {
ingo@799: panButton.deselect();
ingo@799: pan.deactivate();
ingo@799: }
ingo@799: }
ingo@799:
ingo@799:
ingo@799: protected void activateZoomBox(boolean activate) {
ingo@799: if (activate) {
ingo@799: zoomBoxButton.select();
ingo@799: zoomBox.activate();
ingo@799: }
ingo@799: else {
ingo@799: zoomBoxButton.deselect();
ingo@799: zoomBox.deactivate();
ingo@799: }
ingo@799: }
ingo@799:
ingo@799:
raimund@1389: public void activateDrawFeature(boolean activate) {
ingo@800: drawControl.activate(activate);
ingo@800: }
ingo@800:
ingo@800:
ingo@800: protected void activateSelectFeature(boolean activate) {
ingo@800: if (activate) {
ingo@800: selectButton.select();
ingo@800: selectFeature.activate();
ingo@800: }
ingo@800: else {
ingo@800: selectButton.deselect();
ingo@800: selectFeature.deactivate();
ingo@800: }
ingo@800: }
ingo@800:
ingo@800:
ingo@802: protected void activateMeasureControl(boolean activate) {
ingo@802: measureControl.activate(activate);
ingo@802: }
ingo@802:
ingo@802:
ingo@1400: protected void activateGetFeatureInfo(boolean activate) {
ingo@2469: if (infoButton == null) {
ingo@2469: return;
ingo@2469: }
ingo@2469:
ingo@2447: if (activate) {
ingo@2447: infoButton.select();
ingo@2447: }
ingo@2447: else {
ingo@2447: infoButton.deselect();
ingo@2447: }
ingo@2447:
ingo@1400: getFeatureInfo.activate(activate);
ingo@1400: }
ingo@1400:
ingo@1400:
ingo@800: protected ImgButton createButton(String img, ClickHandler handler) {
ingo@800: ImgButton btn = new ImgButton();
ingo@799:
ingo@799: String baseUrl = GWT.getHostPageBaseURL();
ingo@800: btn.setSrc(baseUrl + img);
ingo@800: btn.setWidth(20);
ingo@800: btn.setHeight(20);
ingo@800: btn.setShowDown(false);
ingo@800: btn.setShowRollOver(false);
ingo@2471: btn.setShowRollOverIcon(false);
ingo@800: btn.setShowDisabled(false);
ingo@800: btn.setShowDisabledIcon(true);
ingo@800: btn.setShowDownIcon(false);
ingo@800: btn.setShowFocusedIcon(false);
ingo@799:
ingo@800: if (handler != null) {
ingo@800: btn.addClickHandler(handler);
ingo@800: }
ingo@800:
ingo@800: return btn;
ingo@800: }
ingo@800:
ingo@800:
ingo@800: protected ImgButton createToggleButton(
ingo@800: String img,
ingo@800: final EnableDisableCmd cmd
ingo@800: ) {
ingo@800: final ImgButton btn = new ImgButton();
ingo@800:
ingo@800: String baseUrl = GWT.getHostPageBaseURL();
ingo@800: btn.setSrc(baseUrl + img);
ingo@800: btn.setActionType(SelectionType.CHECKBOX);
ingo@800: btn.setSize(20);
ingo@800: btn.setShowRollOver(false);
ingo@2471: btn.setShowRollOverIcon(false);
ingo@800: btn.setSelected(false);
ingo@800: btn.addClickHandler(new ClickHandler() {
christian@2983: @Override
ingo@800: public void onClick(ClickEvent e) {
ingo@800: if (btn.isSelected()) {
ingo@800: cmd.enable();
ingo@800: }
ingo@800: else {
ingo@800: cmd.disable();
ingo@800: }
ingo@800: }
ingo@800: });
ingo@800:
ingo@800: return btn;
ingo@800: }
ingo@800:
sascha@2507: protected ImgLink createPrintMapLink() {
sascha@2507: String baseUrl = GWT.getHostPageBaseURL();
sascha@2507:
sascha@2509: getMap().addMapZoomListener(this);
sascha@2509:
sascha@2507: return new ImgLink(
sascha@2507: baseUrl + MSG.downloadPDF(),
christian@4473: createPrintUrl(),
sascha@2508: 20, 20,
sascha@2508: true);
sascha@2507: }
sascha@2507:
ingo@800:
ingo@800: protected ImgButton createMaxExtentControl() {
ingo@800: ImgButton zoomToMax = createButton(MSG.zoom_all(), new ClickHandler() {
christian@2983: @Override
ingo@799: public void onClick(ClickEvent event) {
ingo@799: floodMap.getMap().zoomToMaxExtent();
ingo@799: }
ingo@799: });
ingo@799:
ingo@880: zoomToMax.setTooltip(MSG.zoomMaxExtent());
ingo@880:
ingo@799: return zoomToMax;
ingo@799: }
ingo@799:
ingo@799:
ingo@799: protected ImgButton createZoomBoxControl() {
ingo@799: zoomBox = new ZoomBox();
ingo@799:
ingo@800: EnableDisableCmd cmd = new EnableDisableCmd() {
christian@2983: @Override
ingo@800: public void enable() {
ingo@800: activatePan(false);
ingo@800: activateDrawFeature(false);
ingo@800: activateSelectFeature(false);
ingo@802: activateMeasureControl(false);
ingo@2447: activateGetFeatureInfo(false);
ingo@2447: activateZoomBox(true);
ingo@800: }
ingo@799:
christian@2983: @Override
ingo@800: public void disable() {
ingo@800: activateZoomBox(false);
ingo@799: }
ingo@800: };
ingo@799:
ingo@800: ImgButton button = createToggleButton(MSG.zoom_in(), cmd);
ingo@880: button.setTooltip(MSG.zoomIn());
ingo@880:
ingo@880: Map map = getMap();
ingo@799: map.addControl(zoomBox);
ingo@799:
ingo@799: return button;
ingo@799: }
ingo@799:
ingo@799:
ingo@799: protected ImgButton createZoomOutControl() {
ingo@800: ImgButton zoomOut = createButton(MSG.zoom_out(), new ClickHandler() {
christian@2983: @Override
ingo@799: public void onClick(ClickEvent event) {
ingo@799: Map map = floodMap.getMap();
ingo@799: int level = map.getZoom();
ingo@799:
ingo@799: if (level > 1) {
ingo@799: map.zoomTo(level-1);
ingo@799: }
ingo@799: }
ingo@799: });
ingo@799:
ingo@880: zoomOut.setTooltip(MSG.zoomOut());
ingo@880:
ingo@799: return zoomOut;
ingo@799: }
ingo@799:
ingo@799:
ingo@799: protected ImgButton createPanControl() {
ingo@799: pan = new DragPan();
ingo@800: getMap().addControl(pan);
ingo@799:
ingo@800: EnableDisableCmd cmd = new EnableDisableCmd() {
christian@2983: @Override
ingo@800: public void enable() {
ingo@800: activateZoomBox(false);
ingo@800: activateDrawFeature(false);
ingo@800: activateSelectFeature(false);
ingo@802: activateMeasureControl(false);
ingo@2447: activateGetFeatureInfo(false);
ingo@2447: activatePan(true);
ingo@800: }
ingo@799:
christian@2983: @Override
ingo@800: public void disable() {
ingo@800: activatePan(false);
ingo@800: }
ingo@800: };
ingo@800:
ingo@800: final ImgButton button = createToggleButton(MSG.pan(), cmd);
ingo@880: button.setTooltip(MSG.moveMap());
ingo@800:
ingo@800: return button;
ingo@800: }
ingo@800:
ingo@800:
ingo@800: protected DrawControl createDrawControl() {
ingo@800: EnableDisableCmd cmd = new EnableDisableCmd() {
christian@2983: @Override
ingo@800: public void enable() {
ingo@800: activateZoomBox(false);
ingo@800: activatePan(false);
ingo@800: activateDrawFeature(true);
ingo@800: activateSelectFeature(false);
ingo@802: activateMeasureControl(false);
ingo@800: }
ingo@800:
christian@2983: @Override
ingo@800: public void disable() {
ingo@800: activateDrawFeature(false);
ingo@800: }
ingo@800: };
ingo@800: return new DrawControl(getMap(), floodMap.getBarrierLayer(), cmd);
ingo@800: }
ingo@800:
ingo@800:
ingo@800: protected ImgButton createSelectFeatureControl() {
ingo@800: SelectFeatureOptions opts = new SelectFeatureOptions();
ingo@825: opts.setBox(true);
ingo@800:
ingo@800: // VectorFeatures selected by the SelectFeature control are manually
ingo@800: // marked with the string "mark.delete". The control to remove selected
ingo@800: // features makes use of this string to determine if the feature should
ingo@800: // be deleted (is marked) or not. Actually, we would like to use the
ingo@800: // OpenLayers native mechanism to select features, but for some reason
ingo@800: // this doesn't work here. After a feature has been selected, the layer
ingo@800: // still has no selected features.
ingo@800: opts.onSelect(new SelectFeature.SelectFeatureListener() {
christian@2983: @Override
ingo@800: public void onFeatureSelected(VectorFeature feature) {
ingo@1317: floodMap.selectFeature(feature);
ingo@800: }
ingo@800: });
ingo@800:
ingo@800: opts.onUnSelect(new SelectFeature.UnselectFeatureListener() {
christian@2983: @Override
ingo@800: public void onFeatureUnselected(VectorFeature feature) {
ingo@1317: floodMap.disableFeature(feature);
ingo@800: }
ingo@800: });
ingo@800:
ingo@800: selectFeature = new SelectFeature(floodMap.getBarrierLayer(), opts);
ingo@800: getMap().addControl(selectFeature);
ingo@800:
ingo@800: EnableDisableCmd cmd = new EnableDisableCmd() {
christian@2983: @Override
ingo@800: public void enable() {
ingo@800: activateDrawFeature(false);
ingo@800: activatePan(false);
ingo@800: activateZoomBox(false);
ingo@800: activateSelectFeature(true);
ingo@802: activateMeasureControl(false);
ingo@800: }
ingo@800:
christian@2983: @Override
ingo@800: public void disable() {
ingo@800: activateSelectFeature(false);
ingo@1317: floodMap.disableFeatures();
ingo@800: }
ingo@800: };
ingo@800:
ingo@800: ImgButton button = createToggleButton(MSG.selectFeature(), cmd);
ingo@880: button.setTooltip(MSG.selectObject());
ingo@800:
ingo@800: return button;
ingo@800: }
ingo@800:
ingo@800:
ingo@800: protected ImgButton createRemoveFeatureControl() {
ingo@800: ImgButton remove = createButton(MSG.removeFeature(),new ClickHandler() {
christian@2983: @Override
ingo@800: public void onClick(ClickEvent event) {
ingo@800: Vector barriers = floodMap.getBarrierLayer();
ingo@800: VectorFeature[] features = barriers.getFeatures();
ingo@800:
ingo@800: if (features == null || features.length == 0) {
ingo@800: return;
ingo@799: }
ingo@800:
ingo@800: for (int i = features.length-1; i >= 0; i--) {
ingo@800: VectorFeature feature = features[i];
ingo@800:
ingo@800: Attributes attr = feature.getAttributes();
ingo@1315: int del = attr.getAttributeAsInt(FloodMap.MARK_SELECTED);
ingo@800:
ingo@800: if (del == 1) {
ingo@800: barriers.removeFeature(feature);
ingo@800: feature.destroy();
ingo@800: }
ingo@799: }
ingo@799: }
ingo@799: });
ingo@799:
ingo@880: remove.setTooltip(MSG.removeObject());
ingo@880:
ingo@800: return remove;
ingo@800: }
ingo@799:
ingo@800:
ingo@1315: protected ImgButton createElevationControl() {
ingo@1315: ImgButton btn = createButton(MSG.adjustElevation(), new ClickHandler() {
christian@2983: @Override
ingo@1315: public void onClick(ClickEvent evt) {
ingo@1315: Vector barriers = floodMap.getBarrierLayer();
ingo@1315: VectorFeature[] features = barriers.getFeatures();
ingo@1315:
ingo@1315: VectorFeature feature = null;
ingo@1315:
ingo@1315: if (features == null || features.length == 0) {
ingo@1317: SC.warn(MSG.error_no_feature_selected());
ingo@1315: return;
ingo@1315: }
ingo@1315:
ingo@1317: boolean multipleFeatures = false;
ingo@1317:
ingo@1315: for (VectorFeature f: features) {
ingo@1315: Attributes attr = f.getAttributes();
ingo@1315: if (attr.getAttributeAsInt(FloodMap.MARK_SELECTED) == 1) {
ingo@1315: if (feature == null) {
ingo@1315: feature = f;
ingo@1315: }
ingo@1315: else {
ingo@1317: multipleFeatures = true;
ingo@1315: }
ingo@1315: }
ingo@1315: }
ingo@1315:
ingo@1317: if (feature == null) {
ingo@1317: SC.warn(MSG.error_no_feature_selected());
ingo@1317: return;
ingo@1317: }
ingo@1317:
ingo@1315: new ElevationWindow(floodMap, feature).show();
ingo@1317:
ingo@1317: if (multipleFeatures) {
ingo@1317: SC.warn(MSG.warning_use_first_feature());
ingo@1317: }
ingo@1315: }
ingo@1315: });
ingo@1315:
ingo@1315: btn.setTooltip(MSG.adjustElevationTooltip());
ingo@1315:
ingo@1315: return btn;
ingo@1315: }
ingo@1315:
ingo@1315:
raimund@1386: protected Canvas createMousePosition() {
raimund@1386: return new MapPositionPanel(floodMap.getMapWidget());
ingo@799: }
ingo@802:
ingo@802:
ingo@802: protected MeasureControl createMeasureControl() {
ingo@802: EnableDisableCmd cmd = new EnableDisableCmd() {
christian@2983: @Override
ingo@802: public void enable() {
ingo@802: activateDrawFeature(false);
ingo@802: activatePan(false);
ingo@802: activateZoomBox(false);
ingo@802: activateSelectFeature(false);
ingo@2449: activateGetFeatureInfo(false);
ingo@802: }
ingo@802:
christian@2983: @Override
ingo@802: public void disable() {
ingo@802: // do nothing
ingo@802: }
ingo@802: };
ingo@802:
ingo@802: return new MeasureControl(floodMap, cmd);
ingo@802: }
ingo@1364:
ingo@1364:
ingo@1364: protected Button createDatacageControl() {
ingo@1364: Button btn = new Button(MSG.databasket());
ingo@1364: btn.addClickHandler(new ClickHandler() {
christian@2983: @Override
ingo@1364: public void onClick(ClickEvent evt) {
ingo@1364: openDatacageWindow((MapOutputTab) getOutputTab());
ingo@1364: }
ingo@1364: });
ingo@1364:
ingo@1364: return btn;
ingo@1364: }
ingo@1400:
ingo@1400:
ingo@4329: protected Button createLegendControl() {
ingo@4329: Button btn = new Button(MSG.legend());
ingo@4329: btn.addClickHandler(new ClickHandler() {
ingo@4329: @Override
ingo@4329: public void onClick(ClickEvent event) {
ingo@4329: openLegendWindow();
ingo@4329: }
ingo@4329: });
ingo@4329:
ingo@4329: return btn;
ingo@4329: }
ingo@4329:
ingo@4329:
ingo@4329: protected void openLegendWindow() {
ingo@4329: if (legendWindow == null) {
ingo@4329: MapOutputTab tab = (MapOutputTab) getOutputTab();
ingo@4329: legendWindow = new LegendWindow(tab.getThemePanel().getThemeList());
ingo@4329: }
ingo@4329:
ingo@4329: legendWindow.show();
ingo@4329: }
ingo@4329:
ingo@4329:
ingo@1400: protected ImgButton createGetFeatureInfo() {
ingo@1404: MapOutputTab ot = (MapOutputTab) getOutputTab();
ingo@1400: if (ot == null) {
ingo@1400: return null;
ingo@1400: }
ingo@1400:
christian@2983: //ThemeList tl = ot.getCollection().getThemeList("floodmap");
ingo@1400:
ingo@1400: getFeatureInfo = new GetFeatureInfo(
ingo@1400: getMap(),
ingo@1404: ot.getThemePanel(),
ingo@1400: "gml");
ingo@1400:
ingo@1400: EnableDisableCmd cmd = new EnableDisableCmd() {
christian@2983: @Override
ingo@1400: public void enable() {
ingo@1400: activateDrawFeature(false);
ingo@1400: activatePan(false);
ingo@1400: activateZoomBox(false);
ingo@1400: activateSelectFeature(false);
ingo@2449: activateMeasureControl(false);
ingo@1400: activateGetFeatureInfo(true);
ingo@1400: }
ingo@1400:
christian@2983: @Override
ingo@1400: public void disable() {
ingo@1400: activateGetFeatureInfo(false);
ingo@1400: }
ingo@1400: };
ingo@1400:
ingo@1400: ImgButton button = createToggleButton(MSG.getFeatureInfo(), cmd);
ingo@1400: button.setTooltip(MSG.getFeatureInfoTooltip());
ingo@1400:
ingo@1400: return button;
ingo@1400: }
ingo@1406:
ingo@1406:
christian@2983: protected Button createManageThemesControl() {
christian@2983: Button btn = new Button(MSG.manageThemes());
christian@2983: btn.addClickHandler(new ClickHandler() {
christian@2983:
christian@2983: @Override
christian@2983: public void onClick(ClickEvent event) {
christian@2983: ((MapOutputTab)getOutputTab()).toogleThemePanel();
christian@2983: }
christian@2983: });
christian@2983: return btn;
christian@2983: }
christian@2983:
christian@2983:
felix@4436: protected ImgButton createMapPrintSettingsControl() {
christian@4474: final MapToolbar mtb = this;
felix@4436: ImgButton btn = createButton(MSG.printMapSettings(), new ClickHandler() {
felix@4436: @Override
felix@4436: public void onClick(ClickEvent event) {
christian@4472: MapPrintSettingsWindow mpsw =
christian@4474: new MapPrintSettingsWindow(outputTab.getCollection(), mtb);
christian@4472: outputTab.getCollectionView().addChild(mpsw);
felix@4436: }
felix@4436: });
felix@4436: return btn;
felix@4436: }
felix@4436:
felix@4436:
ingo@1406: protected ImgButton createWMSControl() {
ingo@1418: final String srs = floodMap.getRiverProjection();
ingo@1418:
ingo@1406: ImgButton add = createButton(MSG.addWMS(), new ClickHandler() {
christian@2983: @Override
ingo@1406: public void onClick(ClickEvent event) {
ingo@1412: MapOutputTab ot = (MapOutputTab) getOutputTab();
ingo@1418: new ExternalWMSWindow(ot, srs).start();
ingo@1406: }
ingo@1406: });
ingo@1406:
ingo@1406: add.setTooltip(MSG.addWMSTooltip());
ingo@1406:
ingo@1406: return add;
ingo@1406: }
ingo@1433:
ingo@1433:
ingo@1433: protected Label createEPSGLabel() {
ingo@1433: Label epsgLabel = new Label(floodMap.getRiverProjection());
ingo@1433:
ingo@1433: epsgLabel.setAlign(Alignment.RIGHT);
ingo@1433: epsgLabel.setWidth(75);
ingo@1433:
ingo@1433: return epsgLabel;
ingo@1433: }
sascha@2507:
sascha@2509: @Override
sascha@2509: public void onMapZoom(MapZoomListener.MapZoomEvent e) {
christian@4474: updatePrintUrl();
sascha@2509: }
sascha@2509:
christian@4473: protected void appendPrintSettingsToUrl(Collection collection, StringBuilder url) {
christian@4473: Settings settings = collection.getSettings("print-settings");
christian@4473: if (settings != null) {
christian@4473: List properties = settings.getSettings("default");
christian@4473: for (Property prop : properties) {
christian@4473: PropertySetting props = (PropertySetting)prop;
christian@4474: url.append("&");
christian@4474: url.append(props.getName());
christian@4474: url.append("=");
christian@4474: url.append(props.getValue());
christian@4473: }
christian@4473: }
christian@4473: }
christian@4473:
christian@4474: public void updatePrintUrl() {
christian@4474: printMapLink.setSource(createPrintUrl());
christian@4474: }
christian@4474:
christian@4473: public String createPrintUrl() {
sascha@2508: MapOutputTab ot = (MapOutputTab)getOutputTab();
sascha@2508: Collection collection = ot.getCollection();
sascha@2508: String uuid = collection.identifier();
sascha@2508:
sascha@2508: String mapType = collection.getOutputModes().containsKey("floodmap")
sascha@2508: ? "floodmap"
sascha@2508: : "map";
sascha@2508:
christian@4473: StringBuilder url = new StringBuilder();
christian@4473: url.append(GWT.getModuleBaseURL());
christian@4473: url.append("map-print?");
sascha@2508:
sascha@2508: Map map = getMap();
sascha@2508: Bounds bounds = map.getExtent();
sascha@2508:
sascha@2508: if (bounds != null) {
sascha@2508: try {
christian@4473: url.append("minx=");
christian@4473: url.append(bounds.getLowerLeftX());
christian@4473: url.append("&");
christian@4473:
christian@4473: url.append("maxx=");
christian@4473: url.append(bounds.getUpperRightX());
christian@4473: url.append("&");
christian@4473:
christian@4473: url.append("miny=");
christian@4473: url.append(bounds.getLowerLeftY());
christian@4473: url.append("&");
christian@4473:
christian@4473: url.append("maxy=");
christian@4473: url.append(bounds.getUpperRightY());
christian@4473: url.append("&");
sascha@2508: }
sascha@2508: catch (Exception e) {
sascha@2905: // XXX: Ignore it. bounds.getXXX() throw
sascha@2508: // exceptions when bound is invalid. :-/
sascha@2508: }
sascha@2508: }
sascha@2508:
christian@4473: url.append("uuid=");
christian@4473: url.append(uuid);
christian@4473: url.append("&maptype=");
christian@4473: url.append(mapType);
sascha@2508:
christian@4473: appendPrintSettingsToUrl(collection, url);
christian@4473:
christian@4473: return url.toString();
sascha@2507: }
ingo@4329:
ingo@4329:
ingo@4329: public void updateThemes(ThemeList themeList) {
ingo@4329: if (legendWindow != null) {
ingo@4329: legendWindow.update(themeList);
ingo@4329: }
ingo@4329: }
ingo@799: }
ingo@799: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :